From 24984268671d0e644667cd05c4963685563959e5 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Tue, 14 Dec 2010 23:27:17 +0000
Subject: [PATCH] Fix: Restore stable version for 3.0

---
 htdocs/admin/modules.php                      |    3 +-
 htdocs/boutique/osc_master.inc.php            |   82 +-
 .../jscalendar/bugtest-hidden-selects.html    |  216 +-
 .../include/jscalendar/lang/calendar-bg.js    |  248 +-
 .../include/jscalendar/lang/calendar-el.js    |  178 +-
 .../jscalendar/lang/calendar-hr-utf8.js       |   96 +-
 .../include/jscalendar/lang/calendar-si.js    |  186 +-
 .../include/jscalendar/lang/calendar-tr.js    |  116 +-
 .../include/jscalendar/lang/cn_utf8.js        |  246 +-
 htdocs/comm/fiche.php                         |    2 +-
 .../propal/class/actions_proposal.class.php   |   14 +-
 htdocs/commande/class/commande.class.php      |   10 +-
 htdocs/compta/facture.php                     |  225 +-
 .../facture/class/facture-rec.class.php       |    6 +-
 htdocs/compta/facture/class/facture.class.php |   30 +-
 htdocs/compta/facture/fiche-rec.php           |   34 +-
 .../class/bon-prelevement.class.php           |   12 +-
 htdocs/contrat/class/contrat.class.php        |  234 +-
 htdocs/contrat/fiche.php                      |   24 +-
 htdocs/contrat/tpl/linkedobjectblock.tpl.php  |    2 +-
 .../core/class/actions_commonobject.class.php |  176 --
 htdocs/core/class/translate.class.php         |    6 +-
 htdocs/core/tpl/login.tpl.php                 |    2 +-
 htdocs/expedition/class/expedition.class.php  |   34 +-
 htdocs/expedition/fiche.php                   |   66 +-
 htdocs/fichinter/class/fichinter.class.php    |   22 +-
 .../class/fournisseur.commande.class.php      |   22 +-
 htdocs/fourn/commande/fiche.php               |    4 +-
 htdocs/fourn/facture/fiche.php                |   34 +-
 htdocs/includes/adodbtime/adodb-time.inc.php  | 2576 ++++++++---------
 htdocs/includes/artichow/php5/Graph.class.php |  788 ++---
 htdocs/includes/boxes/box_contracts.php       |    2 +-
 htdocs/includes/fckeditor/.cvsignore          |    4 +-
 htdocs/includes/fckeditor/editor/.cvsignore   |    2 +-
 .../server-scripts/spellchecker.cfm           |  296 +-
 .../server-scripts/spellchecker.pl            |  362 +--
 .../spellerpages/spellChecker.js              |  922 +++---
 .../spellerpages/spellerStyle.css             |   98 +-
 .../fckeditor/editor/dtd/fck_dtd_test.html    |   82 +-
 .../filemanager/connectors/php/config.php     |  340 +--
 .../filemanager/connectors/php/phpcompat.php  |   34 +-
 .../filemanager/connectors/py/htaccess.txt    |   46 +-
 htdocs/includes/fpdf/fpdf/FAQ.htm             |  682 ++---
 htdocs/includes/fpdf/fpdf/font/courier.php    |   14 +-
 htdocs/includes/fpdf/fpdf/font/desktop.ini    |    8 +-
 htdocs/includes/fpdf/fpdf/font/helvetica.php  |   30 +-
 htdocs/includes/fpdf/fpdf/font/helveticab.php |   30 +-
 .../includes/fpdf/fpdf/font/helveticabi.php   |   30 +-
 htdocs/includes/fpdf/fpdf/font/helveticai.php |   30 +-
 .../fpdf/fpdf/font/makefont/makefont.php      |  838 +++---
 htdocs/includes/fpdf/fpdf/font/symbol.php     |   30 +-
 htdocs/includes/fpdf/fpdf/font/times.php      |   30 +-
 htdocs/includes/fpdf/fpdf/font/timesb.php     |   30 +-
 htdocs/includes/fpdf/fpdf/font/timesbi.php    |   30 +-
 htdocs/includes/fpdf/fpdf/font/timesi.php     |   30 +-
 .../includes/fpdf/fpdf/font/zapfdingbats.php  |   30 +-
 htdocs/includes/fpdf/fpdf/fpdf.css            |   42 +-
 htdocs/includes/fpdf/fpdf/histo.htm           |  256 +-
 htdocs/includes/fpdf/fpdf/install.txt         |   52 +-
 htdocs/includes/fpdf/fpdf/license.txt         |   10 +-
 htdocs/includes/fpdf/fpdfi/README.txt         |   10 +-
 htdocs/includes/geoip/geoipcity.inc           |  416 +--
 htdocs/includes/login/README.txt              |   52 +-
 htdocs/includes/magpierss/rss_parse.inc       | 1210 ++++----
 .../modules/cheque/pdf/pdf_blochet.class.php  |   28 +-
 .../modules/commande/pdf_edison.modules.php   |    2 +-
 .../modules/commande/pdf_einstein.modules.php |    2 +-
 .../pdf/pdf_expedition_merou.modules.php      |    3 +-
 .../pdf/pdf_expedition_rouget.modules.php     |    2 +
 .../livraison/pdf/pdf_sirocco.modules.php     |   18 +-
 .../livraison/pdf/pdf_typhon.modules.php      |   26 +-
 htdocs/includes/modules/mailings/.cvsignore   |    4 +-
 htdocs/includes/modules/modDocument.class.php |  262 +-
 htdocs/includes/modules/modDomain.class.php   |  300 +-
 .../includes/modules/modFicheinter.class.php  |  360 +--
 htdocs/includes/modules/modLabel.class.php    |  248 +-
 htdocs/includes/modules/modMailing.class.php  |  264 +-
 htdocs/includes/modules/modTax.class.php      |  338 +--
 .../modules/rapport/pdf_paiement.class.php    |    8 +-
 .../pdf/pdf_canelle.modules.php               |    4 +-
 .../pdf/pdf_muscadet.modules.php              |    4 +-
 .../smarty/libs/plugins/function.fetch.php    |  442 +--
 htdocs/install/mysql/tables/llx_user.sql      |    8 +-
 htdocs/lib/.cvsignore                         |    2 +-
 htdocs/lib/pdf.lib.php                        |   44 +-
 htdocs/lib/viewfiles.lib.php                  |    6 +-
 htdocs/livraison/class/livraison.class.php    |   74 +-
 htdocs/livraison/fiche.php                    |   54 +-
 htdocs/main.inc.php                           |    8 +-
 htdocs/master.inc.php                         |    9 +-
 htdocs/paybox/lib/paybox.lib.php              |   22 +-
 htdocs/paypal/lib/paypal.lib.php              |   22 +-
 htdocs/public/demo/index.php                  |    4 +-
 htdocs/public/error-401.php                   |    2 +-
 htdocs/societe/class/societe.class.php        |   70 +-
 htdocs/societe/document.php                   |    2 +-
 htdocs/theme/auguria/.cvsignore               |    2 +-
 htdocs/theme/auguria/fckeditor/fck_dialog.css |  804 ++---
 .../theme/auguria/fckeditor/fck_dialog_ie6.js |  220 +-
 htdocs/theme/auguria/fckeditor/fck_editor.css |  928 +++---
 htdocs/theme/common/.cvsignore                |    2 +-
 htdocs/theme/common/mime/.cvsignore           |    2 +-
 htdocs/theme/common/treemenu/.cvsignore       |    4 +-
 htdocs/theme/eldy/fckeditor/fck_dialog.css    |  804 ++---
 htdocs/theme/eldy/fckeditor/fck_dialog_ie6.js |  220 +-
 htdocs/theme/eldy/fckeditor/fck_editor.css    |  928 +++---
 htdocs/theme/eldy/fckeditor/images/.cvsignore |    4 +-
 htdocs/theme/eldy/img/.cvsignore              |    2 +-
 htdocs/theme/freelug/fckeditor/fck_dialog.css |  804 ++---
 .../theme/freelug/fckeditor/fck_dialog_ie6.js |  220 +-
 htdocs/theme/freelug/fckeditor/fck_editor.css |  928 +++---
 .../phones/smartphone/tpl/header.tpl.php      |    2 +-
 htdocs/theme/yellow/fckeditor/fck_dialog.css  |  804 ++---
 .../theme/yellow/fckeditor/fck_dialog_ie6.js  |  220 +-
 htdocs/theme/yellow/fckeditor/fck_editor.css  |  928 +++---
 htdocs/user/class/user.class.php              |   16 +-
 htdocs/webservices/README                     |   28 +-
 117 files changed, 11091 insertions(+), 11193 deletions(-)
 delete mode 100644 htdocs/core/class/actions_commonobject.class.php

diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index fc50cef2015..0425f1fd762 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -84,8 +84,7 @@ $i = 0;	// is a sequencer of modules found
 $j = 0;	// j is module number. Automatically affeted if module number not defined.
 foreach ($conf->file->dol_document_root as $dirroot)
 {
-	if (preg_match('/custom$/i',$dirroot)) $dir = $dirroot . "/modules/";
-	else $dir = $dirroot . "/includes/modules/";
+	$dir = $dirroot . "/includes/modules/";
 
 	// Load modules attributes in arrays (name, numero, orders) from dir directory
 	//print $dir."\n<br>";
diff --git a/htdocs/boutique/osc_master.inc.php b/htdocs/boutique/osc_master.inc.php
index f866e0c104c..0c3684a56a5 100644
--- a/htdocs/boutique/osc_master.inc.php
+++ b/htdocs/boutique/osc_master.inc.php
@@ -1,41 +1,41 @@
-<?PHP
-/* Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
-        \file       htdocs/boutique/osc_master.inc.php
-        \brief      Fichier de preparation de l'environnement Dolibarr pour OSCommerce
-        \version    $Id$
-*/
-
-require_once(DOL_DOCUMENT_ROOT ."/lib/databases/".$conf->db->type.".lib.php");
-
-/*
- * Creation objet $dbosc
- */
-$dbosc = new DoliDb($conf->db->type,$conf->global->OSC_DB_HOST,$conf->global->OSC_DB_USER,$conf->global->OSC_DB_PASS,$conf->global->OSC_DB_NAME,$conf->global->OSC_DB_PORT);
-if (! $dbosc->connected)
-{
-    dol_syslog($dbosc,"host=".$conf->global->OSC_DB_HOST.", user=".$conf->global->OSC_DB_USER.", databasename=".$conf->global->OSC_DB_NAME.", ".$db->error,LOG_ERR);
-
-	llxHeader("",$langs->trans("OSCommerceShop"),"");
-	print '<div class="error">Failed to connect to oscommerce database. Check your module setup</div>';
-	llxFooter();
-	exit;
-}
-
-?>
+<?PHP
+/* Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+        \file       htdocs/boutique/osc_master.inc.php
+        \brief      Fichier de preparation de l'environnement Dolibarr pour OSCommerce
+        \version    $Id$
+*/
+
+require_once(DOL_DOCUMENT_ROOT ."/lib/databases/".$conf->db->type.".lib.php");
+
+/*
+ * Creation objet $dbosc
+ */
+$dbosc = new DoliDb($conf->db->type,$conf->global->OSC_DB_HOST,$conf->global->OSC_DB_USER,$conf->global->OSC_DB_PASS,$conf->global->OSC_DB_NAME,$conf->global->OSC_DB_PORT);
+if (! $dbosc->connected)
+{
+    dol_syslog($dbosc,"host=".$conf->global->OSC_DB_HOST.", user=".$conf->global->OSC_DB_USER.", databasename=".$conf->global->OSC_DB_NAME.", ".$db->error,LOG_ERR);
+
+	llxHeader("",$langs->trans("OSCommerceShop"),"");
+	print '<div class="error">Failed to connect to oscommerce database. Check your module setup</div>';
+	llxFooter();
+	exit;
+}
+
+?>
diff --git a/htdocs/cashdesk/include/jscalendar/bugtest-hidden-selects.html b/htdocs/cashdesk/include/jscalendar/bugtest-hidden-selects.html
index 900bc17e8ba..df353371601 100644
--- a/htdocs/cashdesk/include/jscalendar/bugtest-hidden-selects.html
+++ b/htdocs/cashdesk/include/jscalendar/bugtest-hidden-selects.html
@@ -1,108 +1,108 @@
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ro" lang="ro">
-
-<head>
-<title>Bug</title>
-<link rel="stylesheet" type="text/css" media="all" href="calendar-win2k-1.css" title="win2k-1" />
-
-<!-- import the calendar script -->
-<script type="text/javascript" src="calendar.js"></script>
-
-<!-- import the language module -->
-<script type="text/javascript" src="lang/calendar-en.js"></script>
-
-<!-- helper script that uses the calendar -->
-<script type="text/javascript">
-// This function gets called when the end-user clicks on some date.
-function selected(cal, date) {
-  cal.sel.value = date; // just update the date in the input field.
-  if (cal.sel.id == "sel1" || cal.sel.id == "sel3")
-    // if we add this call we close the calendar on single-click.
-    // just to exemplify both cases, we are using this only for the 1st
-    // and the 3rd field, while 2nd and 4th will still require double-click.
-    cal.callCloseHandler();
-}
-
-// And this gets called when the end-user clicks on the _selected_ date,
-// or clicks on the "Close" button.  It just hides the calendar without
-// destroying it.
-function closeHandler(cal) {
-  cal.hide();                        // hide the calendar
-}
-
-// This function shows the calendar under the element having the given id.
-// It takes care of catching "mousedown" signals on document and hiding the
-// calendar if the click was outside.
-function showCalendar(id, format) {
-  var el = document.getElementById(id);
-  if (calendar != null) {
-    // we already have some calendar created
-    calendar.hide();                 // so we hide it first.
-  } else {
-    // first-time call, create the calendar.
-    var cal = new Calendar(false, null, selected, closeHandler);
-    // uncomment the following line to hide the week numbers
-    // cal.weekNumbers = false;
-    calendar = cal;                  // remember it in the global var
-    cal.setRange(1900, 2070);        // min/max year allowed.
-    cal.create();
-  }
-  calendar.setDateFormat(format);    // set the specified date format
-  calendar.parseDate(el.value);      // try to parse the text in field
-  calendar.sel = el;                 // inform it what input field we use
-  calendar.showAtElement(el);        // show the calendar below it
-
-  return false;
-}
-
-var MINUTE = 60 * 1000;
-var HOUR = 60 * MINUTE;
-var DAY = 24 * HOUR;
-var WEEK = 7 * DAY;
-
-// If this handler returns true then the "date" given as
-// parameter will be disabled.  In this example we enable
-// only days within a range of 10 days from the current
-// date.
-// You can use the functions date.getFullYear() -- returns the year
-// as 4 digit number, date.getMonth() -- returns the month as 0..11,
-// and date.getDate() -- returns the date of the month as 1..31, to
-// make heavy calculations here.  However, beware that this function
-// should be very fast, as it is called for each day in a month when
-// the calendar is (re)constructed.
-function isDisabled(date) {
-  var today = new Date();
-  return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
-}
-</script>
-</head>
-
-<body>
-<form>
-<b>Date:</b>
-<br>
-<input type="text" name="date1" id="sel1" size="30">
-<input type="button" value="..." onclick="return showCalendar('sel1', 'y-m-d');">
-<p>
-<br>
-<br><b>Visible &lt;select&gt;, hides and unhides as expected</b>
-<br>
-<select name="foo" multiple>
-<option value="1">can use the functions date.getFullYear() -- returns</option>
-<option value="2">4 digit number, date.getMonth() -- returns the month</option>
-<option value="3">heavy calculations here.  However, beware that this</option>
-</select>
-
-<p>
-<br><b>Hidden &lt;select&gt;, it should stay hidden (but doesn't)</b>
-<br>
-<select name="foo2" multiple style="visibility: hidden">
-<option value="1">this should</option>
-<option value="2">remain hidden right?</option>
-</select>
-
-<p>
-<br><b>Hidden textbox below, it stays hidden as expected</b>
-<br>
-<input type="text" name="foo3" value="this stays hidden just fine" style="visibility: hidden">
-</form>
-</body></html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ro" lang="ro">
+
+<head>
+<title>Bug</title>
+<link rel="stylesheet" type="text/css" media="all" href="calendar-win2k-1.css" title="win2k-1" />
+
+<!-- import the calendar script -->
+<script type="text/javascript" src="calendar.js"></script>
+
+<!-- import the language module -->
+<script type="text/javascript" src="lang/calendar-en.js"></script>
+
+<!-- helper script that uses the calendar -->
+<script type="text/javascript">
+// This function gets called when the end-user clicks on some date.
+function selected(cal, date) {
+  cal.sel.value = date; // just update the date in the input field.
+  if (cal.sel.id == "sel1" || cal.sel.id == "sel3")
+    // if we add this call we close the calendar on single-click.
+    // just to exemplify both cases, we are using this only for the 1st
+    // and the 3rd field, while 2nd and 4th will still require double-click.
+    cal.callCloseHandler();
+}
+
+// And this gets called when the end-user clicks on the _selected_ date,
+// or clicks on the "Close" button.  It just hides the calendar without
+// destroying it.
+function closeHandler(cal) {
+  cal.hide();                        // hide the calendar
+}
+
+// This function shows the calendar under the element having the given id.
+// It takes care of catching "mousedown" signals on document and hiding the
+// calendar if the click was outside.
+function showCalendar(id, format) {
+  var el = document.getElementById(id);
+  if (calendar != null) {
+    // we already have some calendar created
+    calendar.hide();                 // so we hide it first.
+  } else {
+    // first-time call, create the calendar.
+    var cal = new Calendar(false, null, selected, closeHandler);
+    // uncomment the following line to hide the week numbers
+    // cal.weekNumbers = false;
+    calendar = cal;                  // remember it in the global var
+    cal.setRange(1900, 2070);        // min/max year allowed.
+    cal.create();
+  }
+  calendar.setDateFormat(format);    // set the specified date format
+  calendar.parseDate(el.value);      // try to parse the text in field
+  calendar.sel = el;                 // inform it what input field we use
+  calendar.showAtElement(el);        // show the calendar below it
+
+  return false;
+}
+
+var MINUTE = 60 * 1000;
+var HOUR = 60 * MINUTE;
+var DAY = 24 * HOUR;
+var WEEK = 7 * DAY;
+
+// If this handler returns true then the "date" given as
+// parameter will be disabled.  In this example we enable
+// only days within a range of 10 days from the current
+// date.
+// You can use the functions date.getFullYear() -- returns the year
+// as 4 digit number, date.getMonth() -- returns the month as 0..11,
+// and date.getDate() -- returns the date of the month as 1..31, to
+// make heavy calculations here.  However, beware that this function
+// should be very fast, as it is called for each day in a month when
+// the calendar is (re)constructed.
+function isDisabled(date) {
+  var today = new Date();
+  return (Math.abs(date.getTime() - today.getTime()) / DAY) > 10;
+}
+</script>
+</head>
+
+<body>
+<form>
+<b>Date:</b>
+<br>
+<input type="text" name="date1" id="sel1" size="30">
+<input type="button" value="..." onclick="return showCalendar('sel1', 'y-m-d');">
+<p>
+<br>
+<br><b>Visible &lt;select&gt;, hides and unhides as expected</b>
+<br>
+<select name="foo" multiple>
+<option value="1">can use the functions date.getFullYear() -- returns</option>
+<option value="2">4 digit number, date.getMonth() -- returns the month</option>
+<option value="3">heavy calculations here.  However, beware that this</option>
+</select>
+
+<p>
+<br><b>Hidden &lt;select&gt;, it should stay hidden (but doesn't)</b>
+<br>
+<select name="foo2" multiple style="visibility: hidden">
+<option value="1">this should</option>
+<option value="2">remain hidden right?</option>
+</select>
+
+<p>
+<br><b>Hidden textbox below, it stays hidden as expected</b>
+<br>
+<input type="text" name="foo3" value="this stays hidden just fine" style="visibility: hidden">
+</form>
+</body></html>
diff --git a/htdocs/cashdesk/include/jscalendar/lang/calendar-bg.js b/htdocs/cashdesk/include/jscalendar/lang/calendar-bg.js
index 4f4fd863e51..5eb73ec6c11 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/calendar-bg.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/calendar-bg.js
@@ -1,124 +1,124 @@
-// ** I18N
-
-// Calendar BG language
-// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
-// Translator: Valentin Sheiretsky, <valio@valio.eu.org>
-// Encoding: Windows-1251
-// Distributed under the same terms as the calendar itself.
-
-// For translators: please use UTF-8 if possible.  We strongly believe that
-// Unicode is the answer to a real internationalized world.  Also please
-// include your contact information in the header, as can be seen above.
-
-// full day names
-Calendar._DN = new Array
-("������",
- "����������",
- "�������",
- "�����",
- "���������",
- "�����",
- "������",
- "������");
-
-// Please note that the following array of short day names (and the same goes
-// for short month names, _SMN) isn't absolutely necessary.  We give it here
-// for exemplification on how one can customize the short day names, but if
-// they are simply the first N letters of the full name you can simply say:
-//
-//   Calendar._SDN_len = N; // short day name length
-//   Calendar._SMN_len = N; // short month name length
-//
-// If N = 3 then this is not needed either since we assume a value of 3 if not
-// present, to be compatible with translation files that were written before
-// this feature.
-
-// short day names
-Calendar._SDN = new Array
-("���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���");
-
-// full month names
-Calendar._MN = new Array
-("������",
- "��������",
- "����",
- "�����",
- "���",
- "���",
- "���",
- "������",
- "���������",
- "��������",
- "�������",
- "��������");
-
-// short month names
-Calendar._SMN = new Array
-("���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���",
- "���");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "���������� �� ���������";
-
-Calendar._TT["ABOUT"] =
-"DHTML Date/Time Selector\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
-"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
-"\n\n" +
-"Date selection:\n" +
-"- Use the \xab, \xbb buttons to select year\n" +
-"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
-"- Hold mouse button on any of the above buttons for faster selection.";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"Time selection:\n" +
-"- Click on any of the time parts to increase it\n" +
-"- or Shift-click to decrease it\n" +
-"- or click and drag for faster selection.";
-
-Calendar._TT["PREV_YEAR"] = "������ ������ (�������� �� ����)";
-Calendar._TT["PREV_MONTH"] = "������ ����� (�������� �� ����)";
-Calendar._TT["GO_TODAY"] = "�������� ����";
-Calendar._TT["NEXT_MONTH"] = "������� ����� (�������� �� ����)";
-Calendar._TT["NEXT_YEAR"] = "�������� ������ (�������� �� ����)";
-Calendar._TT["SEL_DATE"] = "�������� ����";
-Calendar._TT["DRAG_TO_MOVE"] = "�����������";
-Calendar._TT["PART_TODAY"] = " (����)";
-
-// the following is to inform that "%s" is to be the first day of week
-// %s will be replaced with the day name.
-Calendar._TT["DAY_FIRST"] = "%s ���� ����� ���";
-
-// This may be locale-dependent.  It specifies the week-end days, as an array
-// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
-// means Monday, etc.
-Calendar._TT["WEEKEND"] = "0,6";
-
-Calendar._TT["CLOSE"] = "���������";
-Calendar._TT["TODAY"] = "����";
-Calendar._TT["TIME_PART"] = "(Shift-)Click ��� drag �� �� ��������� ����������";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
-Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y";
-
-Calendar._TT["WK"] = "����";
-Calendar._TT["TIME"] = "���:";
+// ** I18N
+
+// Calendar BG language
+// Author: Mihai Bazon, <mihai_bazon@yahoo.com>
+// Translator: Valentin Sheiretsky, <valio@valio.eu.org>
+// Encoding: Windows-1251
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("������",
+ "����������",
+ "�������",
+ "�����",
+ "���������",
+ "�����",
+ "������",
+ "������");
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���");
+
+// full month names
+Calendar._MN = new Array
+("������",
+ "��������",
+ "����",
+ "�����",
+ "���",
+ "���",
+ "���",
+ "������",
+ "���������",
+ "��������",
+ "�������",
+ "��������");
+
+// short month names
+Calendar._SMN = new Array
+("���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���",
+ "���");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "���������� �� ���������";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Date selection:\n" +
+"- Use the \xab, \xbb buttons to select year\n" +
+"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
+"- Hold mouse button on any of the above buttons for faster selection.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Time selection:\n" +
+"- Click on any of the time parts to increase it\n" +
+"- or Shift-click to decrease it\n" +
+"- or click and drag for faster selection.";
+
+Calendar._TT["PREV_YEAR"] = "������ ������ (�������� �� ����)";
+Calendar._TT["PREV_MONTH"] = "������ ����� (�������� �� ����)";
+Calendar._TT["GO_TODAY"] = "�������� ����";
+Calendar._TT["NEXT_MONTH"] = "������� ����� (�������� �� ����)";
+Calendar._TT["NEXT_YEAR"] = "�������� ������ (�������� �� ����)";
+Calendar._TT["SEL_DATE"] = "�������� ����";
+Calendar._TT["DRAG_TO_MOVE"] = "�����������";
+Calendar._TT["PART_TODAY"] = " (����)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "%s ���� ����� ���";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "���������";
+Calendar._TT["TODAY"] = "����";
+Calendar._TT["TIME_PART"] = "(Shift-)Click ��� drag �� �� ��������� ����������";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y";
+
+Calendar._TT["WK"] = "����";
+Calendar._TT["TIME"] = "���:";
diff --git a/htdocs/cashdesk/include/jscalendar/lang/calendar-el.js b/htdocs/cashdesk/include/jscalendar/lang/calendar-el.js
index fee5575eabd..43a9b2ceafe 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/calendar-el.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/calendar-el.js
@@ -1,89 +1,89 @@
-// ** I18N
-Calendar._DN = new Array
-("Κυριακή",
- "Δευτέρα",
- "Τρίτη",
- "Τετάρτη",
- "Πέμπτη",
- "Παρασκευή",
- "Σάββατο",
- "Κυριακή");
-
-Calendar._SDN = new Array
-("Κυ",
- "Δε",
- "Tρ",
- "Τε",
- "Πε",
- "Πα",
- "Σα",
- "Κυ");
-
-Calendar._MN = new Array
-("Ιανουάριος",
- "Φεβρουάριος",
- "Μάρτιος",
- "Απρίλιος",
- "Μάϊος",
- "Ιούνιος",
- "Ιούλιος",
- "Αύγουστος",
- "Σεπτέμβριος",
- "Οκτώβριος",
- "Νοέμβριος",
- "Δεκέμβριος");
-
-Calendar._SMN = new Array
-("Ιαν",
- "Φεβ",
- "Μαρ",
- "Απρ",
- "Μαι",
- "Ιουν",
- "Ιουλ",
- "Αυγ",
- "Σεπ",
- "Οκτ",
- "Νοε",
- "Δεκ");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "Για το ημερολόγιο";
-
-Calendar._TT["ABOUT"] =
-"Επιλογέας ημερομηνίας/ώρας σε DHTML\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"Για τελευταία έκδοση: http://www.dynarch.com/projects/calendar/\n" +
-"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
-"\n\n" +
-"Επιλογή ημερομηνίας:\n" +
-"- Χρησιμοποιείστε τα κουμπιά \xab, \xbb για επιλογή έτους\n" +
-"- Χρησιμοποιείστε τα κουμπιά " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " για επιλογή μήνα\n" +
-"- Κρατήστε κουμπί ποντικού πατημένο στα παραπάνω κουμπιά για πιο γρήγορη επιλογή.";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"Επιλογή ώρας:\n" +
-"- Κάντε κλικ σε ένα από τα μέρη της ώρας για αύξηση\n" +
-"- ή Shift-κλικ για μείωση\n" +
-"- ή κλικ και μετακίνηση για πιο γρήγορη επιλογή.";
-Calendar._TT["TOGGLE"] = "Μπάρα πρώτης ημέρας της εβδομάδας";
-Calendar._TT["PREV_YEAR"] = "Προηγ. έτος (κρατήστε για το μενού)";
-Calendar._TT["PREV_MONTH"] = "Προηγ. μήνας (κρατήστε για το μενού)";
-Calendar._TT["GO_TODAY"] = "Σήμερα";
-Calendar._TT["NEXT_MONTH"] = "Επόμενος μήνας (κρατήστε για το μενού)";
-Calendar._TT["NEXT_YEAR"] = "Επόμενο έτος (κρατήστε για το μενού)";
-Calendar._TT["SEL_DATE"] = "Επιλέξτε ημερομηνία";
-Calendar._TT["DRAG_TO_MOVE"] = "Σύρτε για να μετακινήσετε";
-Calendar._TT["PART_TODAY"] = " (σήμερα)";
-Calendar._TT["MON_FIRST"] = "Εμφάνιση Δευτέρας πρώτα";
-Calendar._TT["SUN_FIRST"] = "Εμφάνιση Κυριακής πρώτα";
-Calendar._TT["CLOSE"] = "Κλείσιμο";
-Calendar._TT["TODAY"] = "Σήμερα";
-Calendar._TT["TIME_PART"] = "(Shift-)κλικ ή μετακίνηση για αλλαγή";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
-Calendar._TT["TT_DATE_FORMAT"] = "D, d M";
-
-Calendar._TT["WK"] = "εβδ";
-
+// ** I18N
+Calendar._DN = new Array
+("Κυριακή",
+ "Δευτέρα",
+ "Τρίτη",
+ "Τετάρτη",
+ "Πέμπτη",
+ "Παρασκευή",
+ "Σάββατο",
+ "Κυριακή");
+
+Calendar._SDN = new Array
+("Κυ",
+ "Δε",
+ "Tρ",
+ "Τε",
+ "Πε",
+ "Πα",
+ "Σα",
+ "Κυ");
+
+Calendar._MN = new Array
+("Ιανουάριος",
+ "Φεβρουάριος",
+ "Μάρτιος",
+ "Απρίλιος",
+ "Μάϊος",
+ "Ιούνιος",
+ "Ιούλιος",
+ "Αύγουστος",
+ "Σεπτέμβριος",
+ "Οκτώβριος",
+ "Νοέμβριος",
+ "Δεκέμβριος");
+
+Calendar._SMN = new Array
+("Ιαν",
+ "Φεβ",
+ "Μαρ",
+ "Απρ",
+ "Μαι",
+ "Ιουν",
+ "Ιουλ",
+ "Αυγ",
+ "Σεπ",
+ "Οκτ",
+ "Νοε",
+ "Δεκ");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "Για το ημερολόγιο";
+
+Calendar._TT["ABOUT"] =
+"Επιλογέας ημερομηνίας/ώρας σε DHTML\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Για τελευταία έκδοση: http://www.dynarch.com/projects/calendar/\n" +
+"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
+"\n\n" +
+"Επιλογή ημερομηνίας:\n" +
+"- Χρησιμοποιείστε τα κουμπιά \xab, \xbb για επιλογή έτους\n" +
+"- Χρησιμοποιείστε τα κουμπιά " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " για επιλογή μήνα\n" +
+"- Κρατήστε κουμπί ποντικού πατημένο στα παραπάνω κουμπιά για πιο γρήγορη επιλογή.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Επιλογή ώρας:\n" +
+"- Κάντε κλικ σε ένα από τα μέρη της ώρας για αύξηση\n" +
+"- ή Shift-κλικ για μείωση\n" +
+"- ή κλικ και μετακίνηση για πιο γρήγορη επιλογή.";
+Calendar._TT["TOGGLE"] = "Μπάρα πρώτης ημέρας της εβδομάδας";
+Calendar._TT["PREV_YEAR"] = "Προηγ. έτος (κρατήστε για το μενού)";
+Calendar._TT["PREV_MONTH"] = "Προηγ. μήνας (κρατήστε για το μενού)";
+Calendar._TT["GO_TODAY"] = "Σήμερα";
+Calendar._TT["NEXT_MONTH"] = "Επόμενος μήνας (κρατήστε για το μενού)";
+Calendar._TT["NEXT_YEAR"] = "Επόμενο έτος (κρατήστε για το μενού)";
+Calendar._TT["SEL_DATE"] = "Επιλέξτε ημερομηνία";
+Calendar._TT["DRAG_TO_MOVE"] = "Σύρτε για να μετακινήσετε";
+Calendar._TT["PART_TODAY"] = " (σήμερα)";
+Calendar._TT["MON_FIRST"] = "Εμφάνιση Δευτέρας πρώτα";
+Calendar._TT["SUN_FIRST"] = "Εμφάνιση Κυριακής πρώτα";
+Calendar._TT["CLOSE"] = "Κλείσιμο";
+Calendar._TT["TODAY"] = "Σήμερα";
+Calendar._TT["TIME_PART"] = "(Shift-)κλικ ή μετακίνηση για αλλαγή";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "D, d M";
+
+Calendar._TT["WK"] = "εβδ";
+
diff --git a/htdocs/cashdesk/include/jscalendar/lang/calendar-hr-utf8.js b/htdocs/cashdesk/include/jscalendar/lang/calendar-hr-utf8.js
index baf01b179cc..d569cfd9242 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/calendar-hr-utf8.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/calendar-hr-utf8.js
@@ -1,49 +1,49 @@
-/* Croatian language file for the DHTML Calendar version 0.9.2 
-* Author Krunoslav Zubrinic <krunoslav.zubrinic@vip.hr>, June 2003.
-* Feel free to use this script under the terms of the GNU Lesser General
-* Public License, as long as you do not remove or alter this notice.
-*/
-Calendar._DN = new Array
-("Nedjelja",
- "Ponedjeljak",
- "Utorak",
- "Srijeda",
- "Četvrtak",
- "Petak",
- "Subota",
- "Nedjelja");
-Calendar._MN = new Array
-("Siječanj",
- "Veljača",
- "Ožujak",
- "Travanj",
- "Svibanj",
- "Lipanj",
- "Srpanj",
- "Kolovoz",
- "Rujan",
- "Listopad",
- "Studeni",
- "Prosinac");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["TOGGLE"] = "Promjeni dan s kojim počinje tjedan";
-Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)";
-Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)";
-Calendar._TT["GO_TODAY"] = "Idi na tekući dan";
-Calendar._TT["NEXT_MONTH"] = "Slijedeći mjesec (dugi pritisak za meni)";
-Calendar._TT["NEXT_YEAR"] = "Slijedeća godina (dugi pritisak za meni)";
-Calendar._TT["SEL_DATE"] = "Izaberite datum";
-Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije";
-Calendar._TT["PART_TODAY"] = " (today)";
-Calendar._TT["MON_FIRST"] = "Prikaži ponedjeljak kao prvi dan";
-Calendar._TT["SUN_FIRST"] = "Prikaži nedjelju kao prvi dan";
-Calendar._TT["CLOSE"] = "Zatvori";
-Calendar._TT["TODAY"] = "Danas";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
-Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y";
-
+/* Croatian language file for the DHTML Calendar version 0.9.2 
+* Author Krunoslav Zubrinic <krunoslav.zubrinic@vip.hr>, June 2003.
+* Feel free to use this script under the terms of the GNU Lesser General
+* Public License, as long as you do not remove or alter this notice.
+*/
+Calendar._DN = new Array
+("Nedjelja",
+ "Ponedjeljak",
+ "Utorak",
+ "Srijeda",
+ "Četvrtak",
+ "Petak",
+ "Subota",
+ "Nedjelja");
+Calendar._MN = new Array
+("Siječanj",
+ "Veljača",
+ "Ožujak",
+ "Travanj",
+ "Svibanj",
+ "Lipanj",
+ "Srpanj",
+ "Kolovoz",
+ "Rujan",
+ "Listopad",
+ "Studeni",
+ "Prosinac");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Promjeni dan s kojim počinje tjedan";
+Calendar._TT["PREV_YEAR"] = "Prethodna godina (dugi pritisak za meni)";
+Calendar._TT["PREV_MONTH"] = "Prethodni mjesec (dugi pritisak za meni)";
+Calendar._TT["GO_TODAY"] = "Idi na tekući dan";
+Calendar._TT["NEXT_MONTH"] = "Slijedeći mjesec (dugi pritisak za meni)";
+Calendar._TT["NEXT_YEAR"] = "Slijedeća godina (dugi pritisak za meni)";
+Calendar._TT["SEL_DATE"] = "Izaberite datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Pritisni i povuci za promjenu pozicije";
+Calendar._TT["PART_TODAY"] = " (today)";
+Calendar._TT["MON_FIRST"] = "Prikaži ponedjeljak kao prvi dan";
+Calendar._TT["SUN_FIRST"] = "Prikaži nedjelju kao prvi dan";
+Calendar._TT["CLOSE"] = "Zatvori";
+Calendar._TT["TODAY"] = "Danas";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "DD, dd.mm.y";
+
 Calendar._TT["WK"] = "Tje";
\ No newline at end of file
diff --git a/htdocs/cashdesk/include/jscalendar/lang/calendar-si.js b/htdocs/cashdesk/include/jscalendar/lang/calendar-si.js
index 100c522e4d6..cb3dfb9fdf4 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/calendar-si.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/calendar-si.js
@@ -1,94 +1,94 @@
-/* Slovenian language file for the DHTML Calendar version 0.9.2 
-* Author David Milost <mercy@volja.net>, January 2004.
-* Feel free to use this script under the terms of the GNU Lesser General
-* Public License, as long as you do not remove or alter this notice.
-*/
- // full day names
-Calendar._DN = new Array
-("Nedelja",
- "Ponedeljek",
- "Torek",
- "Sreda",
- "Četrtek",
- "Petek",
- "Sobota",
- "Nedelja");
- // short day names
- Calendar._SDN = new Array
-("Ned",
- "Pon",
- "Tor",
- "Sre",
- "Čet",
- "Pet",
- "Sob",
- "Ned");
-// short month names
-Calendar._SMN = new Array
-("Jan",
- "Feb",
- "Mar",
- "Apr",
- "Maj",
- "Jun",
- "Jul",
- "Avg",
- "Sep",
- "Okt",
- "Nov",
- "Dec");
-  // full month names
-Calendar._MN = new Array
-("Januar",
- "Februar",
- "Marec",
- "April",
- "Maj",
- "Junij",
- "Julij",
- "Avgust",
- "September",
- "Oktober",
- "November",
- "December");
-
-// tooltips
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "O koledarju";
-
-Calendar._TT["ABOUT"] =
-"DHTML Date/Time Selector\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"Za zadnjo verzijo pojdine na naslov: http://www.dynarch.com/projects/calendar/\n" +
-"Distribuirano pod GNU LGPL.  Poglejte http://gnu.org/licenses/lgpl.html za podrobnosti." +
-"\n\n" +
-"Izbor datuma:\n" +
-"- Uporabite \xab, \xbb gumbe za izbor leta\n" +
-"- Uporabite " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gumbe za izbor meseca\n" +
-"- Zadržite klik na kateremkoli od zgornjih gumbov za hiter izbor.";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"Izbor ćasa:\n" +
-"- Kliknite na katerikoli del ćasa za poveć. le-tega\n" +
-"- ali Shift-click za zmanj. le-tega\n" +
-"- ali kliknite in povlecite za hiter izbor.";
-
-Calendar._TT["TOGGLE"] = "Spremeni dan s katerim se prićne teden";
-Calendar._TT["PREV_YEAR"] = "Predhodnje leto (dolg klik za meni)";
-Calendar._TT["PREV_MONTH"] = "Predhodnji mesec (dolg klik za meni)";
-Calendar._TT["GO_TODAY"] = "Pojdi na tekoći dan";
-Calendar._TT["NEXT_MONTH"] = "Naslednji mesec (dolg klik za meni)";
-Calendar._TT["NEXT_YEAR"] = "Naslednje leto (dolg klik za meni)";
-Calendar._TT["SEL_DATE"] = "Izberite datum";
-Calendar._TT["DRAG_TO_MOVE"] = "Pritisni in povleci za spremembo pozicije";
-Calendar._TT["PART_TODAY"] = " (danes)";
-Calendar._TT["MON_FIRST"] = "Prikaži ponedeljek kot prvi dan";
-Calendar._TT["SUN_FIRST"] = "Prikaži nedeljo kot prvi dan";
-Calendar._TT["CLOSE"] = "Zapri";
-Calendar._TT["TODAY"] = "Danes";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
-Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
-
+/* Slovenian language file for the DHTML Calendar version 0.9.2 
+* Author David Milost <mercy@volja.net>, January 2004.
+* Feel free to use this script under the terms of the GNU Lesser General
+* Public License, as long as you do not remove or alter this notice.
+*/
+ // full day names
+Calendar._DN = new Array
+("Nedelja",
+ "Ponedeljek",
+ "Torek",
+ "Sreda",
+ "Četrtek",
+ "Petek",
+ "Sobota",
+ "Nedelja");
+ // short day names
+ Calendar._SDN = new Array
+("Ned",
+ "Pon",
+ "Tor",
+ "Sre",
+ "Čet",
+ "Pet",
+ "Sob",
+ "Ned");
+// short month names
+Calendar._SMN = new Array
+("Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "Maj",
+ "Jun",
+ "Jul",
+ "Avg",
+ "Sep",
+ "Okt",
+ "Nov",
+ "Dec");
+  // full month names
+Calendar._MN = new Array
+("Januar",
+ "Februar",
+ "Marec",
+ "April",
+ "Maj",
+ "Junij",
+ "Julij",
+ "Avgust",
+ "September",
+ "Oktober",
+ "November",
+ "December");
+
+// tooltips
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "O koledarju";
+
+Calendar._TT["ABOUT"] =
+"DHTML Date/Time Selector\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"Za zadnjo verzijo pojdine na naslov: http://www.dynarch.com/projects/calendar/\n" +
+"Distribuirano pod GNU LGPL.  Poglejte http://gnu.org/licenses/lgpl.html za podrobnosti." +
+"\n\n" +
+"Izbor datuma:\n" +
+"- Uporabite \xab, \xbb gumbe za izbor leta\n" +
+"- Uporabite " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gumbe za izbor meseca\n" +
+"- Zadržite klik na kateremkoli od zgornjih gumbov za hiter izbor.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"Izbor ćasa:\n" +
+"- Kliknite na katerikoli del ćasa za poveć. le-tega\n" +
+"- ali Shift-click za zmanj. le-tega\n" +
+"- ali kliknite in povlecite za hiter izbor.";
+
+Calendar._TT["TOGGLE"] = "Spremeni dan s katerim se prićne teden";
+Calendar._TT["PREV_YEAR"] = "Predhodnje leto (dolg klik za meni)";
+Calendar._TT["PREV_MONTH"] = "Predhodnji mesec (dolg klik za meni)";
+Calendar._TT["GO_TODAY"] = "Pojdi na tekoći dan";
+Calendar._TT["NEXT_MONTH"] = "Naslednji mesec (dolg klik za meni)";
+Calendar._TT["NEXT_YEAR"] = "Naslednje leto (dolg klik za meni)";
+Calendar._TT["SEL_DATE"] = "Izberite datum";
+Calendar._TT["DRAG_TO_MOVE"] = "Pritisni in povleci za spremembo pozicije";
+Calendar._TT["PART_TODAY"] = " (danes)";
+Calendar._TT["MON_FIRST"] = "Prikaži ponedeljek kot prvi dan";
+Calendar._TT["SUN_FIRST"] = "Prikaži nedeljo kot prvi dan";
+Calendar._TT["CLOSE"] = "Zapri";
+Calendar._TT["TODAY"] = "Danes";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
+
 Calendar._TT["WK"] = "Ted";
\ No newline at end of file
diff --git a/htdocs/cashdesk/include/jscalendar/lang/calendar-tr.js b/htdocs/cashdesk/include/jscalendar/lang/calendar-tr.js
index f2c906c46c4..2164687fbb0 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/calendar-tr.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/calendar-tr.js
@@ -1,58 +1,58 @@
-//////////////////////////////////////////////////////////////////////////////////////////////
-//	Turkish Translation by Nuri AKMAN
-//	Location: Ankara/TURKEY
-//	e-mail	: nuriakman@hotmail.com
-//	Date	: April, 9 2003
-//
-//	Note: if Turkish Characters does not shown on you screen
-//		  please include falowing line your html code:
-//
-//		  <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
-//
-//////////////////////////////////////////////////////////////////////////////////////////////
-
-// ** I18N
-Calendar._DN = new Array
-("Pazar",
- "Pazartesi",
- "Sal�",
- "�ar�amba",
- "Per�embe",
- "Cuma",
- "Cumartesi",
- "Pazar");
-Calendar._MN = new Array
-("Ocak",
- "�ubat",
- "Mart",
- "Nisan",
- "May�s",
- "Haziran",
- "Temmuz",
- "A�ustos",
- "Eyl�l",
- "Ekim",
- "Kas�m",
- "Aral�k");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["TOGGLE"] = "Haftan�n ilk g�n�n� kayd�r";
-Calendar._TT["PREV_YEAR"] = "�nceki Y�l (Men� i�in bas�l� tutunuz)";
-Calendar._TT["PREV_MONTH"] = "�nceki Ay (Men� i�in bas�l� tutunuz)";
-Calendar._TT["GO_TODAY"] = "Bug�n'e git";
-Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Men� i�in bas�l� tutunuz)";
-Calendar._TT["NEXT_YEAR"] = "Sonraki Y�l (Men� i�in bas�l� tutunuz)";
-Calendar._TT["SEL_DATE"] = "Tarih se�iniz";
-Calendar._TT["DRAG_TO_MOVE"] = "Ta��mak i�in s�r�kleyiniz";
-Calendar._TT["PART_TODAY"] = " (bug�n)";
-Calendar._TT["MON_FIRST"] = "Takvim Pazartesi g�n�nden ba�las�n";
-Calendar._TT["SUN_FIRST"] = "Takvim Pazar g�n�nden ba�las�n";
-Calendar._TT["CLOSE"] = "Kapat";
-Calendar._TT["TODAY"] = "Bug�n";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
-Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD";
-
-Calendar._TT["WK"] = "Hafta";
+//////////////////////////////////////////////////////////////////////////////////////////////
+//	Turkish Translation by Nuri AKMAN
+//	Location: Ankara/TURKEY
+//	e-mail	: nuriakman@hotmail.com
+//	Date	: April, 9 2003
+//
+//	Note: if Turkish Characters does not shown on you screen
+//		  please include falowing line your html code:
+//
+//		  <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
+//
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+// ** I18N
+Calendar._DN = new Array
+("Pazar",
+ "Pazartesi",
+ "Sal�",
+ "�ar�amba",
+ "Per�embe",
+ "Cuma",
+ "Cumartesi",
+ "Pazar");
+Calendar._MN = new Array
+("Ocak",
+ "�ubat",
+ "Mart",
+ "Nisan",
+ "May�s",
+ "Haziran",
+ "Temmuz",
+ "A�ustos",
+ "Eyl�l",
+ "Ekim",
+ "Kas�m",
+ "Aral�k");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["TOGGLE"] = "Haftan�n ilk g�n�n� kayd�r";
+Calendar._TT["PREV_YEAR"] = "�nceki Y�l (Men� i�in bas�l� tutunuz)";
+Calendar._TT["PREV_MONTH"] = "�nceki Ay (Men� i�in bas�l� tutunuz)";
+Calendar._TT["GO_TODAY"] = "Bug�n'e git";
+Calendar._TT["NEXT_MONTH"] = "Sonraki Ay (Men� i�in bas�l� tutunuz)";
+Calendar._TT["NEXT_YEAR"] = "Sonraki Y�l (Men� i�in bas�l� tutunuz)";
+Calendar._TT["SEL_DATE"] = "Tarih se�iniz";
+Calendar._TT["DRAG_TO_MOVE"] = "Ta��mak i�in s�r�kleyiniz";
+Calendar._TT["PART_TODAY"] = " (bug�n)";
+Calendar._TT["MON_FIRST"] = "Takvim Pazartesi g�n�nden ba�las�n";
+Calendar._TT["SUN_FIRST"] = "Takvim Pazar g�n�nden ba�las�n";
+Calendar._TT["CLOSE"] = "Kapat";
+Calendar._TT["TODAY"] = "Bug�n";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "dd-mm-y";
+Calendar._TT["TT_DATE_FORMAT"] = "d MM y, DD";
+
+Calendar._TT["WK"] = "Hafta";
diff --git a/htdocs/cashdesk/include/jscalendar/lang/cn_utf8.js b/htdocs/cashdesk/include/jscalendar/lang/cn_utf8.js
index de61b4618de..a0ef7c6b3a8 100644
--- a/htdocs/cashdesk/include/jscalendar/lang/cn_utf8.js
+++ b/htdocs/cashdesk/include/jscalendar/lang/cn_utf8.js
@@ -1,123 +1,123 @@
-// ** I18N
-
-// Calendar EN language
-// Author: Mihai Bazon, <mishoo@infoiasi.ro>
-// Encoding: any
-// Translator : Niko <nikoused@gmail.com>
-// Distributed under the same terms as the calendar itself.
-
-// For translators: please use UTF-8 if possible.  We strongly believe that
-// Unicode is the answer to a real internationalized world.  Also please
-// include your contact information in the header, as can be seen above.
-
-// full day names
-Calendar._DN = new Array
-("\u5468\u65e5",//\u5468\u65e5
- "\u5468\u4e00",//\u5468\u4e00
- "\u5468\u4e8c",//\u5468\u4e8c
- "\u5468\u4e09",//\u5468\u4e09
- "\u5468\u56db",//\u5468\u56db
- "\u5468\u4e94",//\u5468\u4e94
- "\u5468\u516d",//\u5468\u516d
- "\u5468\u65e5");//\u5468\u65e5
-
-// Please note that the following array of short day names (and the same goes
-// for short month names, _SMN) isn't absolutely necessary.  We give it here
-// for exemplification on how one can customize the short day names, but if
-// they are simply the first N letters of the full name you can simply say:
-//
-//   Calendar._SDN_len = N; // short day name length
-//   Calendar._SMN_len = N; // short month name length
-//
-// If N = 3 then this is not needed either since we assume a value of 3 if not
-// present, to be compatible with translation files that were written before
-// this feature.
-
-// short day names
-Calendar._SDN = new Array
-("\u5468\u65e5",
- "\u5468\u4e00",
- "\u5468\u4e8c",
- "\u5468\u4e09",
- "\u5468\u56db",
- "\u5468\u4e94",
- "\u5468\u516d",
- "\u5468\u65e5");
-
-// full month names
-Calendar._MN = new Array
-("\u4e00\u6708",
- "\u4e8c\u6708",
- "\u4e09\u6708",
- "\u56db\u6708",
- "\u4e94\u6708",
- "\u516d\u6708",
- "\u4e03\u6708",
- "\u516b\u6708",
- "\u4e5d\u6708",
- "\u5341\u6708",
- "\u5341\u4e00\u6708",
- "\u5341\u4e8c\u6708");
-
-// short month names
-Calendar._SMN = new Array
-("\u4e00\u6708",
- "\u4e8c\u6708",
- "\u4e09\u6708",
- "\u56db\u6708",
- "\u4e94\u6708",
- "\u516d\u6708",
- "\u4e03\u6708",
- "\u516b\u6708",
- "\u4e5d\u6708",
- "\u5341\u6708",
- "\u5341\u4e00\u6708",
- "\u5341\u4e8c\u6708");
-
-// tooltips
-Calendar._TT = {};
-Calendar._TT["INFO"] = "\u5173\u4e8e";
-
-Calendar._TT["ABOUT"] =
-"   DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" +
-"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
-"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" +
-"\u9075\u5faaGNU LGPL.  \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" +
-"\n\n" +
-"\u65e5\u671f\u9009\u62e9:\n" +
-"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" +
-"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" +
-"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879.";
-Calendar._TT["ABOUT_TIME"] = "\n\n" +
-"\u65f6\u95f4\u9009\u62e9:\n" +
-"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" +
-"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2).";
-
-Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74";
-Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708";
-Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929";
-Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708";
-Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74";
-Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f";
-Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8";
-Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)";
-
-// the following is to inform that "%s" is to be the first day of week
-// %s will be replaced with the day name.
-Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929";
-
-// This may be locale-dependent.  It specifies the week-end days, as an array
-// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
-// means Monday, etc.
-Calendar._TT["WEEKEND"] = "0,6";
-
-Calendar._TT["CLOSE"] = "\u5173\u95ed";
-Calendar._TT["TODAY"] = "\u4eca\u5929";
-Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c";
-
-// date formats
-Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
-Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5";
-
-Calendar._TT["WK"] = "\u5468";
-Calendar._TT["TIME"] = "\u65f6\u95f4:";
+// ** I18N
+
+// Calendar EN language
+// Author: Mihai Bazon, <mishoo@infoiasi.ro>
+// Encoding: any
+// Translator : Niko <nikoused@gmail.com>
+// Distributed under the same terms as the calendar itself.
+
+// For translators: please use UTF-8 if possible.  We strongly believe that
+// Unicode is the answer to a real internationalized world.  Also please
+// include your contact information in the header, as can be seen above.
+
+// full day names
+Calendar._DN = new Array
+("\u5468\u65e5",//\u5468\u65e5
+ "\u5468\u4e00",//\u5468\u4e00
+ "\u5468\u4e8c",//\u5468\u4e8c
+ "\u5468\u4e09",//\u5468\u4e09
+ "\u5468\u56db",//\u5468\u56db
+ "\u5468\u4e94",//\u5468\u4e94
+ "\u5468\u516d",//\u5468\u516d
+ "\u5468\u65e5");//\u5468\u65e5
+
+// Please note that the following array of short day names (and the same goes
+// for short month names, _SMN) isn't absolutely necessary.  We give it here
+// for exemplification on how one can customize the short day names, but if
+// they are simply the first N letters of the full name you can simply say:
+//
+//   Calendar._SDN_len = N; // short day name length
+//   Calendar._SMN_len = N; // short month name length
+//
+// If N = 3 then this is not needed either since we assume a value of 3 if not
+// present, to be compatible with translation files that were written before
+// this feature.
+
+// short day names
+Calendar._SDN = new Array
+("\u5468\u65e5",
+ "\u5468\u4e00",
+ "\u5468\u4e8c",
+ "\u5468\u4e09",
+ "\u5468\u56db",
+ "\u5468\u4e94",
+ "\u5468\u516d",
+ "\u5468\u65e5");
+
+// full month names
+Calendar._MN = new Array
+("\u4e00\u6708",
+ "\u4e8c\u6708",
+ "\u4e09\u6708",
+ "\u56db\u6708",
+ "\u4e94\u6708",
+ "\u516d\u6708",
+ "\u4e03\u6708",
+ "\u516b\u6708",
+ "\u4e5d\u6708",
+ "\u5341\u6708",
+ "\u5341\u4e00\u6708",
+ "\u5341\u4e8c\u6708");
+
+// short month names
+Calendar._SMN = new Array
+("\u4e00\u6708",
+ "\u4e8c\u6708",
+ "\u4e09\u6708",
+ "\u56db\u6708",
+ "\u4e94\u6708",
+ "\u516d\u6708",
+ "\u4e03\u6708",
+ "\u516b\u6708",
+ "\u4e5d\u6708",
+ "\u5341\u6708",
+ "\u5341\u4e00\u6708",
+ "\u5341\u4e8c\u6708");
+
+// tooltips
+Calendar._TT = {};
+Calendar._TT["INFO"] = "\u5173\u4e8e";
+
+Calendar._TT["ABOUT"] =
+"   DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" +
+"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
+"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" +
+"\u9075\u5faaGNU LGPL.  \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" +
+"\n\n" +
+"\u65e5\u671f\u9009\u62e9:\n" +
+"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" +
+"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" +
+"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879.";
+Calendar._TT["ABOUT_TIME"] = "\n\n" +
+"\u65f6\u95f4\u9009\u62e9:\n" +
+"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" +
+"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2).";
+
+Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74";
+Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708";
+Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929";
+Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708";
+Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74";
+Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f";
+Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8";
+Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)";
+
+// the following is to inform that "%s" is to be the first day of week
+// %s will be replaced with the day name.
+Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929";
+
+// This may be locale-dependent.  It specifies the week-end days, as an array
+// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
+// means Monday, etc.
+Calendar._TT["WEEKEND"] = "0,6";
+
+Calendar._TT["CLOSE"] = "\u5173\u95ed";
+Calendar._TT["TODAY"] = "\u4eca\u5929";
+Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c";
+
+// date formats
+Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
+Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5";
+
+Calendar._TT["WK"] = "\u5468";
+Calendar._TT["TIME"] = "\u65f6\u95f4:";
diff --git a/htdocs/comm/fiche.php b/htdocs/comm/fiche.php
index dae9f90b230..0a12de52313 100644
--- a/htdocs/comm/fiche.php
+++ b/htdocs/comm/fiche.php
@@ -569,7 +569,7 @@ if ($socid > 0)
 				print '<td align="right" width="80">'.dol_print_date($db->jdate($objp->dc),'day')."</td>\n";
 				print '<td width="20">&nbsp;</td>';
 				print '<td align="right" nowrap="nowrap">';
-				$contrat->fetch_lines();
+				$contrat->fetch_lignes();
 				print $contrat->getLibStatut(4);
 				print "</td>\n";
 				print '</tr>';
diff --git a/htdocs/comm/propal/class/actions_proposal.class.php b/htdocs/comm/propal/class/actions_proposal.class.php
index ed7ac2fff55..061b14c6a38 100644
--- a/htdocs/comm/propal/class/actions_proposal.class.php
+++ b/htdocs/comm/propal/class/actions_proposal.class.php
@@ -17,7 +17,7 @@
  */
 
 /**
- *	\file       htdocs/comm/propal/class/actions_proposal.class.php
+ *	\file       htdocs/comm/propal/actions_proposal.class.php
  *	\ingroup    proposal
  *	\brief      Fichier de la classe des actions des propales
  *	\version    $Id$
@@ -43,18 +43,6 @@ class ActionsProposal extends ActionsCommonObject
 	{
 		$this->db = $DB;
 	}
-	
-	/**
-	 *    	\brief      Load a proposal from database and its ligne array
-	 *		\param      rowid       id of object to load
-	 * 		\param		ref			Ref of proposal
-	 *		\return     int         >0 if OK, <0 if KO
-	 */
-	function fetch($rowid,$ref='')
-	{
-		$this->object = new Propal($this->db);
-		return $this->object->fetch($rowid,$ref);
-	}
 
 }
 
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 38cdc711b68..75f94a76e60 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -1066,8 +1066,7 @@ class Commande extends CommonObject
 				$this->date_livraison         = $this->db->jdate($obj->date_livraison);
 				$this->fk_delivery_address    = $obj->fk_adresse_livraison;
 				$this->propale_id             = $obj->fk_source;
-				
-				$this->lines                 = array();
+				$this->lignes                 = array();
 
 				if ($this->statut == 0) $this->brouillon = 1;
 
@@ -1197,6 +1196,7 @@ class Commande extends CommonObject
 	 */
 	function fetch_lines($only_product=0)
 	{
+		$this->lignes=array();	// deprecated
 		$this->lines=array();
 
 		$sql = 'SELECT l.rowid, l.fk_product, l.product_type, l.fk_commande, l.description, l.price, l.qty, l.tva_tx,';
@@ -1257,8 +1257,8 @@ class Commande extends CommonObject
 				$line->date_start       = $this->db->jdate($objp->date_start);
 				$line->date_end         = $this->db->jdate($objp->date_end);
 
+				$this->lignes[$i] = $line;		// For backward compatibility
 				$this->lines[$i] = $line;
-				
 				$i++;
 			}
 			$this->db->free($result);
@@ -1281,9 +1281,9 @@ class Commande extends CommonObject
 	function getNbOfProductsLines()
 	{
 		$nb=0;
-		foreach($this->lines as $line)
+		foreach($this->lines as $ligne)
 		{
-			if ($line->fk_product_type == 0) $nb++;
+			if ($ligne->fk_product_type == 0) $nb++;
 		}
 		return $nb;
 	}
diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php
index 6bdba55e562..0156f2e56a4 100644
--- a/htdocs/compta/facture.php
+++ b/htdocs/compta/facture.php
@@ -695,7 +695,10 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 					$result=$srcobject->fetch($object->origin_id);
 					if ($result > 0)
 					{
-						$lines = $srcobject->lines;
+						// TODO mutualiser
+						$lines = $srcobject->lignes;
+						if (sizeof($srcobject->lines)) $lines = $srcobject->lines;
+						if (empty($lines) && method_exists($srcobject,'fetch_lignes')) $lines = $srcobject->fetch_lignes();
 						if (empty($lines) && method_exists($srcobject,'fetch_lines'))  $lines = $srcobject->fetch_lines();
 
 						for ($i = 0 ; $i < sizeof($lines) ; $i++)
@@ -729,11 +732,7 @@ if ($_POST['action'] == 'add' && $user->rights->facture->creer)
 							$lines[$i]->fk_remise_except,
 							'HT',
 							0,
-							$product_type,
-							$lines[$i]->rang,
-							$lines[$i]->special_code,
-							$object->origin,
-							$lines[$i]->rowid
+							$product_type
 							);
 
 							if ($result < 0)
@@ -1385,28 +1384,27 @@ if ($_GET['action'] == 'create')
 		{
             $projectid=GETPOST('originid');
 		}
-		else
+		else if (in_array($element,array('order','commande','propal','contrat','contract')))
 		{
     		// For compatibility
-    		if ($element == 'commande')    { $subelement = 'customerorder'; }
-    		if ($element == 'propal')   { $element = 'comm/propal'; $subelement = 'proposal'; }
-    		if ($element == 'contrat') { $subelement = 'contract'; }
+    		if ($element == 'order')    { $element = $subelement = 'commande'; }
+    		if ($element == 'propal')   { $element = 'comm/propal'; $subelement = 'propal'; }
+    		if ($element == 'contract') { $element = $subelement = 'contrat'; }
 
-    		require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/actions_'.$subelement.'.class.php');
-    		$classname = 'Actions'.ucfirst($subelement);
+    		require_once(DOL_DOCUMENT_ROOT.'/'.$element.'/class/'.$subelement.'.class.php');
+    		$classname = ucfirst($subelement);
     		$objectsrc = new $classname($db);
     		$objectsrc->fetch(GETPOST('originid'));
-    		if (empty($objectsrc->object->lines) && method_exists($objectsrc->object,'fetch_lines'))  $objectsrc->object->fetch_lines();
-    		$objectsrc->object->fetch_thirdparty();
-    		
-    		$projectid			= (!empty($objectsrc->object->fk_project)?$object->fk_project:'');
-    		$ref_client			= (!empty($objectsrc->object->ref_client)?$object->ref_client:'');
-
-    		$soc = $objectsrc->object->client;
-    		$cond_reglement_id 	= (!empty($objectsrc->object->cond_reglement_id)?$objectsrc->object->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1));
-    		$mode_reglement_id 	= (!empty($objectsrc->object->mode_reglement_id)?$objectsrc->object->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0));
-    		$remise_percent 	= (!empty($objectsrc->object->remise_percent)?$objectsrc->object->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0));
-    		$remise_absolue 	= (!empty($objectsrc->object->remise_absolue)?$objectsrc->object->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0));
+    		$objectsrc->fetch_thirdparty();
+
+    		$projectid			= (!empty($objectsrc->fk_project)?$object->fk_project:'');
+    		$ref_client			= (!empty($objectsrc->ref_client)?$object->ref_client:'');
+
+    		$soc = $objectsrc->client;
+    		$cond_reglement_id 	= (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1));
+    		$mode_reglement_id 	= (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0));
+    		$remise_percent 	= (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0));
+    		$remise_absolue 	= (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0));
     		$dateinvoice		= empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0;
 		}
 	}
@@ -1658,7 +1656,7 @@ if ($_GET['action'] == 'create')
 	print '<textarea name="note_public" wrap="soft" cols="70" rows="'.ROWS_3.'">';
 	if (is_object($objectsrc))    // Take value from source object
 	{
-		print $objectsrc->object->note_public;
+		print $objectsrc->note_public;
 	}
 	print '</textarea></td></tr>';
 
@@ -1671,7 +1669,7 @@ if ($_GET['action'] == 'create')
 		print '<textarea name="note" wrap="soft" cols="70" rows="'.ROWS_3.'">';
 		if (is_object($objectsrc))    // Take value from source object
 		{
-			print $objectsrc->object->note;
+			print $objectsrc->note;
 		}
 		print '</textarea></td></tr>';
 	}
@@ -1682,35 +1680,35 @@ if ($_GET['action'] == 'create')
 		if ($_GET['origin'] == 'contrat')
 		{
 			// Calcul contrat->price (HT), contrat->total (TTC), contrat->tva
-			$objectsrc->object->remise_absolue=$remise_absolue;
-			$objectsrc->object->remise_percent=$remise_percent;
-			$objectsrc->object->update_price();
+			$objectsrc->remise_absolue=$remise_absolue;
+			$objectsrc->remise_percent=$remise_percent;
+			$objectsrc->update_price();
 		}
 
 		print "\n<!-- ".$classname." info -->";
 		print "\n";
-		print '<input type="hidden" name="amount"         value="'.$objectsrc->object->total_ht.'">'."\n";
-		print '<input type="hidden" name="total"          value="'.$objectsrc->object->total_ttc.'">'."\n";
-		print '<input type="hidden" name="tva"            value="'.$objectsrc->object->total_tva.'">'."\n";
-		print '<input type="hidden" name="origin"         value="'.$objectsrc->object->element.'">';
-		print '<input type="hidden" name="originid"       value="'.$objectsrc->object->id.'">';
-
-		print '<tr><td>'.$langs->trans($classname).'</td><td colspan="2">'.$objectsrc->object->getNomUrl(1).'</td></tr>';
-		print '<tr><td>'.$langs->trans('TotalHT').'</td><td colspan="2">'.price($objectsrc->object->total_ht).'</td></tr>';
-		print '<tr><td>'.$langs->trans('TotalVAT').'</td><td colspan="2">'.price($objectsrc->object->total_tva)."</td></tr>";
+		print '<input type="hidden" name="amount"         value="'.$objectsrc->total_ht.'">'."\n";
+		print '<input type="hidden" name="total"          value="'.$objectsrc->total_ttc.'">'."\n";
+		print '<input type="hidden" name="tva"            value="'.$objectsrc->total_tva.'">'."\n";
+		print '<input type="hidden" name="origin"         value="'.$objectsrc->element.'">';
+		print '<input type="hidden" name="originid"       value="'.$objectsrc->id.'">';
+
+		print '<tr><td>'.$langs->trans($classname).'</td><td colspan="2">'.$objectsrc->getNomUrl(1).'</td></tr>';
+		print '<tr><td>'.$langs->trans('TotalHT').'</td><td colspan="2">'.price($objectsrc->total_ht).'</td></tr>';
+		print '<tr><td>'.$langs->trans('TotalVAT').'</td><td colspan="2">'.price($objectsrc->total_tva)."</td></tr>";
 		if ($mysoc->pays_code=='ES')
 		{
 			if ($mysoc->localtax1_assuj=="1") //Localtax1 RE
 			{
-				print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->pays_code).'</td><td colspan="2">'.price($objectsrc->object->total_localtax1)."</td></tr>";
+				print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->pays_code).'</td><td colspan="2">'.price($objectsrc->total_localtax1)."</td></tr>";
 			}
 
 			if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF
 			{
-				print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->pays_code).'</td><td colspan="2">'.price($objectsrc->object->total_localtax2)."</td></tr>";
+				print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->pays_code).'</td><td colspan="2">'.price($objectsrc->total_localtax2)."</td></tr>";
 			}
 		}
-		print '<tr><td>'.$langs->trans('TotalTTC').'</td><td colspan="2">'.price($objectsrc->object->total_ttc)."</td></tr>";
+		print '<tr><td>'.$langs->trans('TotalTTC').'</td><td colspan="2">'.price($objectsrc->total_ttc)."</td></tr>";
 	}
 	else
 	{
@@ -1776,18 +1774,155 @@ if ($_GET['action'] == 'create')
 
 	print "</form>\n";
 
+	// Try to read line from origin
+	$sql='';
 
-	// View origin lines
-	if (is_object($objectsrc))
+	// TODO deplacer dans la classe
+	if ($_GET['origin'] == 'propal')
 	{
+		//$objectsrc->printOriginLinesList();
+
 		$title=$langs->trans('ProductsAndServices');
+
+		$sql = 'SELECT pt.rowid, pt.description, pt.fk_remise_except,';
+		$sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.product_type, pt.info_bits,';
+		$sql.= ' p.label as product, p.ref, p.fk_product_type, p.rowid as prodid';
+		$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt';
+		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
+		$sql.= ' WHERE pt.fk_propal = '.$objectsrc->id;
+		$sql.= ' ORDER BY pt.rang ASC, pt.rowid';
+	}
+	// TODO deplacer dans la classe
+	if ($_GET['origin'] == 'commande')
+	{
+		$title=$langs->trans('Products');
+
+		$sql = 'SELECT pt.rowid, pt.description, pt.fk_remise_except,';
+		$sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.product_type, pt.info_bits,';
+		$sql.= ' pt.date_start as date_debut_prevue, pt.date_end as date_fin_prevue,';
+		$sql.= ' p.label as product, p.ref, p.fk_product_type, p.rowid as prodid';
+		$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as pt';
+		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
+		$sql.= ' WHERE pt.fk_commande = '.$objectsrc->id;
+		$sql.= ' ORDER BY pt.rowid ASC';
+	}
+	// TODO deplacer dans la classe
+	if ($_GET['origin'] == 'contrat')
+	{
+		$title=$langs->trans('Services');
+
+		$sql = 'SELECT pt.rowid, pt.description,';
+		$sql.= ' pt.qty, pt.tva_tx, pt.remise_percent, pt.subprice, pt.info_bits,';
+		$sql.= ' pt.date_ouverture_prevue as date_debut_prevue, pt.date_ouverture as date_debut_reel,';
+		$sql.= ' pt.date_fin_validite as date_fin_prevue, pt.date_cloture as date_fin_reel,';
+		$sql.= ' p.label as product, p.ref, p.fk_product_type, p.rowid as prodid';
+		$sql.= ' FROM '.MAIN_DB_PREFIX.'contratdet as pt';
+		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product = p.rowid';
+		$sql.= ' WHERE pt.fk_contrat = '.$objectsrc->id;
+		$sql.= ' ORDER BY pt.rowid ASC';
+	}
+
+	if ($sql)
+	{
 		print '<br>';
 		print_titre($title);
 
 		print '<table class="noborder" width="100%">';
-		
-		$objectsrc->printOriginTitleList();
-		$objectsrc->printOriginLinesList($object);
+		print '<tr class="liste_titre">';
+		print '<td>'.$langs->trans('Ref').'</td>';
+		print '<td>'.$langs->trans('Description').'</td>';
+		print '<td align="right">'.$langs->trans('VAT').'</td>';
+		print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
+		print '<td align="right">'.$langs->trans('Qty').'</td>';
+		print '<td align="right">'.$langs->trans('ReductionShort').'</td></tr>';
+
+		// Lignes
+		$resql = $db->query($sql);
+		if ($resql)
+		{
+			$num = $db->num_rows($resql);
+			$i = 0;
+			$var=True;
+			while ($i < $num)
+			{
+				$objp = $db->fetch_object($resql);
+				$var=!$var;
+
+				$date_start=$objp->date_debut_prevue;
+				if ($objp->date_debut_reel) $date_start=$objp->date_debut_reel;
+				$date_end=$objp->date_fin_prevue;
+				if ($objp->date_fin_reel) $date_end=$objp->date_fin_reel;
+
+				print '<tr '.$bc[$var].'><td>';
+				if (($objp->info_bits & 2) == 2)
+				{
+					print '<a href="'.DOL_URL_ROOT.'/comm/remx.php?id='.$propal->socid.'">';
+					print img_object($langs->trans("ShowReduc"),'reduc').' '.$langs->trans("Discount");
+					print '</a>';
+				}
+				else if ($objp->prodid)
+				{
+					print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$objp->prodid.'">';
+					print ($objp->fk_product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product'));
+					print ' '.$objp->ref.'</a>';
+					print $objp->product?' - '.$objp->product:'';
+					// Dates
+					if ($date_start || $date_end)
+					{
+						print_date_range($date_start,$date_end);
+					}
+				}
+				else
+				{
+					print ($objp->product_type == -1 ? '&nbsp;' : ($objp->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
+					// Dates
+					if ($date_start || $date_end)
+					{
+						print_date_range($date_start,$date_end);
+					}
+				}
+				print "</td>\n";
+				print '<td>';
+				if ($objp->description)
+				{
+					if ($objp->description == '(CREDIT_NOTE)')
+					{
+						$discount=new DiscountAbsolute($db);
+						$discount->fetch($objp->fk_remise_except);
+						print $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
+					}
+					elseif ($obj->description == '(DEPOSIT)')
+					{
+						$discount=new DiscountAbsolute($db);
+						$discount->fetch($objp->fk_remise_except);
+						print $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
+					}
+					else
+					{
+						print dol_trunc($objp->description,60);
+					}
+				}
+				else
+				{
+					print '&nbsp;';
+				}
+				print '</td>';
+				print '<td align="right">'.vatrate($objp->tva_tx).'%</td>';
+				print '<td align="right">'.price($objp->subprice).'</td>';
+				print '<td align="right">';
+				print (($objp->info_bits & 2) != 2) ? $objp->qty : '&nbsp;';
+				print '</td>';
+				print '<td align="right">';
+				print (($objp->info_bits & 2) != 2) ? $objp->remise_percent.'%' : '&nbsp;';
+				print '</td>';
+				print '</tr>';
+				$i++;
+			}
+		}
+		else
+		{
+			dol_print_error($db);
+		}
 
 		print '</table>';
 	}
diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php
index 81e18aa708b..b72518ad19b 100644
--- a/htdocs/compta/facture/class/facture-rec.class.php
+++ b/htdocs/compta/facture/class/facture-rec.class.php
@@ -66,6 +66,7 @@ class FactureRec extends Facture
 	var $rang;
 	var $special_code;
 	
+	var $lignes=array(); // TODO deprecated
 	var $lines=array();
 
 
@@ -141,7 +142,7 @@ class FactureRec extends Facture
 				/*
 				 * Lines
 				 */
-				for ($i = 0 ; $i < sizeof($facsrc->lines) ; $i++)
+				for ($i = 0 ; $i < sizeof($facsrc->lignes) ; $i++)
 				{
 					$result_insert = $this->addline($this->id,
 					$facsrc->lines[$i]->desc,
@@ -303,7 +304,7 @@ class FactureRec extends Facture
 
 
 	/**
-	 *	\brief      Recupere les lignes de factures predefinies dans this->lines
+	 *	\brief      Recupere les lignes de factures predefinies dans this->lignes
 	 *	\return     int         1 if OK, < 0 if KO
  	 */
 	function fetch_lines()
@@ -358,6 +359,7 @@ class FactureRec extends Facture
 				$line->price            = $objp->price;
 				$line->remise           = $objp->remise;
 
+				$this->lignes[$i] = $line; // TODO deprecated
 				$this->lines[$i] = $line;
 				
 				$i++;
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 3b2678c8c87..1b668193a7c 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -98,6 +98,7 @@ class Facture extends CommonObject
     var $mode_reglement_code;		// Code in llx_c_paiement
     var $modelpdf;
     var $products=array();	// TODO deprecated
+    var $lignes=array();	// TODO deprecated
     var $lines=array();
     var $line;
     //! Pour board
@@ -707,6 +708,7 @@ class Facture extends CommonObject
                  * Lines
                  */
 
+                $this->lignes = array();	// deprecated
                 $this->lines  = array();
 
                 $result=$this->fetch_lines();
@@ -735,7 +737,7 @@ class Facture extends CommonObject
 
 
     /**
-     *	\brief      Recupere les lignes de factures dans this->lines
+     *	\brief      Recupere les lignes de factures dans this->lignes
      *	\return     int         1 if OK, < 0 if KO
      */
     function fetch_lines()
@@ -796,6 +798,7 @@ class Facture extends CommonObject
                 $line->price            = $objp->price;
                 $line->remise           = $objp->remise;
 
+                $this->lignes[$i] = $line;	// TODO deprecated
                 $this->lines[$i] = $line;
 
                 $i++;
@@ -1499,14 +1502,14 @@ class Facture extends CommonObject
                     require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php");
 
                     // Loop on each line
-                    for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+                    for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
                     {
-                        if ($this->lines[$i]->fk_product > 0 && $this->lines[$i]->product_type == 0)
+                        if ($this->lignes[$i]->fk_product > 0 && $this->lignes[$i]->product_type == 0)
                         {
                             $mouvP = new MouvementStock($this->db);
                             // We decrease stock for product
                             $entrepot_id = "1"; // TODO ajouter possibilite de choisir l'entrepot
-                            $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $entrepot_id, $this->lines[$i]->qty, $this->lines[$i]->subprice);
+                            $result=$mouvP->livraison($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty, $this->lignes[$i]->subprice);
                             if ($result < 0) { $error++; }
                         }
                     }
@@ -1607,14 +1610,14 @@ class Facture extends CommonObject
             {
                 require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php");
 
-                for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+                for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
                 {
-                    if ($this->lines[$i]->fk_product && $this->lines[$i]->product_type == 0)
+                    if ($this->lignes[$i]->fk_product && $this->lignes[$i]->product_type == 0)
                     {
                         $mouvP = new MouvementStock($this->db);
                         // We decrease stock for product
                         $entrepot_id = "1"; // TODO ajouter possibilite de choisir l'entrepot
-                        $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $entrepot_id, $this->lines[$i]->qty, $this->lines[$i]->subprice);
+                        $result=$mouvP->reception($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty, $this->lignes[$i]->subprice);
                     }
                 }
             }
@@ -1665,7 +1668,7 @@ class Facture extends CommonObject
      *					par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,produit)
      *					et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
      */
-    function addline($facid, $desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0, $type=0, $rang=-1, $special_code=0, $origin='', $origin_id=0)
+    function addline($facid, $desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits=0, $fk_remise_except='', $price_base_type='HT', $pu_ttc=0, $type=0, $rang=-1, $special_code=0)
     {
         dol_syslog("Facture::Addline facid=$facid,desc=$desc,pu_ht=$pu_ht,qty=$qty,txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, fk_product=$fk_product,remise_percent=$remise_percent,date_start=$date_start,date_end=$date_end,ventil=$ventil,info_bits=$info_bits,fk_remise_except=$fk_remise_except,price_base_type=$price_base_type,pu_ttc=$pu_ttc,type=$type", LOG_DEBUG);
         include_once(DOL_DOCUMENT_ROOT.'/lib/price.lib.php');
@@ -1763,8 +1766,6 @@ class Facture extends CommonObject
             $this->line->total_localtax2=($this->type==2?-1:1)*$total_localtax2;
             $this->line->total_ttc=($this->type==2?-1:1)*$total_ttc;
             $this->line->special_code=$special_code;
-            $this->line->origin=$origin;
-            $this->line->origin_id=$origin_id;
 
             // \TODO Ne plus utiliser
             $this->line->price=($this->type==2?-1:1)*$price;
@@ -1791,7 +1792,7 @@ class Facture extends CommonObject
             }
             else
             {
-                $this->error=$this->line->error;
+                $this->error=$ligne->error;
                 $this->db->rollback();
                 return -2;
             }
@@ -2535,9 +2536,9 @@ class Facture extends CommonObject
     {
         // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees
         $ventilExportCompta = 0 ;
-        for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+        for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
         {
-            if ($this->lines[$i]->export_compta <> 0 && $this->lines[$i]->code_ventilation <> 0)
+            if ($this->lignes[$i]->export_compta <> 0 && $this->lignes[$i]->code_ventilation <> 0)
             {
                 $ventilExportCompta++;
             }
@@ -3060,9 +3061,6 @@ class FactureLigne
     // 1: frais de port
     // 2: ecotaxe
     // 3: ??
-    
-    var $origin;
-    var $origin_id;
 
     //! Total HT  de la ligne toute quantite et incluant la remise ligne
     var $total_ht;
diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php
index 85f4de1e73f..c6b6e8acc47 100644
--- a/htdocs/compta/facture/fiche-rec.php
+++ b/htdocs/compta/facture/fiche-rec.php
@@ -411,7 +411,7 @@ else
 			print '<td align="center">'.$langs->trans("ReductionShort").'</td>';
 			print '<td align="center">'.$langs->trans("Qty").'</td></tr>';
 
-			$num = sizeof($fac->lines);
+			$num = sizeof($fac->lignes);
 			$i = 0;
 			$var=True;
 			while ($i < $num)
@@ -421,7 +421,7 @@ else
 				$product_static=new Product($db);
 
 				// Show product and description
-				$type=$fac->lines[$i]->product_type?$fac->lines[$i]->product_type:$fac->lines[$i]->fk_product_type;
+				$type=$fac->lignes[$i]->product_type?$fac->lignes[$i]->product_type:$fac->lignes[$i]->fk_product_type;
 				// Try to enhance type detection using date_start and date_end for free lines when type
 				// was not saved.
 				if (! empty($objp->date_start)) $type=1;
@@ -429,26 +429,26 @@ else
 
 				// Show line
 				print "<tr $bc[$var]>";
-				if ($fac->lines[$i]->fk_product > 0)
+				if ($fac->lignes[$i]->fk_product > 0)
 				{
 					print '<td>';
-					print '<a name="'.$fac->lines[$i]->id.'"></a>'; // ancre pour retourner sur la ligne
+					print '<a name="'.$fac->lignes[$i]->id.'"></a>'; // ancre pour retourner sur la ligne
 
 					// Show product and description
-					$product_static->type=$fac->lines[$i]->fk_product_type;
-					$product_static->id=$fac->lines[$i]->fk_product;
-					$product_static->ref=$fac->lines[$i]->product_ref;
-					$product_static->libelle=$fac->lines[$i]->libelle;
+					$product_static->type=$fac->lignes[$i]->fk_product_type;
+					$product_static->id=$fac->lignes[$i]->fk_product;
+					$product_static->ref=$fac->lignes[$i]->product_ref;
+					$product_static->libelle=$fac->lignes[$i]->libelle;
 					$text=$product_static->getNomUrl(1);
-					$text.= ' - '.$fac->lines[$i]->libelle;
-					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($fac->lines[$i]->desc));
+					$text.= ' - '.$fac->lignes[$i]->libelle;
+					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($fac->lignes[$i]->desc));
 					print $html->textwithtooltip($text,$description,3,'','',$i);
 
 					// Show range
-					print_date_range($fac->lines[$i]->date_start,$fac->lines[$i]->date_end);
+					print_date_range($fac->lignes[$i]->date_start,$fac->lignes[$i]->date_end);
 
 					// Add description in form
-					if ($conf->global->PRODUIT_DESC_IN_FORM) print ($fac->lines[$i]->desc && $fac->lines[$i]->desc!=$fac->lines[$i]->libelle)?'<br>'.dol_htmlentitiesbr($fac->lines[$i]->desc):'';
+					if ($conf->global->PRODUIT_DESC_IN_FORM) print ($fac->lignes[$i]->desc && $fac->lignes[$i]->desc!=$fac->lignes[$i]->libelle)?'<br>'.dol_htmlentitiesbr($fac->lignes[$i]->desc):'';
 
 					print '</td>';
 				}
@@ -458,16 +458,16 @@ else
 
 					if ($type==1) $text = img_object($langs->trans('Service'),'service');
 					else $text = img_object($langs->trans('Product'),'product');
-					print $text.' '.nl2br($fac->lines[$i]->desc);
+					print $text.' '.nl2br($fac->lignes[$i]->desc);
 
 					// Show range
-					print_date_range($fac->lines[$i]->date_start,$fac->lines[$i]->date_end);
+					print_date_range($fac->lignes[$i]->date_start,$fac->lignes[$i]->date_end);
 
 					print '</td>';
 				}
-				print "<td align=\"right\">".price($fac->lines[$i]->price)."</td>";
-				print '<td align="center">'.$fac->lines[$i]->remise_percent.' %</td>';
-				print "<td align=\"center\">".$fac->lines[$i]->qty."</td></tr>\n";
+				print "<td align=\"right\">".price($fac->lignes[$i]->price)."</td>";
+				print '<td align="center">'.$fac->lignes[$i]->remise_percent.' %</td>';
+				print "<td align=\"center\">".$fac->lignes[$i]->qty."</td></tr>\n";
 				$i++;
 			}
 			print '</table>';
diff --git a/htdocs/compta/prelevement/class/bon-prelevement.class.php b/htdocs/compta/prelevement/class/bon-prelevement.class.php
index 185d9f25b05..02adf6ee79c 100644
--- a/htdocs/compta/prelevement/class/bon-prelevement.class.php
+++ b/htdocs/compta/prelevement/class/bon-prelevement.class.php
@@ -96,20 +96,20 @@ class BonPrelevement extends CommonObject
     function AddFacture($facture_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number)
     {
         $result = 0;
-        $line_id = 0;
+        $ligne_id = 0;
 
-        $result = $this->AddLigne($line_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number);
+        $result = $this->AddLigne($ligne_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number);
 
         if ($result == 0)
         {
-            if ($line_id > 0)
+            if ($ligne_id > 0)
             {
                 $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_facture (";
                 $sql.= "fk_facture";
                 $sql.= ",fk_prelevement_lignes";
                 $sql.= ") VALUES (";
                 $sql.= $facture_id;
-                $sql.= ", ".$line_id;
+                $sql.= ", ".$ligne_id;
                 $sql.= ")";
 
                 if ($this->db->query($sql))
@@ -149,7 +149,7 @@ class BonPrelevement extends CommonObject
    	*	@param	number bank account number 
    	*	@return	int	>0 if OK, <0 if KO
    	*/
-    function AddLigne(&$line_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number)
+    function AddLigne(&$ligne_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number)
     {
         $result = -1;
         $concat = 0;
@@ -202,7 +202,7 @@ class BonPrelevement extends CommonObject
 
             if ($this->db->query($sql))
             {
-                $line_id = $this->db->last_insert_id(MAIN_DB_PREFIX."prelevement_lignes");
+                $ligne_id = $this->db->last_insert_id(MAIN_DB_PREFIX."prelevement_lignes");
                 $result = 0;
             }
             else
diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php
index 4f3782870ac..05f4a7d5918 100644
--- a/htdocs/contrat/class/contrat.class.php
+++ b/htdocs/contrat/class/contrat.class.php
@@ -70,7 +70,7 @@ class Contrat extends CommonObject
 
 	var $fk_projet;
 
-	var $lines=array();
+	var $lignes=array();
 
 
 	/**
@@ -192,10 +192,10 @@ class Contrat extends CommonObject
 		$this->db->begin();
 
 		// Load lines
-		$this->fetch_lines();
+		$this->fetch_lignes();
 
 		$ok=true;
-		foreach($this->lines as $contratline)
+		foreach($this->lignes as $contratline)
 		{
 			// Close line not already closed
 	        if ($contratline->statut != 5)
@@ -335,10 +335,10 @@ class Contrat extends CommonObject
 	}
 
 	/**
-	 *      Load lignes array into this->lines
+	 *      Load lignes array into this->lignes
 	 *      @return    Array   Return array of contract lines
 	 */
-	function fetch_lines()
+	function fetch_lignes()
 	{
 		$this->nbofserviceswait=0;
 		$this->nbofservicesopened=0;
@@ -369,7 +369,7 @@ class Contrat extends CommonObject
 		$sql.= " WHERE d.fk_contrat = ".$this->id ." AND d.fk_product = p.rowid";
 		$sql.= " ORDER by d.rowid ASC";
 
-		dol_syslog("Contrat::fetch_lines sql=".$sql);
+		dol_syslog("Contrat::fetch_lignes sql=".$sql);
 		$result = $this->db->query($sql);
 		if ($result)
 		{
@@ -378,60 +378,58 @@ class Contrat extends CommonObject
 
 			while ($i < $num)
 			{
-				$objp					= $this->db->fetch_object($result);
-
-				$line					= new ContratLigne($this->db);
-				$line->id				= $objp->rowid;
-				$line->ref				= $objp->rowid;
-				$line->fk_contrat		= $objp->fk_contrat;
-				$line->desc				= $objp->description;  // Description ligne
-				$line->qty				= $objp->qty;
-				$line->tva_tx			= $objp->tva_tx;
-				$line->localtax1_tx		= $objp->localtax1_tx;
-				$line->localtax2_tx		= $objp->localtax2_tx;
-				$line->subprice			= $objp->subprice;
-				$line->statut			= $objp->statut;
-				$line->remise_percent	= $objp->remise_percent;
-				$line->price_ht			= $objp->price_ht;
-				$line->price			= $objp->price;	// For backward compatibility
-				$line->total_ht			= $objp->total_ht;
-				$line->total_tva		= $objp->total_tva;
-				$line->total_localtax1	= $objp->total_localtax1;
-				$line->total_localtax2	= $objp->total_localtax2;
-				$line->total_ttc		= $objp->total_ttc;
-				$line->fk_product		= $objp->fk_product;
-				$line->info_bits		= $objp->info_bits;
-
-				$line->fk_user_author	= $objp->fk_user_author;
-				$line->fk_user_ouverture= $objp->fk_user_ouverture;
-				$line->fk_user_cloture  = $objp->fk_user_cloture;
-
-				$line->ref				= $objp->ref;
-				$line->libelle			= $objp->label;        // Label produit
-				$line->label			= $objp->label;        // For backward compatibility
-				$line->product_desc		= $objp->product_desc; // Description produit
-
-				$line->description		= $objp->description;
-
-				$line->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
-				$line->date_ouverture        = $this->db->jdate($objp->date_ouverture);
-				$line->date_fin_validite     = $this->db->jdate($objp->date_fin_validite);
-				$line->date_cloture          = $this->db->jdate($objp->date_cloture);
+				$objp                  = $this->db->fetch_object($result);
+
+				$ligne                 = new ContratLigne($this->db);
+				$ligne->id             = $objp->rowid;
+				$ligne->ref            = $objp->rowid;
+				$ligne->fk_contrat     = $objp->fk_contrat;
+				$ligne->desc           = $objp->description;  // Description ligne
+				$ligne->qty            = $objp->qty;
+				$ligne->tva_tx         = $objp->tva_tx;
+				$ligne->localtax1_tx   = $objp->localtax1_tx;
+				$ligne->localtax2_tx   = $objp->localtax2_tx;
+				$ligne->subprice       = $objp->subprice;
+				$ligne->statut 		   = $objp->statut;
+				$ligne->remise_percent = $objp->remise_percent;
+				$ligne->price_ht       = $objp->price_ht;
+				$ligne->price          = $objp->price;	// For backward compatibility
+				$ligne->total_ht       = $objp->total_ht;
+				$ligne->total_tva      = $objp->total_tva;
+				$ligne->total_localtax1= $objp->total_localtax1;
+				$ligne->total_localtax2= $objp->total_localtax2;
+				$ligne->total_ttc      = $objp->total_ttc;
+				$ligne->fk_product     = $objp->fk_product;
+				$ligne->info_bits      = $objp->info_bits;
+
+				$ligne->fk_user_author   = $objp->fk_user_author;
+				$ligne->fk_user_ouverture= $objp->fk_user_ouverture;
+				$ligne->fk_user_cloture  = $objp->fk_user_cloture;
+
+				$ligne->ref            = $objp->ref;
+				$ligne->libelle        = $objp->label;        // Label produit
+				$ligne->label          = $objp->label;        // For backward compatibility
+				$ligne->product_desc   = $objp->product_desc; // Description produit
+
+				$ligne->description    = $objp->description;
+
+				$ligne->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
+				$ligne->date_ouverture        = $this->db->jdate($objp->date_ouverture);
+				$ligne->date_fin_validite     = $this->db->jdate($objp->date_fin_validite);
+				$ligne->date_cloture          = $this->db->jdate($objp->date_cloture);
 				// For backward compatibility
-				$line->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
-				$line->date_debut_reel   = $this->db->jdate($objp->date_ouverture);
-				$line->date_fin_prevue   = $this->db->jdate($objp->date_fin_validite);
-				$line->date_fin_reel     = $this->db->jdate($objp->date_cloture);
-				
-				$this->lines[]			= $line;
-				
-				//dol_syslog("1 ".$line->desc);
-				//dol_syslog("2 ".$line->product_desc);
-
-				if ($line->statut == 0) $this->nbofserviceswait++;
-				if ($line->statut == 4 && (empty($line->date_fin_prevue) || $line->date_fin_prevue >= $now)) $this->nbofservicesopened++;
-				if ($line->statut == 4 && $line->date_fin_prevue < $now) $this->nbofservicesexpired++;
-				if ($line->statut == 5) $this->nbofservicesclosed++;
+				$ligne->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
+				$ligne->date_debut_reel   = $this->db->jdate($objp->date_ouverture);
+				$ligne->date_fin_prevue   = $this->db->jdate($objp->date_fin_validite);
+				$ligne->date_fin_reel     = $this->db->jdate($objp->date_cloture);
+				$this->lignes[]        = $ligne;
+				//dol_syslog("1 ".$ligne->desc);
+				//dol_syslog("2 ".$ligne->product_desc);
+
+				if ($ligne->statut == 0) $this->nbofserviceswait++;
+				if ($ligne->statut == 4 && (empty($ligne->date_fin_prevue) || $ligne->date_fin_prevue >= $now)) $this->nbofservicesopened++;
+				if ($ligne->statut == 4 && $ligne->date_fin_prevue < $now) $this->nbofservicesexpired++;
+				if ($ligne->statut == 5) $this->nbofservicesclosed++;
 
 				$total_ttc+=$objp->total_ttc;   // TODO Not saved into database
                 $total_vat+=$objp->total_tva;
@@ -474,51 +472,51 @@ class Contrat extends CommonObject
 			{
 				$objp                  = $this->db->fetch_object($result);
 
-				$line                 = new ContratLigne($this->db);
-				$line->id 			   = $objp->rowid;
-				$line->fk_contrat     = $objp->fk_contrat;
-				$line->libelle        = $objp->description;
-				$line->desc           = $objp->description;
-				$line->qty            = $objp->qty;
-				$line->statut 		   = $objp->statut;
-				$line->ref            = $objp->ref;
-				$line->tva_tx         = $objp->tva_tx;
-				$line->localtax1_tx   = $objp->localtax1_tx;
-				$line->localtax2_tx   = $objp->localtax2_tx;
-				$line->subprice       = $objp->subprice;
-				$line->remise_percent = $objp->remise_percent;
-				$line->price_ht       = $objp->price_ht;
-				$line->price          = $objp->price;	// For backward compatibility
-				$line->total_ht       = $objp->total_ht;
-				$line->total_tva      = $objp->total_tva;
-				$line->total_localtax1= $objp->total_localtax1;
-				$line->total_localtax2= $objp->total_localtax2;
-				$line->total_ttc      = $objp->total_ttc;
-				$line->fk_product     = 0;
-				$line->info_bits      = $objp->info_bits;
-
-				$line->fk_user_author   = $objp->fk_user_author;
-				$line->fk_user_ouverture= $objp->fk_user_ouverture;
-				$line->fk_user_cloture  = $objp->fk_user_cloture;
-
-				$line->description    = $objp->description;
-
-				$line->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
-				$line->date_ouverture        = $this->db->jdate($objp->date_ouverture);
-				$line->date_fin_validite     = $this->db->jdate($objp->date_fin_validite);
-				$line->date_cloture          = $this->db->jdate($objp->date_cloture);
+				$ligne                 = new ContratLigne($this->db);
+				$ligne->id 			   = $objp->rowid;
+				$ligne->fk_contrat     = $objp->fk_contrat;
+				$ligne->libelle        = $objp->description;
+				$ligne->desc           = $objp->description;
+				$ligne->qty            = $objp->qty;
+				$ligne->statut 		   = $objp->statut;
+				$ligne->ref            = $objp->ref;
+				$ligne->tva_tx         = $objp->tva_tx;
+				$ligne->localtax1_tx   = $objp->localtax1_tx;
+				$ligne->localtax2_tx   = $objp->localtax2_tx;
+				$ligne->subprice       = $objp->subprice;
+				$ligne->remise_percent = $objp->remise_percent;
+				$ligne->price_ht       = $objp->price_ht;
+				$ligne->price          = $objp->price;	// For backward compatibility
+				$ligne->total_ht       = $objp->total_ht;
+				$ligne->total_tva      = $objp->total_tva;
+				$ligne->total_localtax1= $objp->total_localtax1;
+				$ligne->total_localtax2= $objp->total_localtax2;
+				$ligne->total_ttc      = $objp->total_ttc;
+				$ligne->fk_product     = 0;
+				$ligne->info_bits      = $objp->info_bits;
+
+				$ligne->fk_user_author   = $objp->fk_user_author;
+				$ligne->fk_user_ouverture= $objp->fk_user_ouverture;
+				$ligne->fk_user_cloture  = $objp->fk_user_cloture;
+
+				$ligne->description    = $objp->description;
+
+				$ligne->date_ouverture_prevue = $this->db->jdate($objp->date_ouverture_prevue);
+				$ligne->date_ouverture        = $this->db->jdate($objp->date_ouverture);
+				$ligne->date_fin_validite     = $this->db->jdate($objp->date_fin_validite);
+				$ligne->date_cloture          = $this->db->jdate($objp->date_cloture);
 				// For backward compatibility
-				$line->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
-				$line->date_debut_reel   = $this->db->jdate($objp->date_ouverture);
-				$line->date_fin_prevue   = $this->db->jdate($objp->date_fin_validite);
-				$line->date_fin_reel     = $this->db->jdate($objp->date_cloture);
+				$ligne->date_debut_prevue = $this->db->jdate($objp->date_ouverture_prevue);
+				$ligne->date_debut_reel   = $this->db->jdate($objp->date_ouverture);
+				$ligne->date_fin_prevue   = $this->db->jdate($objp->date_fin_validite);
+				$ligne->date_fin_reel     = $this->db->jdate($objp->date_cloture);
 
-				if ($line->statut == 0) $this->nbofserviceswait++;
-				if ($line->statut == 4 && (empty($line->date_fin_prevue) || $line->date_fin_prevue >= $now)) $this->nbofservicesopened++;
-				if ($line->statut == 4 && $line->date_fin_prevue < $now) $this->nbofservicesexpired++;
-				if ($line->statut == 5) $this->nbofservicesclosed++;
+				if ($ligne->statut == 0) $this->nbofserviceswait++;
+				if ($ligne->statut == 4 && (empty($ligne->date_fin_prevue) || $ligne->date_fin_prevue >= $now)) $this->nbofservicesopened++;
+				if ($ligne->statut == 4 && $ligne->date_fin_prevue < $now) $this->nbofservicesexpired++;
+				if ($ligne->statut == 5) $this->nbofservicesclosed++;
 
-				$this->lines[]        = $line;
+				$this->lignes[]        = $ligne;
 
 				$total_ttc+=$objp->total_ttc;
                 $total_vat+=$objp->total_tva;
@@ -536,12 +534,12 @@ class Contrat extends CommonObject
 			return -2;
 		}
 
-		$this->nbofservices=sizeof($this->lines);
+		$this->nbofservices=sizeof($this->lignes);
         $this->total_ttc = price2num($total_ttc);   // TODO For the moment value is false as value is not stored in database for line linked to products
         $this->total_vat = price2num($total_vat);   // TODO For the moment value is false as value is not stored in database for line linked to products
         $this->total_ht = price2num($total_ht);     // TODO For the moment value is false as value is not stored in database for line linked to products
 
-		return $this->lines;
+		return $this->lignes;
 	}
 
 	/**
@@ -1026,11 +1024,11 @@ class Contrat extends CommonObject
 		// If draft, we keep it (should not happen)
 		if ($this->statut == 0) return 1;
 
-		// Load $this->lines array
-		//		$this->fetch_lines();
+		// Load $this->lignes array
+		//		$this->fetch_lignes();
 
 		$newstatut=1;
-		foreach($this->lines as $key => $contractline)
+		foreach($this->lignes as $key => $contractline)
 		{
 			//			if ($contractline)         // Loop on each service
 		}
@@ -1420,19 +1418,19 @@ class Contrat extends CommonObject
 		$xnbp = 0;
 		while ($xnbp < $nbp)
 		{
-			$line=new ContratLigne($this->db);
-			$line->desc=$langs->trans("Description")." ".$xnbp;
-			$line->qty=1;
-			$line->subprice=100;
-			$line->price=100;
-			$line->tva_tx=19.6;
-			$line->remise_percent=10;
-			$line->total_ht=90;
-			$line->total_ttc=107.64;	// 90 * 1.196
-			$line->total_tva=17.64;
+			$ligne=new ContratLigne($this->db);
+			$ligne->desc=$langs->trans("Description")." ".$xnbp;
+			$ligne->qty=1;
+			$ligne->subprice=100;
+			$ligne->price=100;
+			$ligne->tva_tx=19.6;
+			$ligne->remise_percent=10;
+			$ligne->total_ht=90;
+			$ligne->total_ttc=107.64;	// 90 * 1.196
+			$ligne->total_tva=17.64;
 			$prodid = rand(1, $num_prods);
-			$line->fk_product=$prodids[$prodid];
-			$this->lines[$xnbp]=$line;
+			$ligne->fk_product=$prodids[$prodid];
+			$this->lignes[$xnbp]=$ligne;
 			$xnbp++;
 		}
 
diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php
index 21d92ad47f5..2ac226043ee 100644
--- a/htdocs/contrat/fiche.php
+++ b/htdocs/contrat/fiche.php
@@ -645,7 +645,7 @@ else
         if ($result > 0)
         {
         	$id = $contrat->id; // if $_GET['ref']
-        	$result=$contrat->fetch_lines();
+        	$result=$contrat->fetch_lignes();
         }
         if ($result < 0)
         {
@@ -655,7 +655,7 @@ else
 
         if ($mesg) print $mesg;
 
-		$nbofservices=sizeof($contrat->lines);
+		$nbofservices=sizeof($contrat->lignes);
 
         $author = new User($db);
         $author->fetch($contrat->user_author_id);
@@ -805,7 +805,7 @@ else
 			$sql.= " p.ref, p.label";
 			$sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd";
 			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid";
-			$sql.= " WHERE cd.rowid = ".$contrat->lines[$cursorline-1]->id;
+			$sql.= " WHERE cd.rowid = ".$contrat->lignes[$cursorline-1]->id;
 
 			$result = $db->query($sql);
 			if ($result)
@@ -982,7 +982,7 @@ else
 			/*
 			 * Confirmation to delete service line of contract
 			 */
-			if ($_REQUEST["action"] == 'deleteline' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $contrat->lines[$cursorline-1]->id == $_GET["rowid"])
+			if ($_REQUEST["action"] == 'deleteline' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $contrat->lignes[$cursorline-1]->id == $_GET["rowid"])
 			{
 				$ret=$html->form_confirm($_SERVER["PHP_SELF"]."?id=".$contrat->id."&lineid=".$_GET["rowid"],$langs->trans("DeleteContractLine"),$langs->trans("ConfirmDeleteContractLine"),"confirm_deleteline",'',0,1);
 				if ($ret == 'html') print '<table class="notopnoleftnoright" width="100%"><tr '.$bc[false].' height="6"><td></td></tr></table>';
@@ -991,7 +991,7 @@ else
 			/*
 			 * Confirmation to move service toward another contract
 			 */
-			if ($_REQUEST["action"] == 'move' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $contrat->lines[$cursorline-1]->id == $_GET["rowid"])
+			if ($_REQUEST["action"] == 'move' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $contrat->lignes[$cursorline-1]->id == $_GET["rowid"])
 			{
 				$arraycontractid=array();
 				foreach($arrayothercontracts as $contractcursor)
@@ -1011,7 +1011,7 @@ else
 			/*
 			 * Confirmation de la validation activation
 			 */
-			if ($_REQUEST["action"] == 'active' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lines[$cursorline-1]->id == $_GET["ligne"])
+			if ($_REQUEST["action"] == 'active' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"])
 			{
 				$dateactstart = dol_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
 				$dateactend   = dol_mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]);
@@ -1023,7 +1023,7 @@ else
 			/*
 			 * Confirmation de la validation fermeture
 			 */
-			if ($_REQUEST["action"] == 'closeline' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lines[$cursorline-1]->id == $_GET["ligne"])
+			if ($_REQUEST["action"] == 'closeline' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"])
 			{
 				$dateactstart = dol_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
 				$dateactend   = dol_mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]);
@@ -1039,7 +1039,7 @@ else
 				print '<table class="notopnoleft" width="100%">';
 
 				print '<tr '.$bc[false].'>';
-				print '<td>'.$langs->trans("ServiceStatus").': '.$contrat->lines[$cursorline-1]->getLibStatut(4).'</td>';
+				print '<td>'.$langs->trans("ServiceStatus").': '.$contrat->lignes[$cursorline-1]->getLibStatut(4).'</td>';
 				print '<td width="30" align="right">';
 				if ($user->societe_id == 0)
 				{
@@ -1047,7 +1047,7 @@ else
 					{
 						$action='activateline';
 						if ($objp->statut == 4) $action='unactivateline';
-						print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$contrat->id.'&amp;ligne='.$contrat->lines[$cursorline-1]->id.'&amp;action='.$action.'">';
+						print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$contrat->id.'&amp;ligne='.$contrat->lignes[$cursorline-1]->id.'&amp;action='.$action.'">';
 						print img_edit();
 						print '</a>';
 					}
@@ -1086,7 +1086,7 @@ else
 				print '</table>';
 			}
 
-			if ($user->rights->contrat->activer && $_REQUEST["action"] == 'activateline' && $contrat->lines[$cursorline-1]->id == $_GET["ligne"])
+			if ($user->rights->contrat->activer && $_REQUEST["action"] == 'activateline' && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"])
 			{
 				/**
 				 * Activer la ligne de contrat
@@ -1136,12 +1136,12 @@ else
 				print '</form>';
 			}
 
-			if ($user->rights->contrat->activer && $_REQUEST["action"] == 'unactivateline' && $contrat->lines[$cursorline-1]->id == $_GET["ligne"])
+			if ($user->rights->contrat->activer && $_REQUEST["action"] == 'unactivateline' && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"])
 			{
 				/**
 				 * Desactiver la ligne de contrat
 				 */
-				print '<form name="closeline" action="'.$_SERVER["PHP_SELF"].'?id='.$contrat->id.'&amp;ligne='.$contrat->lines[$cursorline-1]->id.'&amp;action=closeline" method="post">';
+				print '<form name="closeline" action="'.$_SERVER["PHP_SELF"].'?id='.$contrat->id.'&amp;ligne='.$contrat->lignes[$cursorline-1]->id.'&amp;action=closeline" method="post">';
 				print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
 
 				print '<table class="noborder" width="100%">';
diff --git a/htdocs/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/contrat/tpl/linkedobjectblock.tpl.php
index aefe745f0d4..af99cb1533f 100644
--- a/htdocs/contrat/tpl/linkedobjectblock.tpl.php
+++ b/htdocs/contrat/tpl/linkedobjectblock.tpl.php
@@ -38,7 +38,7 @@ $var=true;
 for ($i = 0 ; $i < $num ; $i++)
 {
 	$linkedObjectBlock->fetch($objectid[$i]);
-    $linkedObjectBlock->fetch_lines();
+    $linkedObjectBlock->fetch_lignes();
 	$var=!$var;
 ?>
 <tr <?php echo $bc[$var]; ?> ><td>
diff --git a/htdocs/core/class/actions_commonobject.class.php b/htdocs/core/class/actions_commonobject.class.php
deleted file mode 100644
index d509cd7afd4..00000000000
--- a/htdocs/core/class/actions_commonobject.class.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/* Copyright (C) 2010 Regis Houssin  <regis@dolibarr.fr>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *	\file       htdocs/core/class/actions_commonobject.class.php
- *	\ingroup    core
- *	\brief      Fichier de la classe mere des classes metiers (facture, contrat, propal, commande, etc...)
- *	\version    $Id$
- */
-
-
-/**
- *	\class 		ActionsCommonObject
- *	\brief 		Classe mere pour heritage des classes metiers
- */
-
-class ActionsCommonObject
-{
-	var $db;
-
-	// Instantiate hook classe of thirdparty module
-	var $hooks=array();
-
-	/**
-	 *    Constructeur de la classe
-	 *    @param	DB		Handler acces base de donnees
-	 */
-	function AnctionsCommonObject($DB)
-	{
-		$this->db = $DB;
-	}
-	
-	/**
-	 * 	Return HTML table with origin title list
-	 */
-	function printOriginTitleList()
-	{
-		global $langs;
-
-		print '<tr class="liste_titre">';
-		print '<td>'.$langs->trans('Ref').'</td>';
-		print '<td>'.$langs->trans('Description').'</td>';
-		print '<td align="right">'.$langs->trans('VAT').'</td>';
-		print '<td align="right">'.$langs->trans('PriceUHT').'</td>';
-		print '<td align="right">'.$langs->trans('Qty').'</td>';
-		print '<td align="right">'.$langs->trans('ReductionShort').'</td></tr>';
-	}
-	
-	/**
-	 * 	Return HTML with list of origin lines
-	 */
-	function printOriginLinesList($object)
-	{
-		$num = count($this->object->lines);
-		$var = true;
-		$i	 = 0;
-
-		foreach ($this->object->lines as $line)
-		{
-			$var=!$var;
-
-			if ($line->product_type == 9 && ! empty($line->special_code))
-			{
-				$object->hooks[$line->special_code]->printOriginObjectLine($line,$i);
-			}
-			else
-			{
-				$this->printOriginLine($line,$var);
-			}
-
-			$i++;
-		}
-	}
-
-	/**
-	 * 	Return HTML with origin line
-	 * 	@param		element		Element type
-	 * 	@param		id			Element id
-	 */
-	function printOriginLine($line,$var)
-	{
-		global $langs,$bc;
-		
-		//var_dump($line);
-		
-		$var=!$var;
-
-		$date_start=$line->date_debut_prevue;
-		if ($line->date_debut_reel) $date_start=$line->date_debut_reel;
-		$date_end=$line->date_fin_prevue;
-		if ($line->date_fin_reel) $date_end=$line->date_fin_reel;
-		
-		print '<tr '.$bc[$var].'><td>';
-		if (($line->info_bits & 2) == 2)
-		{
-			print '<a href="'.DOL_URL_ROOT.'/comm/remx.php?id='.$this->socid.'">';
-			print img_object($langs->trans("ShowReduc"),'reduc').' '.$langs->trans("Discount");
-			print '</a>';
-		}
-		else if ($line->fk_product)
-		{
-			print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$line->fk_product.'">';
-			print ($line->fk_product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product'));
-			print ' '.$line->ref.'</a>';
-			print $line->label?' - '.$line->label:'';
-			// Dates
-			if ($date_start || $date_end)
-			{
-				print_date_range($date_start,$date_end);
-			}
-		}
-		else
-		{
-			print ($line->product_type == -1 ? '&nbsp;' : ($line->product_type == 1 ? img_object($langs->trans(''),'service') : img_object($langs->trans(''),'product')));
-			print ($line->label ? '&nbsp;'.$line->label : '');
-			// Dates
-			if ($date_start || $date_end)
-			{
-				print_date_range($date_start,$date_end);
-			}
-		}
-		print "</td>\n";
-		print '<td>';
-		if ($line->desc)
-		{
-			if ($line->desc == '(CREDIT_NOTE)')
-			{
-				$discount=new DiscountAbsolute($db);
-				$discount->fetch($line->fk_remise_except);
-				print $langs->transnoentities("DiscountFromCreditNote",$discount->getNomUrl(0));
-			}
-			elseif ($line->desc == '(DEPOSIT)')
-			{
-				$discount=new DiscountAbsolute($db);
-				$discount->fetch($line->fk_remise_except);
-				print $langs->transnoentities("DiscountFromDeposit",$discount->getNomUrl(0));
-			}
-			else
-			{
-				print dol_trunc($line->desc,60);
-			}
-		}
-		else
-		{
-			print '&nbsp;';
-		}
-		print '</td>';
-		print '<td align="right">'.vatrate($line->tva_tx).'%</td>';
-		print '<td align="right">'.price($line->subprice).'</td>';
-		print '<td align="right">';
-		print (($line->info_bits & 2) != 2) ? $line->qty : '&nbsp;';
-		print '</td>';
-		print '<td align="right">';
-		print (($line->info_bits & 2) != 2) ? $line->remise_percent.'%' : '&nbsp;';
-		print '</td>';
-		print '</tr>';
-	}
-	
-}
-
-?>
diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php
index 9009e708f09..0f1e12348ba 100644
--- a/htdocs/core/class/translate.class.php
+++ b/htdocs/core/class/translate.class.php
@@ -229,11 +229,11 @@ class Translate {
 					{
 						if ($usecachekey) $tabtranslatedomain=array();	// To save lang content in cache
 
-						while ($line = fgets($fp,4096))	// Ex: Need 225ms for all fgets on all lang file for Third party page. Same speed than file_get_contents
+						while ($ligne = fgets($fp,4096))	// Ex: Need 225ms for all fgets on all lang file for Third party page. Same speed than file_get_contents
 						{
-							if ($line[0] != "\n" && $line[0] != " " && $line[0] != "#")
+							if ($ligne[0] != "\n" && $ligne[0] != " " && $ligne[0] != "#")
 							{
-								$tab=explode('=',$line,2);
+								$tab=explode('=',$ligne,2);
 								$key=trim($tab[0]);
 								//print "Domain=$domain, found a string for $tab[0] with value $tab[1]<br>";
 								if (empty($this->tab_translate[$key]) && isset($tab[1]))
diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php
index 73fd72f0942..c49ca8cb684 100644
--- a/htdocs/core/tpl/login.tpl.php
+++ b/htdocs/core/tpl/login.tpl.php
@@ -31,7 +31,7 @@ header("Content-type: text/html; charset=".$conf->file->character_set_client);
 <head>
 <meta name="robots" content="noindex,nofollow">
 <title><?php echo $langs->trans('Login'); ?></title>
-<script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/js/jquery-latest.min.js"></script>
+<script type="text/javascript" src="<?php echo DOL_URL_ROOT ?>/includes/jquery/js/jquery-1.4.3.min.js"></script>
 <link rel="stylesheet" type="text/css" href="<?php echo $conf_css; ?>">
 <style type="text/css">
 <!--
diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
index 9fdf688dfa5..b59c0a34e14 100644
--- a/htdocs/expedition/class/expedition.class.php
+++ b/htdocs/expedition/class/expedition.class.php
@@ -50,6 +50,7 @@ class Expedition extends CommonObject
 	var $modelpdf;
 	var $origin;
 	var $origin_id;
+	var $lignes=array();	// TODO deprecated
 	var $lines=array();
 	var $expedition_method_id;
 	var $statut;
@@ -76,7 +77,7 @@ class Expedition extends CommonObject
 	function Expedition($DB)
 	{
 		$this->db = $DB;
-		$this->lines = array();
+		$this->lignes = array();
 		$this->products = array();
 
 		// List of long language codes for status
@@ -157,9 +158,9 @@ class Expedition extends CommonObject
 			if ($this->db->query($sql))
 			{
 				// Insertion des lignes
-				for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+				for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
 				{
-					if (! $this->create_line($this->lines[$i]->entrepot_id, $this->lines[$i]->origin_line_id, $this->lines[$i]->qty) > 0)
+					if (! $this->create_line($this->lignes[$i]->entrepot_id, $this->lignes[$i]->origin_line_id, $this->lignes[$i]->qty) > 0)
 					{
 						$error++;
 					}
@@ -409,9 +410,9 @@ class Expedition extends CommonObject
 					dol_syslog("Expedition::valid movement index ".$i);
 					$obj = $this->db->fetch_object($resql);
 
-					if ($this->lines[$i]->fk_product > 0 && $this->lines[$i]->product_type == 0)
+					if ($this->lignes[$i]->fk_product > 0 && $this->lignes[$i]->product_type == 0)
 					{
-						//var_dump($this->lines[$i]);
+						//var_dump($this->lignes[$i]);
 						$mouvS = new MouvementStock($this->db);
 						// We decrement stock of product (and sub-products)
 						// We use warehouse selected for each line
@@ -528,14 +529,14 @@ class Expedition extends CommonObject
 	 */
 	function addline( $entrepot_id, $id, $qty )
 	{
-		$num = sizeof($this->lines);
+		$num = sizeof($this->lignes);
 		$line = new ExpeditionLigne($this->db);
 
 		$line->entrepot_id = $entrepot_id;
 		$line->origin_line_id = $id;
 		$line->qty = $qty;
 
-		$this->lines[$num] = $line;
+		$this->lignes[$num] = $line;
 	}
 
 	/**
@@ -782,6 +783,7 @@ class Expedition extends CommonObject
 				$line->volume         	= $obj->volume;
 				$line->volume_units   	= $obj->volume_units;
 
+				$this->lignes[$i] = $line; // TODO deprecated
 				$this->lines[$i] = $line;
 
 				$i++;
@@ -918,15 +920,15 @@ class Expedition extends CommonObject
 		$xnbp = 0;
 		while ($xnbp < $nbp)
 		{
-			$line=new ExpeditionLigne($this->db);
-			$line->desc=$langs->trans("Description")." ".$xnbp;
-			$line->libelle=$langs->trans("Description")." ".$xnbp;
-			$line->qty=10;
-			$line->qty_asked=5;
-			$line->qty_shipped=4;
-			$line->fk_product=$this->commande->lines[$xnbp]->fk_product;
-
-			$this->lines[]=$line;
+			$ligne=new ExpeditionLigne($this->db);
+			$ligne->desc=$langs->trans("Description")." ".$xnbp;
+			$ligne->libelle=$langs->trans("Description")." ".$xnbp;
+			$ligne->qty=10;
+			$ligne->qty_asked=5;
+			$ligne->qty_shipped=4;
+			$ligne->fk_product=$this->commande->lignes[$xnbp]->fk_product;
+
+			$this->lignes[]=$ligne;
 			$xnbp++;
 		}
 
diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php
index 44aabdc8363..57b194d35aa 100644
--- a/htdocs/expedition/fiche.php
+++ b/htdocs/expedition/fiche.php
@@ -98,7 +98,7 @@ if ($_POST["action"] == 'add')
 	$expedition->tracking_number		= $_POST["tracking_number"];
 
 	//var_dump($_POST);exit;
-	for ($i = 0 ; $i < sizeof($object->lines) ; $i++)
+	for ($i = 0 ; $i < sizeof($object->lignes) ; $i++)
 	{
 		$qty = "qtyl".$i;
 		if ($_POST[$qty] > 0)
@@ -447,8 +447,8 @@ if ($_GET["action"] == 'create')
 			 */
 			print '<br><table class="nobordernopadding" width="100%">';
 
-			//$lines = $object->fetch_lines(1);
-			$numAsked = sizeof($object->lines);
+			//$lignes = $object->fetch_lines(1);
+			$numAsked = sizeof($object->lignes);
 
 			/* Lecture des expeditions deja effectuees */
 			$object->loadExpeditions();
@@ -654,8 +654,8 @@ else
 			dol_print_error($db,$expedition->error);
 			exit -1;
 		}
-		$lines = $expedition->lines;
-		$num_prod = sizeof($lines);
+		$lignes = $expedition->lignes;
+		$num_prod = sizeof($lignes);
 
 		if ($expedition->id > 0)
 		{
@@ -723,30 +723,30 @@ else
 			{
 				$weightUnit=0;
 				$volumeUnit=0;
-				if (! empty($lines[$i]->weight_units)) $weightUnit = $lines[$i]->weight_units;
-				if (! empty($lines[$i]->volume_units)) $volumeUnit = $lines[$i]->volume_units;
+				if (! empty($lignes[$i]->weight_units)) $weightUnit = $lignes[$i]->weight_units;
+				if (! empty($lignes[$i]->volume_units)) $volumeUnit = $lignes[$i]->volume_units;
 				// TODO Use a function addvalueunits(val1,unit1,val2,unit2)=>(val,unit)
-				if ($lines[$i]->weight_units < 50)
+				if ($lignes[$i]->weight_units < 50)
 				{
 					$trueWeightUnit=pow(10,$weightUnit);
-					$totalWeight += $lines[$i]->weight*$lines[$i]->qty_shipped*$trueWeightUnit;
+					$totalWeight += $lignes[$i]->weight*$lignes[$i]->qty_shipped*$trueWeightUnit;
 				}
 				else
 				{
 					$trueWeightUnit=$weightUnit;
-					$totalWeight += $lines[$i]->weight*$lines[$i]->qty_shipped;
+					$totalWeight += $lignes[$i]->weight*$lignes[$i]->qty_shipped;
 				}
-				if ($lines[$i]->volume_units < 50)
+				if ($lignes[$i]->volume_units < 50)
 				{
-					//print $lines[$i]->volume."x".$lines[$i]->volume_units."x".($lines[$i]->volume_units < 50)."x".$volumeUnit;
+					//print $lignes[$i]->volume."x".$lignes[$i]->volume_units."x".($lignes[$i]->volume_units < 50)."x".$volumeUnit;
 					$trueVolumeUnit=pow(10,$volumeUnit);
-					//print $lines[$i]->volume;
-					$totalVolume += $lines[$i]->volume*$lines[$i]->qty_shipped*$trueVolumeUnit;
+					//print $lignes[$i]->volume;
+					$totalVolume += $lignes[$i]->volume*$lignes[$i]->qty_shipped*$trueVolumeUnit;
 				}
 				else
 				{
 					$trueVolumeUnit=$volumeUnit;
-					$totalVolume += $lines[$i]->volume*$lines[$i]->qty_shipped;
+					$totalVolume += $lignes[$i]->volume*$lignes[$i]->qty_shipped;
 				}
 			}
 			$totalVolume=$totalVolume;
@@ -966,64 +966,64 @@ else
 				print "<tr ".$bc[$var].">";
 
 				// Predefined product or service
-				if ($lines[$i]->fk_product > 0)
+				if ($lignes[$i]->fk_product > 0)
 				{
 					print '<td>';
 
 					// Affiche ligne produit
-					$text = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$lines[$i]->fk_product.'">';
-					if ($lines[$i]->fk_product_type==1) $text.= img_object($langs->trans('ShowService'),'service');
+					$text = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$lignes[$i]->fk_product.'">';
+					if ($lignes[$i]->fk_product_type==1) $text.= img_object($langs->trans('ShowService'),'service');
 					else $text.= img_object($langs->trans('ShowProduct'),'product');
-					$text.= ' '.$lines[$i]->ref.'</a>';
-					$text.= ' - '.$lines[$i]->label;
-					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($lines[$i]->description));
+					$text.= ' '.$lignes[$i]->ref.'</a>';
+					$text.= ' - '.$lignes[$i]->label;
+					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($lignes[$i]->description));
 					//print $description;
 					print $html->textwithtooltip($text,$description,3,'','',$i);
-					print_date_range($lines[$i]->date_start,$lines[$i]->date_end);
+					print_date_range($lignes[$i]->date_start,$lignes[$i]->date_end);
 					if ($conf->global->PRODUIT_DESC_IN_FORM)
 					{
-						print ($lines[$i]->description && $lines[$i]->description!=$lines[$i]->product)?'<br>'.dol_htmlentitiesbr($lines[$i]->description):'';
+						print ($lignes[$i]->description && $lignes[$i]->description!=$lignes[$i]->product)?'<br>'.dol_htmlentitiesbr($lignes[$i]->description):'';
 					}
 				}
 				else
 				{
 					print "<td>";
-					if ($lines[$i]->fk_product_type==1) $text = img_object($langs->trans('Service'),'service');
+					if ($lignes[$i]->fk_product_type==1) $text = img_object($langs->trans('Service'),'service');
 					else $text = img_object($langs->trans('Product'),'product');
-					print $text.' '.nl2br($lines[$i]->description);
-					print_date_range($lines[$i]->date_start,$lines[$i]->date_end);
+					print $text.' '.nl2br($lignes[$i]->description);
+					print_date_range($lignes[$i]->date_start,$lignes[$i]->date_end);
 					print "</td>\n";
 				}
 
 				// Qte commande
-				print '<td align="center">'.$lines[$i]->qty_asked.'</td>';
+				print '<td align="center">'.$lignes[$i]->qty_asked.'</td>';
 
 				// Qte a expedier ou expedier
-				print '<td align="center">'.$lines[$i]->qty_shipped.'</td>';
+				print '<td align="center">'.$lignes[$i]->qty_shipped.'</td>';
 
 				// Weight
 				print '<td align="center">';
-				if ($lines[$i]->fk_product_type == 0) print $lines[$i]->weight*$lines[$i]->qty_shipped.' '.measuring_units_string($lines[$i]->weight_units,"weight");
+				if ($lignes[$i]->fk_product_type == 0) print $lignes[$i]->weight*$lignes[$i]->qty_shipped.' '.measuring_units_string($lignes[$i]->weight_units,"weight");
 				else print '&nbsp;';
 				print '</td>';
 
 				// Volume
 				print '<td align="center">';
-				if ($lines[$i]->fk_product_type == 0) print $lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuring_units_string($lines[$i]->volume_units,"volume");
+				if ($lignes[$i]->fk_product_type == 0) print $lignes[$i]->volume*$lignes[$i]->qty_shipped.' '.measuring_units_string($lignes[$i]->volume_units,"volume");
 				else print '&nbsp;';
 				print '</td>';
 
 				// Size
-				//print '<td align="center">'.$lines[$i]->volume*$lines[$i]->qty_shipped.' '.measuring_units_string($lines[$i]->volume_units,"volume").'</td>';
+				//print '<td align="center">'.$lignes[$i]->volume*$lignes[$i]->qty_shipped.' '.measuring_units_string($lignes[$i]->volume_units,"volume").'</td>';
 
 				// Entrepot source
 				if ($conf->stock->enabled)
 				{
 					print '<td align="left">';
-					if ($lines[$i]->entrepot_id > 0)
+					if ($lignes[$i]->entrepot_id > 0)
 					{
 						$entrepot = new Entrepot($db);
-						$entrepot->fetch($lines[$i]->entrepot_id);
+						$entrepot->fetch($lignes[$i]->entrepot_id);
 						print $entrepot->getNomUrl(1);
 					}
 					print '</td>';
diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php
index ef80f05f3e9..b21040cdba7 100644
--- a/htdocs/fichinter/class/fichinter.class.php
+++ b/htdocs/fichinter/class/fichinter.class.php
@@ -57,7 +57,7 @@ class Fichinter extends CommonObject
 	var $fk_project;
 	var $modelpdf;
 
-	var $lines = array();
+	var $lignes = array();
 
 	/**
 	 *    \brief      Constructeur de la classe
@@ -674,14 +674,14 @@ class Fichinter extends CommonObject
 			$this->db->begin();
 
 			// Insertion ligne
-			$line=new FichinterLigne($this->db);
+			$ligne=new FichinterLigne($this->db);
 
-			$line->fk_fichinter = $fichinterid;
-			$line->desc         = $desc;
-			$line->datei        = $date_intervention;
-			$line->duration     = $duration;
+			$ligne->fk_fichinter = $fichinterid;
+			$ligne->desc         = $desc;
+			$ligne->datei        = $date_intervention;
+			$ligne->duration     = $duration;
 
-			$result=$line->insert();
+			$result=$ligne->insert();
 			if ($result > 0)
 			{
 				$this->db->commit();
@@ -780,16 +780,18 @@ class Fichinter extends CommonObject
 			{
 				$objp = $this->db->fetch_object($result);
 
-				$line = new FichinterLigne($this->db);
-				$line->id = $objp->rowid;
+				$fichinterligne = new FichinterLigne($this->db);
+				$fichinterligne->id = $objp->rowid;
 				//...
 
-				$this->lines[$i] = $line;
+				$this->lines[$i] = $fichinterligne;
 
 				$i++;
 			}
 			$this->db->free($result);
 
+			$this->lignes=$this->lines;  // For backward compatibility
+
 			return 1;
 		}
 		else
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index 918d3f89898..85c15be5f18 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -74,6 +74,7 @@ class CommandeFournisseur extends Commande
 	{
 		$this->db = $DB;
 		$this->products = array();
+		$this->lignes = array();	// TODO deprecated
 		$this->lines = array();
 
 		// List of language codes for status
@@ -186,6 +187,7 @@ class CommandeFournisseur extends Commande
 					$line->ref                 = $objp->ref;          // Reference
 					$line->ref_fourn           = $objp->ref_fourn;    // Reference supplier
 
+					$this->lignes[$i]     = $line;	// TODO deprecated
 					$this->lines[$i]      = $line;
 
 					$i++;
@@ -525,15 +527,15 @@ class CommandeFournisseur extends Commande
 				{
 					require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php");
 
-					for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+					for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
 					{
 						// Product with reference
-						if (!empty($this->lines[$i]->fk_product))
+						if (!empty($this->lignes[$i]->fk_product))
 						{
 							$mouvP = new MouvementStock($this->db);
 							// We decrement stock of product (and sub-products)
 							$entrepot_id = "1"; //Todo: ajouter possibilite de choisir l'entrepot
-							$result=$mouvP->reception($user, $this->lines[$i]->fk_product, $entrepot_id, $this->lines[$i]->qty, $this->lines[$i]->subprice);
+							$result=$mouvP->reception($user, $this->lignes[$i]->fk_product, $entrepot_id, $this->lignes[$i]->qty, $this->lignes[$i]->subprice);
 							if ($result < 0) { $error++; }
 						}
 					}
@@ -1195,10 +1197,10 @@ class CommandeFournisseur extends Commande
 
 		$this->lines = array();
 
-		for ($i = 0 ; $i < sizeof($comclient->lines) ; $i++)
+		for ($i = 0 ; $i < sizeof($comclient->lignes) ; $i++)
 		{
-			$prod = new Product($this->db, $comclient->lines[$i]->fk_product);
-			if ($prod->fetch($comclient->lines[$i]->fk_product) > 0)
+			$prod = new Product($this->db, $comclient->lignes[$i]->fk_product);
+			if ($prod->fetch($comclient->lignes[$i]->fk_product) > 0)
 	  {
 	  	$libelle  = $prod->libelle;
 	  	$ref      = $prod->ref;
@@ -1206,10 +1208,10 @@ class CommandeFournisseur extends Commande
 
 	  $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet";
 	  $sql .= " (fk_commande,label,description,fk_product, price, qty, tva_tx, remise_percent, subprice, remise, ref)";
-	  $sql .= " VALUES (".$idc.", '" . addslashes($libelle) . "','" . addslashes($comclient->lines[$i]->desc) . "'";
-	  $sql .= ",".$comclient->lines[$i]->fk_product.",'".price2num($comclient->lines[$i]->price)."'";
-	  $sql .= ", '".$comclient->lines[$i]->qty."', ".$comclient->lines[$i]->tva_tx.", ".$comclient->lines[$i]->remise_percent;
-	  $sql .= ", '".price2num($comclient->lines[$i]->subprice)."','0','".$ref."') ;";
+	  $sql .= " VALUES (".$idc.", '" . addslashes($libelle) . "','" . addslashes($comclient->lignes[$i]->desc) . "'";
+	  $sql .= ",".$comclient->lignes[$i]->fk_product.",'".price2num($comclient->lignes[$i]->price)."'";
+	  $sql .= ", '".$comclient->lignes[$i]->qty."', ".$comclient->lignes[$i]->tva_tx.", ".$comclient->lignes[$i]->remise_percent;
+	  $sql .= ", '".price2num($comclient->lignes[$i]->subprice)."','0','".$ref."') ;";
 	  if ( $this->db->query( $sql) )
 	  {
 	  	$this->update_price();
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index 54fe77bc580..d564ba28c36 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -973,7 +973,7 @@ if ($id > 0 || ! empty($ref))
 		 */
 		print '<table class="noborder" width="100%">';
 
-		$num = sizeof($commande->lines);
+		$num = sizeof($commande->lignes);
 		$i = 0;	$total = 0;
 
 		if ($num)
@@ -991,7 +991,7 @@ if ($id > 0 || ! empty($ref))
 		$var=true;
 		while ($i <	$num)
 		{
-			$commandline =	$commande->lines[$i];
+			$commandline =	$commande->lignes[$i];
 			$var=!$var;
 
 			// Show product and description
diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php
index 3dd63fff91a..a5276b93edb 100644
--- a/htdocs/fourn/facture/fiche.php
+++ b/htdocs/fourn/facture/fiche.php
@@ -238,7 +238,7 @@ if ($_POST['action'] == 'add' && $user->rights->fournisseur->facture->creer)
     		if ($element == 'contract') { $element = $subelement = 'contrat'; }
     		if ($element == 'order_supplier') { $element = 'fourn'; $subelement = 'fournisseur.commande'; }
 
-			$facfou->origin 	= $_POST['origin'];
+			$facfou->origin    = $_POST['origin'];
 			$facfou->origin_id = $_POST['originid'];
 
 			$facid = $facfou->create($user);
@@ -254,7 +254,10 @@ if ($_POST['action'] == 'add' && $user->rights->fournisseur->facture->creer)
 				$result=$srcobject->fetch($_POST['originid']);
 				if ($result > 0)
 				{
-					$lines = $srcobject->lines;
+					// TODO mutualiser
+					$lines = $srcobject->lignes;
+					if (sizeof($srcobject->lines)) $lines = $srcobject->lines;
+					if (empty($lines) && method_exists($srcobject,'fetch_lignes')) $lines = $srcobject->fetch_lignes();
 					if (empty($lines) && method_exists($srcobject,'fetch_lines'))  $lines = $srcobject->fetch_lines();
 
 					for ($i = 0 ; $i < sizeof($lines) ; $i++)
@@ -841,8 +844,6 @@ if ($_GET['action'] == 'create')
 
 	if (GETPOST('origin') && GETPOST('originid'))
 	{
-		// TODO Not finished...
-
 		// Parse element/subelement (ex: project_task)
 		$element = $subelement = GETPOST('origin');
 		/*if (preg_match('/^([^_]+)_([^_]+)/i',$_GET['origin'],$regs))
@@ -1795,17 +1796,34 @@ else
                 $genallowed=$user->rights->fournisseur->facture->creer;
                 $delallowed=$user->rights->fournisseur->facture->supprimer;
 
-                $somethingshown=$formfile->show_documents('facture_fournisseur',$facfournref,$filedir,$urlsource,$genallowed,$delallowed,$facture->modelpdf);
+                print '<br>';
+                $somethingshown=$formfile->show_documents('facture_fournisseur',$facfournref,$filedir,$urlsource,$genallowed,$delallowed,$fac->modelpdf);
+
+                $object=$fac;
+
+                /*
+                 * Linked object block
+                 */
+                $object->load_object_linked($object->id,$object->element);
+
+                foreach($object->linked_object as $linked_object => $linked_objectid)
+                {
+                    $tmpmodule=$linked_object;
+                    if ($linked_object == 'invoice_supplier') $tmpmodule='fournisseur';
+                    if ($linked_object == 'order_supplier') $tmpmodule='fournisseur';
+                    if($conf->$tmpmodule->enabled && $linked_object != $object->element)
+                    {
+                        $somethingshown=$object->showLinkedObjectBlock($linked_object,$linked_objectid,$somethingshown);
+                    }
+                }
 
                 print '</td><td valign="top" width="50%">';
                 print '<br>';
 
                 // List of actions on element
-                /*
                 include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php');
                 $formactions=new FormActions($db);
-                $somethingshown=$formactions->showactions($fac,'invoice_supplier',$socid);
-                */
+                $somethingshown=$formactions->showactions($object,'invoice_supplier',$socid);
 
                 print '</td></tr></table>';
             }
diff --git a/htdocs/includes/adodbtime/adodb-time.inc.php b/htdocs/includes/adodbtime/adodb-time.inc.php
index 7997254c4fd..e54ab088780 100644
--- a/htdocs/includes/adodbtime/adodb-time.inc.php
+++ b/htdocs/includes/adodbtime/adodb-time.inc.php
@@ -1,1289 +1,1289 @@
-<?php
-/**
-ADOdb Date Library, part of the ADOdb abstraction library
-Download: http://php.weblogs.com/adodb_date_time_library
-
-PHP native date functions use integer timestamps for computations.
-Because of this, dates are restricted to the years 1901-2038 on Unix 
-and 1970-2038 on Windows due to integer overflow for dates beyond 
-those years. This library overcomes these limitations by replacing the 
-native function's signed integers (normally 32-bits) with PHP floating 
-point numbers (normally 64-bits).
-
-Dates from 100 A.D. to 3000 A.D. and later
-have been tested. The minimum is 100 A.D. as <100 will invoke the
-2 => 4 digit year conversion. The maximum is billions of years in the 
-future, but this is a theoretical limit as the computation of that year 
-would take too long with the current implementation of adodb_mktime().
-
-This library replaces native functions as follows:
-
-<pre>	
-	getdate()  with  adodb_getdate()
-	date()     with  adodb_date() 
-	gmdate()   with  adodb_gmdate()
-	mktime()   with  adodb_mktime()
-	gmmktime() with  adodb_gmmktime()
-	strftime() with  adodb_strftime()
-	strftime() with  adodb_gmstrftime()
-</pre>
-	
-The parameters are identical, except that adodb_date() accepts a subset
-of date()'s field formats. Mktime() will convert from local time to GMT, 
-and date() will convert from GMT to local time, but daylight savings is 
-not handled currently.
-
-This library is independant of the rest of ADOdb, and can be used
-as standalone code.
-
-PERFORMANCE
-
-For high speed, this library uses the native date functions where
-possible, and only switches to PHP code when the dates fall outside 
-the 32-bit signed integer range.
-
-GREGORIAN CORRECTION
-
-Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, 
-October 4, 1582 (Julian) was followed immediately by Friday, October 15, 
-1582 (Gregorian). 
-
-Since 0.06, we handle this correctly, so:
-
-adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) 
-	== 24 * 3600 (1 day)
-
-=============================================================================
-
-COPYRIGHT
-
-(c) 2003-2005 John Lim and released under BSD-style license except for code by 
-jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year
-and originally found at http://www.php.net/manual/en/function.mktime.php
-
-=============================================================================
-
-BUG REPORTS
-
-These should be posted to the ADOdb forums at
-
-	http://phplens.com/lens/lensforum/topics.php?id=4
-
-=============================================================================
-
-FUNCTION DESCRIPTIONS
-
-
-** FUNCTION adodb_getdate($date=false)
-
-Returns an array containing date information, as getdate(), but supports
-dates greater than 1901 to 2038. The local date/time format is derived from a 
-heuristic the first time adodb_getdate is called. 
-	 
-	 
-** FUNCTION adodb_date($fmt, $timestamp = false)
-
-Convert a timestamp to a formatted local date. If $timestamp is not defined, the
-current timestamp is used. Unlike the function date(), it supports dates
-outside the 1901 to 2038 range.
-
-The format fields that adodb_date supports:
-
-<pre>
-	a - "am" or "pm" 
-	A - "AM" or "PM" 
-	d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" 
-	D - day of the week, textual, 3 letters; e.g. "Fri" 
-	F - month, textual, long; e.g. "January" 
-	g - hour, 12-hour format without leading zeros; i.e. "1" to "12" 
-	G - hour, 24-hour format without leading zeros; i.e. "0" to "23" 
-	h - hour, 12-hour format; i.e. "01" to "12" 
-	H - hour, 24-hour format; i.e. "00" to "23" 
-	i - minutes; i.e. "00" to "59" 
-	j - day of the month without leading zeros; i.e. "1" to "31" 
-	l (lowercase 'L') - day of the week, textual, long; e.g. "Friday"  
-	L - boolean for whether it is a leap year; i.e. "0" or "1" 
-	m - month; i.e. "01" to "12" 
-	M - month, textual, 3 letters; e.g. "Jan" 
-	n - month without leading zeros; i.e. "1" to "12" 
-	O - Difference to Greenwich time in hours; e.g. "+0200" 
-	Q - Quarter, as in 1, 2, 3, 4 
-	r - RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200" 
-	s - seconds; i.e. "00" to "59" 
-	S - English ordinal suffix for the day of the month, 2 characters; 
-	   			i.e. "st", "nd", "rd" or "th" 
-	t - number of days in the given month; i.e. "28" to "31"
-	T - Timezone setting of this machine; e.g. "EST" or "MDT" 
-	U - seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)  
-	w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) 
-	Y - year, 4 digits; e.g. "1999" 
-	y - year, 2 digits; e.g. "99" 
-	z - day of the year; i.e. "0" to "365" 
-	Z - timezone offset in seconds (i.e. "-43200" to "43200"). 
-	   			The offset for timezones west of UTC is always negative, 
-				and for those east of UTC is always positive. 
-</pre>
-
-Unsupported:
-<pre>
-	B - Swatch Internet time 
-	I (capital i) - "1" if Daylight Savings Time, "0" otherwise.
-	W - ISO-8601 week number of year, weeks starting on Monday 
-
-</pre>
-
-
-** FUNCTION adodb_date2($fmt, $isoDateString = false)
-Same as adodb_date, but 2nd parameter accepts iso date, eg.
-
-  adodb_date2('d-M-Y H:i','2003-12-25 13:01:34');
-
-  
-** FUNCTION adodb_gmdate($fmt, $timestamp = false)
-
-Convert a timestamp to a formatted GMT date. If $timestamp is not defined, the
-current timestamp is used. Unlike the function date(), it supports dates
-outside the 1901 to 2038 range.
-
-
-** FUNCTION adodb_mktime($hr, $min, $sec[, $month, $day, $year])
-
-Converts a local date to a unix timestamp.  Unlike the function mktime(), it supports
-dates outside the 1901 to 2038 range. All parameters are optional.
-
-
-** FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year])
-
-Converts a gmt date to a unix timestamp.  Unlike the function gmmktime(), it supports
-dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters
-are currently compulsory.
-
-** FUNCTION adodb_gmstrftime($fmt, $timestamp = false)
-Convert a timestamp to a formatted GMT date.
-
-** FUNCTION adodb_strftime($fmt, $timestamp = false)
-
-Convert a timestamp to a formatted local date. Internally converts $fmt into 
-adodb_date format, then echo result.
-
-For best results, you can define the local date format yourself. Define a global
-variable $ADODB_DATE_LOCALE which is an array, 1st element is date format using
-adodb_date syntax, and 2nd element is the time format, also in adodb_date syntax.
-
-    eg. $ADODB_DATE_LOCALE = array('d/m/Y','H:i:s');
-	
-	Supported format codes:
-
-<pre>
-	%a - abbreviated weekday name according to the current locale 
-	%A - full weekday name according to the current locale 
-	%b - abbreviated month name according to the current locale 
-	%B - full month name according to the current locale 
-	%c - preferred date and time representation for the current locale 
-	%d - day of the month as a decimal number (range 01 to 31) 
-	%D - same as %m/%d/%y 
-	%e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31') 
-	%h - same as %b
-	%H - hour as a decimal number using a 24-hour clock (range 00 to 23) 
-	%I - hour as a decimal number using a 12-hour clock (range 01 to 12) 
-	%m - month as a decimal number (range 01 to 12) 
-	%M - minute as a decimal number 
-	%n - newline character 
-	%p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale 
-	%r - time in a.m. and p.m. notation 
-	%R - time in 24 hour notation 
-	%S - second as a decimal number 
-	%t - tab character 
-	%T - current time, equal to %H:%M:%S 
-	%x - preferred date representation for the current locale without the time 
-	%X - preferred time representation for the current locale without the date 
-	%y - year as a decimal number without a century (range 00 to 99) 
-	%Y - year as a decimal number including the century 
-	%Z - time zone or name or abbreviation 
-	%% - a literal `%' character 
-</pre>	
-
-	Unsupported codes:
-<pre>
-	%C - century number (the year divided by 100 and truncated to an integer, range 00 to 99) 
-	%g - like %G, but without the century. 
-	%G - The 4-digit year corresponding to the ISO week number (see %V). 
-	     This has the same format and value as %Y, except that if the ISO week number belongs 
-		 to the previous or next year, that year is used instead. 
-	%j - day of the year as a decimal number (range 001 to 366) 
-	%u - weekday as a decimal number [1,7], with 1 representing Monday 
-	%U - week number of the current year as a decimal number, starting 
-	    with the first Sunday as the first day of the first week 
-	%V - The ISO 8601:1988 week number of the current year as a decimal number, 
-	     range 01 to 53, where week 1 is the first week that has at least 4 days in the 
-		 current year, and with Monday as the first day of the week. (Use %G or %g for 
-		 the year component that corresponds to the week number for the specified timestamp.) 
-	%w - day of the week as a decimal, Sunday being 0 
-	%W - week number of the current year as a decimal number, starting with the 
-	     first Monday as the first day of the first week 
-</pre>
-
-=============================================================================
-
-NOTES
-
-Useful url for generating test timestamps:
-	http://www.4webhelp.net/us/timestamp.php
-
-Possible future optimizations include 
-
-a. Using an algorithm similar to Plauger's in "The Standard C Library" 
-(page 428, xttotm.c _Ttotm() function). Plauger's algorithm will not 
-work outside 32-bit signed range, so i decided not to implement it.
-
-b. Implement daylight savings, which looks awfully complicated, see
-	http://webexhibits.org/daylightsaving/
-
-
-CHANGELOG
-
-- 18 July  2005  0.21
-- In PHP 4.3.11, the 'r' format has changed. Leading 0 in day is added. Changed for compat.
-- Added support for negative months in adodb_mktime().
-
-- 24 Feb 2005 0.20
-Added limited strftime/gmstrftime support. x10 improvement in performance of adodb_date().
-
-- 21 Dec 2004 0.17
-In adodb_getdate(), the timestamp was accidentally converted to gmt when $is_gmt is false. 
-Also adodb_mktime(0,0,0) did not work properly. Both fixed thx Mauro.
-
-- 17 Nov 2004 0.16
-Removed intval typecast in adodb_mktime() for secs, allowing:
-	 adodb_mktime(0,0,0 + 2236672153,1,1,1934);
-Suggested by Ryan.
-
-- 18 July 2004 0.15
-All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. 
-This brings it more in line with mktime (still not identical).
-
-- 23 June 2004 0.14
-
-Allow you to define your own daylights savings function, adodb_daylight_sv.
-If the function is defined (somewhere in an include), then you can correct for daylights savings.
-
-In this example, we apply daylights savings in June or July, adding one hour. This is extremely
-unrealistic as it does not take into account time-zone, geographic location, current year.
-
-function adodb_daylight_sv(&$arr, $is_gmt)
-{
-	if ($is_gmt) return;
-	$m = $arr['mon'];
-	if ($m == 6 || $m == 7) $arr['hours'] += 1;
-}
-
-This is only called by adodb_date() and not by adodb_mktime(). 
-
-The format of $arr is
-Array ( 
-   [seconds] => 0 
-   [minutes] => 0 
-   [hours] => 0 
-   [mday] => 1      # day of month, eg 1st day of the month
-   [mon] => 2       # month (eg. Feb)
-   [year] => 2102 
-   [yday] => 31     # days in current year
-   [leap] =>        # true if leap year
-   [ndays] => 28    # no of days in current month
-   ) 
-   
-
-- 28 Apr 2004 0.13
-Fixed adodb_date to properly support $is_gmt. Thx to Dimitar Angelov.
-
-- 20 Mar 2004 0.12
-Fixed month calculation error in adodb_date. 2102-June-01 appeared as 2102-May-32.
-
-- 26 Oct 2003 0.11
-Because of daylight savings problems (some systems apply daylight savings to 
-January!!!), changed adodb_get_gmt_diff() to ignore daylight savings.
-
-- 9 Aug 2003 0.10
-Fixed bug with dates after 2038. 
-See http://phplens.com/lens/lensforum/msgs.php?id=6980
-
-- 1 July 2003 0.09
-Added support for Q (Quarter).
-Added adodb_date2(), which accepts ISO date in 2nd param
-
-- 3 March 2003 0.08
-Added support for 'S' adodb_date() format char. Added constant ADODB_ALLOW_NEGATIVE_TS
-if you want PHP to handle negative timestamps between 1901 to 1969.
-
-- 27 Feb 2003 0.07
-All negative numbers handled by adodb now because of RH 7.3+ problems.
-See http://bugs.php.net/bug.php?id=20048&edit=2
-
-- 4 Feb 2003 0.06
-Fixed a typo, 1852 changed to 1582! This means that pre-1852 dates
-are now correctly handled.
-
-- 29 Jan 2003 0.05
-
-Leap year checking differs under Julian calendar (pre 1582). Also
-leap year code optimized by checking for most common case first.
-
-We also handle month overflow correctly in mktime (eg month set to 13).
-
-Day overflow for less than one month's days is supported.
-
-- 28 Jan 2003 0.04
-
-Gregorian correction handled. In PHP5, we might throw an error if 
-mktime uses invalid dates around 5-14 Oct 1582. Released with ADOdb 3.10.
-Added limbo 5-14 Oct 1582 check, when we set to 15 Oct 1582.
-
-- 27 Jan 2003 0.03
-
-Fixed some more month problems due to gmt issues. Added constant ADODB_DATE_VERSION.
-Fixed calculation of days since start of year for <1970. 
-
-- 27 Jan 2003 0.02
-
-Changed _adodb_getdate() to inline leap year checking for better performance.
-Fixed problem with time-zones west of GMT +0000.
-
-- 24 Jan 2003 0.01
-
-First implementation.
-*/
-
-
-/* Initialization */
-
-/*
-	Version Number
-*/
-define('ADODB_DATE_VERSION',0.21);
-
-/*
-	This code was originally for windows. But apparently this problem happens 
-	also with Linux, RH 7.3 and later!
-	
-	glibc-2.2.5-34 and greater has been changed to return -1 for dates <
-	1970.  This used to work.  The problem exists with RedHat 7.3 and 8.0
-	echo (mktime(0, 0, 0, 1, 1, 1960));  // prints -1
-	
-	References:
-	 http://bugs.php.net/bug.php?id=20048&edit=2
-	 http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html
-*/
-
-if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1);
-
-function adodb_date_test_date($y1,$m,$d=13)
-{
-	$t = adodb_mktime(0,0,0,$m,$d,$y1);
-	$rez = adodb_date('Y-n-j H:i:s',$t);
-	if ("$y1-$m-$d 00:00:00" != $rez) {
-		print "<b>$y1 error, expected=$y1-$m-$d 00:00:00, adodb=$rez</b><br>";
-		return false;
-	}
-	return true;
-}
-
-function adodb_date_test_strftime($fmt)
-{
-	$s1 = strftime($fmt);
-	$s2 = adodb_strftime($fmt);
-	
-	if ($s1 == $s2) return true;
-	
-	echo "error for $fmt,  strftime=$s1, $adodb=$s2<br>";
-	return false;
-}
-
-/**
-	 Test Suite
-*/
-function adodb_date_test()
-{
-	
-	error_reporting(E_ALL);
-	print "<h4>Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION.' PHP='.PHP_VERSION."</h4>";
-	@set_time_limit(0);
-	$fail = false;
-	
-	// This flag disables calling of PHP native functions, so we can properly test the code
-	if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1);
-	
-	adodb_date_test_strftime('%Y %m %x %X');
-	adodb_date_test_strftime("%A %d %B %Y");
-	adodb_date_test_strftime("%H %M S");
-	
-	$t = adodb_mktime(0,0,0);
-	if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'<br>';
-	
-	$t = adodb_mktime(0,0,0,6,1,2102);
-	if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
-	
-	$t = adodb_mktime(0,0,0,2,1,2102);
-	if (!(adodb_date('Y-m-d',$t) == '2102-02-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
-	
-	
-	print "<p>Testing gregorian <=> julian conversion<p>";
-	$t = adodb_mktime(0,0,0,10,11,1492);
-	//http://www.holidayorigins.com/html/columbus_day.html - Friday check
-	if (!(adodb_date('D Y-m-d',$t) == 'Fri 1492-10-11')) print 'Error in Columbus landing<br>';
-	
-	$t = adodb_mktime(0,0,0,2,29,1500);
-	if (!(adodb_date('Y-m-d',$t) == '1500-02-29')) print 'Error in julian leap years<br>';
-	
-	$t = adodb_mktime(0,0,0,2,29,1700);
-	if (!(adodb_date('Y-m-d',$t) == '1700-03-01')) print 'Error in gregorian leap years<br>';
-	
-	print  adodb_mktime(0,0,0,10,4,1582).' ';
-	print adodb_mktime(0,0,0,10,15,1582);
-	$diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582));
-	if ($diff != 3600*24) print " <b>Error in gregorian correction = ".($diff/3600/24)." days </b><br>";
-		
-	print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : '<b>Error</b>')."<br>";
-	print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : '<b>Error</b>')."<br>";
-	
-	print "<p>Testing overflow<p>";
-	
-	$t = adodb_mktime(0,0,0,3,33,1965);
-	if (!(adodb_date('Y-m-d',$t) == '1965-04-02')) print 'Error in day overflow 1 <br>';
-	$t = adodb_mktime(0,0,0,4,33,1971);
-	if (!(adodb_date('Y-m-d',$t) == '1971-05-03')) print 'Error in day overflow 2 <br>';
-	$t = adodb_mktime(0,0,0,1,60,1965);
-	if (!(adodb_date('Y-m-d',$t) == '1965-03-01')) print 'Error in day overflow 3 '.adodb_date('Y-m-d',$t).' <br>';
-	$t = adodb_mktime(0,0,0,12,32,1965);
-	if (!(adodb_date('Y-m-d',$t) == '1966-01-01')) print 'Error in day overflow 4 '.adodb_date('Y-m-d',$t).' <br>';
-	$t = adodb_mktime(0,0,0,12,63,1965);
-	if (!(adodb_date('Y-m-d',$t) == '1966-02-01')) print 'Error in day overflow 5 '.adodb_date('Y-m-d',$t).' <br>';
-	$t = adodb_mktime(0,0,0,13,3,1965);
-	if (!(adodb_date('Y-m-d',$t) == '1966-01-03')) print 'Error in mth overflow 1 <br>';
-	
-	print "Testing 2-digit => 4-digit year conversion<p>";
-	if (adodb_year_digit_check(00) != 2000) print "Err 2-digit 2000<br>";
-	if (adodb_year_digit_check(10) != 2010) print "Err 2-digit 2010<br>";
-	if (adodb_year_digit_check(20) != 2020) print "Err 2-digit 2020<br>";
-	if (adodb_year_digit_check(30) != 2030) print "Err 2-digit 2030<br>";
-	if (adodb_year_digit_check(40) != 1940) print "Err 2-digit 1940<br>";
-	if (adodb_year_digit_check(50) != 1950) print "Err 2-digit 1950<br>";
-	if (adodb_year_digit_check(90) != 1990) print "Err 2-digit 1990<br>";
-	
-	// Test string formating
-	print "<p>Testing date formating</p>";
-	$fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C822 r s t U w y Y z Z 2003';
-	$s1 = date($fmt,0);
-	$s2 = adodb_date($fmt,0);
-	if ($s1 != $s2) {
-		print " date() 0 failed<br>$s1<br>$s2<br>";
-	}
-	flush();
-	for ($i=100; --$i > 0; ) {
-
-		$ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000);
-		$s1 = date($fmt,$ts);
-		$s2 = adodb_date($fmt,$ts);
-		//print "$s1 <br>$s2 <p>";
-		$pos = strcmp($s1,$s2);
-
-		if (($s1) != ($s2)) {
-			for ($j=0,$k=strlen($s1); $j < $k; $j++) {
-				if ($s1[$j] != $s2[$j]) {
-					print substr($s1,$j).' ';
-					break;
-				}
-			}
-			print "<b>Error date(): $ts<br><pre> 
-&nbsp; \"$s1\" (date len=".strlen($s1).")
-&nbsp; \"$s2\" (adodb_date len=".strlen($s2).")</b></pre><br>";
-			$fail = true;
-		}
-		
-		$a1 = getdate($ts);
-		$a2 = adodb_getdate($ts);
-		$rez = array_diff($a1,$a2);
-		if (sizeof($rez)>0) {
-			print "<b>Error getdate() $ts</b><br>";
-				print_r($a1);
-			print "<br>";
-				print_r($a2);
-			print "<p>";
-			$fail = true;
-		}
-	}
-	
-	// Test generation of dates outside 1901-2038
-	print "<p>Testing random dates between 100 and 4000</p>";
-	adodb_date_test_date(100,1);
-	for ($i=100; --$i >= 0;) {
-		$y1 = 100+rand(0,1970-100);
-		$m = rand(1,12);
-		adodb_date_test_date($y1,$m);
-		
-		$y1 = 3000-rand(0,3000-1970);
-		adodb_date_test_date($y1,$m);
-	}
-	print '<p>';
-	$start = 1960+rand(0,10);
-	$yrs = 12;
-	$i = 365.25*86400*($start-1970);
-	$offset = 36000+rand(10000,60000);
-	$max = 365*$yrs*86400;
-	$lastyear = 0;
-	
-	// we generate a timestamp, convert it to a date, and convert it back to a timestamp
-	// and check if the roundtrip broke the original timestamp value.
-	print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: ";
-	$cnt = 0;
-	for ($max += $i; $i < $max; $i += $offset) {
-		$ret = adodb_date('m,d,Y,H,i,s',$i);
-		$arr = explode(',',$ret);
-		if ($lastyear != $arr[2]) {
-			$lastyear = $arr[2];
-			print " $lastyear ";
-			flush();
-		}
-		$newi = adodb_mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]);
-		if ($i != $newi) {
-			print "Error at $i, adodb_mktime returned $newi ($ret)";
-			$fail = true;
-			break;
-		}
-		$cnt += 1;
-	}
-	echo "Tested $cnt dates<br>";
-	if (!$fail) print "<p>Passed !</p>";
-	else print "<p><b>Failed</b> :-(</p>";
-}
-
-/**
-	Returns day of week, 0 = Sunday,... 6=Saturday. 
-	Algorithm from PEAR::Date_Calc
-*/
-function adodb_dow($year, $month, $day)
-{
-/*
-Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and 
-proclaimed that from that time onwards 3 days would be dropped from the calendar 
-every 400 years.
-
-Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). 
-*/
-	if ($year <= 1582) {
-		if ($year < 1582 || 
-			($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3;
-		 else
-			$greg_correction = 0;
-	} else
-		$greg_correction = 0;
-	
-	if($month > 2)
-	    $month -= 2;
-	else {
-	    $month += 10;
-	    $year--;
-	}
-	
-	$day =  floor((13 * $month - 1) / 5) +
-	        $day + ($year % 100) +
-	        floor(($year % 100) / 4) +
-	        floor(($year / 100) / 4) - 2 *
-	        floor($year / 100) + 77 + $greg_correction;
-	
-	return $day - 7 * floor($day / 7);
-}
-
-
-/**
- Checks for leap year, returns true if it is. No 2-digit year check. Also 
- handles julian calendar correctly.
-*/
-function _adodb_is_leap_year($year) 
-{
-	if ($year % 4 != 0) return false;
-	
-	if ($year % 400 == 0) {
-		return true;
-	// if gregorian calendar (>1582), century not-divisible by 400 is not leap
-	} else if ($year > 1582 && $year % 100 == 0 ) {
-		return false;
-	} 
-	
-	return true;
-}
-
-
-/**
- checks for leap year, returns true if it is. Has 2-digit year check
-*/
-function adodb_is_leap_year($year) 
-{
-	return  _adodb_is_leap_year(adodb_year_digit_check($year));
-}
-
-/**
-	Fix 2-digit years. Works for any century.
- 	Assumes that if 2-digit is more than 30 years in future, then previous century.
-*/
-function adodb_year_digit_check($y) 
-{
-	if ($y < 100) {
-	
-		$yr = (integer) date("Y");
-		$century = (integer) ($yr /100);
-		
-		if ($yr%100 > 50) {
-			$c1 = $century + 1;
-			$c0 = $century;
-		} else {
-			$c1 = $century;
-			$c0 = $century - 1;
-		}
-		$c1 *= 100;
-		// if 2-digit year is less than 30 years in future, set it to this century
-		// otherwise if more than 30 years in future, then we set 2-digit year to the prev century.
-		if (($y + $c1) < $yr+30) $y = $y + $c1;
-		else $y = $y + $c0*100;
-	}
-	return $y;
-}
-
-/**
- get local time zone offset from GMT
-*/
-function adodb_get_gmt_diff() 
-{
-static $TZ;
-	if (isset($TZ)) return $TZ;
-	
-//	$TZ = mktime(0,0,0,1,2,1970,0) - gmmktime(0,0,0,1,2,1970,0);
-// LDR Fix To avoid warning on PHP 5.1
-	$TZ = mktime(0,0,0,1,2,1970) - gmmktime(0,0,0,1,2,1970);
-	return $TZ;
-}
-
-/**
-	Returns an array with date info.
-*/
-function adodb_getdate($d=false,$fast=false)
-{
-	if ($d === false) return getdate();
-	if (!defined('ADODB_TEST_DATES')) {
-		if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
-			if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer
-				return @getdate($d);
-		}
-	}
-	return _adodb_getdate($d);
-}
-
-/*
-// generate $YRS table for _adodb_getdate()
-function adodb_date_gentable($out=true)
-{
-
-	for ($i=1970; $i >= 1600; $i-=10) {
-		$s = adodb_gmmktime(0,0,0,1,1,$i);
-		echo "$i => $s,<br>";	
-	}
-}
-adodb_date_gentable();
-
-for ($i=1970; $i > 1500; $i--) {
-
-echo "<hr>$i ";
-	adodb_date_test_date($i,1,1);
-}
-
-*/
-
-/**
-	Low-level function that returns the getdate() array. We have a special
-	$fast flag, which if set to true, will return fewer array values,
-	and is much faster as it does not calculate dow, etc.
-*/
-function _adodb_getdate($origd=false,$fast=false,$is_gmt=false)
-{
-static $YRS;
-
-	$d =  $origd - ($is_gmt ? 0 : adodb_get_gmt_diff());
-	
-	$_day_power = 86400;
-	$_hour_power = 3600;
-	$_min_power = 60;
-	
-	if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction 
-	
-	$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31);
-	$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31);
-	
-	$d366 = $_day_power * 366;
-	$d365 = $_day_power * 365;
-	
-	if ($d < 0) {
-		
-		if (empty($YRS)) $YRS = array(
-			1970 => 0,
-			1960 => -315619200,
-			1950 => -631152000,
-			1940 => -946771200,
-			1930 => -1262304000,
-			1920 => -1577923200,
-			1910 => -1893456000,
-			1900 => -2208988800,
-			1890 => -2524521600,
-			1880 => -2840140800,
-			1870 => -3155673600,
-			1860 => -3471292800,
-			1850 => -3786825600,
-			1840 => -4102444800,
-			1830 => -4417977600,
-			1820 => -4733596800,
-			1810 => -5049129600,
-			1800 => -5364662400,
-			1790 => -5680195200,
-			1780 => -5995814400,
-			1770 => -6311347200,
-			1760 => -6626966400,
-			1750 => -6942499200,
-			1740 => -7258118400,
-			1730 => -7573651200,
-			1720 => -7889270400,
-			1710 => -8204803200,
-			1700 => -8520336000,
-			1690 => -8835868800,
-			1680 => -9151488000,
-			1670 => -9467020800,
-			1660 => -9782640000,
-			1650 => -10098172800,
-			1640 => -10413792000,
-			1630 => -10729324800,
-			1620 => -11044944000,
-			1610 => -11360476800,
-			1600 => -11676096000);
-
-		if ($is_gmt) $origd = $d;
-		// The valid range of a 32bit signed timestamp is typically from 
-		// Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT
-		//
-		
-		# old algorithm iterates through all years. new algorithm does it in
-		# 10 year blocks
-		
-		/*
-		# old algo
-		for ($a = 1970 ; --$a >= 0;) {
-			$lastd = $d;
-			
-			if ($leaf = _adodb_is_leap_year($a)) $d += $d366;
-			else $d += $d365;
-			
-			if ($d >= 0) {
-				$year = $a;
-				break;
-			}
-		}
-		*/
-		
-		$lastsecs = 0;
-		$lastyear = 1970;
-		foreach($YRS as $year => $secs) {
-			if ($d >= $secs) {
-				$a = $lastyear;
-				break;
-			}
-			$lastsecs = $secs;
-			$lastyear = $year;
-		}
-		
-		$d -= $lastsecs;
-		if (!isset($a)) $a = $lastyear;
-		
-		//echo ' yr=',$a,' ', $d,'.';
-		
-		for (; --$a >= 0;) {
-			$lastd = $d;
-			
-			if ($leaf = _adodb_is_leap_year($a)) $d += $d366;
-			else $d += $d365;
-			
-			if ($d >= 0) {
-				$year = $a;
-				break;
-			}
-		}
-		/**/
-		
-		$secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd;
-		
-		$d = $lastd;
-		$mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal;
-		for ($a = 13 ; --$a > 0;) {
-			$lastd = $d;
-			$d += $mtab[$a] * $_day_power;
-			if ($d >= 0) {
-				$month = $a;
-				$ndays = $mtab[$a];
-				break;
-			}
-		}
-		
-		$d = $lastd;
-		$day = $ndays + ceil(($d+1) / ($_day_power));
-
-		$d += ($ndays - $day+1)* $_day_power;
-		$hour = floor($d/$_hour_power);
-	
-	} else {
-		for ($a = 1970 ;; $a++) {
-			$lastd = $d;
-			
-			if ($leaf = _adodb_is_leap_year($a)) $d -= $d366;
-			else $d -= $d365;
-			if ($d < 0) {
-				$year = $a;
-				break;
-			}
-		}
-		$secsInYear = $lastd;
-		$d = $lastd;
-		$mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal;
-		for ($a = 1 ; $a <= 12; $a++) {
-			$lastd = $d;
-			$d -= $mtab[$a] * $_day_power;
-			if ($d < 0) {
-				$month = $a;
-				$ndays = $mtab[$a];
-				break;
-			}
-		}
-		$d = $lastd;
-		$day = ceil(($d+1) / $_day_power);
-		$d = $d - ($day-1) * $_day_power;
-		$hour = floor($d /$_hour_power);
-	}
-	
-	$d -= $hour * $_hour_power;
-	$min = floor($d/$_min_power);
-	$secs = $d - $min * $_min_power;
-	if ($fast) {
-		return array(
-		'seconds' => $secs,
-		'minutes' => $min,
-		'hours' => $hour,
-		'mday' => $day,
-		'mon' => $month,
-		'year' => $year,
-		'yday' => floor($secsInYear/$_day_power),
-		'leap' => $leaf,
-		'ndays' => $ndays
-		);
-	}
-	
-	
-	$dow = adodb_dow($year,$month,$day);
-
-	return array(
-		'seconds' => $secs,
-		'minutes' => $min,
-		'hours' => $hour,
-		'mday' => $day,
-		'wday' => $dow,
-		'mon' => $month,
-		'year' => $year,
-		'yday' => floor($secsInYear/$_day_power),
-		'weekday' => gmdate('l',$_day_power*(3+$dow)),
-		'month' => gmdate('F',mktime(0,0,0,$month,2,1971)),
-		0 => $origd
-	);
-}
-
-function adodb_gmdate($fmt,$d=false)
-{
-	return adodb_date($fmt,$d,true);
-}
-
-// accepts unix timestamp and iso date format in $d
-function adodb_date2($fmt, $d=false, $is_gmt=false)
-{
-	if ($d !== false) {
-		if (!preg_match( 
-			"|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", 
-			($d), $rr)) return adodb_date($fmt,false,$is_gmt);
-
-		if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt);
-	
-		// h-m-s-MM-DD-YY
-		if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]);
-		else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]);
-	}
-	
-	return adodb_date($fmt,$d,$is_gmt);
-}
-
-
-/**
-	Return formatted date based on timestamp $d
-*/
-function adodb_date($fmt,$d=false,$is_gmt=false)
-{
-static $daylight;
-
-	if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt);
-	if (!defined('ADODB_TEST_DATES')) {
-		if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
-			if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer
-				return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d);
-
-		}
-	}
-	$_day_power = 86400;
-	
-	$arr = _adodb_getdate($d,true,$is_gmt);
-	
-	if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv');
-	if ($daylight) adodb_daylight_sv($arr, $is_gmt);
-	
-	$year = $arr['year'];
-	$month = $arr['mon'];
-	$day = $arr['mday'];
-	$hour = $arr['hours'];
-	$min = $arr['minutes'];
-	$secs = $arr['seconds'];
-	
-	$max = strlen($fmt);
-	$dates = '';
-	
-	/*
-		at this point, we have the following integer vars to manipulate:
-		$year, $month, $day, $hour, $min, $secs
-	*/
-	for ($i=0; $i < $max; $i++) {
-		switch($fmt[$i]) {
-		case 'T': $dates .= date('T');break;
-		// YEAR
-		case 'L': $dates .= $arr['leap'] ? '1' : '0'; break;
-		case 'r': // Thu, 21 Dec 2000 16:01:07 +0200
-		
-			// 4.3.11 uses '04 Jun 2004'
-			// 4.3.8 uses  ' 4 Jun 2004'
-			$dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', '		
-				. ($day<10?'0'.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' ';
-			
-			if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; 
-			
-			if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min;
-			
-			if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs;
-			
-			$gmt = adodb_get_gmt_diff();
-			$dates .= sprintf(' %s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break;
-				
-		case 'Y': $dates .= $year; break;
-		case 'y': $dates .= substr($year,strlen($year)-2,2); break;
-		// MONTH
-		case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break;
-		case 'Q': $dates .= ($month+3)>>2; break;
-		case 'n': $dates .= $month; break;
-		case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break;
-		case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break;
-		// DAY
-		case 't': $dates .= $arr['ndays']; break;
-		case 'z': $dates .= $arr['yday']; break;
-		case 'w': $dates .= adodb_dow($year,$month,$day); break;
-		case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break;
-		case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break;
-		case 'j': $dates .= $day; break;
-		case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break;
-		case 'S': 
-			$d10 = $day % 10;
-			if ($d10 == 1) $dates .= 'st';
-			else if ($d10 == 2 && $day != 12) $dates .= 'nd';
-			else if ($d10 == 3) $dates .= 'rd';
-			else $dates .= 'th';
-			break;
-			
-		// HOUR
-		case 'Z':
-			$dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff(); break;
-		case 'O': 
-			$gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff();
-			$dates .= sprintf('%s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break;
-			
-		case 'H': 
-			if ($hour < 10) $dates .= '0'.$hour; 
-			else $dates .= $hour; 
-			break;
-		case 'h': 
-			if ($hour > 12) $hh = $hour - 12; 
-			else {
-				if ($hour == 0) $hh = '12'; 
-				else $hh = $hour;
-			}
-			
-			if ($hh < 10) $dates .= '0'.$hh;
-			else $dates .= $hh;
-			break;
-			
-		case 'G': 
-			$dates .= $hour;
-			break;
-			
-		case 'g':
-			if ($hour > 12) $hh = $hour - 12; 
-			else {
-				if ($hour == 0) $hh = '12'; 
-				else $hh = $hour; 
-			}
-			$dates .= $hh;
-			break;
-		// MINUTES
-		case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break;
-		// SECONDS
-		case 'U': $dates .= $d; break;
-		case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break;
-		// AM/PM
-		// Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
-		case 'a':
-			if ($hour>=12) $dates .= 'pm';
-			else $dates .= 'am';
-			break;
-		case 'A':
-			if ($hour>=12) $dates .= 'PM';
-			else $dates .= 'AM';
-			break;
-		default:
-			$dates .= $fmt[$i]; break;
-		// ESCAPE
-		case "\\": 
-			$i++;
-			if ($i < $max) $dates .= $fmt[$i];
-			break;
-		}
-	}
-	return $dates;
-}
-
-/**
-	Returns a timestamp given a GMT/UTC time. 
-	Note that $is_dst is not implemented and is ignored.
-*/
-function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false)
-{
-	return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true);
-}
-
-/**
-	Return a timestamp given a local time. Originally by jackbbs.
-	Note that $is_dst is not implemented and is ignored.
-	
-	Not a very fast algorithm - O(n) operation. Could be optimized to O(1).
-*/
-function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) 
-{
-	if (!defined('ADODB_TEST_DATES')) {
-
-		if ($mon === false) {
-			return $is_gmt? @gmmktime($hr,$min,$sec): @mktime($hr,$min,$sec);
-		}
-		
-		// for windows, we don't check 1970 because with timezone differences, 
-		// 1 Jan 1970 could generate negative timestamp, which is illegal
-		if (1971 < $year && $year < 2038
-			|| !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038)
-			) {
-				return $is_gmt ?
-					@gmmktime($hr,$min,$sec,$mon,$day,$year):
-					@mktime($hr,$min,$sec,$mon,$day,$year);
-			}
-	}
-	
-	$gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff();
-
-	/*
-	# disabled because some people place large values in $sec.
-	# however we need it for $mon because we use an array...
-	$hr = intval($hr);
-	$min = intval($min);
-	$sec = intval($sec);
-	*/
-	$mon = intval($mon);
-	$day = intval($day);
-	$year = intval($year);
-	
-	
-	$year = adodb_year_digit_check($year);
-
-	if ($mon > 12) {
-		$y = floor($mon / 12);
-		$year += $y;
-		$mon -= $y*12;
-	} else if ($mon < 1) {
-		$y = ceil((1-$mon) / 12);
-		$year -= $y;
-		$mon += $y*12;
-	}
-	
-	$_day_power = 86400;
-	$_hour_power = 3600;
-	$_min_power = 60;
-	
-	$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31);
-	$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31);
-	
-	$_total_date = 0;
-	if ($year >= 1970) {
-		for ($a = 1970 ; $a <= $year; $a++) {
-			$leaf = _adodb_is_leap_year($a);
-			if ($leaf == true) {
-				$loop_table = $_month_table_leaf;
-				$_add_date = 366;
-			} else {
-				$loop_table = $_month_table_normal;
-				$_add_date = 365;
-			}
-			if ($a < $year) { 
-				$_total_date += $_add_date;
-			} else {
-				for($b=1;$b<$mon;$b++) {
-					$_total_date += $loop_table[$b];
-				}
-			}
-		}
-		$_total_date +=$day-1;
-		$ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different;
-	
-	} else {
-		for ($a = 1969 ; $a >= $year; $a--) {
-			$leaf = _adodb_is_leap_year($a);
-			if ($leaf == true) {
-				$loop_table = $_month_table_leaf;
-				$_add_date = 366;
-			} else {
-				$loop_table = $_month_table_normal;
-				$_add_date = 365;
-			}
-			if ($a > $year) { $_total_date += $_add_date;
-			} else {
-				for($b=12;$b>$mon;$b--) {
-					$_total_date += $loop_table[$b];
-				}
-			}
-		}
-		$_total_date += $loop_table[$mon] - $day;
-		
-		$_day_time = $hr * $_hour_power + $min * $_min_power + $sec;
-		$_day_time = $_day_power - $_day_time;
-		$ret = -( $_total_date * $_day_power + $_day_time - $gmt_different);
-		if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction
-		else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582.
-	} 
-	//print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret;
-	return $ret;
-}
-
-function adodb_gmstrftime($fmt, $ts=false)
-{
-	return adodb_strftime($fmt,$ts,true);
-}
-
-// hack - convert to adodb_date
-function adodb_strftime($fmt, $ts=false,$is_gmt=false)
-{
-global $ADODB_DATE_LOCALE;
-
-	if (!defined('ADODB_TEST_DATES')) {
-		if ((abs($ts) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
-			if (!defined('ADODB_NO_NEGATIVE_TS') || $ts >= 0) // if windows, must be +ve integer
-				return ($is_gmt)? @gmstrftime($fmt,$ts): @strftime($fmt,$ts);
-
-		}
-	}
-
-	if (empty($ADODB_DATE_LOCALE)) {
-		$tstr = strtoupper(gmstrftime('%c',31366800)); // 30 Dec 1970, 1 am
-		$sep = substr($tstr,2,1);
-		$hasAM = strrpos($tstr,'M') !== false;
-		
-		$ADODB_DATE_LOCALE = array();
-		$ADODB_DATE_LOCALE[] =  strncmp($tstr,'30',2) == 0 ? 'd'.$sep.'m'.$sep.'y' : 'm'.$sep.'d'.$sep.'y';	
-		$ADODB_DATE_LOCALE[]  = ($hasAM) ? 'h:i:s a' : 'H:i:s';
-			
-	}
-	$inpct = false;
-	$fmtdate = '';
-	for ($i=0,$max = strlen($fmt); $i < $max; $i++) {
-		$ch = $fmt[$i];
-		if ($ch == '%') {
-			if ($inpct) {
-				$fmtdate .= '%';
-				$inpct = false;
-			} else
-				$inpct = true;
-		} else if ($inpct) {
-		
-			$inpct = false;
-			switch($ch) {
-			case '0':
-			case '1':
-			case '2':
-			case '3':
-			case '4':
-			case '5':
-			case '6':
-			case '7':
-			case '8':
-			case '9':
-			case 'E':
-			case 'O':
-				/* ignore format modifiers */
-				$inpct = true; 
-				break;
-				
-			case 'a': $fmtdate .= 'D'; break;
-			case 'A': $fmtdate .= 'l'; break;
-			case 'h':
-			case 'b': $fmtdate .= 'M'; break;
-			case 'B': $fmtdate .= 'F'; break;
-			case 'c': $fmtdate .= $ADODB_DATE_LOCALE[0].$ADODB_DATE_LOCALE[1]; break;
-			case 'C': $fmtdate .= '\C?'; break; // century
-			case 'd': $fmtdate .= 'd'; break;
-			case 'D': $fmtdate .= 'm/d/y'; break;
-			case 'e': $fmtdate .= 'j'; break;
-			case 'g': $fmtdate .= '\g?'; break; //?
-			case 'G': $fmtdate .= '\G?'; break; //?
-			case 'H': $fmtdate .= 'H'; break;
-			case 'I': $fmtdate .= 'h'; break;
-			case 'j': $fmtdate .= '?z'; $parsej = true; break; // wrong as j=1-based, z=0-basd
-			case 'm': $fmtdate .= 'm'; break;
-			case 'M': $fmtdate .= 'i'; break;
-			case 'n': $fmtdate .= "\n"; break;
-			case 'p': $fmtdate .= 'a'; break;
-			case 'r': $fmtdate .= 'h:i:s a'; break;
-			case 'R': $fmtdate .= 'H:i:s'; break;
-			case 'S': $fmtdate .= 's'; break;
-			case 't': $fmtdate .= "\t"; break;
-			case 'T': $fmtdate .= 'H:i:s'; break;
-			case 'u': $fmtdate .= '?u'; $parseu = true; break; // wrong strftime=1-based, date=0-basde
-			case 'U': $fmtdate .= '?U'; $parseU = true; break;// wrong strftime=1-based, date=0-based
-			case 'x': $fmtdate .= $ADODB_DATE_LOCALE[0]; break;
-			case 'X': $fmtdate .= $ADODB_DATE_LOCALE[1]; break;
-			case 'w': $fmtdate .= '?w'; $parseu = true; break; // wrong strftime=1-based, date=0-basde
-			case 'W': $fmtdate .= '?W'; $parseU = true; break;// wrong strftime=1-based, date=0-based
-			case 'y': $fmtdate .= 'y'; break;
-			case 'Y': $fmtdate .= 'Y'; break;
-			case 'Z': $fmtdate .= 'T'; break;
-			}
-		} else if (('A' <= ($ch) && ($ch) <= 'Z' ) || ('a' <= ($ch) && ($ch) <= 'z' ))
-			$fmtdate .= "\\".$ch;
-		else
-			$fmtdate .= $ch;
-	}
-	//echo "fmt=",$fmtdate,"<br>";
-	if ($ts === false) $ts = time();
-	$ret = adodb_date($fmtdate, $ts, $is_gmt);
-	return $ret;
-}
-
-
+<?php
+/**
+ADOdb Date Library, part of the ADOdb abstraction library
+Download: http://php.weblogs.com/adodb_date_time_library
+
+PHP native date functions use integer timestamps for computations.
+Because of this, dates are restricted to the years 1901-2038 on Unix 
+and 1970-2038 on Windows due to integer overflow for dates beyond 
+those years. This library overcomes these limitations by replacing the 
+native function's signed integers (normally 32-bits) with PHP floating 
+point numbers (normally 64-bits).
+
+Dates from 100 A.D. to 3000 A.D. and later
+have been tested. The minimum is 100 A.D. as <100 will invoke the
+2 => 4 digit year conversion. The maximum is billions of years in the 
+future, but this is a theoretical limit as the computation of that year 
+would take too long with the current implementation of adodb_mktime().
+
+This library replaces native functions as follows:
+
+<pre>	
+	getdate()  with  adodb_getdate()
+	date()     with  adodb_date() 
+	gmdate()   with  adodb_gmdate()
+	mktime()   with  adodb_mktime()
+	gmmktime() with  adodb_gmmktime()
+	strftime() with  adodb_strftime()
+	strftime() with  adodb_gmstrftime()
+</pre>
+	
+The parameters are identical, except that adodb_date() accepts a subset
+of date()'s field formats. Mktime() will convert from local time to GMT, 
+and date() will convert from GMT to local time, but daylight savings is 
+not handled currently.
+
+This library is independant of the rest of ADOdb, and can be used
+as standalone code.
+
+PERFORMANCE
+
+For high speed, this library uses the native date functions where
+possible, and only switches to PHP code when the dates fall outside 
+the 32-bit signed integer range.
+
+GREGORIAN CORRECTION
+
+Pope Gregory shortened October of A.D. 1582 by ten days. Thursday, 
+October 4, 1582 (Julian) was followed immediately by Friday, October 15, 
+1582 (Gregorian). 
+
+Since 0.06, we handle this correctly, so:
+
+adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582) 
+	== 24 * 3600 (1 day)
+
+=============================================================================
+
+COPYRIGHT
+
+(c) 2003-2005 John Lim and released under BSD-style license except for code by 
+jackbbs, which includes adodb_mktime, adodb_get_gmt_diff, adodb_is_leap_year
+and originally found at http://www.php.net/manual/en/function.mktime.php
+
+=============================================================================
+
+BUG REPORTS
+
+These should be posted to the ADOdb forums at
+
+	http://phplens.com/lens/lensforum/topics.php?id=4
+
+=============================================================================
+
+FUNCTION DESCRIPTIONS
+
+
+** FUNCTION adodb_getdate($date=false)
+
+Returns an array containing date information, as getdate(), but supports
+dates greater than 1901 to 2038. The local date/time format is derived from a 
+heuristic the first time adodb_getdate is called. 
+	 
+	 
+** FUNCTION adodb_date($fmt, $timestamp = false)
+
+Convert a timestamp to a formatted local date. If $timestamp is not defined, the
+current timestamp is used. Unlike the function date(), it supports dates
+outside the 1901 to 2038 range.
+
+The format fields that adodb_date supports:
+
+<pre>
+	a - "am" or "pm" 
+	A - "AM" or "PM" 
+	d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" 
+	D - day of the week, textual, 3 letters; e.g. "Fri" 
+	F - month, textual, long; e.g. "January" 
+	g - hour, 12-hour format without leading zeros; i.e. "1" to "12" 
+	G - hour, 24-hour format without leading zeros; i.e. "0" to "23" 
+	h - hour, 12-hour format; i.e. "01" to "12" 
+	H - hour, 24-hour format; i.e. "00" to "23" 
+	i - minutes; i.e. "00" to "59" 
+	j - day of the month without leading zeros; i.e. "1" to "31" 
+	l (lowercase 'L') - day of the week, textual, long; e.g. "Friday"  
+	L - boolean for whether it is a leap year; i.e. "0" or "1" 
+	m - month; i.e. "01" to "12" 
+	M - month, textual, 3 letters; e.g. "Jan" 
+	n - month without leading zeros; i.e. "1" to "12" 
+	O - Difference to Greenwich time in hours; e.g. "+0200" 
+	Q - Quarter, as in 1, 2, 3, 4 
+	r - RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200" 
+	s - seconds; i.e. "00" to "59" 
+	S - English ordinal suffix for the day of the month, 2 characters; 
+	   			i.e. "st", "nd", "rd" or "th" 
+	t - number of days in the given month; i.e. "28" to "31"
+	T - Timezone setting of this machine; e.g. "EST" or "MDT" 
+	U - seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)  
+	w - day of the week, numeric, i.e. "0" (Sunday) to "6" (Saturday) 
+	Y - year, 4 digits; e.g. "1999" 
+	y - year, 2 digits; e.g. "99" 
+	z - day of the year; i.e. "0" to "365" 
+	Z - timezone offset in seconds (i.e. "-43200" to "43200"). 
+	   			The offset for timezones west of UTC is always negative, 
+				and for those east of UTC is always positive. 
+</pre>
+
+Unsupported:
+<pre>
+	B - Swatch Internet time 
+	I (capital i) - "1" if Daylight Savings Time, "0" otherwise.
+	W - ISO-8601 week number of year, weeks starting on Monday 
+
+</pre>
+
+
+** FUNCTION adodb_date2($fmt, $isoDateString = false)
+Same as adodb_date, but 2nd parameter accepts iso date, eg.
+
+  adodb_date2('d-M-Y H:i','2003-12-25 13:01:34');
+
+  
+** FUNCTION adodb_gmdate($fmt, $timestamp = false)
+
+Convert a timestamp to a formatted GMT date. If $timestamp is not defined, the
+current timestamp is used. Unlike the function date(), it supports dates
+outside the 1901 to 2038 range.
+
+
+** FUNCTION adodb_mktime($hr, $min, $sec[, $month, $day, $year])
+
+Converts a local date to a unix timestamp.  Unlike the function mktime(), it supports
+dates outside the 1901 to 2038 range. All parameters are optional.
+
+
+** FUNCTION adodb_gmmktime($hr, $min, $sec [, $month, $day, $year])
+
+Converts a gmt date to a unix timestamp.  Unlike the function gmmktime(), it supports
+dates outside the 1901 to 2038 range. Differs from gmmktime() in that all parameters
+are currently compulsory.
+
+** FUNCTION adodb_gmstrftime($fmt, $timestamp = false)
+Convert a timestamp to a formatted GMT date.
+
+** FUNCTION adodb_strftime($fmt, $timestamp = false)
+
+Convert a timestamp to a formatted local date. Internally converts $fmt into 
+adodb_date format, then echo result.
+
+For best results, you can define the local date format yourself. Define a global
+variable $ADODB_DATE_LOCALE which is an array, 1st element is date format using
+adodb_date syntax, and 2nd element is the time format, also in adodb_date syntax.
+
+    eg. $ADODB_DATE_LOCALE = array('d/m/Y','H:i:s');
+	
+	Supported format codes:
+
+<pre>
+	%a - abbreviated weekday name according to the current locale 
+	%A - full weekday name according to the current locale 
+	%b - abbreviated month name according to the current locale 
+	%B - full month name according to the current locale 
+	%c - preferred date and time representation for the current locale 
+	%d - day of the month as a decimal number (range 01 to 31) 
+	%D - same as %m/%d/%y 
+	%e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31') 
+	%h - same as %b
+	%H - hour as a decimal number using a 24-hour clock (range 00 to 23) 
+	%I - hour as a decimal number using a 12-hour clock (range 01 to 12) 
+	%m - month as a decimal number (range 01 to 12) 
+	%M - minute as a decimal number 
+	%n - newline character 
+	%p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale 
+	%r - time in a.m. and p.m. notation 
+	%R - time in 24 hour notation 
+	%S - second as a decimal number 
+	%t - tab character 
+	%T - current time, equal to %H:%M:%S 
+	%x - preferred date representation for the current locale without the time 
+	%X - preferred time representation for the current locale without the date 
+	%y - year as a decimal number without a century (range 00 to 99) 
+	%Y - year as a decimal number including the century 
+	%Z - time zone or name or abbreviation 
+	%% - a literal `%' character 
+</pre>	
+
+	Unsupported codes:
+<pre>
+	%C - century number (the year divided by 100 and truncated to an integer, range 00 to 99) 
+	%g - like %G, but without the century. 
+	%G - The 4-digit year corresponding to the ISO week number (see %V). 
+	     This has the same format and value as %Y, except that if the ISO week number belongs 
+		 to the previous or next year, that year is used instead. 
+	%j - day of the year as a decimal number (range 001 to 366) 
+	%u - weekday as a decimal number [1,7], with 1 representing Monday 
+	%U - week number of the current year as a decimal number, starting 
+	    with the first Sunday as the first day of the first week 
+	%V - The ISO 8601:1988 week number of the current year as a decimal number, 
+	     range 01 to 53, where week 1 is the first week that has at least 4 days in the 
+		 current year, and with Monday as the first day of the week. (Use %G or %g for 
+		 the year component that corresponds to the week number for the specified timestamp.) 
+	%w - day of the week as a decimal, Sunday being 0 
+	%W - week number of the current year as a decimal number, starting with the 
+	     first Monday as the first day of the first week 
+</pre>
+
+=============================================================================
+
+NOTES
+
+Useful url for generating test timestamps:
+	http://www.4webhelp.net/us/timestamp.php
+
+Possible future optimizations include 
+
+a. Using an algorithm similar to Plauger's in "The Standard C Library" 
+(page 428, xttotm.c _Ttotm() function). Plauger's algorithm will not 
+work outside 32-bit signed range, so i decided not to implement it.
+
+b. Implement daylight savings, which looks awfully complicated, see
+	http://webexhibits.org/daylightsaving/
+
+
+CHANGELOG
+
+- 18 July  2005  0.21
+- In PHP 4.3.11, the 'r' format has changed. Leading 0 in day is added. Changed for compat.
+- Added support for negative months in adodb_mktime().
+
+- 24 Feb 2005 0.20
+Added limited strftime/gmstrftime support. x10 improvement in performance of adodb_date().
+
+- 21 Dec 2004 0.17
+In adodb_getdate(), the timestamp was accidentally converted to gmt when $is_gmt is false. 
+Also adodb_mktime(0,0,0) did not work properly. Both fixed thx Mauro.
+
+- 17 Nov 2004 0.16
+Removed intval typecast in adodb_mktime() for secs, allowing:
+	 adodb_mktime(0,0,0 + 2236672153,1,1,1934);
+Suggested by Ryan.
+
+- 18 July 2004 0.15
+All params in adodb_mktime were formerly compulsory. Now only the hour, min, secs is compulsory. 
+This brings it more in line with mktime (still not identical).
+
+- 23 June 2004 0.14
+
+Allow you to define your own daylights savings function, adodb_daylight_sv.
+If the function is defined (somewhere in an include), then you can correct for daylights savings.
+
+In this example, we apply daylights savings in June or July, adding one hour. This is extremely
+unrealistic as it does not take into account time-zone, geographic location, current year.
+
+function adodb_daylight_sv(&$arr, $is_gmt)
+{
+	if ($is_gmt) return;
+	$m = $arr['mon'];
+	if ($m == 6 || $m == 7) $arr['hours'] += 1;
+}
+
+This is only called by adodb_date() and not by adodb_mktime(). 
+
+The format of $arr is
+Array ( 
+   [seconds] => 0 
+   [minutes] => 0 
+   [hours] => 0 
+   [mday] => 1      # day of month, eg 1st day of the month
+   [mon] => 2       # month (eg. Feb)
+   [year] => 2102 
+   [yday] => 31     # days in current year
+   [leap] =>        # true if leap year
+   [ndays] => 28    # no of days in current month
+   ) 
+   
+
+- 28 Apr 2004 0.13
+Fixed adodb_date to properly support $is_gmt. Thx to Dimitar Angelov.
+
+- 20 Mar 2004 0.12
+Fixed month calculation error in adodb_date. 2102-June-01 appeared as 2102-May-32.
+
+- 26 Oct 2003 0.11
+Because of daylight savings problems (some systems apply daylight savings to 
+January!!!), changed adodb_get_gmt_diff() to ignore daylight savings.
+
+- 9 Aug 2003 0.10
+Fixed bug with dates after 2038. 
+See http://phplens.com/lens/lensforum/msgs.php?id=6980
+
+- 1 July 2003 0.09
+Added support for Q (Quarter).
+Added adodb_date2(), which accepts ISO date in 2nd param
+
+- 3 March 2003 0.08
+Added support for 'S' adodb_date() format char. Added constant ADODB_ALLOW_NEGATIVE_TS
+if you want PHP to handle negative timestamps between 1901 to 1969.
+
+- 27 Feb 2003 0.07
+All negative numbers handled by adodb now because of RH 7.3+ problems.
+See http://bugs.php.net/bug.php?id=20048&edit=2
+
+- 4 Feb 2003 0.06
+Fixed a typo, 1852 changed to 1582! This means that pre-1852 dates
+are now correctly handled.
+
+- 29 Jan 2003 0.05
+
+Leap year checking differs under Julian calendar (pre 1582). Also
+leap year code optimized by checking for most common case first.
+
+We also handle month overflow correctly in mktime (eg month set to 13).
+
+Day overflow for less than one month's days is supported.
+
+- 28 Jan 2003 0.04
+
+Gregorian correction handled. In PHP5, we might throw an error if 
+mktime uses invalid dates around 5-14 Oct 1582. Released with ADOdb 3.10.
+Added limbo 5-14 Oct 1582 check, when we set to 15 Oct 1582.
+
+- 27 Jan 2003 0.03
+
+Fixed some more month problems due to gmt issues. Added constant ADODB_DATE_VERSION.
+Fixed calculation of days since start of year for <1970. 
+
+- 27 Jan 2003 0.02
+
+Changed _adodb_getdate() to inline leap year checking for better performance.
+Fixed problem with time-zones west of GMT +0000.
+
+- 24 Jan 2003 0.01
+
+First implementation.
+*/
+
+
+/* Initialization */
+
+/*
+	Version Number
+*/
+define('ADODB_DATE_VERSION',0.21);
+
+/*
+	This code was originally for windows. But apparently this problem happens 
+	also with Linux, RH 7.3 and later!
+	
+	glibc-2.2.5-34 and greater has been changed to return -1 for dates <
+	1970.  This used to work.  The problem exists with RedHat 7.3 and 8.0
+	echo (mktime(0, 0, 0, 1, 1, 1960));  // prints -1
+	
+	References:
+	 http://bugs.php.net/bug.php?id=20048&edit=2
+	 http://lists.debian.org/debian-glibc/2002/debian-glibc-200205/msg00010.html
+*/
+
+if (!defined('ADODB_ALLOW_NEGATIVE_TS')) define('ADODB_NO_NEGATIVE_TS',1);
+
+function adodb_date_test_date($y1,$m,$d=13)
+{
+	$t = adodb_mktime(0,0,0,$m,$d,$y1);
+	$rez = adodb_date('Y-n-j H:i:s',$t);
+	if ("$y1-$m-$d 00:00:00" != $rez) {
+		print "<b>$y1 error, expected=$y1-$m-$d 00:00:00, adodb=$rez</b><br>";
+		return false;
+	}
+	return true;
+}
+
+function adodb_date_test_strftime($fmt)
+{
+	$s1 = strftime($fmt);
+	$s2 = adodb_strftime($fmt);
+	
+	if ($s1 == $s2) return true;
+	
+	echo "error for $fmt,  strftime=$s1, $adodb=$s2<br>";
+	return false;
+}
+
+/**
+	 Test Suite
+*/
+function adodb_date_test()
+{
+	
+	error_reporting(E_ALL);
+	print "<h4>Testing adodb_date and adodb_mktime. version=".ADODB_DATE_VERSION.' PHP='.PHP_VERSION."</h4>";
+	@set_time_limit(0);
+	$fail = false;
+	
+	// This flag disables calling of PHP native functions, so we can properly test the code
+	if (!defined('ADODB_TEST_DATES')) define('ADODB_TEST_DATES',1);
+	
+	adodb_date_test_strftime('%Y %m %x %X');
+	adodb_date_test_strftime("%A %d %B %Y");
+	adodb_date_test_strftime("%H %M S");
+	
+	$t = adodb_mktime(0,0,0);
+	if (!(adodb_date('Y-m-d') == date('Y-m-d'))) print 'Error in '.adodb_mktime(0,0,0).'<br>';
+	
+	$t = adodb_mktime(0,0,0,6,1,2102);
+	if (!(adodb_date('Y-m-d',$t) == '2102-06-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
+	
+	$t = adodb_mktime(0,0,0,2,1,2102);
+	if (!(adodb_date('Y-m-d',$t) == '2102-02-01')) print 'Error in '.adodb_date('Y-m-d',$t).'<br>';
+	
+	
+	print "<p>Testing gregorian <=> julian conversion<p>";
+	$t = adodb_mktime(0,0,0,10,11,1492);
+	//http://www.holidayorigins.com/html/columbus_day.html - Friday check
+	if (!(adodb_date('D Y-m-d',$t) == 'Fri 1492-10-11')) print 'Error in Columbus landing<br>';
+	
+	$t = adodb_mktime(0,0,0,2,29,1500);
+	if (!(adodb_date('Y-m-d',$t) == '1500-02-29')) print 'Error in julian leap years<br>';
+	
+	$t = adodb_mktime(0,0,0,2,29,1700);
+	if (!(adodb_date('Y-m-d',$t) == '1700-03-01')) print 'Error in gregorian leap years<br>';
+	
+	print  adodb_mktime(0,0,0,10,4,1582).' ';
+	print adodb_mktime(0,0,0,10,15,1582);
+	$diff = (adodb_mktime(0,0,0,10,15,1582) - adodb_mktime(0,0,0,10,4,1582));
+	if ($diff != 3600*24) print " <b>Error in gregorian correction = ".($diff/3600/24)." days </b><br>";
+		
+	print " 15 Oct 1582, Fri=".(adodb_dow(1582,10,15) == 5 ? 'Fri' : '<b>Error</b>')."<br>";
+	print " 4 Oct 1582, Thu=".(adodb_dow(1582,10,4) == 4 ? 'Thu' : '<b>Error</b>')."<br>";
+	
+	print "<p>Testing overflow<p>";
+	
+	$t = adodb_mktime(0,0,0,3,33,1965);
+	if (!(adodb_date('Y-m-d',$t) == '1965-04-02')) print 'Error in day overflow 1 <br>';
+	$t = adodb_mktime(0,0,0,4,33,1971);
+	if (!(adodb_date('Y-m-d',$t) == '1971-05-03')) print 'Error in day overflow 2 <br>';
+	$t = adodb_mktime(0,0,0,1,60,1965);
+	if (!(adodb_date('Y-m-d',$t) == '1965-03-01')) print 'Error in day overflow 3 '.adodb_date('Y-m-d',$t).' <br>';
+	$t = adodb_mktime(0,0,0,12,32,1965);
+	if (!(adodb_date('Y-m-d',$t) == '1966-01-01')) print 'Error in day overflow 4 '.adodb_date('Y-m-d',$t).' <br>';
+	$t = adodb_mktime(0,0,0,12,63,1965);
+	if (!(adodb_date('Y-m-d',$t) == '1966-02-01')) print 'Error in day overflow 5 '.adodb_date('Y-m-d',$t).' <br>';
+	$t = adodb_mktime(0,0,0,13,3,1965);
+	if (!(adodb_date('Y-m-d',$t) == '1966-01-03')) print 'Error in mth overflow 1 <br>';
+	
+	print "Testing 2-digit => 4-digit year conversion<p>";
+	if (adodb_year_digit_check(00) != 2000) print "Err 2-digit 2000<br>";
+	if (adodb_year_digit_check(10) != 2010) print "Err 2-digit 2010<br>";
+	if (adodb_year_digit_check(20) != 2020) print "Err 2-digit 2020<br>";
+	if (adodb_year_digit_check(30) != 2030) print "Err 2-digit 2030<br>";
+	if (adodb_year_digit_check(40) != 1940) print "Err 2-digit 1940<br>";
+	if (adodb_year_digit_check(50) != 1950) print "Err 2-digit 1950<br>";
+	if (adodb_year_digit_check(90) != 1990) print "Err 2-digit 1990<br>";
+	
+	// Test string formating
+	print "<p>Testing date formating</p>";
+	$fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C822 r s t U w y Y z Z 2003';
+	$s1 = date($fmt,0);
+	$s2 = adodb_date($fmt,0);
+	if ($s1 != $s2) {
+		print " date() 0 failed<br>$s1<br>$s2<br>";
+	}
+	flush();
+	for ($i=100; --$i > 0; ) {
+
+		$ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000);
+		$s1 = date($fmt,$ts);
+		$s2 = adodb_date($fmt,$ts);
+		//print "$s1 <br>$s2 <p>";
+		$pos = strcmp($s1,$s2);
+
+		if (($s1) != ($s2)) {
+			for ($j=0,$k=strlen($s1); $j < $k; $j++) {
+				if ($s1[$j] != $s2[$j]) {
+					print substr($s1,$j).' ';
+					break;
+				}
+			}
+			print "<b>Error date(): $ts<br><pre> 
+&nbsp; \"$s1\" (date len=".strlen($s1).")
+&nbsp; \"$s2\" (adodb_date len=".strlen($s2).")</b></pre><br>";
+			$fail = true;
+		}
+		
+		$a1 = getdate($ts);
+		$a2 = adodb_getdate($ts);
+		$rez = array_diff($a1,$a2);
+		if (sizeof($rez)>0) {
+			print "<b>Error getdate() $ts</b><br>";
+				print_r($a1);
+			print "<br>";
+				print_r($a2);
+			print "<p>";
+			$fail = true;
+		}
+	}
+	
+	// Test generation of dates outside 1901-2038
+	print "<p>Testing random dates between 100 and 4000</p>";
+	adodb_date_test_date(100,1);
+	for ($i=100; --$i >= 0;) {
+		$y1 = 100+rand(0,1970-100);
+		$m = rand(1,12);
+		adodb_date_test_date($y1,$m);
+		
+		$y1 = 3000-rand(0,3000-1970);
+		adodb_date_test_date($y1,$m);
+	}
+	print '<p>';
+	$start = 1960+rand(0,10);
+	$yrs = 12;
+	$i = 365.25*86400*($start-1970);
+	$offset = 36000+rand(10000,60000);
+	$max = 365*$yrs*86400;
+	$lastyear = 0;
+	
+	// we generate a timestamp, convert it to a date, and convert it back to a timestamp
+	// and check if the roundtrip broke the original timestamp value.
+	print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: ";
+	$cnt = 0;
+	for ($max += $i; $i < $max; $i += $offset) {
+		$ret = adodb_date('m,d,Y,H,i,s',$i);
+		$arr = explode(',',$ret);
+		if ($lastyear != $arr[2]) {
+			$lastyear = $arr[2];
+			print " $lastyear ";
+			flush();
+		}
+		$newi = adodb_mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]);
+		if ($i != $newi) {
+			print "Error at $i, adodb_mktime returned $newi ($ret)";
+			$fail = true;
+			break;
+		}
+		$cnt += 1;
+	}
+	echo "Tested $cnt dates<br>";
+	if (!$fail) print "<p>Passed !</p>";
+	else print "<p><b>Failed</b> :-(</p>";
+}
+
+/**
+	Returns day of week, 0 = Sunday,... 6=Saturday. 
+	Algorithm from PEAR::Date_Calc
+*/
+function adodb_dow($year, $month, $day)
+{
+/*
+Pope Gregory removed 10 days - October 5 to October 14 - from the year 1582 and 
+proclaimed that from that time onwards 3 days would be dropped from the calendar 
+every 400 years.
+
+Thursday, October 4, 1582 (Julian) was followed immediately by Friday, October 15, 1582 (Gregorian). 
+*/
+	if ($year <= 1582) {
+		if ($year < 1582 || 
+			($year == 1582 && ($month < 10 || ($month == 10 && $day < 15)))) $greg_correction = 3;
+		 else
+			$greg_correction = 0;
+	} else
+		$greg_correction = 0;
+	
+	if($month > 2)
+	    $month -= 2;
+	else {
+	    $month += 10;
+	    $year--;
+	}
+	
+	$day =  floor((13 * $month - 1) / 5) +
+	        $day + ($year % 100) +
+	        floor(($year % 100) / 4) +
+	        floor(($year / 100) / 4) - 2 *
+	        floor($year / 100) + 77 + $greg_correction;
+	
+	return $day - 7 * floor($day / 7);
+}
+
+
+/**
+ Checks for leap year, returns true if it is. No 2-digit year check. Also 
+ handles julian calendar correctly.
+*/
+function _adodb_is_leap_year($year) 
+{
+	if ($year % 4 != 0) return false;
+	
+	if ($year % 400 == 0) {
+		return true;
+	// if gregorian calendar (>1582), century not-divisible by 400 is not leap
+	} else if ($year > 1582 && $year % 100 == 0 ) {
+		return false;
+	} 
+	
+	return true;
+}
+
+
+/**
+ checks for leap year, returns true if it is. Has 2-digit year check
+*/
+function adodb_is_leap_year($year) 
+{
+	return  _adodb_is_leap_year(adodb_year_digit_check($year));
+}
+
+/**
+	Fix 2-digit years. Works for any century.
+ 	Assumes that if 2-digit is more than 30 years in future, then previous century.
+*/
+function adodb_year_digit_check($y) 
+{
+	if ($y < 100) {
+	
+		$yr = (integer) date("Y");
+		$century = (integer) ($yr /100);
+		
+		if ($yr%100 > 50) {
+			$c1 = $century + 1;
+			$c0 = $century;
+		} else {
+			$c1 = $century;
+			$c0 = $century - 1;
+		}
+		$c1 *= 100;
+		// if 2-digit year is less than 30 years in future, set it to this century
+		// otherwise if more than 30 years in future, then we set 2-digit year to the prev century.
+		if (($y + $c1) < $yr+30) $y = $y + $c1;
+		else $y = $y + $c0*100;
+	}
+	return $y;
+}
+
+/**
+ get local time zone offset from GMT
+*/
+function adodb_get_gmt_diff() 
+{
+static $TZ;
+	if (isset($TZ)) return $TZ;
+	
+//	$TZ = mktime(0,0,0,1,2,1970,0) - gmmktime(0,0,0,1,2,1970,0);
+// LDR Fix To avoid warning on PHP 5.1
+	$TZ = mktime(0,0,0,1,2,1970) - gmmktime(0,0,0,1,2,1970);
+	return $TZ;
+}
+
+/**
+	Returns an array with date info.
+*/
+function adodb_getdate($d=false,$fast=false)
+{
+	if ($d === false) return getdate();
+	if (!defined('ADODB_TEST_DATES')) {
+		if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
+			if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer
+				return @getdate($d);
+		}
+	}
+	return _adodb_getdate($d);
+}
+
+/*
+// generate $YRS table for _adodb_getdate()
+function adodb_date_gentable($out=true)
+{
+
+	for ($i=1970; $i >= 1600; $i-=10) {
+		$s = adodb_gmmktime(0,0,0,1,1,$i);
+		echo "$i => $s,<br>";	
+	}
+}
+adodb_date_gentable();
+
+for ($i=1970; $i > 1500; $i--) {
+
+echo "<hr>$i ";
+	adodb_date_test_date($i,1,1);
+}
+
+*/
+
+/**
+	Low-level function that returns the getdate() array. We have a special
+	$fast flag, which if set to true, will return fewer array values,
+	and is much faster as it does not calculate dow, etc.
+*/
+function _adodb_getdate($origd=false,$fast=false,$is_gmt=false)
+{
+static $YRS;
+
+	$d =  $origd - ($is_gmt ? 0 : adodb_get_gmt_diff());
+	
+	$_day_power = 86400;
+	$_hour_power = 3600;
+	$_min_power = 60;
+	
+	if ($d < -12219321600) $d -= 86400*10; // if 15 Oct 1582 or earlier, gregorian correction 
+	
+	$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31);
+	$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31);
+	
+	$d366 = $_day_power * 366;
+	$d365 = $_day_power * 365;
+	
+	if ($d < 0) {
+		
+		if (empty($YRS)) $YRS = array(
+			1970 => 0,
+			1960 => -315619200,
+			1950 => -631152000,
+			1940 => -946771200,
+			1930 => -1262304000,
+			1920 => -1577923200,
+			1910 => -1893456000,
+			1900 => -2208988800,
+			1890 => -2524521600,
+			1880 => -2840140800,
+			1870 => -3155673600,
+			1860 => -3471292800,
+			1850 => -3786825600,
+			1840 => -4102444800,
+			1830 => -4417977600,
+			1820 => -4733596800,
+			1810 => -5049129600,
+			1800 => -5364662400,
+			1790 => -5680195200,
+			1780 => -5995814400,
+			1770 => -6311347200,
+			1760 => -6626966400,
+			1750 => -6942499200,
+			1740 => -7258118400,
+			1730 => -7573651200,
+			1720 => -7889270400,
+			1710 => -8204803200,
+			1700 => -8520336000,
+			1690 => -8835868800,
+			1680 => -9151488000,
+			1670 => -9467020800,
+			1660 => -9782640000,
+			1650 => -10098172800,
+			1640 => -10413792000,
+			1630 => -10729324800,
+			1620 => -11044944000,
+			1610 => -11360476800,
+			1600 => -11676096000);
+
+		if ($is_gmt) $origd = $d;
+		// The valid range of a 32bit signed timestamp is typically from 
+		// Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT
+		//
+		
+		# old algorithm iterates through all years. new algorithm does it in
+		# 10 year blocks
+		
+		/*
+		# old algo
+		for ($a = 1970 ; --$a >= 0;) {
+			$lastd = $d;
+			
+			if ($leaf = _adodb_is_leap_year($a)) $d += $d366;
+			else $d += $d365;
+			
+			if ($d >= 0) {
+				$year = $a;
+				break;
+			}
+		}
+		*/
+		
+		$lastsecs = 0;
+		$lastyear = 1970;
+		foreach($YRS as $year => $secs) {
+			if ($d >= $secs) {
+				$a = $lastyear;
+				break;
+			}
+			$lastsecs = $secs;
+			$lastyear = $year;
+		}
+		
+		$d -= $lastsecs;
+		if (!isset($a)) $a = $lastyear;
+		
+		//echo ' yr=',$a,' ', $d,'.';
+		
+		for (; --$a >= 0;) {
+			$lastd = $d;
+			
+			if ($leaf = _adodb_is_leap_year($a)) $d += $d366;
+			else $d += $d365;
+			
+			if ($d >= 0) {
+				$year = $a;
+				break;
+			}
+		}
+		/**/
+		
+		$secsInYear = 86400 * ($leaf ? 366 : 365) + $lastd;
+		
+		$d = $lastd;
+		$mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal;
+		for ($a = 13 ; --$a > 0;) {
+			$lastd = $d;
+			$d += $mtab[$a] * $_day_power;
+			if ($d >= 0) {
+				$month = $a;
+				$ndays = $mtab[$a];
+				break;
+			}
+		}
+		
+		$d = $lastd;
+		$day = $ndays + ceil(($d+1) / ($_day_power));
+
+		$d += ($ndays - $day+1)* $_day_power;
+		$hour = floor($d/$_hour_power);
+	
+	} else {
+		for ($a = 1970 ;; $a++) {
+			$lastd = $d;
+			
+			if ($leaf = _adodb_is_leap_year($a)) $d -= $d366;
+			else $d -= $d365;
+			if ($d < 0) {
+				$year = $a;
+				break;
+			}
+		}
+		$secsInYear = $lastd;
+		$d = $lastd;
+		$mtab = ($leaf) ? $_month_table_leaf : $_month_table_normal;
+		for ($a = 1 ; $a <= 12; $a++) {
+			$lastd = $d;
+			$d -= $mtab[$a] * $_day_power;
+			if ($d < 0) {
+				$month = $a;
+				$ndays = $mtab[$a];
+				break;
+			}
+		}
+		$d = $lastd;
+		$day = ceil(($d+1) / $_day_power);
+		$d = $d - ($day-1) * $_day_power;
+		$hour = floor($d /$_hour_power);
+	}
+	
+	$d -= $hour * $_hour_power;
+	$min = floor($d/$_min_power);
+	$secs = $d - $min * $_min_power;
+	if ($fast) {
+		return array(
+		'seconds' => $secs,
+		'minutes' => $min,
+		'hours' => $hour,
+		'mday' => $day,
+		'mon' => $month,
+		'year' => $year,
+		'yday' => floor($secsInYear/$_day_power),
+		'leap' => $leaf,
+		'ndays' => $ndays
+		);
+	}
+	
+	
+	$dow = adodb_dow($year,$month,$day);
+
+	return array(
+		'seconds' => $secs,
+		'minutes' => $min,
+		'hours' => $hour,
+		'mday' => $day,
+		'wday' => $dow,
+		'mon' => $month,
+		'year' => $year,
+		'yday' => floor($secsInYear/$_day_power),
+		'weekday' => gmdate('l',$_day_power*(3+$dow)),
+		'month' => gmdate('F',mktime(0,0,0,$month,2,1971)),
+		0 => $origd
+	);
+}
+
+function adodb_gmdate($fmt,$d=false)
+{
+	return adodb_date($fmt,$d,true);
+}
+
+// accepts unix timestamp and iso date format in $d
+function adodb_date2($fmt, $d=false, $is_gmt=false)
+{
+	if ($d !== false) {
+		if (!preg_match( 
+			"|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ -]?(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", 
+			($d), $rr)) return adodb_date($fmt,false,$is_gmt);
+
+		if ($rr[1] <= 100 && $rr[2]<= 1) return adodb_date($fmt,false,$is_gmt);
+	
+		// h-m-s-MM-DD-YY
+		if (!isset($rr[5])) $d = adodb_mktime(0,0,0,$rr[2],$rr[3],$rr[1]);
+		else $d = @adodb_mktime($rr[5],$rr[6],$rr[7],$rr[2],$rr[3],$rr[1]);
+	}
+	
+	return adodb_date($fmt,$d,$is_gmt);
+}
+
+
+/**
+	Return formatted date based on timestamp $d
+*/
+function adodb_date($fmt,$d=false,$is_gmt=false)
+{
+static $daylight;
+
+	if ($d === false) return ($is_gmt)? @gmdate($fmt): @date($fmt);
+	if (!defined('ADODB_TEST_DATES')) {
+		if ((abs($d) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
+			if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) // if windows, must be +ve integer
+				return ($is_gmt)? @gmdate($fmt,$d): @date($fmt,$d);
+
+		}
+	}
+	$_day_power = 86400;
+	
+	$arr = _adodb_getdate($d,true,$is_gmt);
+	
+	if (!isset($daylight)) $daylight = function_exists('adodb_daylight_sv');
+	if ($daylight) adodb_daylight_sv($arr, $is_gmt);
+	
+	$year = $arr['year'];
+	$month = $arr['mon'];
+	$day = $arr['mday'];
+	$hour = $arr['hours'];
+	$min = $arr['minutes'];
+	$secs = $arr['seconds'];
+	
+	$max = strlen($fmt);
+	$dates = '';
+	
+	/*
+		at this point, we have the following integer vars to manipulate:
+		$year, $month, $day, $hour, $min, $secs
+	*/
+	for ($i=0; $i < $max; $i++) {
+		switch($fmt[$i]) {
+		case 'T': $dates .= date('T');break;
+		// YEAR
+		case 'L': $dates .= $arr['leap'] ? '1' : '0'; break;
+		case 'r': // Thu, 21 Dec 2000 16:01:07 +0200
+		
+			// 4.3.11 uses '04 Jun 2004'
+			// 4.3.8 uses  ' 4 Jun 2004'
+			$dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))).', '		
+				. ($day<10?'0'.$day:$day) . ' '.date('M',mktime(0,0,0,$month,2,1971)).' '.$year.' ';
+			
+			if ($hour < 10) $dates .= '0'.$hour; else $dates .= $hour; 
+			
+			if ($min < 10) $dates .= ':0'.$min; else $dates .= ':'.$min;
+			
+			if ($secs < 10) $dates .= ':0'.$secs; else $dates .= ':'.$secs;
+			
+			$gmt = adodb_get_gmt_diff();
+			$dates .= sprintf(' %s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break;
+				
+		case 'Y': $dates .= $year; break;
+		case 'y': $dates .= substr($year,strlen($year)-2,2); break;
+		// MONTH
+		case 'm': if ($month<10) $dates .= '0'.$month; else $dates .= $month; break;
+		case 'Q': $dates .= ($month+3)>>2; break;
+		case 'n': $dates .= $month; break;
+		case 'M': $dates .= date('M',mktime(0,0,0,$month,2,1971)); break;
+		case 'F': $dates .= date('F',mktime(0,0,0,$month,2,1971)); break;
+		// DAY
+		case 't': $dates .= $arr['ndays']; break;
+		case 'z': $dates .= $arr['yday']; break;
+		case 'w': $dates .= adodb_dow($year,$month,$day); break;
+		case 'l': $dates .= gmdate('l',$_day_power*(3+adodb_dow($year,$month,$day))); break;
+		case 'D': $dates .= gmdate('D',$_day_power*(3+adodb_dow($year,$month,$day))); break;
+		case 'j': $dates .= $day; break;
+		case 'd': if ($day<10) $dates .= '0'.$day; else $dates .= $day; break;
+		case 'S': 
+			$d10 = $day % 10;
+			if ($d10 == 1) $dates .= 'st';
+			else if ($d10 == 2 && $day != 12) $dates .= 'nd';
+			else if ($d10 == 3) $dates .= 'rd';
+			else $dates .= 'th';
+			break;
+			
+		// HOUR
+		case 'Z':
+			$dates .= ($is_gmt) ? 0 : -adodb_get_gmt_diff(); break;
+		case 'O': 
+			$gmt = ($is_gmt) ? 0 : adodb_get_gmt_diff();
+			$dates .= sprintf('%s%04d',($gmt<0)?'+':'-',abs($gmt)/36); break;
+			
+		case 'H': 
+			if ($hour < 10) $dates .= '0'.$hour; 
+			else $dates .= $hour; 
+			break;
+		case 'h': 
+			if ($hour > 12) $hh = $hour - 12; 
+			else {
+				if ($hour == 0) $hh = '12'; 
+				else $hh = $hour;
+			}
+			
+			if ($hh < 10) $dates .= '0'.$hh;
+			else $dates .= $hh;
+			break;
+			
+		case 'G': 
+			$dates .= $hour;
+			break;
+			
+		case 'g':
+			if ($hour > 12) $hh = $hour - 12; 
+			else {
+				if ($hour == 0) $hh = '12'; 
+				else $hh = $hour; 
+			}
+			$dates .= $hh;
+			break;
+		// MINUTES
+		case 'i': if ($min < 10) $dates .= '0'.$min; else $dates .= $min; break;
+		// SECONDS
+		case 'U': $dates .= $d; break;
+		case 's': if ($secs < 10) $dates .= '0'.$secs; else $dates .= $secs; break;
+		// AM/PM
+		// Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
+		case 'a':
+			if ($hour>=12) $dates .= 'pm';
+			else $dates .= 'am';
+			break;
+		case 'A':
+			if ($hour>=12) $dates .= 'PM';
+			else $dates .= 'AM';
+			break;
+		default:
+			$dates .= $fmt[$i]; break;
+		// ESCAPE
+		case "\\": 
+			$i++;
+			if ($i < $max) $dates .= $fmt[$i];
+			break;
+		}
+	}
+	return $dates;
+}
+
+/**
+	Returns a timestamp given a GMT/UTC time. 
+	Note that $is_dst is not implemented and is ignored.
+*/
+function adodb_gmmktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false)
+{
+	return adodb_mktime($hr,$min,$sec,$mon,$day,$year,$is_dst,true);
+}
+
+/**
+	Return a timestamp given a local time. Originally by jackbbs.
+	Note that $is_dst is not implemented and is ignored.
+	
+	Not a very fast algorithm - O(n) operation. Could be optimized to O(1).
+*/
+function adodb_mktime($hr,$min,$sec,$mon=false,$day=false,$year=false,$is_dst=false,$is_gmt=false) 
+{
+	if (!defined('ADODB_TEST_DATES')) {
+
+		if ($mon === false) {
+			return $is_gmt? @gmmktime($hr,$min,$sec): @mktime($hr,$min,$sec);
+		}
+		
+		// for windows, we don't check 1970 because with timezone differences, 
+		// 1 Jan 1970 could generate negative timestamp, which is illegal
+		if (1971 < $year && $year < 2038
+			|| !defined('ADODB_NO_NEGATIVE_TS') && (1901 < $year && $year < 2038)
+			) {
+				return $is_gmt ?
+					@gmmktime($hr,$min,$sec,$mon,$day,$year):
+					@mktime($hr,$min,$sec,$mon,$day,$year);
+			}
+	}
+	
+	$gmt_different = ($is_gmt) ? 0 : adodb_get_gmt_diff();
+
+	/*
+	# disabled because some people place large values in $sec.
+	# however we need it for $mon because we use an array...
+	$hr = intval($hr);
+	$min = intval($min);
+	$sec = intval($sec);
+	*/
+	$mon = intval($mon);
+	$day = intval($day);
+	$year = intval($year);
+	
+	
+	$year = adodb_year_digit_check($year);
+
+	if ($mon > 12) {
+		$y = floor($mon / 12);
+		$year += $y;
+		$mon -= $y*12;
+	} else if ($mon < 1) {
+		$y = ceil((1-$mon) / 12);
+		$year -= $y;
+		$mon += $y*12;
+	}
+	
+	$_day_power = 86400;
+	$_hour_power = 3600;
+	$_min_power = 60;
+	
+	$_month_table_normal = array("",31,28,31,30,31,30,31,31,30,31,30,31);
+	$_month_table_leaf = array("",31,29,31,30,31,30,31,31,30,31,30,31);
+	
+	$_total_date = 0;
+	if ($year >= 1970) {
+		for ($a = 1970 ; $a <= $year; $a++) {
+			$leaf = _adodb_is_leap_year($a);
+			if ($leaf == true) {
+				$loop_table = $_month_table_leaf;
+				$_add_date = 366;
+			} else {
+				$loop_table = $_month_table_normal;
+				$_add_date = 365;
+			}
+			if ($a < $year) { 
+				$_total_date += $_add_date;
+			} else {
+				for($b=1;$b<$mon;$b++) {
+					$_total_date += $loop_table[$b];
+				}
+			}
+		}
+		$_total_date +=$day-1;
+		$ret = $_total_date * $_day_power + $hr * $_hour_power + $min * $_min_power + $sec + $gmt_different;
+	
+	} else {
+		for ($a = 1969 ; $a >= $year; $a--) {
+			$leaf = _adodb_is_leap_year($a);
+			if ($leaf == true) {
+				$loop_table = $_month_table_leaf;
+				$_add_date = 366;
+			} else {
+				$loop_table = $_month_table_normal;
+				$_add_date = 365;
+			}
+			if ($a > $year) { $_total_date += $_add_date;
+			} else {
+				for($b=12;$b>$mon;$b--) {
+					$_total_date += $loop_table[$b];
+				}
+			}
+		}
+		$_total_date += $loop_table[$mon] - $day;
+		
+		$_day_time = $hr * $_hour_power + $min * $_min_power + $sec;
+		$_day_time = $_day_power - $_day_time;
+		$ret = -( $_total_date * $_day_power + $_day_time - $gmt_different);
+		if ($ret < -12220185600) $ret += 10*86400; // if earlier than 5 Oct 1582 - gregorian correction
+		else if ($ret < -12219321600) $ret = -12219321600; // if in limbo, reset to 15 Oct 1582.
+	} 
+	//print " dmy=$day/$mon/$year $hr:$min:$sec => " .$ret;
+	return $ret;
+}
+
+function adodb_gmstrftime($fmt, $ts=false)
+{
+	return adodb_strftime($fmt,$ts,true);
+}
+
+// hack - convert to adodb_date
+function adodb_strftime($fmt, $ts=false,$is_gmt=false)
+{
+global $ADODB_DATE_LOCALE;
+
+	if (!defined('ADODB_TEST_DATES')) {
+		if ((abs($ts) <= 0x7FFFFFFF)) { // check if number in 32-bit signed range
+			if (!defined('ADODB_NO_NEGATIVE_TS') || $ts >= 0) // if windows, must be +ve integer
+				return ($is_gmt)? @gmstrftime($fmt,$ts): @strftime($fmt,$ts);
+
+		}
+	}
+
+	if (empty($ADODB_DATE_LOCALE)) {
+		$tstr = strtoupper(gmstrftime('%c',31366800)); // 30 Dec 1970, 1 am
+		$sep = substr($tstr,2,1);
+		$hasAM = strrpos($tstr,'M') !== false;
+		
+		$ADODB_DATE_LOCALE = array();
+		$ADODB_DATE_LOCALE[] =  strncmp($tstr,'30',2) == 0 ? 'd'.$sep.'m'.$sep.'y' : 'm'.$sep.'d'.$sep.'y';	
+		$ADODB_DATE_LOCALE[]  = ($hasAM) ? 'h:i:s a' : 'H:i:s';
+			
+	}
+	$inpct = false;
+	$fmtdate = '';
+	for ($i=0,$max = strlen($fmt); $i < $max; $i++) {
+		$ch = $fmt[$i];
+		if ($ch == '%') {
+			if ($inpct) {
+				$fmtdate .= '%';
+				$inpct = false;
+			} else
+				$inpct = true;
+		} else if ($inpct) {
+		
+			$inpct = false;
+			switch($ch) {
+			case '0':
+			case '1':
+			case '2':
+			case '3':
+			case '4':
+			case '5':
+			case '6':
+			case '7':
+			case '8':
+			case '9':
+			case 'E':
+			case 'O':
+				/* ignore format modifiers */
+				$inpct = true; 
+				break;
+				
+			case 'a': $fmtdate .= 'D'; break;
+			case 'A': $fmtdate .= 'l'; break;
+			case 'h':
+			case 'b': $fmtdate .= 'M'; break;
+			case 'B': $fmtdate .= 'F'; break;
+			case 'c': $fmtdate .= $ADODB_DATE_LOCALE[0].$ADODB_DATE_LOCALE[1]; break;
+			case 'C': $fmtdate .= '\C?'; break; // century
+			case 'd': $fmtdate .= 'd'; break;
+			case 'D': $fmtdate .= 'm/d/y'; break;
+			case 'e': $fmtdate .= 'j'; break;
+			case 'g': $fmtdate .= '\g?'; break; //?
+			case 'G': $fmtdate .= '\G?'; break; //?
+			case 'H': $fmtdate .= 'H'; break;
+			case 'I': $fmtdate .= 'h'; break;
+			case 'j': $fmtdate .= '?z'; $parsej = true; break; // wrong as j=1-based, z=0-basd
+			case 'm': $fmtdate .= 'm'; break;
+			case 'M': $fmtdate .= 'i'; break;
+			case 'n': $fmtdate .= "\n"; break;
+			case 'p': $fmtdate .= 'a'; break;
+			case 'r': $fmtdate .= 'h:i:s a'; break;
+			case 'R': $fmtdate .= 'H:i:s'; break;
+			case 'S': $fmtdate .= 's'; break;
+			case 't': $fmtdate .= "\t"; break;
+			case 'T': $fmtdate .= 'H:i:s'; break;
+			case 'u': $fmtdate .= '?u'; $parseu = true; break; // wrong strftime=1-based, date=0-basde
+			case 'U': $fmtdate .= '?U'; $parseU = true; break;// wrong strftime=1-based, date=0-based
+			case 'x': $fmtdate .= $ADODB_DATE_LOCALE[0]; break;
+			case 'X': $fmtdate .= $ADODB_DATE_LOCALE[1]; break;
+			case 'w': $fmtdate .= '?w'; $parseu = true; break; // wrong strftime=1-based, date=0-basde
+			case 'W': $fmtdate .= '?W'; $parseU = true; break;// wrong strftime=1-based, date=0-based
+			case 'y': $fmtdate .= 'y'; break;
+			case 'Y': $fmtdate .= 'Y'; break;
+			case 'Z': $fmtdate .= 'T'; break;
+			}
+		} else if (('A' <= ($ch) && ($ch) <= 'Z' ) || ('a' <= ($ch) && ($ch) <= 'z' ))
+			$fmtdate .= "\\".$ch;
+		else
+			$fmtdate .= $ch;
+	}
+	//echo "fmt=",$fmtdate,"<br>";
+	if ($ts === false) $ts = time();
+	$ret = adodb_date($fmtdate, $ts, $is_gmt);
+	return $ret;
+}
+
+
 ?>
\ No newline at end of file
diff --git a/htdocs/includes/artichow/php5/Graph.class.php b/htdocs/includes/artichow/php5/Graph.class.php
index 3bfadcd3edb..6370ec837de 100644
--- a/htdocs/includes/artichow/php5/Graph.class.php
+++ b/htdocs/includes/artichow/php5/Graph.class.php
@@ -1,394 +1,394 @@
-<?php
-/*
- * This work is hereby released into the Public Domain.
- * To view a copy of the public domain dedication,
- * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
- * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
- *
- */
-
-// Artichow configuration
-/* <php5> */
-if(is_file(dirname(__FILE__)."/Artichow.cfg.php")) { // For PHP 4+5 version
-	require_once dirname(__FILE__)."/Artichow.cfg.php";
-}
-/* </php5> */
-
-// Some useful files
-require_once ARTICHOW."/common.php";
-require_once ARTICHOW."/Component.class.php";
-require_once ARTICHOW."/Image.class.php";
-
-require_once ARTICHOW."/inc/Grid.class.php";
-require_once ARTICHOW."/inc/Tools.class.php";
-require_once ARTICHOW."/inc/Drawer.class.php";
-require_once ARTICHOW."/inc/Math.class.php";
-require_once ARTICHOW."/inc/Tick.class.php";
-require_once ARTICHOW."/inc/Axis.class.php";
-require_once ARTICHOW."/inc/Legend.class.php";
-require_once ARTICHOW."/inc/Mark.class.php";
-require_once ARTICHOW."/inc/Label.class.php";
-require_once ARTICHOW."/inc/Text.class.php";
-require_once ARTICHOW."/inc/Color.class.php";
-require_once ARTICHOW."/inc/Font.class.php";
-require_once ARTICHOW."/inc/Gradient.class.php";
-
-/**
- * A graph 
- *
- * @package Artichow
- */
-class awGraph extends awImage {
-
-	/**
-	 * Graph name
-	 *
-	 * @var string
-	 */
-	protected $name;
-
-	/**
-	 * Cache timeout
-	 *
-	 * @var int
-	 */
-	protected $timeout = 0;
-	
-	/**
-	 * Graph timing ?
-	 *
-	 * @var bool
-	 */
-	protected $timing;
-	
-	/**
-	 * Components
-	 *
-	 * @var array
-	 */
-	private $components = array();
-	
-	/**
-	 * Some labels to add to the component
-	 *
-	 * @var array
-	 */
-	protected $labels = array();
-	
-	/**
-	 * Graph title
-	 *
-	 * @var Label
-	 */
-	public $title;
-	
-	/**
-	 * Construct a new graph
-	 *
-	 * @param int $width Graph width
-	 * @param int $height Graph height
-	 * @param string $name Graph name for the cache (must be unique). Let it null to not use the cache.
-	 * @param int $timeout Cache timeout (unix timestamp)
-	 */
-	public function __construct($width = NULL, $height = NULL, $name = NULL, $timeout = 0) {
-		
-		parent::__construct();
-	
-		$this->setSize($width, $height);
-
-		if(ARTICHOW_CACHE) {
-	
-			$this->name = $name;
-			$this->timeout = $timeout;
-			
-			// Clean sometimes all the cache
-			if(mt_rand(0, 5000) ===  0) {
-				awGraph::cleanCache();
-			}
-			
-			if($this->name !== NULL) {
-			
-				$file = ARTICHOW_CACHE_DIRECTORY."/".$this->name."-time";
-				
-				if(is_file($file)) {
-				
-					$type = awGraph::cleanGraphCache($file);
-					
-					if($type === NULL) {
-						awGraph::deleteFromCache($this->name);
-					} else {
-						header("Content-Type: image/".$type);
-						readfile(ARTICHOW_CACHE_DIRECTORY."/".$this->name."");
-						exit;
-					}
-					
-				}
-			
-			}
-		
-		}
-		
-		$this->title = new awLabel(
-			NULL,
-			new awTuffy(16),
-			NULL,
-			0
-		);
-		$this->title->setAlign(awLabel::CENTER, awLabel::BOTTOM);
-	
-	}
-	
-	/**
-	 * Delete a graph from the cache
-	 *
-	 * @param string $name Graph name
-	 * @return bool TRUE on success, FALSE on failure
-	 */
-	public static function deleteFromCache($name) {
-
-		if(ARTICHOW_CACHE) {
-		
-			if(is_file(ARTICHOW_CACHE_DIRECTORY."/".$name."-time")) {
-				unlink(ARTICHOW_CACHE_DIRECTORY."/".$name."");
-				unlink(ARTICHOW_CACHE_DIRECTORY."/".$name."-time");
-			}
-			
-		}
-		
-	}
-	
-	/**
-	 * Delete all graphs from the cache
-	 */
-	public static function deleteAllCache() {
-
-		if(ARTICHOW_CACHE) {
-	
-			$dp = opendir(ARTICHOW_CACHE_DIRECTORY);
-			
-			while($file = readdir($dp)) {
-				if($file !== '.' and $file != '..') {
-					unlink(ARTICHOW_CACHE_DIRECTORY."/".$file);
-				}
-			}
-			
-		}
-	
-	}
-	
-	/**
-	 * Clean cache
-	 */
-	public static function cleanCache() {
-
-		if(ARTICHOW_CACHE) {
-	
-			$glob = glob(ARTICHOW_CACHE_DIRECTORY."/*-time");
-			
-			foreach($glob as $file) {
-				
-				$type = awGraph::cleanGraphCache($file);
-				
-				if($type === NULL) {
-					$name = preg_replace("/.*\/(.*)\-time/", "\\1", $file);
-					awGraph::deleteFromCache($name);
-				}
-			
-			}
-			
-		}
-		
-	}
-	
-	/**
-	 * Enable/Disable Graph timing
-	 *
-	 * @param bool $timing
-	 */
-	public function setTiming($timing) {
-		$this->timing = (bool)$timing;
-	}
-	 
-	/**
-	 * Add a component to the graph
-	 *
-	 * @param awComponent $component
-	 */
-	public function add(awComponent $component) {
-	
-		$this->components[] = $component;
-	
-	}
-	
-	/**
-	 * Add a label to the component
-	 *
-	 * @param awLabel $label
-	 * @param int $x Position on X axis of the center of the text
-	 * @param int $y Position on Y axis of the center of the text
-	 */
-	public function addLabel(awLabel $label, $x, $y) {
-	
-		$this->labels[] = array(
-			$label, $x, $y
-		);
-		
-	}
-	
-	/**
-	 * Add a label to the component with aboslute position
-	 *
-	 * @param awLabel $label
-	 * @param awPoint $point Text position
-	 */
-	public function addAbsLabel(awLabel $label, awPoint $point) {
-	
-		$this->labels[] = array(
-			$label, $point
-		);
-		
-	}
-	
-	/**
-	 * Build the graph and draw component on it
-	 * Image is sent to the user browser
-	 *
-	 * @param string $file Save the image in the specified file. Let it null to print image to screen.
-	 */
-	public function draw($file = NULL) {
-		
-		if($this->timing) {
-			$time = microtimeFloat();
-		}
-	
-		$this->create();
-		
-		foreach($this->components as $component) {
-		
-			$this->drawComponent($component);
-		
-		}
-		
-		$this->drawTitle();
-		$this->drawShadow();
-		$this->drawLabels();
-		
-		if($this->timing) {
-			$this->drawTiming(microtimeFloat() - $time);
-		}
-
-		if(ARTICHOW_CACHE and $this->name !== NULL) {
-			ob_start();
-		}
-		
-		$this->send($file);
-		
-		if(ARTICHOW_CACHE and $this->name !== NULL) {
-		
-			$data = ob_get_contents();
-			
-			if(is_writable(ARTICHOW_CACHE_DIRECTORY) === FALSE) {
-				trigger_error("Cache directory is not writable");
-			}
-		
-			$file = ARTICHOW_CACHE_DIRECTORY."/".$this->name."";
-			file_put_contents($file, $data);
-		
-			$file .= "-time";
-			file_put_contents($file, $this->timeout."\n".$this->getFormat());
-
-			ob_clean();
-
-			echo $data;
-			
-		}
-	
-	}
-	
-	private function drawLabels() {
-	
-		$drawer = $this->getDrawer();
-	
-		foreach($this->labels as $array) {
-		
-			if(count($array) === 3) {
-			
-				// Text in relative position
-				list($label, $x, $y) = $array;
-				
-				$point = new awPoint(
-					$x * $this->width,
-					$y * $this->height
-				);
-				
-			} else {
-			
-				// Text in absolute position
-				list($label, $point) = $array;
-			
-			}
-				
-			$label->draw($drawer, $point);
-		
-		}
-		
-	}
-		
-	private function drawTitle() {
-	
-		$drawer = $this->getDrawer();
-	
-		$point = new awPoint(
-			$this->width / 2,
-			10
-		);
-		
-		$this->title->draw($drawer, $point);
-	
-	}
-	
-	private function drawTiming($time) {
-	
-		$drawer = $this->getDrawer();
-		
-		$label = new awLabel;
-		$label->set("(".sprintf("%.3f", $time)." s)");
-		$label->setAlign(awLabel::LEFT, awLabel::TOP);
-		$label->border->show();
-		$label->setPadding(1, 0, 0, 0);
-		$label->setBackgroundColor(new awColor(230, 230, 230, 25));
-		
-		$label->draw($drawer, new awPoint(5, $drawer->height - 5));
-	
-	}
-	
-	private static function cleanGraphCache($file) {
-	
-		list(
-			$time,
-			$type
-		) = explode("\n", file_get_contents($file));
-		
-		$time = (int)$time;
-		
-		if($time !== 0 and $time < time()) {
-			return NULL;
-		} else {
-			return $type;
-		}
-		
-		
-	}
-
-}
-
-registerClass('Graph');
-
-/*
- * To preserve PHP 4 compatibility
- */
-function microtimeFloat() { 
-	list($usec, $sec) = explode(" ", microtime()); 
-	return (float)$usec + (float)$sec; 
-}
-?>
+<?php
+/*
+ * This work is hereby released into the Public Domain.
+ * To view a copy of the public domain dedication,
+ * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
+ * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+ *
+ */
+
+// Artichow configuration
+/* <php5> */
+if(is_file(dirname(__FILE__)."/Artichow.cfg.php")) { // For PHP 4+5 version
+	require_once dirname(__FILE__)."/Artichow.cfg.php";
+}
+/* </php5> */
+
+// Some useful files
+require_once ARTICHOW."/common.php";
+require_once ARTICHOW."/Component.class.php";
+require_once ARTICHOW."/Image.class.php";
+
+require_once ARTICHOW."/inc/Grid.class.php";
+require_once ARTICHOW."/inc/Tools.class.php";
+require_once ARTICHOW."/inc/Drawer.class.php";
+require_once ARTICHOW."/inc/Math.class.php";
+require_once ARTICHOW."/inc/Tick.class.php";
+require_once ARTICHOW."/inc/Axis.class.php";
+require_once ARTICHOW."/inc/Legend.class.php";
+require_once ARTICHOW."/inc/Mark.class.php";
+require_once ARTICHOW."/inc/Label.class.php";
+require_once ARTICHOW."/inc/Text.class.php";
+require_once ARTICHOW."/inc/Color.class.php";
+require_once ARTICHOW."/inc/Font.class.php";
+require_once ARTICHOW."/inc/Gradient.class.php";
+
+/**
+ * A graph 
+ *
+ * @package Artichow
+ */
+class awGraph extends awImage {
+
+	/**
+	 * Graph name
+	 *
+	 * @var string
+	 */
+	protected $name;
+
+	/**
+	 * Cache timeout
+	 *
+	 * @var int
+	 */
+	protected $timeout = 0;
+	
+	/**
+	 * Graph timing ?
+	 *
+	 * @var bool
+	 */
+	protected $timing;
+	
+	/**
+	 * Components
+	 *
+	 * @var array
+	 */
+	private $components = array();
+	
+	/**
+	 * Some labels to add to the component
+	 *
+	 * @var array
+	 */
+	protected $labels = array();
+	
+	/**
+	 * Graph title
+	 *
+	 * @var Label
+	 */
+	public $title;
+	
+	/**
+	 * Construct a new graph
+	 *
+	 * @param int $width Graph width
+	 * @param int $height Graph height
+	 * @param string $name Graph name for the cache (must be unique). Let it null to not use the cache.
+	 * @param int $timeout Cache timeout (unix timestamp)
+	 */
+	public function __construct($width = NULL, $height = NULL, $name = NULL, $timeout = 0) {
+		
+		parent::__construct();
+	
+		$this->setSize($width, $height);
+
+		if(ARTICHOW_CACHE) {
+	
+			$this->name = $name;
+			$this->timeout = $timeout;
+			
+			// Clean sometimes all the cache
+			if(mt_rand(0, 5000) ===  0) {
+				awGraph::cleanCache();
+			}
+			
+			if($this->name !== NULL) {
+			
+				$file = ARTICHOW_CACHE_DIRECTORY."/".$this->name."-time";
+				
+				if(is_file($file)) {
+				
+					$type = awGraph::cleanGraphCache($file);
+					
+					if($type === NULL) {
+						awGraph::deleteFromCache($this->name);
+					} else {
+						header("Content-Type: image/".$type);
+						readfile(ARTICHOW_CACHE_DIRECTORY."/".$this->name."");
+						exit;
+					}
+					
+				}
+			
+			}
+		
+		}
+		
+		$this->title = new awLabel(
+			NULL,
+			new awTuffy(16),
+			NULL,
+			0
+		);
+		$this->title->setAlign(awLabel::CENTER, awLabel::BOTTOM);
+	
+	}
+	
+	/**
+	 * Delete a graph from the cache
+	 *
+	 * @param string $name Graph name
+	 * @return bool TRUE on success, FALSE on failure
+	 */
+	public static function deleteFromCache($name) {
+
+		if(ARTICHOW_CACHE) {
+		
+			if(is_file(ARTICHOW_CACHE_DIRECTORY."/".$name."-time")) {
+				unlink(ARTICHOW_CACHE_DIRECTORY."/".$name."");
+				unlink(ARTICHOW_CACHE_DIRECTORY."/".$name."-time");
+			}
+			
+		}
+		
+	}
+	
+	/**
+	 * Delete all graphs from the cache
+	 */
+	public static function deleteAllCache() {
+
+		if(ARTICHOW_CACHE) {
+	
+			$dp = opendir(ARTICHOW_CACHE_DIRECTORY);
+			
+			while($file = readdir($dp)) {
+				if($file !== '.' and $file != '..') {
+					unlink(ARTICHOW_CACHE_DIRECTORY."/".$file);
+				}
+			}
+			
+		}
+	
+	}
+	
+	/**
+	 * Clean cache
+	 */
+	public static function cleanCache() {
+
+		if(ARTICHOW_CACHE) {
+	
+			$glob = glob(ARTICHOW_CACHE_DIRECTORY."/*-time");
+			
+			foreach($glob as $file) {
+				
+				$type = awGraph::cleanGraphCache($file);
+				
+				if($type === NULL) {
+					$name = preg_replace("/.*\/(.*)\-time/", "\\1", $file);
+					awGraph::deleteFromCache($name);
+				}
+			
+			}
+			
+		}
+		
+	}
+	
+	/**
+	 * Enable/Disable Graph timing
+	 *
+	 * @param bool $timing
+	 */
+	public function setTiming($timing) {
+		$this->timing = (bool)$timing;
+	}
+	 
+	/**
+	 * Add a component to the graph
+	 *
+	 * @param awComponent $component
+	 */
+	public function add(awComponent $component) {
+	
+		$this->components[] = $component;
+	
+	}
+	
+	/**
+	 * Add a label to the component
+	 *
+	 * @param awLabel $label
+	 * @param int $x Position on X axis of the center of the text
+	 * @param int $y Position on Y axis of the center of the text
+	 */
+	public function addLabel(awLabel $label, $x, $y) {
+	
+		$this->labels[] = array(
+			$label, $x, $y
+		);
+		
+	}
+	
+	/**
+	 * Add a label to the component with aboslute position
+	 *
+	 * @param awLabel $label
+	 * @param awPoint $point Text position
+	 */
+	public function addAbsLabel(awLabel $label, awPoint $point) {
+	
+		$this->labels[] = array(
+			$label, $point
+		);
+		
+	}
+	
+	/**
+	 * Build the graph and draw component on it
+	 * Image is sent to the user browser
+	 *
+	 * @param string $file Save the image in the specified file. Let it null to print image to screen.
+	 */
+	public function draw($file = NULL) {
+		
+		if($this->timing) {
+			$time = microtimeFloat();
+		}
+	
+		$this->create();
+		
+		foreach($this->components as $component) {
+		
+			$this->drawComponent($component);
+		
+		}
+		
+		$this->drawTitle();
+		$this->drawShadow();
+		$this->drawLabels();
+		
+		if($this->timing) {
+			$this->drawTiming(microtimeFloat() - $time);
+		}
+
+		if(ARTICHOW_CACHE and $this->name !== NULL) {
+			ob_start();
+		}
+		
+		$this->send($file);
+		
+		if(ARTICHOW_CACHE and $this->name !== NULL) {
+		
+			$data = ob_get_contents();
+			
+			if(is_writable(ARTICHOW_CACHE_DIRECTORY) === FALSE) {
+				trigger_error("Cache directory is not writable");
+			}
+		
+			$file = ARTICHOW_CACHE_DIRECTORY."/".$this->name."";
+			file_put_contents($file, $data);
+		
+			$file .= "-time";
+			file_put_contents($file, $this->timeout."\n".$this->getFormat());
+
+			ob_clean();
+
+			echo $data;
+			
+		}
+	
+	}
+	
+	private function drawLabels() {
+	
+		$drawer = $this->getDrawer();
+	
+		foreach($this->labels as $array) {
+		
+			if(count($array) === 3) {
+			
+				// Text in relative position
+				list($label, $x, $y) = $array;
+				
+				$point = new awPoint(
+					$x * $this->width,
+					$y * $this->height
+				);
+				
+			} else {
+			
+				// Text in absolute position
+				list($label, $point) = $array;
+			
+			}
+				
+			$label->draw($drawer, $point);
+		
+		}
+		
+	}
+		
+	private function drawTitle() {
+	
+		$drawer = $this->getDrawer();
+	
+		$point = new awPoint(
+			$this->width / 2,
+			10
+		);
+		
+		$this->title->draw($drawer, $point);
+	
+	}
+	
+	private function drawTiming($time) {
+	
+		$drawer = $this->getDrawer();
+		
+		$label = new awLabel;
+		$label->set("(".sprintf("%.3f", $time)." s)");
+		$label->setAlign(awLabel::LEFT, awLabel::TOP);
+		$label->border->show();
+		$label->setPadding(1, 0, 0, 0);
+		$label->setBackgroundColor(new awColor(230, 230, 230, 25));
+		
+		$label->draw($drawer, new awPoint(5, $drawer->height - 5));
+	
+	}
+	
+	private static function cleanGraphCache($file) {
+	
+		list(
+			$time,
+			$type
+		) = explode("\n", file_get_contents($file));
+		
+		$time = (int)$time;
+		
+		if($time !== 0 and $time < time()) {
+			return NULL;
+		} else {
+			return $type;
+		}
+		
+		
+	}
+
+}
+
+registerClass('Graph');
+
+/*
+ * To preserve PHP 4 compatibility
+ */
+function microtimeFloat() { 
+	list($usec, $sec) = explode(" ", microtime()); 
+	return (float)$usec + (float)$sec; 
+}
+?>
diff --git a/htdocs/includes/boxes/box_contracts.php b/htdocs/includes/boxes/box_contracts.php
index 4e0efc39c82..59b0896edfd 100644
--- a/htdocs/includes/boxes/box_contracts.php
+++ b/htdocs/includes/boxes/box_contracts.php
@@ -98,7 +98,7 @@ class box_contracts extends ModeleBoxes {
 
     				$contractstatic->statut=$objp->fk_statut;
     				$contractstatic->id=$objp->rowid;
-    				$result=$contractstatic->fetch_lines();
+    				$result=$contractstatic->fetch_lignes();
 
     				// fin_validite is no more on contract but on services
     				// if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->contrat->cloture->warning_delay)) { $late = img_warning($langs->trans("Late")); }
diff --git a/htdocs/includes/fckeditor/.cvsignore b/htdocs/includes/fckeditor/.cvsignore
index e86d54950d4..f588dbc45b1 100644
--- a/htdocs/includes/fckeditor/.cvsignore
+++ b/htdocs/includes/fckeditor/.cvsignore
@@ -1,2 +1,2 @@
-_samples
-_testcases
+_samples
+_testcases
diff --git a/htdocs/includes/fckeditor/editor/.cvsignore b/htdocs/includes/fckeditor/editor/.cvsignore
index f9e18280af7..a5156980bc9 100644
--- a/htdocs/includes/fckeditor/editor/.cvsignore
+++ b/htdocs/includes/fckeditor/editor/.cvsignore
@@ -1 +1 @@
-_sources
+_sources
diff --git a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
index 19d5cb704ba..27e368e8bbb 100644
--- a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
+++ b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
@@ -1,148 +1,148 @@
-<cfsetting enablecfoutputonly="true">
-<!---
-This code uses a CF User Defined Function and should work in CF version 5.0
-and up without alteration.
-
-Also if you are hosting your site at an ISP, you will have to check with them
-to see if the use of <CFEXECUTE> is allowed. In most cases ISP will not allow
-the use of that tag for security reasons. Clients would be able to access each
-others files in certain cases.
---->
-
-<!--- The following variables values must reflect your installation. --->
-<cfset aspell_dir	  = "C:\Program Files\Aspell\bin">
-<cfset lang         = "en_US">
-<cfset aspell_opts  = "-a --lang=#lang# --encoding=utf-8 -H --rem-sgml-check=alt">
-<cfset tempfile_in  = GetTempFile(GetTempDirectory(), "spell_")>
-<cfset tempfile_out = GetTempFile(GetTempDirectory(), "spell_")>
-<cfset spellercss   = "../spellerStyle.css">
-<cfset word_win_src = "../wordWindow.js">
-
-<cfset form.checktext = form["textinputs[]"]>
-
-<!--- make no difference between URL and FORM scopes --->
-<cfparam name="url.checktext"  default="">
-<cfparam name="form.checktext" default="#url.checktext#">
-
-<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
-<cfset submitted_text = ReplaceList(form.checktext,"%u201C,%u201D","%22,%22")>
-
-<!--- submitted_text now is ready for processing --->
-
-<!--- use carat on each line to escape possible aspell commands --->
-<cfset text = "">
-<cfset CRLF = Chr(13) & Chr(10)>
-
-<cfloop list="#submitted_text#" index="field" delimiters=",">
-	<cfset text = text & "%"  & CRLF
-                      & "^A" & CRLF
-                      & "!"  & CRLF>
-	<!--- Strip all tags for the text. (by FredCK - #339 / #681) --->
-	<cfset field = REReplace(URLDecode(field), "<[^>]+>", " ", "all")>
-	<cfloop list="#field#" index="line" delimiters="#CRLF#">
-		<cfset text = ListAppend(text, "^" & Trim(JSStringFormat(line)), CRLF)>
-	</cfloop>
-</cfloop>
-
-<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
-<cffile action="write" file="#tempfile_in#" output="#text#" charset="utf-8">
-
-<!--- execute aspell in an UTF-8 console and redirect output to a file. UTF-8 encoding is lost if done differently --->
-<cfexecute name="cmd.exe" arguments='/c type "#tempfile_in#" | "#aspell_dir#\aspell.exe" #aspell_opts# > "#tempfile_out#"' timeout="100"/>
-
-<!--- read output file for further processing --->
-<cffile action="read" file="#tempfile_out#" variable="food" charset="utf-8">
-
-<!--- remove temp files --->
-<cffile action="delete" file="#tempfile_in#">
-<cffile action="delete" file="#tempfile_out#">
-
-<cfset texts = StructNew()>
-<cfset texts.textinputs = "">
-<cfset texts.words      = "">
-<cfset texts.abort      = "">
-
-<!--- Generate Text Inputs --->
-<cfset i = 0>
-<cfloop list="#submitted_text#" index="textinput">
-  <cfset texts.textinputs = ListAppend(texts.textinputs, 'textinputs[#i#] = decodeURIComponent("#textinput#");', CRLF)>
-  <cfset i = i + 1>
-</cfloop>
-
-<!--- Generate Words Lists --->
-<cfset word_cnt  = 0>
-<cfset input_cnt = -1>
-<cfloop list="#food#" index="aspell_line" delimiters="#CRLF#">
-    <cfset leftChar = Left(aspell_line, 1)>
-	<cfif leftChar eq "*">
-			<cfset input_cnt   = input_cnt + 1>
-			<cfset word_cnt    = 0>
-			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#] = [];", CRLF)>
-			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#] = [];", CRLF)>
-    <cfelse>
-        <cfif leftChar eq "&" or leftChar eq "##">
-			<!--- word that misspelled --->
-			<cfset bad_word    = Trim(ListGetAt(aspell_line, 2, " "))>
-			<cfset bad_word    = Replace(bad_word, "'", "\'", "ALL")>
-			<!--- sugestions --->
-			<cfset sug_list    = Trim(ListRest(aspell_line, ":"))>
-			<cfset sug_list    = ListQualify(Replace(sug_list, "'", "\'", "ALL"), "'")>
-			<!--- javascript --->
-			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#][#word_cnt#] = '#bad_word#';", CRLF)>
-			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#][#word_cnt#] = [#sug_list#];", CRLF)>
-			<cfset word_cnt    = word_cnt + 1>
-		</cfif>
-     </cfif>
-</cfloop>
-
-<cfif texts.words eq "">
-  <cfset texts.abort = "alert('Spell check complete.\n\nNo misspellings found.'); top.window.close();">
-</cfif>
-
-<cfcontent type="text/html; charset=utf-8">
-
-<cfoutput><html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<link rel="stylesheet" type="text/css" href="#spellercss#" />
-<script language="javascript" src="#word_win_src#"></script>
-<script language="javascript">
-var suggs      = new Array();
-var words      = new Array();
-var textinputs = new Array();
-var error;
-
-#texts.textinputs##CRLF#
-#texts.words#
-#texts.abort#
-
-var wordWindowObj = new wordWindow();
-wordWindowObj.originalSpellings = words;
-wordWindowObj.suggestions = suggs;
-wordWindowObj.textInputs = textinputs;
-
-function init_spell() {
-	// check if any error occured during server-side processing
-	if( error ) {
-		alert( error );
-	} else {
-		// call the init_spell() function in the parent frameset
-		if (parent.frames.length) {
-			parent.init_spell( wordWindowObj );
-		} else {
-			alert('This page was loaded outside of a frameset. It might not display properly');
-		}
-	}
-}
-</script>
-
-</head>
-<body onLoad="init_spell();">
-
-<script type="text/javascript">
-wordWindowObj.writeBody();
-</script>
-
-</body>
-</html></cfoutput>
-<cfsetting enablecfoutputonly="false">
+<cfsetting enablecfoutputonly="true">
+<!---
+This code uses a CF User Defined Function and should work in CF version 5.0
+and up without alteration.
+
+Also if you are hosting your site at an ISP, you will have to check with them
+to see if the use of <CFEXECUTE> is allowed. In most cases ISP will not allow
+the use of that tag for security reasons. Clients would be able to access each
+others files in certain cases.
+--->
+
+<!--- The following variables values must reflect your installation. --->
+<cfset aspell_dir	  = "C:\Program Files\Aspell\bin">
+<cfset lang         = "en_US">
+<cfset aspell_opts  = "-a --lang=#lang# --encoding=utf-8 -H --rem-sgml-check=alt">
+<cfset tempfile_in  = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset tempfile_out = GetTempFile(GetTempDirectory(), "spell_")>
+<cfset spellercss   = "../spellerStyle.css">
+<cfset word_win_src = "../wordWindow.js">
+
+<cfset form.checktext = form["textinputs[]"]>
+
+<!--- make no difference between URL and FORM scopes --->
+<cfparam name="url.checktext"  default="">
+<cfparam name="form.checktext" default="#url.checktext#">
+
+<!--- Takes care of those pesky smart quotes from MS apps, replaces them with regular quotes --->
+<cfset submitted_text = ReplaceList(form.checktext,"%u201C,%u201D","%22,%22")>
+
+<!--- submitted_text now is ready for processing --->
+
+<!--- use carat on each line to escape possible aspell commands --->
+<cfset text = "">
+<cfset CRLF = Chr(13) & Chr(10)>
+
+<cfloop list="#submitted_text#" index="field" delimiters=",">
+	<cfset text = text & "%"  & CRLF
+                      & "^A" & CRLF
+                      & "!"  & CRLF>
+	<!--- Strip all tags for the text. (by FredCK - #339 / #681) --->
+	<cfset field = REReplace(URLDecode(field), "<[^>]+>", " ", "all")>
+	<cfloop list="#field#" index="line" delimiters="#CRLF#">
+		<cfset text = ListAppend(text, "^" & Trim(JSStringFormat(line)), CRLF)>
+	</cfloop>
+</cfloop>
+
+<!--- create temp file from the submitted text, this will be passed to aspell to be check for misspelled words --->
+<cffile action="write" file="#tempfile_in#" output="#text#" charset="utf-8">
+
+<!--- execute aspell in an UTF-8 console and redirect output to a file. UTF-8 encoding is lost if done differently --->
+<cfexecute name="cmd.exe" arguments='/c type "#tempfile_in#" | "#aspell_dir#\aspell.exe" #aspell_opts# > "#tempfile_out#"' timeout="100"/>
+
+<!--- read output file for further processing --->
+<cffile action="read" file="#tempfile_out#" variable="food" charset="utf-8">
+
+<!--- remove temp files --->
+<cffile action="delete" file="#tempfile_in#">
+<cffile action="delete" file="#tempfile_out#">
+
+<cfset texts = StructNew()>
+<cfset texts.textinputs = "">
+<cfset texts.words      = "">
+<cfset texts.abort      = "">
+
+<!--- Generate Text Inputs --->
+<cfset i = 0>
+<cfloop list="#submitted_text#" index="textinput">
+  <cfset texts.textinputs = ListAppend(texts.textinputs, 'textinputs[#i#] = decodeURIComponent("#textinput#");', CRLF)>
+  <cfset i = i + 1>
+</cfloop>
+
+<!--- Generate Words Lists --->
+<cfset word_cnt  = 0>
+<cfset input_cnt = -1>
+<cfloop list="#food#" index="aspell_line" delimiters="#CRLF#">
+    <cfset leftChar = Left(aspell_line, 1)>
+	<cfif leftChar eq "*">
+			<cfset input_cnt   = input_cnt + 1>
+			<cfset word_cnt    = 0>
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#] = [];", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#] = [];", CRLF)>
+    <cfelse>
+        <cfif leftChar eq "&" or leftChar eq "##">
+			<!--- word that misspelled --->
+			<cfset bad_word    = Trim(ListGetAt(aspell_line, 2, " "))>
+			<cfset bad_word    = Replace(bad_word, "'", "\'", "ALL")>
+			<!--- sugestions --->
+			<cfset sug_list    = Trim(ListRest(aspell_line, ":"))>
+			<cfset sug_list    = ListQualify(Replace(sug_list, "'", "\'", "ALL"), "'")>
+			<!--- javascript --->
+			<cfset texts.words = ListAppend(texts.words, "words[#input_cnt#][#word_cnt#] = '#bad_word#';", CRLF)>
+			<cfset texts.words = ListAppend(texts.words, "suggs[#input_cnt#][#word_cnt#] = [#sug_list#];", CRLF)>
+			<cfset word_cnt    = word_cnt + 1>
+		</cfif>
+     </cfif>
+</cfloop>
+
+<cfif texts.words eq "">
+  <cfset texts.abort = "alert('Spell check complete.\n\nNo misspellings found.'); top.window.close();">
+</cfif>
+
+<cfcontent type="text/html; charset=utf-8">
+
+<cfoutput><html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="#spellercss#" />
+<script language="javascript" src="#word_win_src#"></script>
+<script language="javascript">
+var suggs      = new Array();
+var words      = new Array();
+var textinputs = new Array();
+var error;
+
+#texts.textinputs##CRLF#
+#texts.words#
+#texts.abort#
+
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			alert('This page was loaded outside of a frameset. It might not display properly');
+		}
+	}
+}
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html></cfoutput>
+<cfsetting enablecfoutputonly="false">
diff --git a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
index 443fa8001a0..fae010d9ba9 100644
--- a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
+++ b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
@@ -1,181 +1,181 @@
-#!/usr/bin/perl
-
-use CGI qw/ :standard /;
-use File::Temp qw/ tempfile tempdir /;
-
-# my $spellercss = '/speller/spellerStyle.css';					# by FredCK
-my $spellercss = '../spellerStyle.css';							# by FredCK
-# my $wordWindowSrc = '/speller/wordWindow.js';					# by FredCK
-my $wordWindowSrc = '../wordWindow.js';							# by FredCK
-my @textinputs = param( 'textinputs[]' ); # array
-# my $aspell_cmd = 'aspell';									# by FredCK (for Linux)
-my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"';	# by FredCK (for Windows)
-my $lang = 'en_US';
-# my $aspell_opts = "-a --lang=$lang --encoding=utf-8";			# by FredCK
-my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		# by FredCK
-my $input_separator = "A";
-
-# set the 'wordtext' JavaScript variable to the submitted text.
-sub printTextVar {
-	for( my $i = 0; $i <= $#textinputs; $i++ ) {
-	        print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
-	}
-}
-
-sub printTextIdxDecl {
-	my $idx = shift;
-	print "words[$idx] = [];\n";
-	print "suggs[$idx] = [];\n";
-}
-
-sub printWordsElem {
-	my( $textIdx, $wordIdx, $word ) = @_;
-	print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
-}
-
-sub printSuggsElem {
-	my( $textIdx, $wordIdx, @suggs ) = @_;
-	print "suggs[$textIdx][$wordIdx] = [";
-	for my $i ( 0..$#suggs ) {
-		print "'" . escapeQuote( $suggs[$i] ) . "'";
-		if( $i < $#suggs ) {
-			print ", ";
-		}
-	}
-	print "];\n";
-}
-
-sub printCheckerResults {
-	my $textInputIdx = -1;
-	my $wordIdx = 0;
-	my $unhandledText;
-	# create temp file
-	my $dir = tempdir( CLEANUP => 1 );
-	my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
-
-	# temp file was created properly?
-
-	# open temp file, add the submitted text.
-	for( my $i = 0; $i <= $#textinputs; $i++ ) {
-		$text = url_decode( $textinputs[$i] );
-		# Strip all tags for the text. (by FredCK - #339 / #681)
-		$text =~ s/<[^>]+>/ /g;
-		@lines = split( /\n/, $text );
-		print $fh "\%\n"; # exit terse mode
-		print $fh "^$input_separator\n";
-		print $fh "!\n";  # enter terse mode
-		for my $line ( @lines ) {
-			# use carat on each line to escape possible aspell commands
-			print $fh "^$line\n";
-		}
-
-	}
-	# exec aspell command
-	my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
-	open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
-	# parse each line of aspell return
-	for my $ret ( <ASPELL> ) {
-		chomp( $ret );
-		# if '&', then not in dictionary but has suggestions
-		# if '#', then not in dictionary and no suggestions
-		# if '*', then it is a delimiter between text inputs
-		if( $ret =~ /^\*/ ) {
-			$textInputIdx++;
-			printTextIdxDecl( $textInputIdx );
-			$wordIdx = 0;
-
-		} elsif( $ret =~ /^(&|#)/ ) {
-			my @tokens = split( " ", $ret, 5 );
-			printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
-			my @suggs = ();
-			if( $tokens[4] ) {
-				@suggs = split( ", ", $tokens[4] );
-			}
-			printSuggsElem( $textInputIdx, $wordIdx, @suggs );
-			$wordIdx++;
-		} else {
-			$unhandledText .= $ret;
-		}
-	}
-	close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
-}
-
-sub escapeQuote {
-	my $str = shift;
-	$str =~ s/'/\\'/g;
-	return $str;
-}
-
-sub handleError {
-	my $err = shift;
-	print "error = '" . escapeQuote( $err ) . "';\n";
-}
-
-sub url_decode {
-	local $_ = @_ ? shift : $_;
-	defined or return;
-	# change + signs to spaces
-	tr/+/ /;
-	# change hex escapes to the proper characters
-	s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
-	return $_;
-}
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Display HTML
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-print <<EOF;
-Content-type: text/html; charset=utf-8
-
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<link rel="stylesheet" type="text/css" href="$spellercss"/>
-<script src="$wordWindowSrc"></script>
-<script type="text/javascript">
-var suggs = new Array();
-var words = new Array();
-var textinputs = new Array();
-var error;
-EOF
-
-printTextVar();
-
-printCheckerResults();
-
-print <<EOF;
-var wordWindowObj = new wordWindow();
-wordWindowObj.originalSpellings = words;
-wordWindowObj.suggestions = suggs;
-wordWindowObj.textInputs = textinputs;
-
-
-function init_spell() {
-	// check if any error occured during server-side processing
-	if( error ) {
-		alert( error );
-	} else {
-		// call the init_spell() function in the parent frameset
-		if (parent.frames.length) {
-			parent.init_spell( wordWindowObj );
-		} else {
-			error = "This page was loaded outside of a frameset. ";
-			error += "It might not display properly";
-			alert( error );
-		}
-	}
-}
-
-</script>
-
-</head>
-<body onLoad="init_spell();">
-
-<script type="text/javascript">
-wordWindowObj.writeBody();
-</script>
-
-</body>
-</html>
-EOF
+#!/usr/bin/perl
+
+use CGI qw/ :standard /;
+use File::Temp qw/ tempfile tempdir /;
+
+# my $spellercss = '/speller/spellerStyle.css';					# by FredCK
+my $spellercss = '../spellerStyle.css';							# by FredCK
+# my $wordWindowSrc = '/speller/wordWindow.js';					# by FredCK
+my $wordWindowSrc = '../wordWindow.js';							# by FredCK
+my @textinputs = param( 'textinputs[]' ); # array
+# my $aspell_cmd = 'aspell';									# by FredCK (for Linux)
+my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"';	# by FredCK (for Windows)
+my $lang = 'en_US';
+# my $aspell_opts = "-a --lang=$lang --encoding=utf-8";			# by FredCK
+my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt";		# by FredCK
+my $input_separator = "A";
+
+# set the 'wordtext' JavaScript variable to the submitted text.
+sub printTextVar {
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+	        print "textinputs[$i] = decodeURIComponent('" . escapeQuote( $textinputs[$i] ) . "')\n";
+	}
+}
+
+sub printTextIdxDecl {
+	my $idx = shift;
+	print "words[$idx] = [];\n";
+	print "suggs[$idx] = [];\n";
+}
+
+sub printWordsElem {
+	my( $textIdx, $wordIdx, $word ) = @_;
+	print "words[$textIdx][$wordIdx] = '" . escapeQuote( $word ) . "';\n";
+}
+
+sub printSuggsElem {
+	my( $textIdx, $wordIdx, @suggs ) = @_;
+	print "suggs[$textIdx][$wordIdx] = [";
+	for my $i ( 0..$#suggs ) {
+		print "'" . escapeQuote( $suggs[$i] ) . "'";
+		if( $i < $#suggs ) {
+			print ", ";
+		}
+	}
+	print "];\n";
+}
+
+sub printCheckerResults {
+	my $textInputIdx = -1;
+	my $wordIdx = 0;
+	my $unhandledText;
+	# create temp file
+	my $dir = tempdir( CLEANUP => 1 );
+	my( $fh, $tmpfilename ) = tempfile( DIR => $dir );
+
+	# temp file was created properly?
+
+	# open temp file, add the submitted text.
+	for( my $i = 0; $i <= $#textinputs; $i++ ) {
+		$text = url_decode( $textinputs[$i] );
+		# Strip all tags for the text. (by FredCK - #339 / #681)
+		$text =~ s/<[^>]+>/ /g;
+		@lines = split( /\n/, $text );
+		print $fh "\%\n"; # exit terse mode
+		print $fh "^$input_separator\n";
+		print $fh "!\n";  # enter terse mode
+		for my $line ( @lines ) {
+			# use carat on each line to escape possible aspell commands
+			print $fh "^$line\n";
+		}
+
+	}
+	# exec aspell command
+	my $cmd = "$aspell_cmd $aspell_opts < $tmpfilename 2>&1";
+	open ASPELL, "$cmd |" or handleError( "Could not execute `$cmd`\\n$!" ) and return;
+	# parse each line of aspell return
+	for my $ret ( <ASPELL> ) {
+		chomp( $ret );
+		# if '&', then not in dictionary but has suggestions
+		# if '#', then not in dictionary and no suggestions
+		# if '*', then it is a delimiter between text inputs
+		if( $ret =~ /^\*/ ) {
+			$textInputIdx++;
+			printTextIdxDecl( $textInputIdx );
+			$wordIdx = 0;
+
+		} elsif( $ret =~ /^(&|#)/ ) {
+			my @tokens = split( " ", $ret, 5 );
+			printWordsElem( $textInputIdx, $wordIdx, $tokens[1] );
+			my @suggs = ();
+			if( $tokens[4] ) {
+				@suggs = split( ", ", $tokens[4] );
+			}
+			printSuggsElem( $textInputIdx, $wordIdx, @suggs );
+			$wordIdx++;
+		} else {
+			$unhandledText .= $ret;
+		}
+	}
+	close ASPELL or handleError( "Error executing `$cmd`\\n$unhandledText" ) and return;
+}
+
+sub escapeQuote {
+	my $str = shift;
+	$str =~ s/'/\\'/g;
+	return $str;
+}
+
+sub handleError {
+	my $err = shift;
+	print "error = '" . escapeQuote( $err ) . "';\n";
+}
+
+sub url_decode {
+	local $_ = @_ ? shift : $_;
+	defined or return;
+	# change + signs to spaces
+	tr/+/ /;
+	# change hex escapes to the proper characters
+	s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
+	return $_;
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# Display HTML
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+print <<EOF;
+Content-type: text/html; charset=utf-8
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="$spellercss"/>
+<script src="$wordWindowSrc"></script>
+<script type="text/javascript">
+var suggs = new Array();
+var words = new Array();
+var textinputs = new Array();
+var error;
+EOF
+
+printTextVar();
+
+printCheckerResults();
+
+print <<EOF;
+var wordWindowObj = new wordWindow();
+wordWindowObj.originalSpellings = words;
+wordWindowObj.suggestions = suggs;
+wordWindowObj.textInputs = textinputs;
+
+
+function init_spell() {
+	// check if any error occured during server-side processing
+	if( error ) {
+		alert( error );
+	} else {
+		// call the init_spell() function in the parent frameset
+		if (parent.frames.length) {
+			parent.init_spell( wordWindowObj );
+		} else {
+			error = "This page was loaded outside of a frameset. ";
+			error += "It might not display properly";
+			alert( error );
+		}
+	}
+}
+
+</script>
+
+</head>
+<body onLoad="init_spell();">
+
+<script type="text/javascript">
+wordWindowObj.writeBody();
+</script>
+
+</body>
+</html>
+EOF
diff --git a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
index 073368a4322..c85be9ab639 100644
--- a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
+++ b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
@@ -1,461 +1,461 @@
-////////////////////////////////////////////////////
-// spellChecker.js
-//
-// spellChecker object
-//
-// This file is sourced on web pages that have a textarea object to evaluate
-// for spelling. It includes the implementation for the spellCheckObject.
-//
-////////////////////////////////////////////////////
-
-
-// constructor
-function spellChecker( textObject ) {
-
-	// public properties - configurable
-//	this.popUpUrl = '/speller/spellchecker.html';							// by FredCK
-	this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html';		// by FredCK
-	this.popUpName = 'spellchecker';
-//	this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes";	// by FredCK
-	this.popUpProps = null ;																	// by FredCK
-//	this.spellCheckScript = '/speller/server-scripts/spellchecker.php';		// by FredCK
-	//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
-
-	// values used to keep track of what happened to a word
-	this.replWordFlag = "R";	// single replace
-	this.ignrWordFlag = "I";	// single ignore
-	this.replAllFlag = "RA";	// replace all occurances
-	this.ignrAllFlag = "IA";	// ignore all occurances
-	this.fromReplAll = "~RA";	// an occurance of a "replace all" word
-	this.fromIgnrAll = "~IA";	// an occurance of a "ignore all" word
-	// properties set at run time
-	this.wordFlags = new Array();
-	this.currentTextIndex = 0;
-	this.currentWordIndex = 0;
-	this.spellCheckerWin = null;
-	this.controlWin = null;
-	this.wordWin = null;
-	this.textArea = textObject;	// deprecated
-	this.textInputs = arguments;
-
-	// private methods
-	this._spellcheck = _spellcheck;
-	this._getSuggestions = _getSuggestions;
-	this._setAsIgnored = _setAsIgnored;
-	this._getTotalReplaced = _getTotalReplaced;
-	this._setWordText = _setWordText;
-	this._getFormInputs = _getFormInputs;
-
-	// public methods
-	this.openChecker = openChecker;
-	this.startCheck = startCheck;
-	this.checkTextBoxes = checkTextBoxes;
-	this.checkTextAreas = checkTextAreas;
-	this.spellCheckAll = spellCheckAll;
-	this.ignoreWord = ignoreWord;
-	this.ignoreAll = ignoreAll;
-	this.replaceWord = replaceWord;
-	this.replaceAll = replaceAll;
-	this.terminateSpell = terminateSpell;
-	this.undo = undo;
-
-	// set the current window's "speller" property to the instance of this class.
-	// this object can now be referenced by child windows/frames.
-	window.speller = this;
-}
-
-// call this method to check all text boxes (and only text boxes) in the HTML document
-function checkTextBoxes() {
-	this.textInputs = this._getFormInputs( "^text$" );
-	this.openChecker();
-}
-
-// call this method to check all textareas (and only textareas ) in the HTML document
-function checkTextAreas() {
-	this.textInputs = this._getFormInputs( "^textarea$" );
-	this.openChecker();
-}
-
-// call this method to check all text boxes and textareas in the HTML document
-function spellCheckAll() {
-	this.textInputs = this._getFormInputs( "^text(area)?$" );
-	this.openChecker();
-}
-
-// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
-// object's constructor or to the textInputs property
-function openChecker() {
-	this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
-	if( !this.spellCheckerWin.opener ) {
-		this.spellCheckerWin.opener = window;
-	}
-}
-
-function startCheck( wordWindowObj, controlWindowObj ) {
-
-	// set properties from args
-	this.wordWin = wordWindowObj;
-	this.controlWin = controlWindowObj;
-
-	// reset properties
-	this.wordWin.resetForm();
-	this.controlWin.resetForm();
-	this.currentTextIndex = 0;
-	this.currentWordIndex = 0;
-	// initialize the flags to an array - one element for each text input
-	this.wordFlags = new Array( this.wordWin.textInputs.length );
-	// each element will be an array that keeps track of each word in the text
-	for( var i=0; i<this.wordFlags.length; i++ ) {
-		this.wordFlags[i] = [];
-	}
-
-	// start
-	this._spellcheck();
-
-	return true;
-}
-
-function ignoreWord() {
-	var wi = this.currentWordIndex;
-	var ti = this.currentTextIndex;
-	if( !this.wordWin ) {
-		alert( 'Error: Word frame not available.' );
-		return false;
-	}
-	if( !this.wordWin.getTextVal( ti, wi )) {
-		alert( 'Error: "Not in dictionary" text is missing.' );
-		return false;
-	}
-	// set as ignored
-	if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
-		this.currentWordIndex++;
-		this._spellcheck();
-	}
-	return true;
-}
-
-function ignoreAll() {
-	var wi = this.currentWordIndex;
-	var ti = this.currentTextIndex;
-	if( !this.wordWin ) {
-		alert( 'Error: Word frame not available.' );
-		return false;
-	}
-	// get the word that is currently being evaluated.
-	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
-	if( !s_word_to_repl ) {
-		alert( 'Error: "Not in dictionary" text is missing' );
-		return false;
-	}
-
-	// set this word as an "ignore all" word.
-	this._setAsIgnored( ti, wi, this.ignrAllFlag );
-
-	// loop through all the words after this word
-	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
-		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
-			if(( i == ti && j > wi ) || i > ti ) {
-				// future word: set as "from ignore all" if
-				// 1) do not already have a flag and
-				// 2) have the same value as current word
-				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
-				&& ( !this.wordFlags[i][j] )) {
-					this._setAsIgnored( i, j, this.fromIgnrAll );
-				}
-			}
-		}
-	}
-
-	// finally, move on
-	this.currentWordIndex++;
-	this._spellcheck();
-	return true;
-}
-
-function replaceWord() {
-	var wi = this.currentWordIndex;
-	var ti = this.currentTextIndex;
-	if( !this.wordWin ) {
-		alert( 'Error: Word frame not available.' );
-		return false;
-	}
-	if( !this.wordWin.getTextVal( ti, wi )) {
-		alert( 'Error: "Not in dictionary" text is missing' );
-		return false;
-	}
-	if( !this.controlWin.replacementText ) {
-		return false ;
-	}
-	var txt = this.controlWin.replacementText;
-	if( txt.value ) {
-		var newspell = new String( txt.value );
-		if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
-			this.currentWordIndex++;
-			this._spellcheck();
-		}
-	}
-	return true;
-}
-
-function replaceAll() {
-	var ti = this.currentTextIndex;
-	var wi = this.currentWordIndex;
-	if( !this.wordWin ) {
-		alert( 'Error: Word frame not available.' );
-		return false;
-	}
-	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
-	if( !s_word_to_repl ) {
-		alert( 'Error: "Not in dictionary" text is missing' );
-		return false;
-	}
-	var txt = this.controlWin.replacementText;
-	if( !txt.value ) return false;
-	var newspell = new String( txt.value );
-
-	// set this word as a "replace all" word.
-	this._setWordText( ti, wi, newspell, this.replAllFlag );
-
-	// loop through all the words after this word
-	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
-		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
-			if(( i == ti && j > wi ) || i > ti ) {
-				// future word: set word text to s_word_to_repl if
-				// 1) do not already have a flag and
-				// 2) have the same value as s_word_to_repl
-				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
-				&& ( !this.wordFlags[i][j] )) {
-					this._setWordText( i, j, newspell, this.fromReplAll );
-				}
-			}
-		}
-	}
-
-	// finally, move on
-	this.currentWordIndex++;
-	this._spellcheck();
-	return true;
-}
-
-function terminateSpell() {
-	// called when we have reached the end of the spell checking.
-	var msg = "";		// by FredCK
-	var numrepl = this._getTotalReplaced();
-	if( numrepl == 0 ) {
-		// see if there were no misspellings to begin with
-		if( !this.wordWin ) {
-			msg = "";
-		} else {
-			if( this.wordWin.totalMisspellings() ) {
-//				msg += "No words changed.";			// by FredCK
-				msg += FCKLang.DlgSpellNoChanges ;	// by FredCK
-			} else {
-//				msg += "No misspellings found.";	// by FredCK
-				msg += FCKLang.DlgSpellNoMispell ;	// by FredCK
-			}
-		}
-	} else if( numrepl == 1 ) {
-//		msg += "One word changed.";			// by FredCK
-		msg += FCKLang.DlgSpellOneChange ;	// by FredCK
-	} else {
-//		msg += numrepl + " words changed.";	// by FredCK
-		msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
-	}
-	if( msg ) {
-//		msg += "\n";	// by FredCK
-		alert( msg );
-	}
-
-	if( numrepl > 0 ) {
-		// update the text field(s) on the opener window
-		for( var i = 0; i < this.textInputs.length; i++ ) {
-			// this.textArea.value = this.wordWin.text;
-			if( this.wordWin ) {
-				if( this.wordWin.textInputs[i] ) {
-					this.textInputs[i].value = this.wordWin.textInputs[i];
-				}
-			}
-		}
-	}
-
-	// return back to the calling window
-//	this.spellCheckerWin.close();					// by FredCK
-	if ( typeof( this.OnFinished ) == 'function' )	// by FredCK
-		this.OnFinished(numrepl) ;					// by FredCK
-
-	return true;
-}
-
-function undo() {
-	// skip if this is the first word!
-	var ti = this.currentTextIndex;
-	var wi = this.currentWordIndex;
-
-	if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
-		this.wordWin.removeFocus( ti, wi );
-
-		// go back to the last word index that was acted upon
-		do {
-			// if the current word index is zero then reset the seed
-			if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
-				this.currentTextIndex--;
-				this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
-				if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
-			} else {
-				if( this.currentWordIndex > 0 ) {
-					this.currentWordIndex--;
-				}
-			}
-		} while (
-			this.wordWin.totalWords( this.currentTextIndex ) == 0
-			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
-			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
-		);
-
-		var text_idx = this.currentTextIndex;
-		var idx = this.currentWordIndex;
-		var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
-
-		// if we got back to the first word then set the Undo button back to disabled
-		if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
-			this.controlWin.disableUndo();
-		}
-
-		var i, j, origSpell ;
-		// examine what happened to this current word.
-		switch( this.wordFlags[text_idx][idx] ) {
-			// replace all: go through this and all the future occurances of the word
-			// and revert them all to the original spelling and clear their flags
-			case this.replAllFlag :
-				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
-					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
-						if(( i == text_idx && j >= idx ) || i > text_idx ) {
-							origSpell = this.wordWin.originalSpellings[i][j];
-							if( origSpell == preReplSpell ) {
-								this._setWordText ( i, j, origSpell, undefined );
-							}
-						}
-					}
-				}
-				break;
-
-			// ignore all: go through all the future occurances of the word
-			// and clear their flags
-			case this.ignrAllFlag :
-				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
-					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
-						if(( i == text_idx && j >= idx ) || i > text_idx ) {
-							origSpell = this.wordWin.originalSpellings[i][j];
-							if( origSpell == preReplSpell ) {
-								this.wordFlags[i][j] = undefined;
-							}
-						}
-					}
-				}
-				break;
-
-			// replace: revert the word to its original spelling
-			case this.replWordFlag :
-				this._setWordText ( text_idx, idx, preReplSpell, undefined );
-				break;
-		}
-
-		// For all four cases, clear the wordFlag of this word. re-start the process
-		this.wordFlags[text_idx][idx] = undefined;
-		this._spellcheck();
-	}
-}
-
-function _spellcheck() {
-	var ww = this.wordWin;
-
-	// check if this is the last word in the current text element
-	if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
-		this.currentTextIndex++;
-		this.currentWordIndex = 0;
-		// keep going if we're not yet past the last text element
-		if( this.currentTextIndex < this.wordWin.textInputs.length ) {
-			this._spellcheck();
-			return;
-		} else {
-			this.terminateSpell();
-			return;
-		}
-	}
-
-	// if this is after the first one make sure the Undo button is enabled
-	if( this.currentWordIndex > 0 ) {
-		this.controlWin.enableUndo();
-	}
-
-	// skip the current word if it has already been worked on
-	if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
-		// increment the global current word index and move on.
-		this.currentWordIndex++;
-		this._spellcheck();
-	} else {
-		var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
-		if( evalText ) {
-			this.controlWin.evaluatedText.value = evalText;
-			ww.setFocus( this.currentTextIndex, this.currentWordIndex );
-			this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
-		}
-	}
-}
-
-function _getSuggestions( text_num, word_num ) {
-	this.controlWin.clearSuggestions();
-	// add suggestion in list for each suggested word.
-	// get the array of suggested words out of the
-	// three-dimensional array containing all suggestions.
-	var a_suggests = this.wordWin.suggestions[text_num][word_num];
-	if( a_suggests ) {
-		// got an array of suggestions.
-		for( var ii = 0; ii < a_suggests.length; ii++ ) {
-			this.controlWin.addSuggestion( a_suggests[ii] );
-		}
-	}
-	this.controlWin.selectDefaultSuggestion();
-}
-
-function _setAsIgnored( text_num, word_num, flag ) {
-	// set the UI
-	this.wordWin.removeFocus( text_num, word_num );
-	// do the bookkeeping
-	this.wordFlags[text_num][word_num] = flag;
-	return true;
-}
-
-function _getTotalReplaced() {
-	var i_replaced = 0;
-	for( var i = 0; i < this.wordFlags.length; i++ ) {
-		for( var j = 0; j < this.wordFlags[i].length; j++ ) {
-			if(( this.wordFlags[i][j] == this.replWordFlag )
-			|| ( this.wordFlags[i][j] == this.replAllFlag )
-			|| ( this.wordFlags[i][j] == this.fromReplAll )) {
-				i_replaced++;
-			}
-		}
-	}
-	return i_replaced;
-}
-
-function _setWordText( text_num, word_num, newText, flag ) {
-	// set the UI and form inputs
-	this.wordWin.setText( text_num, word_num, newText );
-	// keep track of what happened to this word:
-	this.wordFlags[text_num][word_num] = flag;
-	return true;
-}
-
-function _getFormInputs( inputPattern ) {
-	var inputs = new Array();
-	for( var i = 0; i < document.forms.length; i++ ) {
-		for( var j = 0; j < document.forms[i].elements.length; j++ ) {
-			if( document.forms[i].elements[j].type.match( inputPattern )) {
-				inputs[inputs.length] = document.forms[i].elements[j];
-			}
-		}
-	}
-	return inputs;
-}
+////////////////////////////////////////////////////
+// spellChecker.js
+//
+// spellChecker object
+//
+// This file is sourced on web pages that have a textarea object to evaluate
+// for spelling. It includes the implementation for the spellCheckObject.
+//
+////////////////////////////////////////////////////
+
+
+// constructor
+function spellChecker( textObject ) {
+
+	// public properties - configurable
+//	this.popUpUrl = '/speller/spellchecker.html';							// by FredCK
+	this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html';		// by FredCK
+	this.popUpName = 'spellchecker';
+//	this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes";	// by FredCK
+	this.popUpProps = null ;																	// by FredCK
+//	this.spellCheckScript = '/speller/server-scripts/spellchecker.php';		// by FredCK
+	//this.spellCheckScript = '/cgi-bin/spellchecker.pl';
+
+	// values used to keep track of what happened to a word
+	this.replWordFlag = "R";	// single replace
+	this.ignrWordFlag = "I";	// single ignore
+	this.replAllFlag = "RA";	// replace all occurances
+	this.ignrAllFlag = "IA";	// ignore all occurances
+	this.fromReplAll = "~RA";	// an occurance of a "replace all" word
+	this.fromIgnrAll = "~IA";	// an occurance of a "ignore all" word
+	// properties set at run time
+	this.wordFlags = new Array();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	this.spellCheckerWin = null;
+	this.controlWin = null;
+	this.wordWin = null;
+	this.textArea = textObject;	// deprecated
+	this.textInputs = arguments;
+
+	// private methods
+	this._spellcheck = _spellcheck;
+	this._getSuggestions = _getSuggestions;
+	this._setAsIgnored = _setAsIgnored;
+	this._getTotalReplaced = _getTotalReplaced;
+	this._setWordText = _setWordText;
+	this._getFormInputs = _getFormInputs;
+
+	// public methods
+	this.openChecker = openChecker;
+	this.startCheck = startCheck;
+	this.checkTextBoxes = checkTextBoxes;
+	this.checkTextAreas = checkTextAreas;
+	this.spellCheckAll = spellCheckAll;
+	this.ignoreWord = ignoreWord;
+	this.ignoreAll = ignoreAll;
+	this.replaceWord = replaceWord;
+	this.replaceAll = replaceAll;
+	this.terminateSpell = terminateSpell;
+	this.undo = undo;
+
+	// set the current window's "speller" property to the instance of this class.
+	// this object can now be referenced by child windows/frames.
+	window.speller = this;
+}
+
+// call this method to check all text boxes (and only text boxes) in the HTML document
+function checkTextBoxes() {
+	this.textInputs = this._getFormInputs( "^text$" );
+	this.openChecker();
+}
+
+// call this method to check all textareas (and only textareas ) in the HTML document
+function checkTextAreas() {
+	this.textInputs = this._getFormInputs( "^textarea$" );
+	this.openChecker();
+}
+
+// call this method to check all text boxes and textareas in the HTML document
+function spellCheckAll() {
+	this.textInputs = this._getFormInputs( "^text(area)?$" );
+	this.openChecker();
+}
+
+// call this method to check text boxe(s) and/or textarea(s) that were passed in to the
+// object's constructor or to the textInputs property
+function openChecker() {
+	this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps );
+	if( !this.spellCheckerWin.opener ) {
+		this.spellCheckerWin.opener = window;
+	}
+}
+
+function startCheck( wordWindowObj, controlWindowObj ) {
+
+	// set properties from args
+	this.wordWin = wordWindowObj;
+	this.controlWin = controlWindowObj;
+
+	// reset properties
+	this.wordWin.resetForm();
+	this.controlWin.resetForm();
+	this.currentTextIndex = 0;
+	this.currentWordIndex = 0;
+	// initialize the flags to an array - one element for each text input
+	this.wordFlags = new Array( this.wordWin.textInputs.length );
+	// each element will be an array that keeps track of each word in the text
+	for( var i=0; i<this.wordFlags.length; i++ ) {
+		this.wordFlags[i] = [];
+	}
+
+	// start
+	this._spellcheck();
+
+	return true;
+}
+
+function ignoreWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing.' );
+		return false;
+	}
+	// set as ignored
+	if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) {
+		this.currentWordIndex++;
+		this._spellcheck();
+	}
+	return true;
+}
+
+function ignoreAll() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	// get the word that is currently being evaluated.
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+
+	// set this word as an "ignore all" word.
+	this._setAsIgnored( ti, wi, this.ignrAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set as "from ignore all" if
+				// 1) do not already have a flag and
+				// 2) have the same value as current word
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setAsIgnored( i, j, this.fromIgnrAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function replaceWord() {
+	var wi = this.currentWordIndex;
+	var ti = this.currentTextIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	if( !this.wordWin.getTextVal( ti, wi )) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	if( !this.controlWin.replacementText ) {
+		return false ;
+	}
+	var txt = this.controlWin.replacementText;
+	if( txt.value ) {
+		var newspell = new String( txt.value );
+		if( this._setWordText( ti, wi, newspell, this.replWordFlag )) {
+			this.currentWordIndex++;
+			this._spellcheck();
+		}
+	}
+	return true;
+}
+
+function replaceAll() {
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+	if( !this.wordWin ) {
+		alert( 'Error: Word frame not available.' );
+		return false;
+	}
+	var s_word_to_repl = this.wordWin.getTextVal( ti, wi );
+	if( !s_word_to_repl ) {
+		alert( 'Error: "Not in dictionary" text is missing' );
+		return false;
+	}
+	var txt = this.controlWin.replacementText;
+	if( !txt.value ) return false;
+	var newspell = new String( txt.value );
+
+	// set this word as a "replace all" word.
+	this._setWordText( ti, wi, newspell, this.replAllFlag );
+
+	// loop through all the words after this word
+	for( var i = ti; i < this.wordWin.textInputs.length; i++ ) {
+		for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+			if(( i == ti && j > wi ) || i > ti ) {
+				// future word: set word text to s_word_to_repl if
+				// 1) do not already have a flag and
+				// 2) have the same value as s_word_to_repl
+				if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl )
+				&& ( !this.wordFlags[i][j] )) {
+					this._setWordText( i, j, newspell, this.fromReplAll );
+				}
+			}
+		}
+	}
+
+	// finally, move on
+	this.currentWordIndex++;
+	this._spellcheck();
+	return true;
+}
+
+function terminateSpell() {
+	// called when we have reached the end of the spell checking.
+	var msg = "";		// by FredCK
+	var numrepl = this._getTotalReplaced();
+	if( numrepl == 0 ) {
+		// see if there were no misspellings to begin with
+		if( !this.wordWin ) {
+			msg = "";
+		} else {
+			if( this.wordWin.totalMisspellings() ) {
+//				msg += "No words changed.";			// by FredCK
+				msg += FCKLang.DlgSpellNoChanges ;	// by FredCK
+			} else {
+//				msg += "No misspellings found.";	// by FredCK
+				msg += FCKLang.DlgSpellNoMispell ;	// by FredCK
+			}
+		}
+	} else if( numrepl == 1 ) {
+//		msg += "One word changed.";			// by FredCK
+		msg += FCKLang.DlgSpellOneChange ;	// by FredCK
+	} else {
+//		msg += numrepl + " words changed.";	// by FredCK
+		msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ;
+	}
+	if( msg ) {
+//		msg += "\n";	// by FredCK
+		alert( msg );
+	}
+
+	if( numrepl > 0 ) {
+		// update the text field(s) on the opener window
+		for( var i = 0; i < this.textInputs.length; i++ ) {
+			// this.textArea.value = this.wordWin.text;
+			if( this.wordWin ) {
+				if( this.wordWin.textInputs[i] ) {
+					this.textInputs[i].value = this.wordWin.textInputs[i];
+				}
+			}
+		}
+	}
+
+	// return back to the calling window
+//	this.spellCheckerWin.close();					// by FredCK
+	if ( typeof( this.OnFinished ) == 'function' )	// by FredCK
+		this.OnFinished(numrepl) ;					// by FredCK
+
+	return true;
+}
+
+function undo() {
+	// skip if this is the first word!
+	var ti = this.currentTextIndex;
+	var wi = this.currentWordIndex;
+
+	if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) {
+		this.wordWin.removeFocus( ti, wi );
+
+		// go back to the last word index that was acted upon
+		do {
+			// if the current word index is zero then reset the seed
+			if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) {
+				this.currentTextIndex--;
+				this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1;
+				if( this.currentWordIndex < 0 ) this.currentWordIndex = 0;
+			} else {
+				if( this.currentWordIndex > 0 ) {
+					this.currentWordIndex--;
+				}
+			}
+		} while (
+			this.wordWin.totalWords( this.currentTextIndex ) == 0
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll
+			|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll
+		);
+
+		var text_idx = this.currentTextIndex;
+		var idx = this.currentWordIndex;
+		var preReplSpell = this.wordWin.originalSpellings[text_idx][idx];
+
+		// if we got back to the first word then set the Undo button back to disabled
+		if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) {
+			this.controlWin.disableUndo();
+		}
+
+		var i, j, origSpell ;
+		// examine what happened to this current word.
+		switch( this.wordFlags[text_idx][idx] ) {
+			// replace all: go through this and all the future occurances of the word
+			// and revert them all to the original spelling and clear their flags
+			case this.replAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this._setWordText ( i, j, origSpell, undefined );
+							}
+						}
+					}
+				}
+				break;
+
+			// ignore all: go through all the future occurances of the word
+			// and clear their flags
+			case this.ignrAllFlag :
+				for( i = text_idx; i < this.wordWin.textInputs.length; i++ ) {
+					for( j = 0; j < this.wordWin.totalWords( i ); j++ ) {
+						if(( i == text_idx && j >= idx ) || i > text_idx ) {
+							origSpell = this.wordWin.originalSpellings[i][j];
+							if( origSpell == preReplSpell ) {
+								this.wordFlags[i][j] = undefined;
+							}
+						}
+					}
+				}
+				break;
+
+			// replace: revert the word to its original spelling
+			case this.replWordFlag :
+				this._setWordText ( text_idx, idx, preReplSpell, undefined );
+				break;
+		}
+
+		// For all four cases, clear the wordFlag of this word. re-start the process
+		this.wordFlags[text_idx][idx] = undefined;
+		this._spellcheck();
+	}
+}
+
+function _spellcheck() {
+	var ww = this.wordWin;
+
+	// check if this is the last word in the current text element
+	if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) {
+		this.currentTextIndex++;
+		this.currentWordIndex = 0;
+		// keep going if we're not yet past the last text element
+		if( this.currentTextIndex < this.wordWin.textInputs.length ) {
+			this._spellcheck();
+			return;
+		} else {
+			this.terminateSpell();
+			return;
+		}
+	}
+
+	// if this is after the first one make sure the Undo button is enabled
+	if( this.currentWordIndex > 0 ) {
+		this.controlWin.enableUndo();
+	}
+
+	// skip the current word if it has already been worked on
+	if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) {
+		// increment the global current word index and move on.
+		this.currentWordIndex++;
+		this._spellcheck();
+	} else {
+		var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex );
+		if( evalText ) {
+			this.controlWin.evaluatedText.value = evalText;
+			ww.setFocus( this.currentTextIndex, this.currentWordIndex );
+			this._getSuggestions( this.currentTextIndex, this.currentWordIndex );
+		}
+	}
+}
+
+function _getSuggestions( text_num, word_num ) {
+	this.controlWin.clearSuggestions();
+	// add suggestion in list for each suggested word.
+	// get the array of suggested words out of the
+	// three-dimensional array containing all suggestions.
+	var a_suggests = this.wordWin.suggestions[text_num][word_num];
+	if( a_suggests ) {
+		// got an array of suggestions.
+		for( var ii = 0; ii < a_suggests.length; ii++ ) {
+			this.controlWin.addSuggestion( a_suggests[ii] );
+		}
+	}
+	this.controlWin.selectDefaultSuggestion();
+}
+
+function _setAsIgnored( text_num, word_num, flag ) {
+	// set the UI
+	this.wordWin.removeFocus( text_num, word_num );
+	// do the bookkeeping
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getTotalReplaced() {
+	var i_replaced = 0;
+	for( var i = 0; i < this.wordFlags.length; i++ ) {
+		for( var j = 0; j < this.wordFlags[i].length; j++ ) {
+			if(( this.wordFlags[i][j] == this.replWordFlag )
+			|| ( this.wordFlags[i][j] == this.replAllFlag )
+			|| ( this.wordFlags[i][j] == this.fromReplAll )) {
+				i_replaced++;
+			}
+		}
+	}
+	return i_replaced;
+}
+
+function _setWordText( text_num, word_num, newText, flag ) {
+	// set the UI and form inputs
+	this.wordWin.setText( text_num, word_num, newText );
+	// keep track of what happened to this word:
+	this.wordFlags[text_num][word_num] = flag;
+	return true;
+}
+
+function _getFormInputs( inputPattern ) {
+	var inputs = new Array();
+	for( var i = 0; i < document.forms.length; i++ ) {
+		for( var j = 0; j < document.forms[i].elements.length; j++ ) {
+			if( document.forms[i].elements[j].type.match( inputPattern )) {
+				inputs[inputs.length] = document.forms[i].elements[j];
+			}
+		}
+	}
+	return inputs;
+}
diff --git a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
index 5eae120b59d..9928086e153 100644
--- a/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
+++ b/htdocs/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
@@ -1,49 +1,49 @@
-.blend {
-	font-family: courier new;
-	font-size: 10pt;
-	border: 0;
-	margin-bottom:-1;
-}
-.normalLabel {
-	font-size:8pt;
-}
-.normalText {
-	font-family:arial, helvetica, sans-serif;
-	font-size:10pt;
-	color:000000;
-	background-color:FFFFFF;
-}
-.plainText {
-	font-family: courier new, courier, monospace;
-	font-size: 10pt;
-	color:000000;
-	background-color:FFFFFF;
-}
-.controlWindowBody {
-	font-family:arial, helvetica, sans-serif;
-	font-size:8pt;
-	padding: 7px ;		/* by FredCK */
-	margin: 0px ;		/* by FredCK */
-	/* color:000000;				by FredCK */
-	/* background-color:DADADA;		by FredCK */
-}
-.readonlyInput {
-	background-color:DADADA;
-	color:000000;
-	font-size:8pt;
-	width:392px;
-}
-.textDefault {
-	font-size:8pt;
-	width: 200px;
-}
-.buttonDefault {
-	width:90px;
-	height:22px;
-	font-size:8pt;
-}
-.suggSlct {
-	width:200px;
-	margin-top:2;
-	font-size:8pt;
-}
+.blend {
+	font-family: courier new;
+	font-size: 10pt;
+	border: 0;
+	margin-bottom:-1;
+}
+.normalLabel {
+	font-size:8pt;
+}
+.normalText {
+	font-family:arial, helvetica, sans-serif;
+	font-size:10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.plainText {
+	font-family: courier new, courier, monospace;
+	font-size: 10pt;
+	color:000000;
+	background-color:FFFFFF;
+}
+.controlWindowBody {
+	font-family:arial, helvetica, sans-serif;
+	font-size:8pt;
+	padding: 7px ;		/* by FredCK */
+	margin: 0px ;		/* by FredCK */
+	/* color:000000;				by FredCK */
+	/* background-color:DADADA;		by FredCK */
+}
+.readonlyInput {
+	background-color:DADADA;
+	color:000000;
+	font-size:8pt;
+	width:392px;
+}
+.textDefault {
+	font-size:8pt;
+	width: 200px;
+}
+.buttonDefault {
+	width:90px;
+	height:22px;
+	font-size:8pt;
+}
+.suggSlct {
+	width:200px;
+	margin-top:2;
+	font-size:8pt;
+}
diff --git a/htdocs/includes/fckeditor/editor/dtd/fck_dtd_test.html b/htdocs/includes/fckeditor/editor/dtd/fck_dtd_test.html
index 714bb347f7b..c149d15c1b8 100644
--- a/htdocs/includes/fckeditor/editor/dtd/fck_dtd_test.html
+++ b/htdocs/includes/fckeditor/editor/dtd/fck_dtd_test.html
@@ -1,41 +1,41 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<title>DTD Test Page</title>
-	<script type="text/javascript">
-
-	// Define an object for this test page, so the assignment to FCK.DTD works
-	var FCK = {} ;
-	</script>
-	<script type="text/javascript" src="../_source/internals/fcktools.js"></script>
-	<script type="text/javascript" src="fck_xhtml10transitional.js"></script>
-</head>
-<body>
-	<h1>
-		DTD Contents
-	</h1>
-	<table border="1">
-		<script type="text/javascript">
-
-for ( var p in FCK.DTD )
-{
-	document.write( '<tr><td><b>' + p + '</b></td><td>' ) ;
-
-	var isFirst = true ;
-
-	for ( var c in FCK.DTD[p] )
-	{
-		if ( !isFirst )
-			document.write( ', ' ) ;
-		isFirst = false ;
-
-		document.write( c ) ;
-	}
-
-
-	document.write( '</td></tr>' ) ;
-}
-		</script>
-	</table>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>DTD Test Page</title>
+	<script type="text/javascript">
+
+	// Define an object for this test page, so the assignment to FCK.DTD works
+	var FCK = {} ;
+	</script>
+	<script type="text/javascript" src="../_source/internals/fcktools.js"></script>
+	<script type="text/javascript" src="fck_xhtml10transitional.js"></script>
+</head>
+<body>
+	<h1>
+		DTD Contents
+	</h1>
+	<table border="1">
+		<script type="text/javascript">
+
+for ( var p in FCK.DTD )
+{
+	document.write( '<tr><td><b>' + p + '</b></td><td>' ) ;
+
+	var isFirst = true ;
+
+	for ( var c in FCK.DTD[p] )
+	{
+		if ( !isFirst )
+			document.write( ', ' ) ;
+		isFirst = false ;
+
+		document.write( c ) ;
+	}
+
+
+	document.write( '</td></tr>' ) ;
+}
+		</script>
+	</table>
+</body>
+</html>
diff --git a/htdocs/includes/fckeditor/editor/filemanager/connectors/php/config.php b/htdocs/includes/fckeditor/editor/filemanager/connectors/php/config.php
index 76f733ed4bd..34ef2612888 100644
--- a/htdocs/includes/fckeditor/editor/filemanager/connectors/php/config.php
+++ b/htdocs/includes/fckeditor/editor/filemanager/connectors/php/config.php
@@ -1,170 +1,170 @@
-<?php
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2009 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Configuration file for the File Manager Connector for PHP.
- */
-
-global $Config ;
-
-define('NOTOKENRENEWAL',1); // Disables token renewal
-
-// We must include the main because this page is
-// a web page that require security controls and
-// is a security hole if anybody can access without
-// being an authenticated user.
-require_once("../../../../../../main.inc.php");	
-$uri=preg_replace('/^http(s?):\/\//i','',$dolibarr_main_url_root);
-$pos = strstr ($uri, '/');      // $pos contient alors url sans nom domaine
-if ($pos == '/') $pos = '';     // si $pos vaut /, on le met a ''
-define('DOL_URL_ROOT', $pos);
-
-/*
-$conf->syslog->enabled=1;
-define('SYSLOG_FILE','c:/log/dolibarr/dolibarr.log');
-require_once("../../../../../../lib/functions.lib.php");
-dol_syslog("eee".$conf->fckeditor->dir_output);
-*/
-
-// SECURITY: You must explicitly enable this "connector". (Set it to "true").
-// WARNING: don't just set "$Config['Enabled'] = true ;", you must be sure that only
-//		authenticated users can access this file or use some kind of session checking.
-$Config['Enabled'] = true ;
-
-
-// Path to user files relative to the document root.
-$Config['UserFilesPath'] = DOL_URL_ROOT.'/viewimage.php?modulepart=fckeditor&file=' ;
-
-// Fill the following value it you prefer to specify the absolute path for the
-// user files directory. Useful if you are using a virtual directory, symbolic
-// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
-// Attention: The above 'UserFilesPath' must point to the same directory.
-$Config['UserFilesAbsolutePath'] = $dolibarr_main_data_root.'/fckeditor/';
-
-// Due to security issues with Apache modules, it is recommended to leave the
-// following setting enabled.
-$Config['ForceSingleExtension'] = true ;
-
-// Perform additional checks for image files.
-// If set to true, validate image size (using getimagesize).
-$Config['SecureImageUploads'] = true;
-
-// What the user can do with this connector.
-$Config['ConfigAllowedCommands'] = array('QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder') ;
-
-// Allowed Resource Types.
-$Config['ConfigAllowedTypes'] = array('File', 'Image', 'Flash', 'Media') ;
-
-// For security, HTML is allowed in the first Kb of data for files having the
-// following extensions only.
-$Config['HtmlExtensions'] = array("html", "htm", "xml", "xsd", "txt", "js") ;
-
-// After file is uploaded, sometimes it is required to change its permissions
-// so that it was possible to access it at the later time.
-// If possible, it is recommended to set more restrictive permissions, like 0755.
-// Set to 0 to disable this feature.
-// Note: not needed on Windows-based servers.
-$Config['ChmodOnUpload'] = 0775 ;
-
-// See comments above.
-// Used when creating folders that does not exist.
-$Config['ChmodOnFolderCreate'] = 0775 ;
-
-/*
-	Configuration settings for each Resource Type
-
-	- AllowedExtensions: the possible extensions that can be allowed.
-		If it is empty then any file type can be uploaded.
-	- DeniedExtensions: The extensions that won't be allowed.
-		If it is empty then no restrictions are done here.
-
-	For a file to be uploaded it has to fulfill both the AllowedExtensions
-	and DeniedExtensions (that's it: not being denied) conditions.
-
-	- FileTypesPath: the virtual folder relative to the document root where
-		these resources will be located.
-		Attention: It must start and end with a slash: '/'
-
-	- FileTypesAbsolutePath: the physical path to the above folder. It must be
-		an absolute path.
-		If it's an empty string then it will be autocalculated.
-		Useful if you are using a virtual directory, symbolic link or alias.
-		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
-		Attention: The above 'FileTypesPath' must point to the same directory.
-		Attention: It must end with a slash: '/'
-
-	 - QuickUploadPath: the virtual folder relative to the document root where
-		these resources will be uploaded using the Upload tab in the resources
-		dialogs.
-		Attention: It must start and end with a slash: '/'
-
-	 - QuickUploadAbsolutePath: the physical path to the above folder. It must be
-		an absolute path.
-		If it's an empty string then it will be autocalculated.
-		Useful if you are using a virtual directory, symbolic link or alias.
-		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
-		Attention: The above 'QuickUploadPath' must point to the same directory.
-		Attention: It must end with a slash: '/'
-
-	 	NOTE: by default, QuickUploadPath and QuickUploadAbsolutePath point to
-	 	"userfiles" directory to maintain backwards compatibility with older versions of FCKeditor.
-	 	This is fine, but you in some cases you will be not able to browse uploaded files using file browser.
-	 	Example: if you click on "image button", select "Upload" tab and send image
-	 	to the server, image will appear in FCKeditor correctly, but because it is placed
-	 	directly in /userfiles/ directory, you'll be not able to see it in built-in file browser.
-	 	The more expected behaviour would be to send images directly to "image" subfolder.
-	 	To achieve that, simply change
-			$Config['QuickUploadPath']['Image']			= $Config['UserFilesPath'] ;
-			$Config['QuickUploadAbsolutePath']['Image']	= $Config['UserFilesAbsolutePath'] ;
-		into:
-			$Config['QuickUploadPath']['Image']			= $Config['FileTypesPath']['Image'] ;
-			$Config['QuickUploadAbsolutePath']['Image'] 	= $Config['FileTypesAbsolutePath']['Image'] ;
-
-*/
-
-$Config['AllowedExtensions']['File']	= array('7z', 'aiff', 'asf', 'avi', 'bmp', 'csv', 'doc', 'fla', 'flv', 'gif', 'gz', 'gzip', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'ods', 'odt', 'pdf', 'png', 'ppt', 'pxd', 'qt', 'ram', 'rar', 'rm', 'rmi', 'rmvb', 'rtf', 'sdc', 'sitd', 'swf', 'sxc', 'sxw', 'tar', 'tgz', 'tif', 'tiff', 'txt', 'vsd', 'wav', 'wma', 'wmv', 'xls', 'xml', 'zip') ;
-$Config['DeniedExtensions']['File']		= array() ;
-$Config['FileTypesPath']['File']		= $Config['UserFilesPath'] . 'file/' ;
-$Config['FileTypesAbsolutePath']['File']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'file/' ;
-$Config['QuickUploadPath']['File']		= $Config['UserFilesPath'] ;
-$Config['QuickUploadAbsolutePath']['File']= $Config['UserFilesAbsolutePath'] ;
-
-$Config['AllowedExtensions']['Image']	= array('bmp','gif','jpeg','jpg','png') ;
-$Config['DeniedExtensions']['Image']	= array() ;
-$Config['FileTypesPath']['Image']		= $Config['UserFilesPath'] . 'image/' ;
-$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'image/' ;
-$Config['QuickUploadPath']['Image']		= $Config['UserFilesPath'] ;
-$Config['QuickUploadAbsolutePath']['Image']= $Config['UserFilesAbsolutePath'] ;
-
-$Config['AllowedExtensions']['Flash']	= array('swf','flv') ;
-$Config['DeniedExtensions']['Flash']	= array() ;
-$Config['FileTypesPath']['Flash']		= $Config['UserFilesPath'] . 'flash/' ;
-$Config['FileTypesAbsolutePath']['Flash']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'flash/' ;
-$Config['QuickUploadPath']['Flash']		= $Config['UserFilesPath'] ;
-$Config['QuickUploadAbsolutePath']['Flash']= $Config['UserFilesAbsolutePath'] ;
-
-$Config['AllowedExtensions']['Media']	= array('aiff', 'asf', 'avi', 'bmp', 'fla', 'flv', 'gif', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'png', 'qt', 'ram', 'rm', 'rmi', 'rmvb', 'swf', 'tif', 'tiff', 'wav', 'wma', 'wmv') ;
-$Config['DeniedExtensions']['Media']	= array() ;
-$Config['FileTypesPath']['Media']		= $Config['UserFilesPath'] . 'media/' ;
-$Config['FileTypesAbsolutePath']['Media']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'media/' ;
-$Config['QuickUploadPath']['Media']		= $Config['UserFilesPath'] ;
-$Config['QuickUploadAbsolutePath']['Media']= $Config['UserFilesAbsolutePath'] ;
-
-?>
+<?php
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2009 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Configuration file for the File Manager Connector for PHP.
+ */
+
+global $Config ;
+
+define('NOTOKENRENEWAL',1); // Disables token renewal
+
+// We must include the main because this page is
+// a web page that require security controls and
+// is a security hole if anybody can access without
+// being an authenticated user.
+require_once("../../../../../../main.inc.php");	
+$uri=preg_replace('/^http(s?):\/\//i','',$dolibarr_main_url_root);
+$pos = strstr ($uri, '/');      // $pos contient alors url sans nom domaine
+if ($pos == '/') $pos = '';     // si $pos vaut /, on le met a ''
+define('DOL_URL_ROOT', $pos);
+
+/*
+$conf->syslog->enabled=1;
+define('SYSLOG_FILE','c:/log/dolibarr/dolibarr.log');
+require_once("../../../../../../lib/functions.lib.php");
+dol_syslog("eee".$conf->fckeditor->dir_output);
+*/
+
+// SECURITY: You must explicitly enable this "connector". (Set it to "true").
+// WARNING: don't just set "$Config['Enabled'] = true ;", you must be sure that only
+//		authenticated users can access this file or use some kind of session checking.
+$Config['Enabled'] = true ;
+
+
+// Path to user files relative to the document root.
+$Config['UserFilesPath'] = DOL_URL_ROOT.'/viewimage.php?modulepart=fckeditor&file=' ;
+
+// Fill the following value it you prefer to specify the absolute path for the
+// user files directory. Useful if you are using a virtual directory, symbolic
+// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+// Attention: The above 'UserFilesPath' must point to the same directory.
+$Config['UserFilesAbsolutePath'] = $dolibarr_main_data_root.'/fckeditor/';
+
+// Due to security issues with Apache modules, it is recommended to leave the
+// following setting enabled.
+$Config['ForceSingleExtension'] = true ;
+
+// Perform additional checks for image files.
+// If set to true, validate image size (using getimagesize).
+$Config['SecureImageUploads'] = true;
+
+// What the user can do with this connector.
+$Config['ConfigAllowedCommands'] = array('QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder') ;
+
+// Allowed Resource Types.
+$Config['ConfigAllowedTypes'] = array('File', 'Image', 'Flash', 'Media') ;
+
+// For security, HTML is allowed in the first Kb of data for files having the
+// following extensions only.
+$Config['HtmlExtensions'] = array("html", "htm", "xml", "xsd", "txt", "js") ;
+
+// After file is uploaded, sometimes it is required to change its permissions
+// so that it was possible to access it at the later time.
+// If possible, it is recommended to set more restrictive permissions, like 0755.
+// Set to 0 to disable this feature.
+// Note: not needed on Windows-based servers.
+$Config['ChmodOnUpload'] = 0775 ;
+
+// See comments above.
+// Used when creating folders that does not exist.
+$Config['ChmodOnFolderCreate'] = 0775 ;
+
+/*
+	Configuration settings for each Resource Type
+
+	- AllowedExtensions: the possible extensions that can be allowed.
+		If it is empty then any file type can be uploaded.
+	- DeniedExtensions: The extensions that won't be allowed.
+		If it is empty then no restrictions are done here.
+
+	For a file to be uploaded it has to fulfill both the AllowedExtensions
+	and DeniedExtensions (that's it: not being denied) conditions.
+
+	- FileTypesPath: the virtual folder relative to the document root where
+		these resources will be located.
+		Attention: It must start and end with a slash: '/'
+
+	- FileTypesAbsolutePath: the physical path to the above folder. It must be
+		an absolute path.
+		If it's an empty string then it will be autocalculated.
+		Useful if you are using a virtual directory, symbolic link or alias.
+		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+		Attention: The above 'FileTypesPath' must point to the same directory.
+		Attention: It must end with a slash: '/'
+
+	 - QuickUploadPath: the virtual folder relative to the document root where
+		these resources will be uploaded using the Upload tab in the resources
+		dialogs.
+		Attention: It must start and end with a slash: '/'
+
+	 - QuickUploadAbsolutePath: the physical path to the above folder. It must be
+		an absolute path.
+		If it's an empty string then it will be autocalculated.
+		Useful if you are using a virtual directory, symbolic link or alias.
+		Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
+		Attention: The above 'QuickUploadPath' must point to the same directory.
+		Attention: It must end with a slash: '/'
+
+	 	NOTE: by default, QuickUploadPath and QuickUploadAbsolutePath point to
+	 	"userfiles" directory to maintain backwards compatibility with older versions of FCKeditor.
+	 	This is fine, but you in some cases you will be not able to browse uploaded files using file browser.
+	 	Example: if you click on "image button", select "Upload" tab and send image
+	 	to the server, image will appear in FCKeditor correctly, but because it is placed
+	 	directly in /userfiles/ directory, you'll be not able to see it in built-in file browser.
+	 	The more expected behaviour would be to send images directly to "image" subfolder.
+	 	To achieve that, simply change
+			$Config['QuickUploadPath']['Image']			= $Config['UserFilesPath'] ;
+			$Config['QuickUploadAbsolutePath']['Image']	= $Config['UserFilesAbsolutePath'] ;
+		into:
+			$Config['QuickUploadPath']['Image']			= $Config['FileTypesPath']['Image'] ;
+			$Config['QuickUploadAbsolutePath']['Image'] 	= $Config['FileTypesAbsolutePath']['Image'] ;
+
+*/
+
+$Config['AllowedExtensions']['File']	= array('7z', 'aiff', 'asf', 'avi', 'bmp', 'csv', 'doc', 'fla', 'flv', 'gif', 'gz', 'gzip', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'ods', 'odt', 'pdf', 'png', 'ppt', 'pxd', 'qt', 'ram', 'rar', 'rm', 'rmi', 'rmvb', 'rtf', 'sdc', 'sitd', 'swf', 'sxc', 'sxw', 'tar', 'tgz', 'tif', 'tiff', 'txt', 'vsd', 'wav', 'wma', 'wmv', 'xls', 'xml', 'zip') ;
+$Config['DeniedExtensions']['File']		= array() ;
+$Config['FileTypesPath']['File']		= $Config['UserFilesPath'] . 'file/' ;
+$Config['FileTypesAbsolutePath']['File']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'file/' ;
+$Config['QuickUploadPath']['File']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['File']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Image']	= array('bmp','gif','jpeg','jpg','png') ;
+$Config['DeniedExtensions']['Image']	= array() ;
+$Config['FileTypesPath']['Image']		= $Config['UserFilesPath'] . 'image/' ;
+$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'image/' ;
+$Config['QuickUploadPath']['Image']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Image']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Flash']	= array('swf','flv') ;
+$Config['DeniedExtensions']['Flash']	= array() ;
+$Config['FileTypesPath']['Flash']		= $Config['UserFilesPath'] . 'flash/' ;
+$Config['FileTypesAbsolutePath']['Flash']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'flash/' ;
+$Config['QuickUploadPath']['Flash']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Flash']= $Config['UserFilesAbsolutePath'] ;
+
+$Config['AllowedExtensions']['Media']	= array('aiff', 'asf', 'avi', 'bmp', 'fla', 'flv', 'gif', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'png', 'qt', 'ram', 'rm', 'rmi', 'rmvb', 'swf', 'tif', 'tiff', 'wav', 'wma', 'wmv') ;
+$Config['DeniedExtensions']['Media']	= array() ;
+$Config['FileTypesPath']['Media']		= $Config['UserFilesPath'] . 'media/' ;
+$Config['FileTypesAbsolutePath']['Media']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'media/' ;
+$Config['QuickUploadPath']['Media']		= $Config['UserFilesPath'] ;
+$Config['QuickUploadAbsolutePath']['Media']= $Config['UserFilesAbsolutePath'] ;
+
+?>
diff --git a/htdocs/includes/fckeditor/editor/filemanager/connectors/php/phpcompat.php b/htdocs/includes/fckeditor/editor/filemanager/connectors/php/phpcompat.php
index a269569c394..6fc89e59316 100644
--- a/htdocs/includes/fckeditor/editor/filemanager/connectors/php/phpcompat.php
+++ b/htdocs/includes/fckeditor/editor/filemanager/connectors/php/phpcompat.php
@@ -1,17 +1,17 @@
-<?php
-
-if ( !isset( $_SERVER ) ) {
-    $_SERVER = $HTTP_SERVER_VARS ;
-}
-if ( !isset( $_GET ) ) {
-    $_GET = $HTTP_GET_VARS ;
-}
-if ( !isset( $_FILES ) ) {
-    $_FILES = $HTTP_POST_FILES ;
-}
-
-if ( !defined( 'DIRECTORY_SEPARATOR' ) ) {
-    define( 'DIRECTORY_SEPARATOR',
-        strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
-    ) ;
-}
+<?php
+
+if ( !isset( $_SERVER ) ) {
+    $_SERVER = $HTTP_SERVER_VARS ;
+}
+if ( !isset( $_GET ) ) {
+    $_GET = $HTTP_GET_VARS ;
+}
+if ( !isset( $_FILES ) ) {
+    $_FILES = $HTTP_POST_FILES ;
+}
+
+if ( !defined( 'DIRECTORY_SEPARATOR' ) ) {
+    define( 'DIRECTORY_SEPARATOR',
+        strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? '\\' : '/'
+    ) ;
+}
diff --git a/htdocs/includes/fckeditor/editor/filemanager/connectors/py/htaccess.txt b/htdocs/includes/fckeditor/editor/filemanager/connectors/py/htaccess.txt
index 0ced79e12cd..82374196a9d 100644
--- a/htdocs/includes/fckeditor/editor/filemanager/connectors/py/htaccess.txt
+++ b/htdocs/includes/fckeditor/editor/filemanager/connectors/py/htaccess.txt
@@ -1,23 +1,23 @@
-# replace the name of this file to .htaccess (if using apache),
-# and set the proper options and paths according your enviroment
-
-Allow from all
-
-# If using mod_python uncomment this:
-PythonPath "[r'C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\fckeditor\editor\filemanager\connectors\py'] + sys.path"
-
-
-# Recomended: WSGI application running with mod_python and modpython_gateway
-SetHandler python-program
-PythonHandler modpython_gateway::handler
-PythonOption wsgi.application wsgi::App
-
-
-# Emulated CGI with mod_python and cgihandler
-#AddHandler mod_python .py
-#PythonHandler mod_python.cgihandler
-
-
-# Plain old CGI
-#Options +ExecCGI
-#AddHandler cgi-script py
+# replace the name of this file to .htaccess (if using apache),
+# and set the proper options and paths according your enviroment
+
+Allow from all
+
+# If using mod_python uncomment this:
+PythonPath "[r'C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\fckeditor\editor\filemanager\connectors\py'] + sys.path"
+
+
+# Recomended: WSGI application running with mod_python and modpython_gateway
+SetHandler python-program
+PythonHandler modpython_gateway::handler
+PythonOption wsgi.application wsgi::App
+
+
+# Emulated CGI with mod_python and cgihandler
+#AddHandler mod_python .py
+#PythonHandler mod_python.cgihandler
+
+
+# Plain old CGI
+#Options +ExecCGI
+#AddHandler cgi-script py
diff --git a/htdocs/includes/fpdf/fpdf/FAQ.htm b/htdocs/includes/fpdf/fpdf/FAQ.htm
index 72094a96145..05d85c6e0e7 100644
--- a/htdocs/includes/fpdf/fpdf/FAQ.htm
+++ b/htdocs/includes/fpdf/fpdf/FAQ.htm
@@ -1,341 +1,341 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>FAQ</title>
-<link type="text/css" rel="stylesheet" href="fpdf.css">
-<style type="text/css">
-ul {list-style-type:none; margin:0; padding:0}
-ul#answers li {margin-top:1.8em}
-.question {font-weight:bold; color:#900000}
-</style>
-</head>
-<body>
-<h1>FAQ</h1>
-<ul>
-<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li>
-<li><b>2.</b> <a href='#q2'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</a></li>
-<li><b>3.</b> <a href='#q3'>I try to generate a PDF and IE displays a blank page. What happens?</a></li>
-<li><b>4.</b> <a href='#q4'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li>
-<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li>
-<li><b>6.</b> <a href='#q6'>I defined the Header and Footer methods in my PDF class but nothing appears.</a></li>
-<li><b>7.</b> <a href='#q7'>Accented characters are replaced by some strange characters like é.</a></li>
-<li><b>8.</b> <a href='#q8'>I try to display the Euro symbol but it doesn't work.</a></li>
-<li><b>9.</b> <a href='#q9'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li>
-<li><b>10.</b> <a href='#q10'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li>
-<li><b>11.</b> <a href='#q11'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li>
-<li><b>12.</b> <a href='#q12'>How can I put a background in my PDF?</a></li>
-<li><b>13.</b> <a href='#q13'>How can I set a specific header or footer on the first page?</a></li>
-<li><b>14.</b> <a href='#q14'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li>
-<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li>
-<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li>
-<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li>
-<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li>
-<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li>
-<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li>
-</ul>
-
-<ul id='answers'>
-<li id='q1'>
-<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p>
-FPDF is released under a permissive license: there is no usage restriction. You may embed it
-freely in your application (commercial or not), with or without modifications.
-</li>
-
-<li id='q2'>
-<p><b>2.</b> <span class='question'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</span></p>
-These "weird" characters are in fact the actual content of your PDF. This behavior is a bug of
-IE6. When it first receives an HTML page, then a PDF from the same URL, it displays it directly
-without launching Acrobat. This happens frequently during the development stage: on the least
-script error, an HTML page is sent, and after correction, the PDF arrives.
-<br>
-To solve the problem, simply quit and restart IE. You can also go to another URL and come
-back.
-<br>
-To avoid this kind of inconvenience during the development, you can generate the PDF directly
-to a file and open it through the explorer.
-</li>
-
-<li id='q3'>
-<p><b>3.</b> <span class='question'>I try to generate a PDF and IE displays a blank page. What happens?</span></p>
-First of all, check that you send nothing to the browser after the PDF (not even a space or a
-carriage return). You can put an exit statement just after the call to the Output() method to
-be sure. If it still doesn't work, it means you're a victim of the "blank page syndrome". IE
-used in conjunction with the Acrobat plug-in suffers from many bugs. To avoid these problems
-in a reliable manner, two main techniques exist:
-<br>
-<br>
-- Disable the plug-in and use Acrobat as a helper application. To do this, launch Acrobat, go
-to the Edit menu, Preferences, Internet, and uncheck "Display PDF in browser". Then, the next
-time you load a PDF in IE, it displays the dialog box "Open it" or "Save it to disk". Uncheck
-the option "Always ask before opening this type of file" and choose Open. From now on, PDF files
-will open automatically in an external Acrobat window.
-<br>
-The drawback of the method is that you need to alter the client configuration, which you can do
-in an intranet environment but not for the Internet.
-<br>
-<br>
-- Use a redirection technique. It consists in generating the PDF in a temporary file on the server
-and redirect the client to it. For example, at the end of the script, you can put the following:
-<div class="doc-source">
-<pre><code>//Determine a temporary file name in the current directory
-$file = basename(tempnam('.', 'tmp'));
-rename($file, $file.'.pdf');
-$file .= '.pdf';
-//Save PDF to file
-$pdf-&gt;Output($file, 'F');
-//Redirect
-header('Location: '.$file);</code></pre>
-</div>
-This method turns the dynamic PDF into a static one and avoids all troubles. But you have to do
-some cleaning in order to delete the temporary files. For example:
-<div class="doc-source">
-<pre><code>function CleanFiles($dir)
-{
-    //Delete temporary files
-    $t = time();
-    $h = opendir($dir);
-    while($file=readdir($h))
-    {
-        if(substr($file,0,3)=='tmp' &amp;&amp; substr($file,-4)=='.pdf')
-        {
-            $path = $dir.'/'.$file;
-            if($t-filemtime($path)&gt;3600)
-                @unlink($path);
-        }
-    }
-    closedir($h);
-}</code></pre>
-</div>
-This function deletes all files of the form tmp*.pdf older than an hour in the specified
-directory. You may call it where you want, for example in the script which generates the PDF.
-</li>
-
-<li id='q4'>
-<p><b>4.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p>
-You have to enclose your string with double quotes, not single ones.
-</li>
-
-<li id='q5'>
-<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p>
-You have to use the <code>global</code> keyword to access global variables, for example:
-<div class="doc-source">
-<pre><code>function Header()
-{
-    global $title;
-
-    $this-&gt;SetFont('Arial', 'B', 15);
-    $this-&gt;Cell(0, 10, $title, 1, 1, 'C');
-}
-
-$title = 'My title';</code></pre>
-</div>
-Alternatively, you can use an object property:
-<div class="doc-source">
-<pre><code>function Header()
-{
-    $this-&gt;SetFont('Arial', 'B', 15);
-    $this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C');
-}
-
-$pdf-&gt;title = 'My title';</code></pre>
-</div>
-</li>
-
-<li id='q6'>
-<p><b>6.</b> <span class='question'>I defined the Header and Footer methods in my PDF class but nothing appears.</span></p>
-You have to create an object from the PDF class, not FPDF:
-<div class="doc-source">
-<pre><code>$pdf = new PDF();</code></pre>
-</div>
-</li>
-
-<li id='q7'>
-<p><b>7.</b> <span class='question'>Accented characters are replaced by some strange characters like é.</span></p>
-Don't use UTF-8 encoding. Standard FPDF fonts use ISO-8859-1 or Windows-1252.
-It is possible to perform a conversion to ISO-8859-1 with utf8_decode():
-<div class="doc-source">
-<pre><code>$str = utf8_decode($str);</code></pre>
-</div>
-But some characters such as Euro won't be translated correctly. If the iconv extension is available, the
-right way to do it is the following:
-<div class="doc-source">
-<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre>
-</div>
-</li>
-
-<li id='q8'>
-<p><b>8.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p>
-The standard fonts have the Euro character at position 128. You can define a constant like this
-for convenience:
-<div class="doc-source">
-<pre><code>define('EURO', chr(128));</code></pre>
-</div>
-</li>
-
-<li id='q9'>
-<p><b>9.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p>
-You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common
-case is having extra blank at the end of an included script file.<br>
-If you can't figure out where the problem comes from, this other message appearing just before can help you:<br>
-<br>
-<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br>
-<br>
-It means that script.php outputs something at line X. Go to this line and fix it.
-In case the message doesn't show, first check that you didn't disable warnings, then add this at the very
-beginning of your script:
-<div class="doc-source">
-<pre><code>ob_end_clean();</code></pre>
-</div>
-If you still don't see it, disable zlib.output_compression in your php.ini and it should appear.
-</li>
-
-<li id='q10'>
-<p><b>10.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p>
-To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box.
-</li>
-
-<li id='q11'>
-<p><b>11.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p>
-Printers have physical margins (different depending on the models); it is therefore impossible to remove
-them and print on the whole surface of the paper.
-</li>
-
-<li id='q12'>
-<p><b>12.</b> <span class='question'>How can I put a background in my PDF?</span></p>
-For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect().
-</li>
-
-<li id='q13'>
-<p><b>13.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p>
-Simply test the page number:
-<div class="doc-source">
-<pre><code>function Header()
-{
-    if($this-&gt;PageNo()==1)
-    {
-        //First page
-        ...
-    }
-    else
-    {
-        //Other pages
-        ...
-    }
-}</code></pre>
-</div>
-</li>
-
-<li id='q14'>
-<p><b>14.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p>
-Use an inheritance chain. If you have two classes, say A in a.php:
-<div class="doc-source">
-<pre><code>require('fpdf.php');
-
-class A extends FPDF
-{
-...
-}</code></pre>
-</div>
-and B in b.php:
-<div class="doc-source">
-<pre><code>require('fpdf.php');
-
-class B extends FPDF
-{
-...
-}</code></pre>
-</div>
-then make B extend A:
-<div class="doc-source">
-<pre><code>require('a.php');
-
-class B extends A
-{
-...
-}</code></pre>
-</div>
-and make your own class extend B:
-<div class="doc-source">
-<pre><code>require('b.php');
-
-class PDF extends B
-{
-...
-}
-
-$pdf = new PDF();</code></pre>
-</div>
-</li>
-
-<li id='q15'>
-<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p>
-As any other file, but an easy way is to use <a href="http://phpmailer.codeworxtech.com">PHPMailer</a> and
-its in-memory attachment:
-<div class="doc-source">
-<pre><code>$mail = new PHPMailer();
-...
-$doc = $pdf-&gt;Output('', 'S');
-$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
-$mail-&gt;Send();</code></pre>
-</div>
-</li>
-
-<li id='q16'>
-<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p>
-There is no particular limit. There are some constraints, however:
-<br>
-<br>
-- The maximum memory size allocated to PHP scripts is usually 8MB. For very big documents,
-especially with images, this limit may be reached (the file being built into memory). The
-parameter is configured in the php.ini file.
-<br>
-<br>
-- The maximum execution time allocated defaults to 30 seconds. This limit can of course be easily
-reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
-<br>
-<br>
-- Browsers generally have a 5 minute time-out. If you send the PDF directly to the browser and
-reach the limit, it will be lost. It is therefore advised for very big documents to
-generate them in a file, and to send some data to the browser from time to time (with a call
-to flush() to force the output). When the document is finished, you can send a redirection to
-it or create a link.
-<br>
-Remark: even if the browser times out, the script may continue to run on the server.
-</li>
-
-<li id='q17'>
-<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p>
-It is possible to import pages from an existing PDF document thanks to the FPDI extension:<br>
-<br>
-<a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/" target="_blank">http://www.setasign.de/products/pdf-php-solutions/fpdi/</a><br>
-<br>
-You can then add some content to them.
-</li>
-
-<li id='q18'>
-<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p>
-No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from
-a PDF. It is provided with the Xpdf package:<br>
-<br>
-<a href="http://www.foolabs.com/xpdf/" target="_blank">http://www.foolabs.com/xpdf/</a>
-</li>
-
-<li id='q19'>
-<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p>
-Not real-world pages. But a GPL C utility does exist, htmldoc, which allows to do it and gives good results:<br>
-<br>
-<a href="http://www.htmldoc.org" target="_blank">http://www.htmldoc.org</a>
-</li>
-
-<li id='q20'>
-<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p>
-Not directly, but it is possible to use <a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a>
-to perform this task. Some free command-line tools also exist:<br>
-<br>
-<a href="http://thierry.schmit.free.fr/spip/spip.php?article15&amp;lang=en" target="_blank">mbtPdfAsm</a><br>
-<a href="http://www.accesspdf.com/pdftk/" target="_blank">pdftk</a>
-</li>
-</ul>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>FAQ</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+ul {list-style-type:none; margin:0; padding:0}
+ul#answers li {margin-top:1.8em}
+.question {font-weight:bold; color:#900000}
+</style>
+</head>
+<body>
+<h1>FAQ</h1>
+<ul>
+<li><b>1.</b> <a href='#q1'>What's exactly the license of FPDF? Are there any usage restrictions?</a></li>
+<li><b>2.</b> <a href='#q2'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</a></li>
+<li><b>3.</b> <a href='#q3'>I try to generate a PDF and IE displays a blank page. What happens?</a></li>
+<li><b>4.</b> <a href='#q4'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</a></li>
+<li><b>5.</b> <a href='#q5'>I try to display a variable in the Header method but nothing prints.</a></li>
+<li><b>6.</b> <a href='#q6'>I defined the Header and Footer methods in my PDF class but nothing appears.</a></li>
+<li><b>7.</b> <a href='#q7'>Accented characters are replaced by some strange characters like é.</a></li>
+<li><b>8.</b> <a href='#q8'>I try to display the Euro symbol but it doesn't work.</a></li>
+<li><b>9.</b> <a href='#q9'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</a></li>
+<li><b>10.</b> <a href='#q10'>I draw a frame with very precise dimensions, but when printed I notice some differences.</a></li>
+<li><b>11.</b> <a href='#q11'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</a></li>
+<li><b>12.</b> <a href='#q12'>How can I put a background in my PDF?</a></li>
+<li><b>13.</b> <a href='#q13'>How can I set a specific header or footer on the first page?</a></li>
+<li><b>14.</b> <a href='#q14'>I'd like to use extensions provided by different scripts. How can I combine them?</a></li>
+<li><b>15.</b> <a href='#q15'>How can I send the PDF by email?</a></li>
+<li><b>16.</b> <a href='#q16'>What's the limit of the file sizes I can generate with FPDF?</a></li>
+<li><b>17.</b> <a href='#q17'>Can I modify a PDF with FPDF?</a></li>
+<li><b>18.</b> <a href='#q18'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</a></li>
+<li><b>19.</b> <a href='#q19'>Can I convert an HTML page to PDF with FPDF?</a></li>
+<li><b>20.</b> <a href='#q20'>Can I concatenate PDF files with FPDF?</a></li>
+</ul>
+
+<ul id='answers'>
+<li id='q1'>
+<p><b>1.</b> <span class='question'>What's exactly the license of FPDF? Are there any usage restrictions?</span></p>
+FPDF is released under a permissive license: there is no usage restriction. You may embed it
+freely in your application (commercial or not), with or without modifications.
+</li>
+
+<li id='q2'>
+<p><b>2.</b> <span class='question'>When I try to create a PDF, a lot of weird characters show on the screen. Why?</span></p>
+These "weird" characters are in fact the actual content of your PDF. This behavior is a bug of
+IE6. When it first receives an HTML page, then a PDF from the same URL, it displays it directly
+without launching Acrobat. This happens frequently during the development stage: on the least
+script error, an HTML page is sent, and after correction, the PDF arrives.
+<br>
+To solve the problem, simply quit and restart IE. You can also go to another URL and come
+back.
+<br>
+To avoid this kind of inconvenience during the development, you can generate the PDF directly
+to a file and open it through the explorer.
+</li>
+
+<li id='q3'>
+<p><b>3.</b> <span class='question'>I try to generate a PDF and IE displays a blank page. What happens?</span></p>
+First of all, check that you send nothing to the browser after the PDF (not even a space or a
+carriage return). You can put an exit statement just after the call to the Output() method to
+be sure. If it still doesn't work, it means you're a victim of the "blank page syndrome". IE
+used in conjunction with the Acrobat plug-in suffers from many bugs. To avoid these problems
+in a reliable manner, two main techniques exist:
+<br>
+<br>
+- Disable the plug-in and use Acrobat as a helper application. To do this, launch Acrobat, go
+to the Edit menu, Preferences, Internet, and uncheck "Display PDF in browser". Then, the next
+time you load a PDF in IE, it displays the dialog box "Open it" or "Save it to disk". Uncheck
+the option "Always ask before opening this type of file" and choose Open. From now on, PDF files
+will open automatically in an external Acrobat window.
+<br>
+The drawback of the method is that you need to alter the client configuration, which you can do
+in an intranet environment but not for the Internet.
+<br>
+<br>
+- Use a redirection technique. It consists in generating the PDF in a temporary file on the server
+and redirect the client to it. For example, at the end of the script, you can put the following:
+<div class="doc-source">
+<pre><code>//Determine a temporary file name in the current directory
+$file = basename(tempnam('.', 'tmp'));
+rename($file, $file.'.pdf');
+$file .= '.pdf';
+//Save PDF to file
+$pdf-&gt;Output($file, 'F');
+//Redirect
+header('Location: '.$file);</code></pre>
+</div>
+This method turns the dynamic PDF into a static one and avoids all troubles. But you have to do
+some cleaning in order to delete the temporary files. For example:
+<div class="doc-source">
+<pre><code>function CleanFiles($dir)
+{
+    //Delete temporary files
+    $t = time();
+    $h = opendir($dir);
+    while($file=readdir($h))
+    {
+        if(substr($file,0,3)=='tmp' &amp;&amp; substr($file,-4)=='.pdf')
+        {
+            $path = $dir.'/'.$file;
+            if($t-filemtime($path)&gt;3600)
+                @unlink($path);
+        }
+    }
+    closedir($h);
+}</code></pre>
+</div>
+This function deletes all files of the form tmp*.pdf older than an hour in the specified
+directory. You may call it where you want, for example in the script which generates the PDF.
+</li>
+
+<li id='q4'>
+<p><b>4.</b> <span class='question'>I can't make line breaks work. I put \n in the string printed by MultiCell but it doesn't work.</span></p>
+You have to enclose your string with double quotes, not single ones.
+</li>
+
+<li id='q5'>
+<p><b>5.</b> <span class='question'>I try to display a variable in the Header method but nothing prints.</span></p>
+You have to use the <code>global</code> keyword to access global variables, for example:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    global $title;
+
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $title, 1, 1, 'C');
+}
+
+$title = 'My title';</code></pre>
+</div>
+Alternatively, you can use an object property:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    $this-&gt;SetFont('Arial', 'B', 15);
+    $this-&gt;Cell(0, 10, $this-&gt;title, 1, 1, 'C');
+}
+
+$pdf-&gt;title = 'My title';</code></pre>
+</div>
+</li>
+
+<li id='q6'>
+<p><b>6.</b> <span class='question'>I defined the Header and Footer methods in my PDF class but nothing appears.</span></p>
+You have to create an object from the PDF class, not FPDF:
+<div class="doc-source">
+<pre><code>$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q7'>
+<p><b>7.</b> <span class='question'>Accented characters are replaced by some strange characters like é.</span></p>
+Don't use UTF-8 encoding. Standard FPDF fonts use ISO-8859-1 or Windows-1252.
+It is possible to perform a conversion to ISO-8859-1 with utf8_decode():
+<div class="doc-source">
+<pre><code>$str = utf8_decode($str);</code></pre>
+</div>
+But some characters such as Euro won't be translated correctly. If the iconv extension is available, the
+right way to do it is the following:
+<div class="doc-source">
+<pre><code>$str = iconv('UTF-8', 'windows-1252', $str);</code></pre>
+</div>
+</li>
+
+<li id='q8'>
+<p><b>8.</b> <span class='question'>I try to display the Euro symbol but it doesn't work.</span></p>
+The standard fonts have the Euro character at position 128. You can define a constant like this
+for convenience:
+<div class="doc-source">
+<pre><code>define('EURO', chr(128));</code></pre>
+</div>
+</li>
+
+<li id='q9'>
+<p><b>9.</b> <span class='question'>I get the following error when I try to generate a PDF: Some data has already been output, can't send PDF file</span></p>
+You must send nothing to the browser except the PDF itself: no HTML, no space, no carriage return. A common
+case is having extra blank at the end of an included script file.<br>
+If you can't figure out where the problem comes from, this other message appearing just before can help you:<br>
+<br>
+<b>Warning:</b> Cannot modify header information - headers already sent by (output started at script.php:X)<br>
+<br>
+It means that script.php outputs something at line X. Go to this line and fix it.
+In case the message doesn't show, first check that you didn't disable warnings, then add this at the very
+beginning of your script:
+<div class="doc-source">
+<pre><code>ob_end_clean();</code></pre>
+</div>
+If you still don't see it, disable zlib.output_compression in your php.ini and it should appear.
+</li>
+
+<li id='q10'>
+<p><b>10.</b> <span class='question'>I draw a frame with very precise dimensions, but when printed I notice some differences.</span></p>
+To respect dimensions, select "None" for the Page Scaling setting instead of "Shrink to Printable Area" in the print dialog box.
+</li>
+
+<li id='q11'>
+<p><b>11.</b> <span class='question'>I'd like to use the whole surface of the page, but when printed I always have some margins. How can I get rid of them?</span></p>
+Printers have physical margins (different depending on the models); it is therefore impossible to remove
+them and print on the whole surface of the paper.
+</li>
+
+<li id='q12'>
+<p><b>12.</b> <span class='question'>How can I put a background in my PDF?</span></p>
+For a picture, call Image() in the Header() method, before any other output. To set a background color, use Rect().
+</li>
+
+<li id='q13'>
+<p><b>13.</b> <span class='question'>How can I set a specific header or footer on the first page?</span></p>
+Simply test the page number:
+<div class="doc-source">
+<pre><code>function Header()
+{
+    if($this-&gt;PageNo()==1)
+    {
+        //First page
+        ...
+    }
+    else
+    {
+        //Other pages
+        ...
+    }
+}</code></pre>
+</div>
+</li>
+
+<li id='q14'>
+<p><b>14.</b> <span class='question'>I'd like to use extensions provided by different scripts. How can I combine them?</span></p>
+Use an inheritance chain. If you have two classes, say A in a.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class A extends FPDF
+{
+...
+}</code></pre>
+</div>
+and B in b.php:
+<div class="doc-source">
+<pre><code>require('fpdf.php');
+
+class B extends FPDF
+{
+...
+}</code></pre>
+</div>
+then make B extend A:
+<div class="doc-source">
+<pre><code>require('a.php');
+
+class B extends A
+{
+...
+}</code></pre>
+</div>
+and make your own class extend B:
+<div class="doc-source">
+<pre><code>require('b.php');
+
+class PDF extends B
+{
+...
+}
+
+$pdf = new PDF();</code></pre>
+</div>
+</li>
+
+<li id='q15'>
+<p><b>15.</b> <span class='question'>How can I send the PDF by email?</span></p>
+As any other file, but an easy way is to use <a href="http://phpmailer.codeworxtech.com">PHPMailer</a> and
+its in-memory attachment:
+<div class="doc-source">
+<pre><code>$mail = new PHPMailer();
+...
+$doc = $pdf-&gt;Output('', 'S');
+$mail-&gt;AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
+$mail-&gt;Send();</code></pre>
+</div>
+</li>
+
+<li id='q16'>
+<p><b>16.</b> <span class='question'>What's the limit of the file sizes I can generate with FPDF?</span></p>
+There is no particular limit. There are some constraints, however:
+<br>
+<br>
+- The maximum memory size allocated to PHP scripts is usually 8MB. For very big documents,
+especially with images, this limit may be reached (the file being built into memory). The
+parameter is configured in the php.ini file.
+<br>
+<br>
+- The maximum execution time allocated defaults to 30 seconds. This limit can of course be easily
+reached. It is configured in php.ini and may be altered dynamically with set_time_limit().
+<br>
+<br>
+- Browsers generally have a 5 minute time-out. If you send the PDF directly to the browser and
+reach the limit, it will be lost. It is therefore advised for very big documents to
+generate them in a file, and to send some data to the browser from time to time (with a call
+to flush() to force the output). When the document is finished, you can send a redirection to
+it or create a link.
+<br>
+Remark: even if the browser times out, the script may continue to run on the server.
+</li>
+
+<li id='q17'>
+<p><b>17.</b> <span class='question'>Can I modify a PDF with FPDF?</span></p>
+It is possible to import pages from an existing PDF document thanks to the FPDI extension:<br>
+<br>
+<a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/" target="_blank">http://www.setasign.de/products/pdf-php-solutions/fpdi/</a><br>
+<br>
+You can then add some content to them.
+</li>
+
+<li id='q18'>
+<p><b>18.</b> <span class='question'>I'd like to make a search engine in PHP and index PDF files. Can I do it with FPDF?</span></p>
+No. But a GPL C utility does exist, pdftotext, which is able to extract the textual content from
+a PDF. It is provided with the Xpdf package:<br>
+<br>
+<a href="http://www.foolabs.com/xpdf/" target="_blank">http://www.foolabs.com/xpdf/</a>
+</li>
+
+<li id='q19'>
+<p><b>19.</b> <span class='question'>Can I convert an HTML page to PDF with FPDF?</span></p>
+Not real-world pages. But a GPL C utility does exist, htmldoc, which allows to do it and gives good results:<br>
+<br>
+<a href="http://www.htmldoc.org" target="_blank">http://www.htmldoc.org</a>
+</li>
+
+<li id='q20'>
+<p><b>20.</b> <span class='question'>Can I concatenate PDF files with FPDF?</span></p>
+Not directly, but it is possible to use <a href="http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/" target="_blank">FPDI</a>
+to perform this task. Some free command-line tools also exist:<br>
+<br>
+<a href="http://thierry.schmit.free.fr/spip/spip.php?article15&amp;lang=en" target="_blank">mbtPdfAsm</a><br>
+<a href="http://www.accesspdf.com/pdftk/" target="_blank">pdftk</a>
+</li>
+</ul>
+</body>
+</html>
diff --git a/htdocs/includes/fpdf/fpdf/font/courier.php b/htdocs/includes/fpdf/fpdf/font/courier.php
index 4c009f39b47..913f9a4533e 100644
--- a/htdocs/includes/fpdf/fpdf/font/courier.php
+++ b/htdocs/includes/fpdf/fpdf/font/courier.php
@@ -1,7 +1,7 @@
-<?php
-for($i=0;$i<=255;$i++)
-	$fpdf_charwidths['courier'][chr($i)]=600;
-$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
-$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
-$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
-?>
+<?php
+for($i=0;$i<=255;$i++)
+	$fpdf_charwidths['courier'][chr($i)]=600;
+$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
+$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
+$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/desktop.ini b/htdocs/includes/fpdf/fpdf/font/desktop.ini
index c5547ea50b4..8a96fbb70f2 100644
--- a/htdocs/includes/fpdf/fpdf/font/desktop.ini
+++ b/htdocs/includes/fpdf/fpdf/font/desktop.ini
@@ -1,4 +1,4 @@
-[ViewState]
-Mode=
-Vid=
-FolderType=NotSpecified
+[ViewState]
+Mode=
+Vid=
+FolderType=NotSpecified
diff --git a/htdocs/includes/fpdf/fpdf/font/helvetica.php b/htdocs/includes/fpdf/fpdf/font/helvetica.php
index 8fa7683e7c2..ca94cdf21ab 100644
--- a/htdocs/includes/fpdf/fpdf/font/helvetica.php
+++ b/htdocs/includes/fpdf/fpdf/font/helvetica.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['helvetica']=array(
-	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
-	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
-	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
-	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
-	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
-	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
-	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
-	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
-	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
-?>
+<?php
+$fpdf_charwidths['helvetica']=array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/helveticab.php b/htdocs/includes/fpdf/fpdf/font/helveticab.php
index a8473c94d72..276cfa8cb8c 100644
--- a/htdocs/includes/fpdf/fpdf/font/helveticab.php
+++ b/htdocs/includes/fpdf/fpdf/font/helveticab.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['helveticaB']=array(
-	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
-	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
-	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
-	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
-	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
-	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
-	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
-	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
-	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
-?>
+<?php
+$fpdf_charwidths['helveticaB']=array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/helveticabi.php b/htdocs/includes/fpdf/fpdf/font/helveticabi.php
index 41379537dc7..8d217743254 100644
--- a/htdocs/includes/fpdf/fpdf/font/helveticabi.php
+++ b/htdocs/includes/fpdf/fpdf/font/helveticabi.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['helveticaBI']=array(
-	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
-	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
-	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
-	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
-	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
-	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
-	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
-	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
-	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
-?>
+<?php
+$fpdf_charwidths['helveticaBI']=array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/helveticai.php b/htdocs/includes/fpdf/fpdf/font/helveticai.php
index d5bb6e094e4..88bf4371bd4 100644
--- a/htdocs/includes/fpdf/fpdf/font/helveticai.php
+++ b/htdocs/includes/fpdf/fpdf/font/helveticai.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['helveticaI']=array(
-	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
-	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
-	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
-	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
-	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
-	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
-	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
-	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
-	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
-?>
+<?php
+$fpdf_charwidths['helveticaI']=array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/makefont/makefont.php b/htdocs/includes/fpdf/fpdf/font/makefont/makefont.php
index 7fe558f27c6..7e7ed5647e0 100644
--- a/htdocs/includes/fpdf/fpdf/font/makefont/makefont.php
+++ b/htdocs/includes/fpdf/fpdf/font/makefont/makefont.php
@@ -1,419 +1,419 @@
-<?php
-/*******************************************************************************
-* Utility to generate font definition files                                    *
-*                                                                              *
-* Version: 1.14                                                                *
-* Date:    2008-08-03                                                          *
-* Author:  Olivier PLATHEY                                                     *
-*******************************************************************************/
-
-function ReadMap($enc)
-{
-	//Read a map file
-	$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
-	$a=file($file);
-	if(empty($a))
-		die('<b>Error:</b> encoding not found: '.$enc);
-	$cc2gn=array();
-	foreach($a as $l)
-	{
-		if($l[0]=='!')
-		{
-			$e=preg_split('/[ \\t]+/',rtrim($l));
-			$cc=hexdec(substr($e[0],1));
-			$gn=$e[2];
-			$cc2gn[$cc]=$gn;
-		}
-	}
-	for($i=0;$i<=255;$i++)
-	{
-		if(!isset($cc2gn[$i]))
-			$cc2gn[$i]='.notdef';
-	}
-	return $cc2gn;
-}
-
-function ReadAFM($file, &$map)
-{
-	//Read a font metric file
-	$a=file($file);
-	if(empty($a))
-		die('File not found');
-	$widths=array();
-	$fm=array();
-	$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
-		'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
-		'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
-		'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
-		'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
-		'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
-		'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
-		'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
-	foreach($a as $l)
-	{
-		$e=explode(' ',rtrim($l));
-		if(count($e)<2)
-			continue;
-		$code=$e[0];
-		$param=$e[1];
-		if($code=='C')
-		{
-			//Character metrics
-			$cc=(int)$e[1];
-			$w=$e[4];
-			$gn=$e[7];
-			if(substr($gn,-4)=='20AC')
-				$gn='Euro';
-			if(isset($fix[$gn]))
-			{
-				//Fix incorrect glyph name
-				foreach($map as $c=>$n)
-				{
-					if($n==$fix[$gn])
-						$map[$c]=$gn;
-				}
-			}
-			if(empty($map))
-			{
-				//Symbolic font: use built-in encoding
-				$widths[$cc]=$w;
-			}
-			else
-			{
-				$widths[$gn]=$w;
-				if($gn=='X')
-					$fm['CapXHeight']=$e[13];
-			}
-			if($gn=='.notdef')
-				$fm['MissingWidth']=$w;
-		}
-		elseif($code=='FontName')
-			$fm['FontName']=$param;
-		elseif($code=='Weight')
-			$fm['Weight']=$param;
-		elseif($code=='ItalicAngle')
-			$fm['ItalicAngle']=(double)$param;
-		elseif($code=='Ascender')
-			$fm['Ascender']=(int)$param;
-		elseif($code=='Descender')
-			$fm['Descender']=(int)$param;
-		elseif($code=='UnderlineThickness')
-			$fm['UnderlineThickness']=(int)$param;
-		elseif($code=='UnderlinePosition')
-			$fm['UnderlinePosition']=(int)$param;
-		elseif($code=='IsFixedPitch')
-			$fm['IsFixedPitch']=($param=='true');
-		elseif($code=='FontBBox')
-			$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
-		elseif($code=='CapHeight')
-			$fm['CapHeight']=(int)$param;
-		elseif($code=='StdVW')
-			$fm['StdVW']=(int)$param;
-	}
-	if(!isset($fm['FontName']))
-		die('FontName not found');
-	if(!empty($map))
-	{
-		if(!isset($widths['.notdef']))
-			$widths['.notdef']=600;
-		if(!isset($widths['Delta']) && isset($widths['increment']))
-			$widths['Delta']=$widths['increment'];
-		//Order widths according to map
-		for($i=0;$i<=255;$i++)
-		{
-			if(!isset($widths[$map[$i]]))
-			{
-				echo '<b>Warning:</b> character '.$map[$i].' is missing<br>';
-				$widths[$i]=$widths['.notdef'];
-			}
-			else
-				$widths[$i]=$widths[$map[$i]];
-		}
-	}
-	$fm['Widths']=$widths;
-	return $fm;
-}
-
-function MakeFontDescriptor($fm, $symbolic)
-{
-	//Ascent
-	$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
-	$fd="array('Ascent'=>".$asc;
-	//Descent
-	$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
-	$fd.=",'Descent'=>".$desc;
-	//CapHeight
-	if(isset($fm['CapHeight']))
-		$ch=$fm['CapHeight'];
-	elseif(isset($fm['CapXHeight']))
-		$ch=$fm['CapXHeight'];
-	else
-		$ch=$asc;
-	$fd.=",'CapHeight'=>".$ch;
-	//Flags
-	$flags=0;
-	if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch'])
-		$flags+=1<<0;
-	if($symbolic)
-		$flags+=1<<2;
-	if(!$symbolic)
-		$flags+=1<<5;
-	if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0)
-		$flags+=1<<6;
-	$fd.=",'Flags'=>".$flags;
-	//FontBBox
-	if(isset($fm['FontBBox']))
-		$fbb=$fm['FontBBox'];
-	else
-		$fbb=array(0,$desc-100,1000,$asc+100);
-	$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
-	//ItalicAngle
-	$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
-	$fd.=",'ItalicAngle'=>".$ia;
-	//StemV
-	if(isset($fm['StdVW']))
-		$stemv=$fm['StdVW'];
-	elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight']))
-		$stemv=120;
-	else
-		$stemv=70;
-	$fd.=",'StemV'=>".$stemv;
-	//MissingWidth
-	if(isset($fm['MissingWidth']))
-		$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
-	$fd.=')';
-	return $fd;
-}
-
-function MakeWidthArray($fm)
-{
-	//Make character width array
-	$s="array(\n\t";
-	$cw=$fm['Widths'];
-	for($i=0;$i<=255;$i++)
-	{
-		if(chr($i)=="'")
-			$s.="'\\''";
-		elseif(chr($i)=="\\")
-			$s.="'\\\\'";
-		elseif($i>=32 && $i<=126)
-			$s.="'".chr($i)."'";
-		else
-			$s.="chr($i)";
-		$s.='=>'.$fm['Widths'][$i];
-		if($i<255)
-			$s.=',';
-		if(($i+1)%22==0)
-			$s.="\n\t";
-	}
-	$s.=')';
-	return $s;
-}
-
-function MakeFontEncoding($map)
-{
-	//Build differences from reference encoding
-	$ref=ReadMap('cp1252');
-	$s='';
-	$last=0;
-	for($i=32;$i<=255;$i++)
-	{
-		if($map[$i]!=$ref[$i])
-		{
-			if($i!=$last+1)
-				$s.=$i.' ';
-			$last=$i;
-			$s.='/'.$map[$i].' ';
-		}
-	}
-	return rtrim($s);
-}
-
-function SaveToFile($file, $s, $mode)
-{
-	$f=fopen($file,'w'.$mode);
-	if(!$f)
-		die('Can\'t write to file '.$file);
-	fwrite($f,$s,strlen($s));
-	fclose($f);
-}
-
-function ReadShort($f)
-{
-	$a=unpack('n1n',fread($f,2));
-	return $a['n'];
-}
-
-function ReadLong($f)
-{
-	$a=unpack('N1N',fread($f,4));
-	return $a['N'];
-}
-
-function CheckTTF($file)
-{
-	//Check if font license allows embedding
-	$f=fopen($file,'rb');
-	if(!$f)
-		die('<b>Error:</b> Can\'t open '.$file);
-	//Extract number of tables
-	fseek($f,4,SEEK_CUR);
-	$nb=ReadShort($f);
-	fseek($f,6,SEEK_CUR);
-	//Seek OS/2 table
-	$found=false;
-	for($i=0;$i<$nb;$i++)
-	{
-		if(fread($f,4)=='OS/2')
-		{
-			$found=true;
-			break;
-		}
-		fseek($f,12,SEEK_CUR);
-	}
-	if(!$found)
-	{
-		fclose($f);
-		return;
-	}
-	fseek($f,4,SEEK_CUR);
-	$offset=ReadLong($f);
-	fseek($f,$offset,SEEK_SET);
-	//Extract fsType flags
-	fseek($f,8,SEEK_CUR);
-	$fsType=ReadShort($f);
-	$rl=($fsType & 0x02)!=0;
-	$pp=($fsType & 0x04)!=0;
-	$e=($fsType & 0x08)!=0;
-	fclose($f);
-	if($rl && !$pp && !$e)
-		echo '<b>Warning:</b> font license does not allow embedding';
-}
-
-/*******************************************************************************
-* fontfile: path to TTF file (or empty string if not to be embedded)           *
-* afmfile:  path to AFM file                                                   *
-* enc:      font encoding (or empty string for symbolic fonts)                 *
-* patch:    optional patch for encoding                                        *
-* type:     font type if fontfile is empty                                     *
-*******************************************************************************/
-function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType')
-{
-	//Generate a font definition file
-	if(get_magic_quotes_runtime())
-		@set_magic_quotes_runtime(0);
-	ini_set('auto_detect_line_endings','1');
-	if($enc)
-	{
-		$map=ReadMap($enc);
-		foreach($patch as $cc=>$gn)
-			$map[$cc]=$gn;
-	}
-	else
-		$map=array();
-	if(!file_exists($afmfile))
-		die('<b>Error:</b> AFM file not found: '.$afmfile);
-	$fm=ReadAFM($afmfile,$map);
-	if($enc)
-		$diff=MakeFontEncoding($map);
-	else
-		$diff='';
-	$fd=MakeFontDescriptor($fm,empty($map));
-	//Find font type
-	if($fontfile)
-	{
-		$ext=strtolower(substr($fontfile,-3));
-		if($ext=='ttf')
-			$type='TrueType';
-		elseif($ext=='pfb')
-			$type='Type1';
-		else
-			die('<b>Error:</b> unrecognized font file extension: '.$ext);
-	}
-	else
-	{
-		if($type!='TrueType' && $type!='Type1')
-			die('<b>Error:</b> incorrect font type: '.$type);
-	}
-	//Start generation
-	$s='<?php'."\n";
-	$s.='$type=\''.$type."';\n";
-	$s.='$name=\''.$fm['FontName']."';\n";
-	$s.='$desc='.$fd.";\n";
-	if(!isset($fm['UnderlinePosition']))
-		$fm['UnderlinePosition']=-100;
-	if(!isset($fm['UnderlineThickness']))
-		$fm['UnderlineThickness']=50;
-	$s.='$up='.$fm['UnderlinePosition'].";\n";
-	$s.='$ut='.$fm['UnderlineThickness'].";\n";
-	$w=MakeWidthArray($fm);
-	$s.='$cw='.$w.";\n";
-	$s.='$enc=\''.$enc."';\n";
-	$s.='$diff=\''.$diff."';\n";
-	$basename=substr(basename($afmfile),0,-4);
-	if($fontfile)
-	{
-		//Embedded font
-		if(!file_exists($fontfile))
-			die('<b>Error:</b> font file not found: '.$fontfile);
-		if($type=='TrueType')
-			CheckTTF($fontfile);
-		$f=fopen($fontfile,'rb');
-		if(!$f)
-			die('<b>Error:</b> Can\'t open '.$fontfile);
-		$file=fread($f,filesize($fontfile));
-		fclose($f);
-		if($type=='Type1')
-		{
-			//Find first two sections and discard third one
-			$header=(ord($file[0])==128);
-			if($header)
-			{
-				//Strip first binary header
-				$file=substr($file,6);
-			}
-			$pos=strpos($file,'eexec');
-			if(!$pos)
-				die('<b>Error:</b> font file does not seem to be valid Type1');
-			$size1=$pos+6;
-			if($header && ord($file[$size1])==128)
-			{
-				//Strip second binary header
-				$file=substr($file,0,$size1).substr($file,$size1+6);
-			}
-			$pos=strpos($file,'00000000');
-			if(!$pos)
-				die('<b>Error:</b> font file does not seem to be valid Type1');
-			$size2=$pos-$size1;
-			$file=substr($file,0,$size1+$size2);
-		}
-		if(function_exists('gzcompress'))
-		{
-			$cmp=$basename.'.z';
-			SaveToFile($cmp,gzcompress($file),'b');
-			$s.='$file=\''.$cmp."';\n";
-			echo 'Font file compressed ('.$cmp.')<br>';
-		}
-		else
-		{
-			$s.='$file=\''.basename($fontfile)."';\n";
-			echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>';
-		}
-		if($type=='Type1')
-		{
-			$s.='$size1='.$size1.";\n";
-			$s.='$size2='.$size2.";\n";
-		}
-		else
-			$s.='$originalsize='.filesize($fontfile).";\n";
-	}
-	else
-	{
-		//Not embedded font
-		$s.='$file='."'';\n";
-	}
-	$s.="?>\n";
-	SaveToFile($basename.'.php',$s,'t');
-	echo 'Font definition file generated ('.$basename.'.php'.')<br>';
-}
-?>
+<?php
+/*******************************************************************************
+* Utility to generate font definition files                                    *
+*                                                                              *
+* Version: 1.14                                                                *
+* Date:    2008-08-03                                                          *
+* Author:  Olivier PLATHEY                                                     *
+*******************************************************************************/
+
+function ReadMap($enc)
+{
+	//Read a map file
+	$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
+	$a=file($file);
+	if(empty($a))
+		die('<b>Error:</b> encoding not found: '.$enc);
+	$cc2gn=array();
+	foreach($a as $l)
+	{
+		if($l[0]=='!')
+		{
+			$e=preg_split('/[ \\t]+/',rtrim($l));
+			$cc=hexdec(substr($e[0],1));
+			$gn=$e[2];
+			$cc2gn[$cc]=$gn;
+		}
+	}
+	for($i=0;$i<=255;$i++)
+	{
+		if(!isset($cc2gn[$i]))
+			$cc2gn[$i]='.notdef';
+	}
+	return $cc2gn;
+}
+
+function ReadAFM($file, &$map)
+{
+	//Read a font metric file
+	$a=file($file);
+	if(empty($a))
+		die('File not found');
+	$widths=array();
+	$fm=array();
+	$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
+		'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
+		'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
+		'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
+		'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
+		'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
+		'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
+		'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
+	foreach($a as $l)
+	{
+		$e=explode(' ',rtrim($l));
+		if(count($e)<2)
+			continue;
+		$code=$e[0];
+		$param=$e[1];
+		if($code=='C')
+		{
+			//Character metrics
+			$cc=(int)$e[1];
+			$w=$e[4];
+			$gn=$e[7];
+			if(substr($gn,-4)=='20AC')
+				$gn='Euro';
+			if(isset($fix[$gn]))
+			{
+				//Fix incorrect glyph name
+				foreach($map as $c=>$n)
+				{
+					if($n==$fix[$gn])
+						$map[$c]=$gn;
+				}
+			}
+			if(empty($map))
+			{
+				//Symbolic font: use built-in encoding
+				$widths[$cc]=$w;
+			}
+			else
+			{
+				$widths[$gn]=$w;
+				if($gn=='X')
+					$fm['CapXHeight']=$e[13];
+			}
+			if($gn=='.notdef')
+				$fm['MissingWidth']=$w;
+		}
+		elseif($code=='FontName')
+			$fm['FontName']=$param;
+		elseif($code=='Weight')
+			$fm['Weight']=$param;
+		elseif($code=='ItalicAngle')
+			$fm['ItalicAngle']=(double)$param;
+		elseif($code=='Ascender')
+			$fm['Ascender']=(int)$param;
+		elseif($code=='Descender')
+			$fm['Descender']=(int)$param;
+		elseif($code=='UnderlineThickness')
+			$fm['UnderlineThickness']=(int)$param;
+		elseif($code=='UnderlinePosition')
+			$fm['UnderlinePosition']=(int)$param;
+		elseif($code=='IsFixedPitch')
+			$fm['IsFixedPitch']=($param=='true');
+		elseif($code=='FontBBox')
+			$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
+		elseif($code=='CapHeight')
+			$fm['CapHeight']=(int)$param;
+		elseif($code=='StdVW')
+			$fm['StdVW']=(int)$param;
+	}
+	if(!isset($fm['FontName']))
+		die('FontName not found');
+	if(!empty($map))
+	{
+		if(!isset($widths['.notdef']))
+			$widths['.notdef']=600;
+		if(!isset($widths['Delta']) && isset($widths['increment']))
+			$widths['Delta']=$widths['increment'];
+		//Order widths according to map
+		for($i=0;$i<=255;$i++)
+		{
+			if(!isset($widths[$map[$i]]))
+			{
+				echo '<b>Warning:</b> character '.$map[$i].' is missing<br>';
+				$widths[$i]=$widths['.notdef'];
+			}
+			else
+				$widths[$i]=$widths[$map[$i]];
+		}
+	}
+	$fm['Widths']=$widths;
+	return $fm;
+}
+
+function MakeFontDescriptor($fm, $symbolic)
+{
+	//Ascent
+	$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
+	$fd="array('Ascent'=>".$asc;
+	//Descent
+	$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
+	$fd.=",'Descent'=>".$desc;
+	//CapHeight
+	if(isset($fm['CapHeight']))
+		$ch=$fm['CapHeight'];
+	elseif(isset($fm['CapXHeight']))
+		$ch=$fm['CapXHeight'];
+	else
+		$ch=$asc;
+	$fd.=",'CapHeight'=>".$ch;
+	//Flags
+	$flags=0;
+	if(isset($fm['IsFixedPitch']) && $fm['IsFixedPitch'])
+		$flags+=1<<0;
+	if($symbolic)
+		$flags+=1<<2;
+	if(!$symbolic)
+		$flags+=1<<5;
+	if(isset($fm['ItalicAngle']) && $fm['ItalicAngle']!=0)
+		$flags+=1<<6;
+	$fd.=",'Flags'=>".$flags;
+	//FontBBox
+	if(isset($fm['FontBBox']))
+		$fbb=$fm['FontBBox'];
+	else
+		$fbb=array(0,$desc-100,1000,$asc+100);
+	$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
+	//ItalicAngle
+	$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
+	$fd.=",'ItalicAngle'=>".$ia;
+	//StemV
+	if(isset($fm['StdVW']))
+		$stemv=$fm['StdVW'];
+	elseif(isset($fm['Weight']) && preg_match('/bold|black/i',$fm['Weight']))
+		$stemv=120;
+	else
+		$stemv=70;
+	$fd.=",'StemV'=>".$stemv;
+	//MissingWidth
+	if(isset($fm['MissingWidth']))
+		$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
+	$fd.=')';
+	return $fd;
+}
+
+function MakeWidthArray($fm)
+{
+	//Make character width array
+	$s="array(\n\t";
+	$cw=$fm['Widths'];
+	for($i=0;$i<=255;$i++)
+	{
+		if(chr($i)=="'")
+			$s.="'\\''";
+		elseif(chr($i)=="\\")
+			$s.="'\\\\'";
+		elseif($i>=32 && $i<=126)
+			$s.="'".chr($i)."'";
+		else
+			$s.="chr($i)";
+		$s.='=>'.$fm['Widths'][$i];
+		if($i<255)
+			$s.=',';
+		if(($i+1)%22==0)
+			$s.="\n\t";
+	}
+	$s.=')';
+	return $s;
+}
+
+function MakeFontEncoding($map)
+{
+	//Build differences from reference encoding
+	$ref=ReadMap('cp1252');
+	$s='';
+	$last=0;
+	for($i=32;$i<=255;$i++)
+	{
+		if($map[$i]!=$ref[$i])
+		{
+			if($i!=$last+1)
+				$s.=$i.' ';
+			$last=$i;
+			$s.='/'.$map[$i].' ';
+		}
+	}
+	return rtrim($s);
+}
+
+function SaveToFile($file, $s, $mode)
+{
+	$f=fopen($file,'w'.$mode);
+	if(!$f)
+		die('Can\'t write to file '.$file);
+	fwrite($f,$s,strlen($s));
+	fclose($f);
+}
+
+function ReadShort($f)
+{
+	$a=unpack('n1n',fread($f,2));
+	return $a['n'];
+}
+
+function ReadLong($f)
+{
+	$a=unpack('N1N',fread($f,4));
+	return $a['N'];
+}
+
+function CheckTTF($file)
+{
+	//Check if font license allows embedding
+	$f=fopen($file,'rb');
+	if(!$f)
+		die('<b>Error:</b> Can\'t open '.$file);
+	//Extract number of tables
+	fseek($f,4,SEEK_CUR);
+	$nb=ReadShort($f);
+	fseek($f,6,SEEK_CUR);
+	//Seek OS/2 table
+	$found=false;
+	for($i=0;$i<$nb;$i++)
+	{
+		if(fread($f,4)=='OS/2')
+		{
+			$found=true;
+			break;
+		}
+		fseek($f,12,SEEK_CUR);
+	}
+	if(!$found)
+	{
+		fclose($f);
+		return;
+	}
+	fseek($f,4,SEEK_CUR);
+	$offset=ReadLong($f);
+	fseek($f,$offset,SEEK_SET);
+	//Extract fsType flags
+	fseek($f,8,SEEK_CUR);
+	$fsType=ReadShort($f);
+	$rl=($fsType & 0x02)!=0;
+	$pp=($fsType & 0x04)!=0;
+	$e=($fsType & 0x08)!=0;
+	fclose($f);
+	if($rl && !$pp && !$e)
+		echo '<b>Warning:</b> font license does not allow embedding';
+}
+
+/*******************************************************************************
+* fontfile: path to TTF file (or empty string if not to be embedded)           *
+* afmfile:  path to AFM file                                                   *
+* enc:      font encoding (or empty string for symbolic fonts)                 *
+* patch:    optional patch for encoding                                        *
+* type:     font type if fontfile is empty                                     *
+*******************************************************************************/
+function MakeFont($fontfile, $afmfile, $enc='cp1252', $patch=array(), $type='TrueType')
+{
+	//Generate a font definition file
+	if(get_magic_quotes_runtime())
+		@set_magic_quotes_runtime(0);
+	ini_set('auto_detect_line_endings','1');
+	if($enc)
+	{
+		$map=ReadMap($enc);
+		foreach($patch as $cc=>$gn)
+			$map[$cc]=$gn;
+	}
+	else
+		$map=array();
+	if(!file_exists($afmfile))
+		die('<b>Error:</b> AFM file not found: '.$afmfile);
+	$fm=ReadAFM($afmfile,$map);
+	if($enc)
+		$diff=MakeFontEncoding($map);
+	else
+		$diff='';
+	$fd=MakeFontDescriptor($fm,empty($map));
+	//Find font type
+	if($fontfile)
+	{
+		$ext=strtolower(substr($fontfile,-3));
+		if($ext=='ttf')
+			$type='TrueType';
+		elseif($ext=='pfb')
+			$type='Type1';
+		else
+			die('<b>Error:</b> unrecognized font file extension: '.$ext);
+	}
+	else
+	{
+		if($type!='TrueType' && $type!='Type1')
+			die('<b>Error:</b> incorrect font type: '.$type);
+	}
+	//Start generation
+	$s='<?php'."\n";
+	$s.='$type=\''.$type."';\n";
+	$s.='$name=\''.$fm['FontName']."';\n";
+	$s.='$desc='.$fd.";\n";
+	if(!isset($fm['UnderlinePosition']))
+		$fm['UnderlinePosition']=-100;
+	if(!isset($fm['UnderlineThickness']))
+		$fm['UnderlineThickness']=50;
+	$s.='$up='.$fm['UnderlinePosition'].";\n";
+	$s.='$ut='.$fm['UnderlineThickness'].";\n";
+	$w=MakeWidthArray($fm);
+	$s.='$cw='.$w.";\n";
+	$s.='$enc=\''.$enc."';\n";
+	$s.='$diff=\''.$diff."';\n";
+	$basename=substr(basename($afmfile),0,-4);
+	if($fontfile)
+	{
+		//Embedded font
+		if(!file_exists($fontfile))
+			die('<b>Error:</b> font file not found: '.$fontfile);
+		if($type=='TrueType')
+			CheckTTF($fontfile);
+		$f=fopen($fontfile,'rb');
+		if(!$f)
+			die('<b>Error:</b> Can\'t open '.$fontfile);
+		$file=fread($f,filesize($fontfile));
+		fclose($f);
+		if($type=='Type1')
+		{
+			//Find first two sections and discard third one
+			$header=(ord($file[0])==128);
+			if($header)
+			{
+				//Strip first binary header
+				$file=substr($file,6);
+			}
+			$pos=strpos($file,'eexec');
+			if(!$pos)
+				die('<b>Error:</b> font file does not seem to be valid Type1');
+			$size1=$pos+6;
+			if($header && ord($file[$size1])==128)
+			{
+				//Strip second binary header
+				$file=substr($file,0,$size1).substr($file,$size1+6);
+			}
+			$pos=strpos($file,'00000000');
+			if(!$pos)
+				die('<b>Error:</b> font file does not seem to be valid Type1');
+			$size2=$pos-$size1;
+			$file=substr($file,0,$size1+$size2);
+		}
+		if(function_exists('gzcompress'))
+		{
+			$cmp=$basename.'.z';
+			SaveToFile($cmp,gzcompress($file),'b');
+			$s.='$file=\''.$cmp."';\n";
+			echo 'Font file compressed ('.$cmp.')<br>';
+		}
+		else
+		{
+			$s.='$file=\''.basename($fontfile)."';\n";
+			echo '<b>Notice:</b> font file could not be compressed (zlib extension not available)<br>';
+		}
+		if($type=='Type1')
+		{
+			$s.='$size1='.$size1.";\n";
+			$s.='$size2='.$size2.";\n";
+		}
+		else
+			$s.='$originalsize='.filesize($fontfile).";\n";
+	}
+	else
+	{
+		//Not embedded font
+		$s.='$file='."'';\n";
+	}
+	$s.="?>\n";
+	SaveToFile($basename.'.php',$s,'t');
+	echo 'Font definition file generated ('.$basename.'.php'.')<br>';
+}
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/symbol.php b/htdocs/includes/fpdf/fpdf/font/symbol.php
index b556ed84cfe..43b50e4511f 100644
--- a/htdocs/includes/fpdf/fpdf/font/symbol.php
+++ b/htdocs/includes/fpdf/fpdf/font/symbol.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['symbol']=array(
-	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
-	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
-	','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
-	'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
-	'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
-	'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
-	chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
-	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
-	chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
-	chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
-	chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
-	chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
-?>
+<?php
+$fpdf_charwidths['symbol']=array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+	','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+	'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+	'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
+	chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
+	chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
+	chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
+	chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
+	chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/times.php b/htdocs/includes/fpdf/fpdf/font/times.php
index b9be1b21d6b..837c706e08d 100644
--- a/htdocs/includes/fpdf/fpdf/font/times.php
+++ b/htdocs/includes/fpdf/fpdf/font/times.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['times']=array(
-	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
-	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
-	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
-	'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
-	'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
-	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
-	chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
-	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
-	chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
-	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
-	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
-?>
+<?php
+$fpdf_charwidths['times']=array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+	'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/timesb.php b/htdocs/includes/fpdf/fpdf/font/timesb.php
index c3eb9fa75bb..09cff86ac4a 100644
--- a/htdocs/includes/fpdf/fpdf/font/timesb.php
+++ b/htdocs/includes/fpdf/fpdf/font/timesb.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['timesB']=array(
-	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
-	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
-	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
-	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
-	'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
-	'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
-	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
-	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
-	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
-?>
+<?php
+$fpdf_charwidths['timesB']=array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+	'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+	'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/timesbi.php b/htdocs/includes/fpdf/fpdf/font/timesbi.php
index 161f6302c8f..b4e38d763b5 100644
--- a/htdocs/includes/fpdf/fpdf/font/timesbi.php
+++ b/htdocs/includes/fpdf/fpdf/font/timesbi.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['timesBI']=array(
-	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
-	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
-	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
-	'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
-	'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
-	'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
-	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
-	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
-	chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
-	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
-?>
+<?php
+$fpdf_charwidths['timesBI']=array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+	'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/timesi.php b/htdocs/includes/fpdf/fpdf/font/timesi.php
index de171fd19e4..0ba2b7773d8 100644
--- a/htdocs/includes/fpdf/fpdf/font/timesi.php
+++ b/htdocs/includes/fpdf/fpdf/font/timesi.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['timesI']=array(
-	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
-	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
-	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
-	'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
-	'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
-	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
-	chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
-	chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
-	chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
-	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
-	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
-?>
+<?php
+$fpdf_charwidths['timesI']=array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+	'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+	'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/font/zapfdingbats.php b/htdocs/includes/fpdf/fpdf/font/zapfdingbats.php
index f2bdfd5c940..1f926a8c3f0 100644
--- a/htdocs/includes/fpdf/fpdf/font/zapfdingbats.php
+++ b/htdocs/includes/fpdf/fpdf/font/zapfdingbats.php
@@ -1,15 +1,15 @@
-<?php
-$fpdf_charwidths['zapfdingbats']=array(
-	chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
-	chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
-	','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
-	'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
-	'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
-	'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
-	chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
-	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
-	chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
-	chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
-	chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
-	chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
-?>
+<?php
+$fpdf_charwidths['zapfdingbats']=array(
+	chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
+	chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+	','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+	'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+	'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+	'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
+	chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
+	chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
+	chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
+	chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
+	chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
+?>
diff --git a/htdocs/includes/fpdf/fpdf/fpdf.css b/htdocs/includes/fpdf/fpdf/fpdf.css
index 8cfa33d73a6..dd2c540029a 100644
--- a/htdocs/includes/fpdf/fpdf/fpdf.css
+++ b/htdocs/includes/fpdf/fpdf/fpdf.css
@@ -1,21 +1,21 @@
-body {font-family:"Times New Roman",serif}
-h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
-h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
-dl.param dt {text-decoration:underline}
-dl.param dd {margin-top:1em; margin-bottom:1em}
-dl.param ul {margin-top:1em; margin-bottom:1em}
-tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
-div.source {margin-top:1.4em; margin-bottom:1.3em}
-div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
-div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
-div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
-div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
-div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
-.kw {color:#000080; font-weight:bold}
-.str {color:#CC0000}
-.cmt {color:#008000}
-p.demo {text-align:center; margin-top:-0.9em}
-a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
-a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
-a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
-a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
+body {font-family:"Times New Roman",serif}
+h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
+h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
+dl.param dt {text-decoration:underline}
+dl.param dd {margin-top:1em; margin-bottom:1em}
+dl.param ul {margin-top:1em; margin-bottom:1em}
+tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
+div.source {margin-top:1.4em; margin-bottom:1.3em}
+div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
+div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
+div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherit; font-size:100%}
+div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
+.kw {color:#000080; font-weight:bold}
+.str {color:#CC0000}
+.cmt {color:#008000}
+p.demo {text-align:center; margin-top:-0.9em}
+a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
+a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
+a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
diff --git a/htdocs/includes/fpdf/fpdf/histo.htm b/htdocs/includes/fpdf/fpdf/histo.htm
index be15851bf1b..7097fd89034 100644
--- a/htdocs/includes/fpdf/fpdf/histo.htm
+++ b/htdocs/includes/fpdf/fpdf/histo.htm
@@ -1,128 +1,128 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>History</title>
-<link type="text/css" rel="stylesheet" href="fpdf.css">
-<style type="text/css">
-dd {margin-top:1em; margin-bottom:1em}
-</style>
-</head>
-<body>
-<h1>History</h1>
-<dl>
-<dt><strong>v1.6</strong> (2008-08-03)</dt>
-<dd>
-- GIF image support.<br>
-- Images can now trigger page breaks.<br>
-- Possibility to have different page formats in a single document.<br>
-- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
-- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
-- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
-- Removed some warning messages appearing with recent PHP versions.<br>
-- Added HTTP headers to reduce problems with IE.<br>
-</dd>
-<dt><strong>v1.53</strong> (2004-12-31)</dt>
-<dd>
-- When the font subdirectory is in the same directory as fpdf.php, it is no longer necessary to define the FPDF_FONTPATH constant.<br>
-- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
-- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
-- The file name sent to the browser could not contain a space character.<br>
-- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
-</dd>
-<dt><strong>v1.52</strong> (2003-12-30)</dt>
-<dd>
-- Image() now displays the image at 72 dpi if no dimension is given.<br>
-- Output() takes a string as second parameter to indicate destination.<br>
-- Open() is now called automatically by AddPage().<br>
-- Inserting remote JPEG images doesn't generate an error any longer.<br>
-- Decimal separator is forced to dot in the constructor.<br>
-- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
-- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
-- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
-- The underlining was going too far for text containing characters \, ( or ).<br>
-- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
-</dd>
-<dt><strong>v1.51</strong> (2002-08-03)</dt>
-<dd>
-- Type1 font support.<br>
-- Added Baltic encoding.<br>
-- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5 :<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
-- It is no longer necessary to set the decimal separator as dot to produce valid documents.<br>
-- The clickable area in a cell was always on the left independently from the text alignment.<br>
-- JPEG images in CMYK mode appeared in inverted colors.<br>
-- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
-- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
-</dd>
-<dt><strong>v1.5</strong> (2002-05-28)</dt>
-<dd>
-- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
-- Added Write() method.<br>
-- Added underlined style.<br>
-- Internal and external link support (AddLink(), SetLink(), Link()).<br>
-- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
-- Modification of SetDisplayMode() to select page layout.<br>
-- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
-- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
-</dd>
-<dt><strong>v1.41</strong> (2002-03-13)</dt>
-<dd>
-- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
-</dd>
-<dt><strong>v1.4</strong> (2002-03-02)</dt>
-<dd>
-- PHP3 is no longer supported.<br>
-- Page compression (SetCompression()).<br>
-- Choice of page format and possibility to change orientation inside document.<br>
-- Added AcceptPageBreak() method.<br>
-- Ability to print the total number of pages (AliasNbPages()).<br>
-- Choice of cell borders to draw.<br>
-- New mode for Cell(): the current position can now move under the cell.<br>
-- Ability to include an image by specifying height only (width is calculated automatically).<br>
-- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
-</dd>
-<dt><strong>v1.31</strong> (2002-01-12)</dt>
-<dd>
-- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
-- Removed Expires HTTP header (gives trouble in some situations).<br>
-- Added Content-disposition HTTP header (seems to help in some situations).<br>
-</dd>
-<dt><strong>v1.3</strong> (2001-12-03)</dt>
-<dd>
-- Line break and text justification support (MultiCell()).<br>
-- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
-- A cell whose width is declared null extends up to the right margin of the page.<br>
-- Line width is now retained from page to page and defaults to 0.2 mm.<br>
-- Added SetXY() method.<br>
-- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
-</dd>
-<dt><strong>v1.2</strong> (2001-11-11)</dt>
-<dd>
-- Added font metric files and GetStringWidth() method.<br>
-- Centering and right-aligning text in cells.<br>
-- Display mode control (SetDisplayMode()).<br>
-- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
-- Possibility to force PDF download by browser.<br>
-- Added SetX() and GetX() methods.<br>
-- During automatic page break, current abscissa is now retained.<br>
-</dd>
-<dt><strong>v1.11</strong> (2001-10-20)</dt>
-<dd>
-- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
-- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
-</dd>
-<dt><strong>v1.1</strong> (2001-10-07)</dt>
-<dd>
-- JPEG and PNG image support.<br>
-</dd>
-<dt><strong>v1.01</strong> (2001-10-03)</dt>
-<dd>
-- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
-</dd>
-<dt><strong>v1.0</strong> (2001-09-17)</dt>
-<dd>
-- First version.<br>
-</dd>
-</dl>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>History</title>
+<link type="text/css" rel="stylesheet" href="fpdf.css">
+<style type="text/css">
+dd {margin-top:1em; margin-bottom:1em}
+</style>
+</head>
+<body>
+<h1>History</h1>
+<dl>
+<dt><strong>v1.6</strong> (2008-08-03)</dt>
+<dd>
+- GIF image support.<br>
+- Images can now trigger page breaks.<br>
+- Possibility to have different page formats in a single document.<br>
+- Document properties (author, creator, keywords, subject and title) can now be specified in UTF-8.<br>
+- Fixed a bug: when a PNG was inserted through a URL, an error sometimes occurred.<br>
+- An automatic page break in Header() doesn't cause an infinite loop any more.<br>
+- Removed some warning messages appearing with recent PHP versions.<br>
+- Added HTTP headers to reduce problems with IE.<br>
+</dd>
+<dt><strong>v1.53</strong> (2004-12-31)</dt>
+<dd>
+- When the font subdirectory is in the same directory as fpdf.php, it is no longer necessary to define the FPDF_FONTPATH constant.<br>
+- The array $HTTP_SERVER_VARS is no longer used. It could cause trouble on PHP5-based configurations with the register_long_arrays option disabled.<br>
+- Fixed a problem related to Type1 font embedding which caused trouble to some PDF processors.<br>
+- The file name sent to the browser could not contain a space character.<br>
+- The Cell() method could not print the number 0 (you had to pass the string '0').<br>
+</dd>
+<dt><strong>v1.52</strong> (2003-12-30)</dt>
+<dd>
+- Image() now displays the image at 72 dpi if no dimension is given.<br>
+- Output() takes a string as second parameter to indicate destination.<br>
+- Open() is now called automatically by AddPage().<br>
+- Inserting remote JPEG images doesn't generate an error any longer.<br>
+- Decimal separator is forced to dot in the constructor.<br>
+- Added several encodings (Turkish, Thai, Hebrew, Ukrainian and Vietnamese).<br>
+- The last line of a right-aligned MultiCell() was not correctly aligned if it was terminated by a carriage return.<br>
+- No more error message about already sent headers when outputting the PDF to the standard output from the command line.<br>
+- The underlining was going too far for text containing characters \, ( or ).<br>
+- $HTTP_ENV_VARS has been replaced by $HTTP_SERVER_VARS.<br>
+</dd>
+<dt><strong>v1.51</strong> (2002-08-03)</dt>
+<dd>
+- Type1 font support.<br>
+- Added Baltic encoding.<br>
+- The class now works internally in points with the origin at the bottom in order to avoid two bugs occurring with Acrobat 5 :<br>&nbsp;&nbsp;* The line thickness was too large when printed under Windows 98 SE and ME.<br>&nbsp;&nbsp;* TrueType fonts didn't appear immediately inside the plug-in (a substitution font was used), one had to cause a window refresh to make them show up.<br>
+- It is no longer necessary to set the decimal separator as dot to produce valid documents.<br>
+- The clickable area in a cell was always on the left independently from the text alignment.<br>
+- JPEG images in CMYK mode appeared in inverted colors.<br>
+- Transparent PNG images in grayscale or true color mode were incorrectly handled.<br>
+- Adding new fonts now works correctly even with the magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.5</strong> (2002-05-28)</dt>
+<dd>
+- TrueType font (AddFont()) and encoding support (Western and Eastern Europe, Cyrillic and Greek).<br>
+- Added Write() method.<br>
+- Added underlined style.<br>
+- Internal and external link support (AddLink(), SetLink(), Link()).<br>
+- Added right margin management and methods SetRightMargin(), SetTopMargin().<br>
+- Modification of SetDisplayMode() to select page layout.<br>
+- The border parameter of MultiCell() now lets choose borders to draw as Cell().<br>
+- When a document contains no page, Close() now calls AddPage() instead of causing a fatal error.<br>
+</dd>
+<dt><strong>v1.41</strong> (2002-03-13)</dt>
+<dd>
+- Fixed SetDisplayMode() which no longer worked (the PDF viewer used its default display).<br>
+</dd>
+<dt><strong>v1.4</strong> (2002-03-02)</dt>
+<dd>
+- PHP3 is no longer supported.<br>
+- Page compression (SetCompression()).<br>
+- Choice of page format and possibility to change orientation inside document.<br>
+- Added AcceptPageBreak() method.<br>
+- Ability to print the total number of pages (AliasNbPages()).<br>
+- Choice of cell borders to draw.<br>
+- New mode for Cell(): the current position can now move under the cell.<br>
+- Ability to include an image by specifying height only (width is calculated automatically).<br>
+- Fixed a bug: when a justified line triggered a page break, the footer inherited the corresponding word spacing.<br>
+</dd>
+<dt><strong>v1.31</strong> (2002-01-12)</dt>
+<dd>
+- Fixed a bug in drawing frame with MultiCell(): the last line always started from the left margin.<br>
+- Removed Expires HTTP header (gives trouble in some situations).<br>
+- Added Content-disposition HTTP header (seems to help in some situations).<br>
+</dd>
+<dt><strong>v1.3</strong> (2001-12-03)</dt>
+<dd>
+- Line break and text justification support (MultiCell()).<br>
+- Color support (SetDrawColor(), SetFillColor(), SetTextColor()). Possibility to draw filled rectangles and paint cell background.<br>
+- A cell whose width is declared null extends up to the right margin of the page.<br>
+- Line width is now retained from page to page and defaults to 0.2 mm.<br>
+- Added SetXY() method.<br>
+- Fixed a passing by reference done in a deprecated manner for PHP4.<br>
+</dd>
+<dt><strong>v1.2</strong> (2001-11-11)</dt>
+<dd>
+- Added font metric files and GetStringWidth() method.<br>
+- Centering and right-aligning text in cells.<br>
+- Display mode control (SetDisplayMode()).<br>
+- Added methods to set document properties (SetAuthor(), SetCreator(), SetKeywords(), SetSubject(), SetTitle()).<br>
+- Possibility to force PDF download by browser.<br>
+- Added SetX() and GetX() methods.<br>
+- During automatic page break, current abscissa is now retained.<br>
+</dd>
+<dt><strong>v1.11</strong> (2001-10-20)</dt>
+<dd>
+- PNG support doesn't require PHP4/zlib any more. Data are now put directly into PDF without any decompression/recompression stage.<br>
+- Image insertion now works correctly even with magic_quotes_runtime option set to on.<br>
+</dd>
+<dt><strong>v1.1</strong> (2001-10-07)</dt>
+<dd>
+- JPEG and PNG image support.<br>
+</dd>
+<dt><strong>v1.01</strong> (2001-10-03)</dt>
+<dd>
+- Fixed a bug involving page break: in case when Header() doesn't specify a font, the one from previous page was not restored and produced an incorrect document.<br>
+</dd>
+<dt><strong>v1.0</strong> (2001-09-17)</dt>
+<dd>
+- First version.<br>
+</dd>
+</dl>
+</body>
+</html>
diff --git a/htdocs/includes/fpdf/fpdf/install.txt b/htdocs/includes/fpdf/fpdf/install.txt
index a14099543b2..8ee326b05c1 100644
--- a/htdocs/includes/fpdf/fpdf/install.txt
+++ b/htdocs/includes/fpdf/fpdf/install.txt
@@ -1,26 +1,26 @@
-The FPDF library is made up of the following elements:
-
-- the main file, fpdf.php, which contains the class
-- the font metric files (located in the font directory of this archive)
-
-The metric files are necessary as soon as you want to output some text in a document.
-They can be accessed from three different locations:
-
-- the directory defined by the FPDF_FONTPATH constant (if this constant is defined)
-- the font directory located in the directory containing fpdf.php (as it is the case in this archive)
-- the directories accessible through include()
-
-Here is an example defining FPDF_FONTPATH (note the mandatory final slash):
-
-define('FPDF_FONTPATH','/home/www/font/');
-require('fpdf.php');
-
-If the files are not accessible, the SetFont() method will produce the following error:
-
-FPDF error: Could not include font metric file
-
-
-Remarks:
-
-- Only the files corresponding to the fonts actually used are necessary
-- The tutorials provided in this package are ready to be executed
+The FPDF library is made up of the following elements:
+
+- the main file, fpdf.php, which contains the class
+- the font metric files (located in the font directory of this archive)
+
+The metric files are necessary as soon as you want to output some text in a document.
+They can be accessed from three different locations:
+
+- the directory defined by the FPDF_FONTPATH constant (if this constant is defined)
+- the font directory located in the directory containing fpdf.php (as it is the case in this archive)
+- the directories accessible through include()
+
+Here is an example defining FPDF_FONTPATH (note the mandatory final slash):
+
+define('FPDF_FONTPATH','/home/www/font/');
+require('fpdf.php');
+
+If the files are not accessible, the SetFont() method will produce the following error:
+
+FPDF error: Could not include font metric file
+
+
+Remarks:
+
+- Only the files corresponding to the fonts actually used are necessary
+- The tutorials provided in this package are ready to be executed
diff --git a/htdocs/includes/fpdf/fpdf/license.txt b/htdocs/includes/fpdf/fpdf/license.txt
index 6107ee47775..fd811c6f56d 100644
--- a/htdocs/includes/fpdf/fpdf/license.txt
+++ b/htdocs/includes/fpdf/fpdf/license.txt
@@ -1,6 +1,6 @@
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software to use, copy, modify, distribute, sublicense, and/or sell
-copies of the software, and to permit persons to whom the software is furnished
-to do so.
-
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software to use, copy, modify, distribute, sublicense, and/or sell
+copies of the software, and to permit persons to whom the software is furnished
+to do so.
+
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
\ No newline at end of file
diff --git a/htdocs/includes/fpdf/fpdfi/README.txt b/htdocs/includes/fpdf/fpdfi/README.txt
index 070304494ee..b1c69409786 100644
--- a/htdocs/includes/fpdf/fpdfi/README.txt
+++ b/htdocs/includes/fpdf/fpdfi/README.txt
@@ -1,5 +1,5 @@
-This directory contains all FPDFI librairies:
-- FPDI
-- FPDI_TPL
-- FPDI_Protection
-Found on http://www.setasign.de/products/pdf-php-solutions/fpdi/
+This directory contains all FPDFI librairies:
+- FPDI
+- FPDI_TPL
+- FPDI_Protection
+Found on http://www.setasign.de/products/pdf-php-solutions/fpdi/
diff --git a/htdocs/includes/geoip/geoipcity.inc b/htdocs/includes/geoip/geoipcity.inc
index 160757187c3..0e7f40e72e0 100644
--- a/htdocs/includes/geoip/geoipcity.inc
+++ b/htdocs/includes/geoip/geoipcity.inc
@@ -1,208 +1,208 @@
-<?php
-
-/* geoipcity.inc
- *
- * Copyright (C) 2004 Maxmind LLC
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
- */
-
-/*
- * Changelog:
- *
- * 2005-01-13   Andrew Hill, Awarez Ltd. (http://www.awarez.net)
- *              Formatted file according to PEAR library standards.
- *              Changed inclusion of geoip.inc file to require_once, so that
- *                  this library can be used in the same script as geoip.inc.
- */
-
-define("FULL_RECORD_LENGTH",50);
-
-require_once 'geoip.inc';
-require_once 'geoipregionvars.php';
-
-class geoiprecord {
-  var $country_code;
-  var $country_code3;
-  var $country_name;
-  var $region;
-  var $city;
-  var $postal_code;
-  var $latitude;
-  var $longitude;
-  var $area_code;
-  var $dma_code;   # metro and dma code are the same. use metro_code
-  var $metro_code;
-}
-
-class geoipdnsrecord {
-  var $country_code;
-  var $country_code3;
-  var $country_name;
-  var $region;
-  var $regionname;
-  var $city;
-  var $postal_code;
-  var $latitude;
-  var $longitude;
-  var $areacode;
-  var $dmacode;
-  var $isp;
-  var $org;
-  var $metrocode;
-}
-
-function getrecordwithdnsservice($str){
-  $record = new geoipdnsrecord;
-  $keyvalue = explode(";",$str);
-  foreach ($keyvalue as $keyvalue2){
-    list($key,$value) = explode("=",$keyvalue2);
-    if ($key == "co"){
-      $record->country_code = $value;
-    }
-    if ($key == "ci"){
-      $record->city = $value;
-    }
-    if ($key == "re"){
-      $record->region = $value;
-    }
-    if ($key == "ac"){
-      $record->areacode = $value;
-    }
-    if ($key == "dm" || $key == "me" ){
-      $record->dmacode   = $value;
-      $record->metrocode = $value;
-    }
-    if ($key == "is"){
-      $record->isp = $value;
-    }
-    if ($key == "or"){
-      $record->org = $value;
-    }
-    if ($key == "zi"){
-      $record->postal_code = $value;
-    }
-    if ($key == "la"){
-      $record->latitude = $value;
-    }
-    if ($key == "lo"){
-      $record->longitude = $value;
-    }
-  }
-  $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
-  $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
-  $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
-  if ($record->region != "") {
-    if (($record->country_code == "US") || ($record->country_code == "CA")){
-      $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
-    } else {
-      $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
-    }
-  }
-  return $record;
-}
-
-function _get_record($gi,$ipnum){
-  $seek_country = _geoip_seek_country($gi,$ipnum);
-  if ($seek_country == $gi->databaseSegments) {
-    return NULL;
-  }
-  $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
-  
-  if ($gi->flags & GEOIP_MEMORY_CACHE) {
-    $record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
-  } elseif ($gi->flags & GEOIP_SHARED_MEMORY){
-    $record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
-  } else {
-    fseek($gi->filehandle, $record_pointer, SEEK_SET);
-    $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
-  }
-  $record = new geoiprecord;
-  $record_buf_pos = 0;
-  $char = ord(substr($record_buf,$record_buf_pos,1));
-    $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
-    $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
-    $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
-  $record_buf_pos++;
-  $str_length = 0;
-    // Get region
-  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  while ($char != 0){
-    $str_length++;
-    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  }
-  if ($str_length > 0){
-    $record->region = substr($record_buf,$record_buf_pos,$str_length);
-  }
-  $record_buf_pos += $str_length + 1;
-  $str_length = 0;
-    // Get city
-  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  while ($char != 0){
-    $str_length++;
-    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  }
-  if ($str_length > 0){
-    $record->city = substr($record_buf,$record_buf_pos,$str_length);
-  }
-  $record_buf_pos += $str_length + 1;
-  $str_length = 0;
-    // Get postal code
-  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  while ($char != 0){
-    $str_length++;
-    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
-  }
-  if ($str_length > 0){
-    $record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
-  }
-  $record_buf_pos += $str_length + 1;
-  $str_length = 0;
-    // Get latitude and longitude
-  $latitude = 0;
-  $longitude = 0;
-  for ($j = 0;$j < 3; ++$j){
-    $char = ord(substr($record_buf,$record_buf_pos++,1));
-    $latitude += ($char << ($j * 8));
-  }
-  $record->latitude = ($latitude/10000) - 180;
-  for ($j = 0;$j < 3; ++$j){
-    $char = ord(substr($record_buf,$record_buf_pos++,1));
-    $longitude += ($char << ($j * 8));
-  }
-  $record->longitude = ($longitude/10000) - 180;
-  if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
-    $metroarea_combo = 0;
-    if ($record->country_code == "US"){
-      for ($j = 0;$j < 3;++$j){
-        $char = ord(substr($record_buf,$record_buf_pos++,1));
-        $metroarea_combo += ($char << ($j * 8));
-      }
-      $record->metro_code = $record->dma_code = floor($metroarea_combo/1000);
-      $record->area_code = $metroarea_combo%1000;
-    }
-  }
-  return $record;
-}
-
-function GeoIP_record_by_addr ($gi,$addr){
-  if ($addr == NULL){
-     return 0;
-  }
-  $ipnum = ip2long($addr);
-  return _get_record($gi, $ipnum);
-}
-
-?>
+<?php
+
+/* geoipcity.inc
+ *
+ * Copyright (C) 2004 Maxmind LLC
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+/*
+ * Changelog:
+ *
+ * 2005-01-13   Andrew Hill, Awarez Ltd. (http://www.awarez.net)
+ *              Formatted file according to PEAR library standards.
+ *              Changed inclusion of geoip.inc file to require_once, so that
+ *                  this library can be used in the same script as geoip.inc.
+ */
+
+define("FULL_RECORD_LENGTH",50);
+
+require_once 'geoip.inc';
+require_once 'geoipregionvars.php';
+
+class geoiprecord {
+  var $country_code;
+  var $country_code3;
+  var $country_name;
+  var $region;
+  var $city;
+  var $postal_code;
+  var $latitude;
+  var $longitude;
+  var $area_code;
+  var $dma_code;   # metro and dma code are the same. use metro_code
+  var $metro_code;
+}
+
+class geoipdnsrecord {
+  var $country_code;
+  var $country_code3;
+  var $country_name;
+  var $region;
+  var $regionname;
+  var $city;
+  var $postal_code;
+  var $latitude;
+  var $longitude;
+  var $areacode;
+  var $dmacode;
+  var $isp;
+  var $org;
+  var $metrocode;
+}
+
+function getrecordwithdnsservice($str){
+  $record = new geoipdnsrecord;
+  $keyvalue = explode(";",$str);
+  foreach ($keyvalue as $keyvalue2){
+    list($key,$value) = explode("=",$keyvalue2);
+    if ($key == "co"){
+      $record->country_code = $value;
+    }
+    if ($key == "ci"){
+      $record->city = $value;
+    }
+    if ($key == "re"){
+      $record->region = $value;
+    }
+    if ($key == "ac"){
+      $record->areacode = $value;
+    }
+    if ($key == "dm" || $key == "me" ){
+      $record->dmacode   = $value;
+      $record->metrocode = $value;
+    }
+    if ($key == "is"){
+      $record->isp = $value;
+    }
+    if ($key == "or"){
+      $record->org = $value;
+    }
+    if ($key == "zi"){
+      $record->postal_code = $value;
+    }
+    if ($key == "la"){
+      $record->latitude = $value;
+    }
+    if ($key == "lo"){
+      $record->longitude = $value;
+    }
+  }
+  $number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
+  $record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
+  $record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
+  if ($record->region != "") {
+    if (($record->country_code == "US") || ($record->country_code == "CA")){
+      $record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
+    } else {
+      $record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
+    }
+  }
+  return $record;
+}
+
+function _get_record($gi,$ipnum){
+  $seek_country = _geoip_seek_country($gi,$ipnum);
+  if ($seek_country == $gi->databaseSegments) {
+    return NULL;
+  }
+  $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
+  
+  if ($gi->flags & GEOIP_MEMORY_CACHE) {
+    $record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
+  } elseif ($gi->flags & GEOIP_SHARED_MEMORY){
+    $record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
+  } else {
+    fseek($gi->filehandle, $record_pointer, SEEK_SET);
+    $record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
+  }
+  $record = new geoiprecord;
+  $record_buf_pos = 0;
+  $char = ord(substr($record_buf,$record_buf_pos,1));
+    $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
+    $record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
+    $record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
+  $record_buf_pos++;
+  $str_length = 0;
+    // Get region
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->region = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get city
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->city = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get postal code
+  $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  while ($char != 0){
+    $str_length++;
+    $char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
+  }
+  if ($str_length > 0){
+    $record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
+  }
+  $record_buf_pos += $str_length + 1;
+  $str_length = 0;
+    // Get latitude and longitude
+  $latitude = 0;
+  $longitude = 0;
+  for ($j = 0;$j < 3; ++$j){
+    $char = ord(substr($record_buf,$record_buf_pos++,1));
+    $latitude += ($char << ($j * 8));
+  }
+  $record->latitude = ($latitude/10000) - 180;
+  for ($j = 0;$j < 3; ++$j){
+    $char = ord(substr($record_buf,$record_buf_pos++,1));
+    $longitude += ($char << ($j * 8));
+  }
+  $record->longitude = ($longitude/10000) - 180;
+  if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
+    $metroarea_combo = 0;
+    if ($record->country_code == "US"){
+      for ($j = 0;$j < 3;++$j){
+        $char = ord(substr($record_buf,$record_buf_pos++,1));
+        $metroarea_combo += ($char << ($j * 8));
+      }
+      $record->metro_code = $record->dma_code = floor($metroarea_combo/1000);
+      $record->area_code = $metroarea_combo%1000;
+    }
+  }
+  return $record;
+}
+
+function GeoIP_record_by_addr ($gi,$addr){
+  if ($addr == NULL){
+     return 0;
+  }
+  $ipnum = ip2long($addr);
+  return _get_record($gi, $ipnum);
+}
+
+?>
diff --git a/htdocs/includes/login/README.txt b/htdocs/includes/login/README.txt
index 8ea3d79077c..beb66115858 100644
--- a/htdocs/includes/login/README.txt
+++ b/htdocs/includes/login/README.txt
@@ -1,26 +1,26 @@
-README (english)
----------------------------------------------
-Decription of htdocs/includes/login directory
----------------------------------------------
-
-This directory contains files that handle way to validate passwords.
-
-If you want to add a new password checker function, just add a file in
-this directory that follow example of already existing files.
-This file must be called for example : 
-functions_mypasschecker.php
-
-Edit function name to call it:
-check_user_mypasschecker
-
-Change code of this function to return true if couple 
-$usertotest / $passwordtotest is ok for you.
-
-Then, you must edit you conf.php file to change the value of
-$dolibarr_main_authentication
-parameter to set it to :
-mypasschecker
-
-Once this is done, when you log in to Dolibarr, the function 
-check_user_mypasschecker in this file is called.
-If the function return true and login exists, login is accepted.
+README (english)
+---------------------------------------------
+Decription of htdocs/includes/login directory
+---------------------------------------------
+
+This directory contains files that handle way to validate passwords.
+
+If you want to add a new password checker function, just add a file in
+this directory that follow example of already existing files.
+This file must be called for example : 
+functions_mypasschecker.php
+
+Edit function name to call it:
+check_user_mypasschecker
+
+Change code of this function to return true if couple 
+$usertotest / $passwordtotest is ok for you.
+
+Then, you must edit you conf.php file to change the value of
+$dolibarr_main_authentication
+parameter to set it to :
+mypasschecker
+
+Once this is done, when you log in to Dolibarr, the function 
+check_user_mypasschecker in this file is called.
+If the function return true and login exists, login is accepted.
diff --git a/htdocs/includes/magpierss/rss_parse.inc b/htdocs/includes/magpierss/rss_parse.inc
index 7a19b572f1f..e39d3971d2c 100644
--- a/htdocs/includes/magpierss/rss_parse.inc
+++ b/htdocs/includes/magpierss/rss_parse.inc
@@ -1,605 +1,605 @@
-<?php
-
-/**
-* Project:     MagpieRSS: a simple RSS integration tool
-* File:        rss_parse.inc  - parse an RSS or Atom feed
-*               return as a simple object.
-*
-* Handles RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3
-*
-* The lastest version of MagpieRSS can be obtained from:
-* http://magpierss.sourceforge.net
-*
-* For questions, help, comments, discussion, etc., please join the
-* Magpie mailing list:
-* magpierss-general@lists.sourceforge.net
-*
-* @author           Kellan Elliott-McCrea <kellan@protest.net>
-* @version          0.7a
-* @license          GPL
-*
-*/
-
-define('RSS', 'RSS');
-define('ATOM', 'Atom');
-
-require_once (MAGPIE_DIR . 'rss_utils.inc');
-
-/**
-* Hybrid parser, and object, takes RSS as a string and returns a simple object.
-*
-* see: rss_fetch.inc for a simpler interface with integrated caching support
-*
-*/
-class MagpieRSS {
-    var $parser;
-    
-    var $current_item   = array();  // item currently being parsed
-    var $items          = array();  // collection of parsed items
-    var $channel        = array();  // hash of channel fields
-    var $textinput      = array();
-    var $image          = array();
-    var $feed_type;
-    var $feed_version;
-    var $encoding       = '';       // output encoding of parsed rss
-    
-    var $_source_encoding = '';     // only set if we have to parse xml prolog
-    
-    var $ERROR = "";
-    var $WARNING = "";
-    
-    // define some constants
-    
-    var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright');
-    var $_KNOWN_ENCODINGS    = array('UTF-8', 'US-ASCII', 'ISO-8859-1');
-
-    // parser variables, useless if you're not a parser, treat as private
-    var $stack              = array(); // parser stack
-    var $inchannel          = false;
-    var $initem             = false;
-    var $incontent          = false; // if in Atom <content mode="xml"> field 
-    var $intextinput        = false;
-    var $inimage            = false;
-    var $current_namespace  = false;
-    
-
-    /**
-     *  Set up XML parser, parse source, and return populated RSS object..
-     *   
-     *  @param string $source           string containing the RSS to be parsed
-     *
-     *  NOTE:  Probably a good idea to leave the encoding options alone unless
-     *         you know what you're doing as PHP's character set support is
-     *         a little weird.
-     *
-     *  NOTE:  A lot of this is unnecessary but harmless with PHP5 
-     *
-     *
-     *  @param string $output_encoding  output the parsed RSS in this character 
-     *                                  set defaults to ISO-8859-1 as this is PHP's
-     *                                  default.
-     *
-     *                                  NOTE: might be changed to UTF-8 in future
-     *                                  versions.
-     *                               
-     *  @param string $input_encoding   the character set of the incoming RSS source. 
-     *                                  Leave blank and Magpie will try to figure it
-     *                                  out.
-     *                                  
-     *                                   
-     *  @param bool   $detect_encoding  if false Magpie won't attempt to detect
-     *                                  source encoding. (caveat emptor)
-     *
-     */
-    function MagpieRSS ($source, $output_encoding='ISO-8859-1', 
-                        $input_encoding=null, $detect_encoding=true) 
-    {   
-        # if PHP xml isn't compiled in, die
-        #
-        if (!function_exists('xml_parser_create')) {
-            $this->error( "Failed to load PHP's XML Extension. " . 
-                          "http://www.php.net/manual/en/ref.xml.php",
-                           E_USER_ERROR );
-        }
-        
-        list($parser, $source) = $this->create_parser($source, 
-                $output_encoding, $input_encoding, $detect_encoding);
-        
-        
-        if (!is_resource($parser)) {
-            $this->error( "Failed to create an instance of PHP's XML parser. " .
-                          "http://www.php.net/manual/en/ref.xml.php",
-                          E_USER_ERROR );
-        }
-
-        
-        $this->parser = $parser;
-        
-        # pass in parser, and a reference to this object
-        # setup handlers
-        #
-        xml_set_object( $this->parser, $this );
-        xml_set_element_handler($this->parser, 
-                'feed_start_element', 'feed_end_element' );
-                        
-        xml_set_character_data_handler( $this->parser, 'feed_cdata' ); 
-    
-        $status = xml_parse( $this->parser, $source );
-        
-        if (! $status ) {
-            $errorcode = xml_get_error_code( $this->parser );
-            if ( $errorcode != XML_ERROR_NONE ) {
-                $xml_error = xml_error_string( $errorcode );
-                $error_line = xml_get_current_line_number($this->parser);
-                $error_col = xml_get_current_column_number($this->parser);
-                $errormsg = "$xml_error at line $error_line, column $error_col";
-
-                $this->error( $errormsg );
-            }
-        }
-        
-        xml_parser_free( $this->parser );
-
-        $this->normalize();
-    }
-    
-    function feed_start_element($p, $element, &$attrs) {
-        $el = $element = strtolower($element);
-        $attrs = array_change_key_case($attrs, CASE_LOWER);
-        
-        // check for a namespace, and split if found
-        $ns = false;
-        if ( strpos( $element, ':' ) ) {
-            list($ns, $el) = explode( ':', $element, 2); 
-        }
-        if ( $ns and $ns != 'rdf' ) {
-            $this->current_namespace = $ns;
-        }
-            
-        # if feed type isn't set, then this is first element of feed
-        # identify feed from root element
-        #
-        if (!isset($this->feed_type) ) {
-            if ( $el == 'rdf' ) {
-                $this->feed_type = RSS;
-                $this->feed_version = '1.0';
-            }
-            elseif ( $el == 'rss' ) {
-                $this->feed_type = RSS;
-                $this->feed_version = $attrs['version'];
-            }
-            elseif ( $el == 'feed' ) {
-                $this->feed_type = ATOM;
-                $this->feed_version = $attrs['version'];
-                $this->inchannel = true;
-            }
-            return;
-        }
-    
-        if ( $el == 'channel' ) 
-        {
-            $this->inchannel = true;
-        }
-        elseif ($el == 'item' or $el == 'entry' ) 
-        {
-            $this->initem = true;
-            if ( isset($attrs['rdf:about']) ) {
-                $this->current_item['about'] = $attrs['rdf:about']; 
-            }
-        }
-        
-        // if we're in the default namespace of an RSS feed,
-        //  record textinput or image fields
-        elseif ( 
-            $this->feed_type == RSS and 
-            $this->current_namespace == '' and 
-            $el == 'textinput' ) 
-        {
-            $this->intextinput = true;
-        }
-        
-        elseif (
-            $this->feed_type == RSS and 
-            $this->current_namespace == '' and 
-            $el == 'image' ) 
-        {
-            $this->inimage = true;
-        }
-        
-        # handle atom content constructs
-        elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
-        {
-            // avoid clashing w/ RSS mod_content
-            if ($el == 'content' ) {
-                $el = 'atom_content';
-            }
-            
-            $this->incontent = $el;
-            
-            
-        }
-        
-        // if inside an Atom content construct (e.g. content or summary) field treat tags as text
-        elseif ($this->feed_type == ATOM and $this->incontent ) 
-        {
-            // if tags are inlined, then flatten
-            $attrs_str = join(' ', 
-                    array_map('map_attrs', 
-                    array_keys($attrs), 
-                    array_values($attrs) ) );
-            
-            $this->append_content( "<$element $attrs_str>"  );
-                    
-            array_unshift( $this->stack, $el );
-        }
-        
-        // Atom support many links per containging element.
-        // Magpie treats link elements of type rel='alternate'
-        // as being equivalent to RSS's simple link element.
-        //
-        elseif ($this->feed_type == ATOM and $el == 'link' ) 
-        {
-            if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) 
-            {
-                $link_el = 'link';
-            }
-            else {
-                $link_el = 'link_' . $attrs['rel'];
-            }
-            
-            $this->append($link_el, $attrs['href']);
-        }
-        // set stack[0] to current element
-        else {
-            array_unshift($this->stack, $el);
-        }
-    }
-    
-
-    
-    function feed_cdata ($p, $text) {
-        if ($this->feed_type == ATOM and $this->incontent) 
-        {
-            $this->append_content( $text );
-        }
-        else {
-            $current_el = join('_', array_reverse($this->stack));
-            $this->append($current_el, $text);
-        }
-    }
-    
-    function feed_end_element ($p, $el) {
-        $el = strtolower($el);
-        
-        if ( $el == 'item' or $el == 'entry' ) 
-        {
-            $this->items[] = $this->current_item;
-            $this->current_item = array();
-            $this->initem = false;
-        }
-        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) 
-        {
-            $this->intextinput = false;
-        }
-        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) 
-        {
-            $this->inimage = false;
-        }
-        elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
-        {   
-            $this->incontent = false;
-        }
-        elseif ($el == 'channel' or $el == 'feed' ) 
-        {
-            $this->inchannel = false;
-        }
-        elseif ($this->feed_type == ATOM and $this->incontent  ) {
-            // balance tags properly
-            // note:  i don't think this is actually neccessary
-            if ( $this->stack[0] == $el ) 
-            {
-                $this->append_content("</$el>");
-            }
-            else {
-                $this->append_content("<$el />");
-            }
-
-            array_shift( $this->stack );
-        }
-        else {
-            array_shift( $this->stack );
-        }
-        
-        $this->current_namespace = false;
-    }
-    
-    function concat (&$str1, $str2="") {
-        if (!isset($str1) ) {
-            $str1="";
-        }
-        $str1 .= $str2;
-    }
-    
-    
-    
-    function append_content($text) {
-        if ( $this->initem ) {
-            $this->concat( $this->current_item[ $this->incontent ], $text );
-        }
-        elseif ( $this->inchannel ) {
-            $this->concat( $this->channel[ $this->incontent ], $text );
-        }
-    }
-    
-    // smart append - field and namespace aware
-    function append($el, $text) {
-        if (!$el) {
-            return;
-        }
-        if ( $this->current_namespace ) 
-        {
-            if ( $this->initem ) {
-                $this->concat(
-                    $this->current_item[ $this->current_namespace ][ $el ], $text);
-            }
-            elseif ($this->inchannel) {
-                $this->concat(
-                    $this->channel[ $this->current_namespace][ $el ], $text );
-            }
-            elseif ($this->intextinput) {
-                $this->concat(
-                    $this->textinput[ $this->current_namespace][ $el ], $text );
-            }
-            elseif ($this->inimage) {
-                $this->concat(
-                    $this->image[ $this->current_namespace ][ $el ], $text );
-            }
-        }
-        else {
-            if ( $this->initem ) {
-                $this->concat(
-                    $this->current_item[ $el ], $text);
-            }
-            elseif ($this->intextinput) {
-                $this->concat(
-                    $this->textinput[ $el ], $text );
-            }
-            elseif ($this->inimage) {
-                $this->concat(
-                    $this->image[ $el ], $text );
-            }
-            elseif ($this->inchannel) {
-                $this->concat(
-                    $this->channel[ $el ], $text );
-            }
-            
-        }
-    }
-    
-    function normalize () {
-        // if atom populate rss fields
-        if ( $this->is_atom() ) {
-            $this->channel['description'] = $this->channel['tagline'];
-            for ( $i = 0; $i < count($this->items); $i++) {
-                $item = $this->items[$i];
-                if ( isset($item['summary']) )
-                    $item['description'] = $item['summary'];
-                if ( isset($item['atom_content']))
-                    $item['content']['encoded'] = $item['atom_content'];
-                
-                $atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified'];
-                if ( $atom_date ) {
-                    $epoch = @parse_w3cdtf($atom_date);
-                    if ($epoch and $epoch > 0) {
-                        $item['date_timestamp'] = $epoch;
-                    }
-                }
-                
-                $this->items[$i] = $item;
-            }       
-        }
-        elseif ( $this->is_rss() ) {
-            $this->channel['tagline'] = $this->channel['description'];
-            for ( $i = 0; $i < count($this->items); $i++) {
-                $item = $this->items[$i];
-                if ( isset($item['description']))
-                    $item['summary'] = $item['description'];
-                if ( isset($item['content']['encoded'] ) )
-                    $item['atom_content'] = $item['content']['encoded'];
-                
-                if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) {
-                    $epoch = @parse_w3cdtf($item['dc']['date']);
-                    if ($epoch and $epoch > 0) {
-                        $item['date_timestamp'] = $epoch;
-                    }
-                }
-                elseif ( isset($item['pubdate']) ) {
-                    $epoch = @strtotime($item['pubdate']);
-                    if ($epoch > 0) {
-                        $item['date_timestamp'] = $epoch;
-                    }
-                }
-                
-                $this->items[$i] = $item;
-            }
-        }
-    }
-    
-    
-    function is_rss () {
-        if ( $this->feed_type == RSS ) {
-            return $this->feed_version; 
-        }
-        else {
-            return false;
-        }
-    }
-    
-    function is_atom() {
-        if ( $this->feed_type == ATOM ) {
-            return $this->feed_version;
-        }
-        else {
-            return false;
-        }
-    }
-
-    /**
-    * return XML parser, and possibly re-encoded source
-    *
-    */
-    function create_parser($source, $out_enc, $in_enc, $detect) {
-        if ( substr(phpversion(),0,1) == 5) {
-            $parser = $this->php5_create_parser($in_enc, $detect);
-        }
-        else {
-            list($parser, $source) = $this->php4_create_parser($source, $in_enc, $detect);
-        }
-        if ($out_enc) {
-            $this->encoding = $out_enc;
-            xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc);
-        }
-        
-        return array($parser, $source);
-    }
-    
-    /**
-    * Instantiate an XML parser under PHP5
-    *
-    * PHP5 will do a fine job of detecting input encoding
-    * if passed an empty string as the encoding. 
-    *
-    * All hail libxml2!
-    *
-    */
-    function php5_create_parser($in_enc, $detect) {
-        // by default php5 does a fine job of detecting input encodings
-        if(!$detect && $in_enc) {
-            return xml_parser_create($in_enc);
-        }
-        else {
-            return xml_parser_create('');
-        }
-    }
-    
-    /**
-    * Instaniate an XML parser under PHP4
-    *
-    * Unfortunately PHP4's support for character encodings
-    * and especially XML and character encodings sucks.  As
-    * long as the documents you parse only contain characters
-    * from the ISO-8859-1 character set (a superset of ASCII,
-    * and a subset of UTF-8) you're fine.  However once you
-    * step out of that comfy little world things get mad, bad,
-    * and dangerous to know.
-    *
-    * The following code is based on SJM's work with FoF
-    * @see http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
-    *
-    */
-    function php4_create_parser($source, $in_enc, $detect) {
-        if ( !$detect ) {
-            return array(xml_parser_create($in_enc), $source);
-        }
-        
-        if (!$in_enc) {
-            if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/m', $source, $m)) {
-                $in_enc = strtoupper($m[1]);
-                $this->source_encoding = $in_enc;
-            }
-            else {
-                $in_enc = 'UTF-8';
-            }
-        }
-        
-        if ($this->known_encoding($in_enc)) {
-            return array(xml_parser_create($in_enc), $source);
-        }
-        
-        // the dectected encoding is not one of the simple encodings PHP knows
-        
-        // attempt to use the iconv extension to
-        // cast the XML to a known encoding
-        // @see http://php.net/iconv
-       
-        if (function_exists('iconv'))  {
-            $encoded_source = iconv($in_enc,'UTF-8', $source);
-            if ($encoded_source) {
-                return array(xml_parser_create('UTF-8'), $encoded_source);
-            }
-        }
-        
-        // iconv didn't work, try mb_convert_encoding
-        // @see http://php.net/mbstring
-        if(function_exists('mb_convert_encoding')) {
-            $encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc );
-            if ($encoded_source) {
-                return array(xml_parser_create('UTF-8'), $encoded_source);
-            }
-        }
-        
-        // else 
-        $this->error("Feed is in an unsupported character encoding. ($in_enc) " .
-                     "You may see strange artifacts, and mangled characters.",
-                     E_USER_NOTICE);
-            
-        return array(xml_parser_create(), $source);
-    }
-    
-    function known_encoding($enc) {
-        $enc = strtoupper($enc);
-        if ( in_array($enc, $this->_KNOWN_ENCODINGS) ) {
-            return $enc;
-        }
-        else {
-            return false;
-        }
-    }
-
-    function error ($errormsg, $lvl=E_USER_WARNING) {
-        // append PHP's error message if track_errors enabled
-        if ( isset($php_errormsg) ) { 
-            $errormsg .= " ($php_errormsg)";
-        }
-        if ( MAGPIE_DEBUG ) {
-            trigger_error( $errormsg, $lvl);        
-        }
-        else {
-            error_log( $errormsg, 0);
-        }
-        
-        $notices = E_USER_NOTICE|E_NOTICE;
-        if ( $lvl&$notices ) {
-            $this->WARNING = $errormsg;
-        } else {
-            $this->ERROR = $errormsg;
-        }
-    }
-    
-    
-} // end class RSS
-
-function map_attrs($k, $v) {
-    return "$k=\"$v\"";
-}
-
-// patch to support medieval versions of PHP4.1.x, 
-// courtesy, Ryan Currie, ryan@digibliss.com
-
-if (!function_exists('array_change_key_case')) {
-	define("CASE_UPPER",1);
-	define("CASE_LOWER",0);
-
-
-	function array_change_key_case($array,$case=CASE_LOWER) {
-       if ($case=CASE_LOWER) $cmd=strtolower;
-       elseif ($case=CASE_UPPER) $cmd=strtoupper;
-       foreach($array as $key=>$value) {
-               $output[$cmd($key)]=$value;
-       }
-       return $output;
-	}
-
-}
-
-?>
+<?php
+
+/**
+* Project:     MagpieRSS: a simple RSS integration tool
+* File:        rss_parse.inc  - parse an RSS or Atom feed
+*               return as a simple object.
+*
+* Handles RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3
+*
+* The lastest version of MagpieRSS can be obtained from:
+* http://magpierss.sourceforge.net
+*
+* For questions, help, comments, discussion, etc., please join the
+* Magpie mailing list:
+* magpierss-general@lists.sourceforge.net
+*
+* @author           Kellan Elliott-McCrea <kellan@protest.net>
+* @version          0.7a
+* @license          GPL
+*
+*/
+
+define('RSS', 'RSS');
+define('ATOM', 'Atom');
+
+require_once (MAGPIE_DIR . 'rss_utils.inc');
+
+/**
+* Hybrid parser, and object, takes RSS as a string and returns a simple object.
+*
+* see: rss_fetch.inc for a simpler interface with integrated caching support
+*
+*/
+class MagpieRSS {
+    var $parser;
+    
+    var $current_item   = array();  // item currently being parsed
+    var $items          = array();  // collection of parsed items
+    var $channel        = array();  // hash of channel fields
+    var $textinput      = array();
+    var $image          = array();
+    var $feed_type;
+    var $feed_version;
+    var $encoding       = '';       // output encoding of parsed rss
+    
+    var $_source_encoding = '';     // only set if we have to parse xml prolog
+    
+    var $ERROR = "";
+    var $WARNING = "";
+    
+    // define some constants
+    
+    var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright');
+    var $_KNOWN_ENCODINGS    = array('UTF-8', 'US-ASCII', 'ISO-8859-1');
+
+    // parser variables, useless if you're not a parser, treat as private
+    var $stack              = array(); // parser stack
+    var $inchannel          = false;
+    var $initem             = false;
+    var $incontent          = false; // if in Atom <content mode="xml"> field 
+    var $intextinput        = false;
+    var $inimage            = false;
+    var $current_namespace  = false;
+    
+
+    /**
+     *  Set up XML parser, parse source, and return populated RSS object..
+     *   
+     *  @param string $source           string containing the RSS to be parsed
+     *
+     *  NOTE:  Probably a good idea to leave the encoding options alone unless
+     *         you know what you're doing as PHP's character set support is
+     *         a little weird.
+     *
+     *  NOTE:  A lot of this is unnecessary but harmless with PHP5 
+     *
+     *
+     *  @param string $output_encoding  output the parsed RSS in this character 
+     *                                  set defaults to ISO-8859-1 as this is PHP's
+     *                                  default.
+     *
+     *                                  NOTE: might be changed to UTF-8 in future
+     *                                  versions.
+     *                               
+     *  @param string $input_encoding   the character set of the incoming RSS source. 
+     *                                  Leave blank and Magpie will try to figure it
+     *                                  out.
+     *                                  
+     *                                   
+     *  @param bool   $detect_encoding  if false Magpie won't attempt to detect
+     *                                  source encoding. (caveat emptor)
+     *
+     */
+    function MagpieRSS ($source, $output_encoding='ISO-8859-1', 
+                        $input_encoding=null, $detect_encoding=true) 
+    {   
+        # if PHP xml isn't compiled in, die
+        #
+        if (!function_exists('xml_parser_create')) {
+            $this->error( "Failed to load PHP's XML Extension. " . 
+                          "http://www.php.net/manual/en/ref.xml.php",
+                           E_USER_ERROR );
+        }
+        
+        list($parser, $source) = $this->create_parser($source, 
+                $output_encoding, $input_encoding, $detect_encoding);
+        
+        
+        if (!is_resource($parser)) {
+            $this->error( "Failed to create an instance of PHP's XML parser. " .
+                          "http://www.php.net/manual/en/ref.xml.php",
+                          E_USER_ERROR );
+        }
+
+        
+        $this->parser = $parser;
+        
+        # pass in parser, and a reference to this object
+        # setup handlers
+        #
+        xml_set_object( $this->parser, $this );
+        xml_set_element_handler($this->parser, 
+                'feed_start_element', 'feed_end_element' );
+                        
+        xml_set_character_data_handler( $this->parser, 'feed_cdata' ); 
+    
+        $status = xml_parse( $this->parser, $source );
+        
+        if (! $status ) {
+            $errorcode = xml_get_error_code( $this->parser );
+            if ( $errorcode != XML_ERROR_NONE ) {
+                $xml_error = xml_error_string( $errorcode );
+                $error_line = xml_get_current_line_number($this->parser);
+                $error_col = xml_get_current_column_number($this->parser);
+                $errormsg = "$xml_error at line $error_line, column $error_col";
+
+                $this->error( $errormsg );
+            }
+        }
+        
+        xml_parser_free( $this->parser );
+
+        $this->normalize();
+    }
+    
+    function feed_start_element($p, $element, &$attrs) {
+        $el = $element = strtolower($element);
+        $attrs = array_change_key_case($attrs, CASE_LOWER);
+        
+        // check for a namespace, and split if found
+        $ns = false;
+        if ( strpos( $element, ':' ) ) {
+            list($ns, $el) = explode( ':', $element, 2); 
+        }
+        if ( $ns and $ns != 'rdf' ) {
+            $this->current_namespace = $ns;
+        }
+            
+        # if feed type isn't set, then this is first element of feed
+        # identify feed from root element
+        #
+        if (!isset($this->feed_type) ) {
+            if ( $el == 'rdf' ) {
+                $this->feed_type = RSS;
+                $this->feed_version = '1.0';
+            }
+            elseif ( $el == 'rss' ) {
+                $this->feed_type = RSS;
+                $this->feed_version = $attrs['version'];
+            }
+            elseif ( $el == 'feed' ) {
+                $this->feed_type = ATOM;
+                $this->feed_version = $attrs['version'];
+                $this->inchannel = true;
+            }
+            return;
+        }
+    
+        if ( $el == 'channel' ) 
+        {
+            $this->inchannel = true;
+        }
+        elseif ($el == 'item' or $el == 'entry' ) 
+        {
+            $this->initem = true;
+            if ( isset($attrs['rdf:about']) ) {
+                $this->current_item['about'] = $attrs['rdf:about']; 
+            }
+        }
+        
+        // if we're in the default namespace of an RSS feed,
+        //  record textinput or image fields
+        elseif ( 
+            $this->feed_type == RSS and 
+            $this->current_namespace == '' and 
+            $el == 'textinput' ) 
+        {
+            $this->intextinput = true;
+        }
+        
+        elseif (
+            $this->feed_type == RSS and 
+            $this->current_namespace == '' and 
+            $el == 'image' ) 
+        {
+            $this->inimage = true;
+        }
+        
+        # handle atom content constructs
+        elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
+        {
+            // avoid clashing w/ RSS mod_content
+            if ($el == 'content' ) {
+                $el = 'atom_content';
+            }
+            
+            $this->incontent = $el;
+            
+            
+        }
+        
+        // if inside an Atom content construct (e.g. content or summary) field treat tags as text
+        elseif ($this->feed_type == ATOM and $this->incontent ) 
+        {
+            // if tags are inlined, then flatten
+            $attrs_str = join(' ', 
+                    array_map('map_attrs', 
+                    array_keys($attrs), 
+                    array_values($attrs) ) );
+            
+            $this->append_content( "<$element $attrs_str>"  );
+                    
+            array_unshift( $this->stack, $el );
+        }
+        
+        // Atom support many links per containging element.
+        // Magpie treats link elements of type rel='alternate'
+        // as being equivalent to RSS's simple link element.
+        //
+        elseif ($this->feed_type == ATOM and $el == 'link' ) 
+        {
+            if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) 
+            {
+                $link_el = 'link';
+            }
+            else {
+                $link_el = 'link_' . $attrs['rel'];
+            }
+            
+            $this->append($link_el, $attrs['href']);
+        }
+        // set stack[0] to current element
+        else {
+            array_unshift($this->stack, $el);
+        }
+    }
+    
+
+    
+    function feed_cdata ($p, $text) {
+        if ($this->feed_type == ATOM and $this->incontent) 
+        {
+            $this->append_content( $text );
+        }
+        else {
+            $current_el = join('_', array_reverse($this->stack));
+            $this->append($current_el, $text);
+        }
+    }
+    
+    function feed_end_element ($p, $el) {
+        $el = strtolower($el);
+        
+        if ( $el == 'item' or $el == 'entry' ) 
+        {
+            $this->items[] = $this->current_item;
+            $this->current_item = array();
+            $this->initem = false;
+        }
+        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) 
+        {
+            $this->intextinput = false;
+        }
+        elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) 
+        {
+            $this->inimage = false;
+        }
+        elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
+        {   
+            $this->incontent = false;
+        }
+        elseif ($el == 'channel' or $el == 'feed' ) 
+        {
+            $this->inchannel = false;
+        }
+        elseif ($this->feed_type == ATOM and $this->incontent  ) {
+            // balance tags properly
+            // note:  i don't think this is actually neccessary
+            if ( $this->stack[0] == $el ) 
+            {
+                $this->append_content("</$el>");
+            }
+            else {
+                $this->append_content("<$el />");
+            }
+
+            array_shift( $this->stack );
+        }
+        else {
+            array_shift( $this->stack );
+        }
+        
+        $this->current_namespace = false;
+    }
+    
+    function concat (&$str1, $str2="") {
+        if (!isset($str1) ) {
+            $str1="";
+        }
+        $str1 .= $str2;
+    }
+    
+    
+    
+    function append_content($text) {
+        if ( $this->initem ) {
+            $this->concat( $this->current_item[ $this->incontent ], $text );
+        }
+        elseif ( $this->inchannel ) {
+            $this->concat( $this->channel[ $this->incontent ], $text );
+        }
+    }
+    
+    // smart append - field and namespace aware
+    function append($el, $text) {
+        if (!$el) {
+            return;
+        }
+        if ( $this->current_namespace ) 
+        {
+            if ( $this->initem ) {
+                $this->concat(
+                    $this->current_item[ $this->current_namespace ][ $el ], $text);
+            }
+            elseif ($this->inchannel) {
+                $this->concat(
+                    $this->channel[ $this->current_namespace][ $el ], $text );
+            }
+            elseif ($this->intextinput) {
+                $this->concat(
+                    $this->textinput[ $this->current_namespace][ $el ], $text );
+            }
+            elseif ($this->inimage) {
+                $this->concat(
+                    $this->image[ $this->current_namespace ][ $el ], $text );
+            }
+        }
+        else {
+            if ( $this->initem ) {
+                $this->concat(
+                    $this->current_item[ $el ], $text);
+            }
+            elseif ($this->intextinput) {
+                $this->concat(
+                    $this->textinput[ $el ], $text );
+            }
+            elseif ($this->inimage) {
+                $this->concat(
+                    $this->image[ $el ], $text );
+            }
+            elseif ($this->inchannel) {
+                $this->concat(
+                    $this->channel[ $el ], $text );
+            }
+            
+        }
+    }
+    
+    function normalize () {
+        // if atom populate rss fields
+        if ( $this->is_atom() ) {
+            $this->channel['description'] = $this->channel['tagline'];
+            for ( $i = 0; $i < count($this->items); $i++) {
+                $item = $this->items[$i];
+                if ( isset($item['summary']) )
+                    $item['description'] = $item['summary'];
+                if ( isset($item['atom_content']))
+                    $item['content']['encoded'] = $item['atom_content'];
+                
+                $atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified'];
+                if ( $atom_date ) {
+                    $epoch = @parse_w3cdtf($atom_date);
+                    if ($epoch and $epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                
+                $this->items[$i] = $item;
+            }       
+        }
+        elseif ( $this->is_rss() ) {
+            $this->channel['tagline'] = $this->channel['description'];
+            for ( $i = 0; $i < count($this->items); $i++) {
+                $item = $this->items[$i];
+                if ( isset($item['description']))
+                    $item['summary'] = $item['description'];
+                if ( isset($item['content']['encoded'] ) )
+                    $item['atom_content'] = $item['content']['encoded'];
+                
+                if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) {
+                    $epoch = @parse_w3cdtf($item['dc']['date']);
+                    if ($epoch and $epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                elseif ( isset($item['pubdate']) ) {
+                    $epoch = @strtotime($item['pubdate']);
+                    if ($epoch > 0) {
+                        $item['date_timestamp'] = $epoch;
+                    }
+                }
+                
+                $this->items[$i] = $item;
+            }
+        }
+    }
+    
+    
+    function is_rss () {
+        if ( $this->feed_type == RSS ) {
+            return $this->feed_version; 
+        }
+        else {
+            return false;
+        }
+    }
+    
+    function is_atom() {
+        if ( $this->feed_type == ATOM ) {
+            return $this->feed_version;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+    * return XML parser, and possibly re-encoded source
+    *
+    */
+    function create_parser($source, $out_enc, $in_enc, $detect) {
+        if ( substr(phpversion(),0,1) == 5) {
+            $parser = $this->php5_create_parser($in_enc, $detect);
+        }
+        else {
+            list($parser, $source) = $this->php4_create_parser($source, $in_enc, $detect);
+        }
+        if ($out_enc) {
+            $this->encoding = $out_enc;
+            xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc);
+        }
+        
+        return array($parser, $source);
+    }
+    
+    /**
+    * Instantiate an XML parser under PHP5
+    *
+    * PHP5 will do a fine job of detecting input encoding
+    * if passed an empty string as the encoding. 
+    *
+    * All hail libxml2!
+    *
+    */
+    function php5_create_parser($in_enc, $detect) {
+        // by default php5 does a fine job of detecting input encodings
+        if(!$detect && $in_enc) {
+            return xml_parser_create($in_enc);
+        }
+        else {
+            return xml_parser_create('');
+        }
+    }
+    
+    /**
+    * Instaniate an XML parser under PHP4
+    *
+    * Unfortunately PHP4's support for character encodings
+    * and especially XML and character encodings sucks.  As
+    * long as the documents you parse only contain characters
+    * from the ISO-8859-1 character set (a superset of ASCII,
+    * and a subset of UTF-8) you're fine.  However once you
+    * step out of that comfy little world things get mad, bad,
+    * and dangerous to know.
+    *
+    * The following code is based on SJM's work with FoF
+    * @see http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
+    *
+    */
+    function php4_create_parser($source, $in_enc, $detect) {
+        if ( !$detect ) {
+            return array(xml_parser_create($in_enc), $source);
+        }
+        
+        if (!$in_enc) {
+            if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/m', $source, $m)) {
+                $in_enc = strtoupper($m[1]);
+                $this->source_encoding = $in_enc;
+            }
+            else {
+                $in_enc = 'UTF-8';
+            }
+        }
+        
+        if ($this->known_encoding($in_enc)) {
+            return array(xml_parser_create($in_enc), $source);
+        }
+        
+        // the dectected encoding is not one of the simple encodings PHP knows
+        
+        // attempt to use the iconv extension to
+        // cast the XML to a known encoding
+        // @see http://php.net/iconv
+       
+        if (function_exists('iconv'))  {
+            $encoded_source = iconv($in_enc,'UTF-8', $source);
+            if ($encoded_source) {
+                return array(xml_parser_create('UTF-8'), $encoded_source);
+            }
+        }
+        
+        // iconv didn't work, try mb_convert_encoding
+        // @see http://php.net/mbstring
+        if(function_exists('mb_convert_encoding')) {
+            $encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc );
+            if ($encoded_source) {
+                return array(xml_parser_create('UTF-8'), $encoded_source);
+            }
+        }
+        
+        // else 
+        $this->error("Feed is in an unsupported character encoding. ($in_enc) " .
+                     "You may see strange artifacts, and mangled characters.",
+                     E_USER_NOTICE);
+            
+        return array(xml_parser_create(), $source);
+    }
+    
+    function known_encoding($enc) {
+        $enc = strtoupper($enc);
+        if ( in_array($enc, $this->_KNOWN_ENCODINGS) ) {
+            return $enc;
+        }
+        else {
+            return false;
+        }
+    }
+
+    function error ($errormsg, $lvl=E_USER_WARNING) {
+        // append PHP's error message if track_errors enabled
+        if ( isset($php_errormsg) ) { 
+            $errormsg .= " ($php_errormsg)";
+        }
+        if ( MAGPIE_DEBUG ) {
+            trigger_error( $errormsg, $lvl);        
+        }
+        else {
+            error_log( $errormsg, 0);
+        }
+        
+        $notices = E_USER_NOTICE|E_NOTICE;
+        if ( $lvl&$notices ) {
+            $this->WARNING = $errormsg;
+        } else {
+            $this->ERROR = $errormsg;
+        }
+    }
+    
+    
+} // end class RSS
+
+function map_attrs($k, $v) {
+    return "$k=\"$v\"";
+}
+
+// patch to support medieval versions of PHP4.1.x, 
+// courtesy, Ryan Currie, ryan@digibliss.com
+
+if (!function_exists('array_change_key_case')) {
+	define("CASE_UPPER",1);
+	define("CASE_LOWER",0);
+
+
+	function array_change_key_case($array,$case=CASE_LOWER) {
+       if ($case=CASE_LOWER) $cmd=strtolower;
+       elseif ($case=CASE_UPPER) $cmd=strtoupper;
+       foreach($array as $key=>$value) {
+               $output[$cmd($key)]=$value;
+       }
+       return $output;
+	}
+
+}
+
+?>
diff --git a/htdocs/includes/modules/cheque/pdf/pdf_blochet.class.php b/htdocs/includes/modules/cheque/pdf/pdf_blochet.class.php
index 8ebc63b6bb3..f88a1593807 100644
--- a/htdocs/includes/modules/cheque/pdf/pdf_blochet.class.php
+++ b/htdocs/includes/modules/cheque/pdf/pdf_blochet.class.php
@@ -149,11 +149,11 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
 		$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);   // Left, Top, Right
 		$pdf->SetAutoPageBreak(1,0);
 
-		$lines=$this->line_per_page;	// There is no line in such PDF.
+		$lignes=$this->line_per_page;	// There is no line in such PDF.
 
-		$pages = intval($lines / $this->line_per_page);
+		$pages = intval($lignes / $this->line_per_page);
 
-		if (($lines % $this->line_per_page)>0)
+		if (($lignes % $this->line_per_page)>0)
 		{
 			$pages++;
 		}
@@ -333,38 +333,38 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
 		$page_hauteur=$this->page_hauteur;
 
 		// Line of free text
-		$line=(! empty($conf->global->$paramfreetext))?$outputlangs->convToOutputCharset($conf->global->$paramfreetext):"";
+		$ligne=(! empty($conf->global->$paramfreetext))?$outputlangs->convToOutputCharset($conf->global->$paramfreetext):"";
 
 		$pdf->SetFont('','',7);
 		$pdf->SetDrawColor(224,224,224);
 
 		// On positionne le debut du bas de page selon nbre de lignes de ce bas de page
-		$nbofline=dol_nboflines_bis($line,0,$outputlangs->charset_output);
-		//print 'e'.$line.'t'.dol_nboflines($line);exit;
-		$posy=$marge_basse + ($nbofline*3) + ($line1?3:0) + ($line2?3:0);
+		$nbofligne=dol_nboflines_bis($ligne,0,$outputlangs->charset_output);
+		//print 'e'.$ligne.'t'.dol_nboflines($ligne);exit;
+		$posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0);
 
-		if ($line)	// Free text
+		if ($ligne)	// Free text
 		{
 			$pdf->SetXY($marge_gauche,-$posy);
-			$pdf->MultiCell(20000, 3, $line, 0, 'L', 0);	// Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text.
-			$posy-=($nbofline*3);	// 6 of ligne + 3 of MultiCell
+			$pdf->MultiCell(20000, 3, $ligne, 0, 'L', 0);	// Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text.
+			$posy-=($nbofligne*3);	// 6 of ligne + 3 of MultiCell
 		}
 
 		$pdf->SetY(-$posy);
 		$pdf->line($marge_gauche, $page_hauteur-$posy, 200, $page_hauteur-$posy);
 		$posy--;
 
-		if ($line1)
+		if ($ligne1)
 		{
 			$pdf->SetXY($marge_gauche,-$posy);
-			$pdf->MultiCell(200, 2, $line1, 0, 'C', 0);
+			$pdf->MultiCell(200, 2, $ligne1, 0, 'C', 0);
 		}
 
-		if ($line2)
+		if ($ligne2)
 		{
 			$posy-=3;
 			$pdf->SetXY($marge_gauche,-$posy);
-			$pdf->MultiCell(200, 2, $line2, 0, 'C', 0);
+			$pdf->MultiCell(200, 2, $ligne2, 0, 'C', 0);
 		}
 
 		$pdf->SetXY(-20,-$posy);
diff --git a/htdocs/includes/modules/commande/pdf_edison.modules.php b/htdocs/includes/modules/commande/pdf_edison.modules.php
index a7efe73e97c..33b02f2c25e 100644
--- a/htdocs/includes/modules/commande/pdf_edison.modules.php
+++ b/htdocs/includes/modules/commande/pdf_edison.modules.php
@@ -219,7 +219,7 @@ class pdf_edison extends ModelePDFCommandes
 
 					$up_excl_tax = pdf_getlineupexcltax($object, $i, $outputlangs);
 					$pdf->SetXY (156, $curY);
-					$pdf->MultiCell(20, 3, $up_excl_tax, 0, 'R', 0);
+					$pdf->MultiCell(18, 3, $up_excl_tax, 0, 'R', 0);
 
 					$total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs);
 					$pdf->SetXY (174, $curY);
diff --git a/htdocs/includes/modules/commande/pdf_einstein.modules.php b/htdocs/includes/modules/commande/pdf_einstein.modules.php
index b83760cdeb6..6e112c3d325 100644
--- a/htdocs/includes/modules/commande/pdf_einstein.modules.php
+++ b/htdocs/includes/modules/commande/pdf_einstein.modules.php
@@ -783,7 +783,7 @@ class pdf_einstein extends ModelePDFCommandes
 
 		$pdf->line($this->posxup-1, $tab_top, $this->posxup-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxup-1, $tab_top+2);
-		$pdf->MultiCell(20,2, $outputlangs->transnoentities("PriceUHT"),'','C');
+		$pdf->MultiCell(18,2, $outputlangs->transnoentities("PriceUHT"),'','C');
 
 		$pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxqty-1, $tab_top+2);
diff --git a/htdocs/includes/modules/expedition/pdf/pdf_expedition_merou.modules.php b/htdocs/includes/modules/expedition/pdf/pdf_expedition_merou.modules.php
index b92d9c0067e..6900dd8c7cf 100644
--- a/htdocs/includes/modules/expedition/pdf/pdf_expedition_merou.modules.php
+++ b/htdocs/includes/modules/expedition/pdf/pdf_expedition_merou.modules.php
@@ -78,6 +78,7 @@ Class pdf_expedition_merou extends ModelePdfExpedition
 		global $user,$conf,$langs,$mysoc;
 
 		$object->fetch_thirdparty();
+		if (empty($object->lines)) $object->lines=$object->lignes;
 
 		if (! is_object($outputlangs)) $outputlangs=$langs;
 		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
@@ -352,7 +353,7 @@ Class pdf_expedition_merou extends ModelePdfExpedition
 		$tab4_top = 60;
 		$tab4_hl = 6;
 		$tab4_sl = 4;
-		$line = 2;
+		$ligne = 2;
 
 		//*********************LOGO****************************
 		$pdf->SetXY(11,7);
diff --git a/htdocs/includes/modules/expedition/pdf/pdf_expedition_rouget.modules.php b/htdocs/includes/modules/expedition/pdf/pdf_expedition_rouget.modules.php
index 26db46c7531..6e86520ff31 100644
--- a/htdocs/includes/modules/expedition/pdf/pdf_expedition_rouget.modules.php
+++ b/htdocs/includes/modules/expedition/pdf/pdf_expedition_rouget.modules.php
@@ -220,6 +220,8 @@ Class pdf_expedition_rouget extends ModelePdfExpedition
 
 		$object->fetch_thirdparty();
 
+		if (empty($object->lines)) $object->lines=$object->lignes;
+
 		if (! is_object($outputlangs)) $outputlangs=$langs;
 		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
 		if (!class_exists('TCPDF')) $outputlangs->charset_output='ISO-8859-1';
diff --git a/htdocs/includes/modules/livraison/pdf/pdf_sirocco.modules.php b/htdocs/includes/modules/livraison/pdf/pdf_sirocco.modules.php
index b45fd6aa971..7937431c42c 100644
--- a/htdocs/includes/modules/livraison/pdf/pdf_sirocco.modules.php
+++ b/htdocs/includes/modules/livraison/pdf/pdf_sirocco.modules.php
@@ -98,7 +98,7 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
 		{
 			$object->fetch_thirdparty();
 
-			$nblines = sizeof($object->lines);
+			$nblignes = sizeof($object->lignes);
 
 			$objectref = dol_sanitizeFileName($object->ref);
 			$dir = $conf->expedition->dir_output."/receipt";
@@ -180,7 +180,7 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
 				$curY = $tab_top + 7;
 				$nexY = $tab_top + 7;
 
-				for ($i = 0 ; $i < $nblines ; $i++)
+				for ($i = 0 ; $i < $nblignes ; $i++)
 				{
 					$curY = $nexY;
 
@@ -196,22 +196,22 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
 
 					$pdf->SetXY (10, $curY );
 
-					$pdf->MultiCell(20, 3, $outputlangs->convToOutputCharset($object->lines[$i]->ref), 0, 'C');
+					$pdf->MultiCell(20, 3, $outputlangs->convToOutputCharset($object->lignes[$i]->ref), 0, 'C');
 
 					// \TODO Field not yet saved in database
 					//$pdf->SetXY (133, $curY );
-					//$pdf->MultiCell(10, 5, $object->lines[$i]->tva_tx, 0, 'C');
+					//$pdf->MultiCell(10, 5, $object->lignes[$i]->tva_tx, 0, 'C');
 
 					$pdf->SetXY (145, $curY );
-					$pdf->MultiCell(10, 3, $object->lines[$i]->qty_shipped, 0, 'C');
+					$pdf->MultiCell(10, 3, $object->lignes[$i]->qty_shipped, 0, 'C');
 
 					// \TODO Field not yet saved in database
 					//$pdf->SetXY (156, $curY );
-					//$pdf->MultiCell(20, 3, price($object->lines[$i]->price), 0, 'R', 0);
+					//$pdf->MultiCell(20, 3, price($object->lignes[$i]->price), 0, 'R', 0);
 
 					// \TODO Field not yet saved in database
 					//$pdf->SetXY (174, $curY );
-					//$total = price($object->lines[$i]->price * $object->lines[$i]->qty_shipped);
+					//$total = price($object->lignes[$i]->price * $object->lignes[$i]->qty_shipped);
 					//$pdf->MultiCell(26, 3, $total, 0, 'R', 0);
 
 					$pdf->line(10, $curY-1, 200, $curY-1);
@@ -220,10 +220,10 @@ class pdf_sirocco extends ModelePDFDeliveryOrder
 					$nexY+=2;    // Passe espace entre les lignes
 
 					// Cherche nombre de lignes a venir pour savoir si place suffisante
-					if ($i < ($nblines - 1))	// If it's not last line
+					if ($i < ($nblignes - 1))	// If it's not last line
 					{
 						//on recupere la description du produit suivant
-						$follow_descproduitservice = $object->lines[$i+1]->desc;
+						$follow_descproduitservice = $object->lignes[$i+1]->desc;
 						//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
 						$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
 					}
diff --git a/htdocs/includes/modules/livraison/pdf/pdf_typhon.modules.php b/htdocs/includes/modules/livraison/pdf/pdf_typhon.modules.php
index 468080774b8..3c214a210e2 100644
--- a/htdocs/includes/modules/livraison/pdf/pdf_typhon.modules.php
+++ b/htdocs/includes/modules/livraison/pdf/pdf_typhon.modules.php
@@ -121,7 +121,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
 		{
 			$object->fetch_thirdparty();
 
-			$nblines = sizeof($object->lines);
+			$nblignes = sizeof($object->lignes);
 
 			$objectref = dol_sanitizeFileName($object->ref);
 			$dir = $conf->expedition->dir_output."/receipt";
@@ -190,7 +190,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
 				 // Positionne $this->atleastonediscount si on a au moins une remise
 				 for ($i = 0 ; $i < $nblignes ; $i++)
 				 {
-				 if ($object->lines[$i]->remise_percent)
+				 if ($object->lignes[$i]->remise_percent)
 				 {
 				 $this->atleastonediscount++;
 				 }
@@ -238,7 +238,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
 				$nexY = $tab_top + 7;
 
 				// Boucle sur les lignes
-				for ($i = 0 ; $i < $nblines ; $i++)
+				for ($i = 0 ; $i < $nblignes ; $i++)
 				{
 					$curY = $nexY;
 
@@ -255,41 +255,41 @@ class pdf_typhon extends ModelePDFDeliveryOrder
 					/*
 					 // TVA
 					 $pdf->SetXY ($this->posxtva, $curY);
-					 $pdf->MultiCell(10, 4, ($object->lines[$i]->tva_tx < 0 ? '*':'').abs($object->lines[$i]->tva_tx), 0, 'R');
+					 $pdf->MultiCell(10, 4, ($object->lignes[$i]->tva_tx < 0 ? '*':'').abs($object->lignes[$i]->tva_tx), 0, 'R');
 
 					 // Prix unitaire HT avant remise
 					 $pdf->SetXY ($this->posxup, $curY);
-					 $pdf->MultiCell(20, 4, price($object->lines[$i]->subprice), 0, 'R', 0);
+					 $pdf->MultiCell(20, 4, price($object->lignes[$i]->subprice), 0, 'R', 0);
 					 */
 					// Quantity
 					$pdf->SetXY ($this->posxqty, $curY);
-					$pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'R');
+					$pdf->MultiCell(30, 3, $object->lignes[$i]->qty_shipped, 0, 'R');
 					/*
 					 // Remise sur ligne
 					 $pdf->SetXY ($this->posxdiscount, $curY);
-					 if ($object->lines[$i]->remise_percent)
+					 if ($object->lignes[$i]->remise_percent)
 					 {
-					 $pdf->MultiCell(14, 3, $object->lines[$i]->remise_percent."%", 0, 'R');
+					 $pdf->MultiCell(14, 3, $object->lignes[$i]->remise_percent."%", 0, 'R');
 					 }
 
 					 // Total HT ligne
 					 $pdf->SetXY ($this->postotalht, $curY);
-					 $total = price($object->lines[$i]->price * $object->lines[$i]->qty);
+					 $total = price($object->lignes[$i]->price * $object->lignes[$i]->qty);
 					 $pdf->MultiCell(23, 3, $total, 0, 'R', 0);
 
 					 // Collecte des totaux par valeur de tva
 					 // dans le tableau tva["taux"]=total_tva
-					 $tvaligne=$object->lines[$i]->price * $object->lines[$i]->qty;
+					 $tvaligne=$object->lignes[$i]->price * $object->lignes[$i]->qty;
 					 if ($object->remise_percent) $tvaligne-=($tvaligne*$object->remise_percent)/100;
-					 $this->tva[ (string)$object->lines[$i]->tva_tx ] += $tvaligne;
+					 $this->tva[ (string)$object->lignes[$i]->tva_tx ] += $tvaligne;
 					 */
 					$nexY+=2;    // Passe espace entre les lignes
 
 					// Cherche nombre de lignes a venir pour savoir si place suffisante
-					if ($i < ($nblines - 1))	// If it's not last line
+					if ($i < ($nblignes - 1))	// If it's not last line
 					{
 						//on recupere la description du produit suivant
-						$follow_descproduitservice = $object->lines[$i+1]->desc;
+						$follow_descproduitservice = $object->lignes[$i+1]->desc;
 						//on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres)
 						$nblineFollowDesc = (dol_nboflines_bis($follow_descproduitservice,52,$outputlangs->charset_output)*4);
 					}
diff --git a/htdocs/includes/modules/mailings/.cvsignore b/htdocs/includes/modules/mailings/.cvsignore
index 139ebd58046..91cc9955acd 100644
--- a/htdocs/includes/modules/mailings/.cvsignore
+++ b/htdocs/includes/modules/mailings/.cvsignore
@@ -1,2 +1,2 @@
-mailinglist_chatsderace.modules.php
-mailinglist_chiensderace.modules.php
+mailinglist_chatsderace.modules.php
+mailinglist_chiensderace.modules.php
diff --git a/htdocs/includes/modules/modDocument.class.php b/htdocs/includes/modules/modDocument.class.php
index 11824130c10..acefba0899c 100644
--- a/htdocs/includes/modules/modDocument.class.php
+++ b/htdocs/includes/modules/modDocument.class.php
@@ -1,131 +1,131 @@
-<?php
-/* Copyright (C) 2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *	\defgroup   	document     Module mass mailings
- *	\brief      	Module pour gerer des generations de documents
- *	\version		$Id$
- */
-
-/**
- *	\file       htdocs/includes/modules/modDocument.class.php
- *	\ingroup    document
- *	\brief      Fichier de description et activation du module Generation document
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- *	\class      modDocument
- *	\brief      Classe de description et activation du module Document
- */
-
-class modDocument extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      handler d'acces base
-	 */
-	function modDocument($DB)
-	{
-		$this->db = $DB ;
-		$this->numero = 51 ;
-
-		$this->family = "technic";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		$this->description = "Generation de courriers/publipostages papiers";
-		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
-		$this->version = 'development';
-
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		$this->special = 0;
-		$this->picto='email';
-
-		// Data directories to create when module is enabled
-		$this->dirs = array("/document/temp");
-
-		// Config pages
-		//$this->config_page_url = array("document.php");
-
-		// Dependencies
-		$this->depends = array();
-		$this->requiredby = array();
-		$this->conflictwith = array();
-		$this->langfiles = array("orders","bills","companies");
-
-		// Constantes
-
-		$this->const = array();
-
-		// Boites
-		$this->boxes = array();
-
-		// Permissions
-		$this->rights = array();
-		$this->rights_class = 'document';
-
-		$r=0;
-
-		$this->rights[$r][0] = 510;
-		$this->rights[$r][1] = 'Lire les documents';
-		$this->rights[$r][2] = 'r';
-		$this->rights[$r][3] = 1;
-		$this->rights[$r][4] = 'lire';
-
-		$r++;
-		$this->rights[$r][0] = 511;
-		$this->rights[$r][1] = 'Supprimer les documents clients';
-		$this->rights[$r][2] = 'd';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'supprimer';
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		global $conf;
-
-		// Permissions
-		$this->remove();
-
-		$sql = array();
-
-		return $this->_init($sql);
-	}
-
-
-	/**
-	 *    \brief      Fonction appelee lors de la desactivation d'un module.
-	 *                Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-}
-?>
+<?php
+/* Copyright (C) 2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *	\defgroup   	document     Module mass mailings
+ *	\brief      	Module pour gerer des generations de documents
+ *	\version		$Id$
+ */
+
+/**
+ *	\file       htdocs/includes/modules/modDocument.class.php
+ *	\ingroup    document
+ *	\brief      Fichier de description et activation du module Generation document
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ *	\class      modDocument
+ *	\brief      Classe de description et activation du module Document
+ */
+
+class modDocument extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modDocument($DB)
+	{
+		$this->db = $DB ;
+		$this->numero = 51 ;
+
+		$this->family = "technic";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Generation de courriers/publipostages papiers";
+		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
+		$this->version = 'development';
+
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		$this->special = 0;
+		$this->picto='email';
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/document/temp");
+
+		// Config pages
+		//$this->config_page_url = array("document.php");
+
+		// Dependencies
+		$this->depends = array();
+		$this->requiredby = array();
+		$this->conflictwith = array();
+		$this->langfiles = array("orders","bills","companies");
+
+		// Constantes
+
+		$this->const = array();
+
+		// Boites
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'document';
+
+		$r=0;
+
+		$this->rights[$r][0] = 510;
+		$this->rights[$r][1] = 'Lire les documents';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 1;
+		$this->rights[$r][4] = 'lire';
+
+		$r++;
+		$this->rights[$r][0] = 511;
+		$this->rights[$r][1] = 'Supprimer les documents clients';
+		$this->rights[$r][2] = 'd';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'supprimer';
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		global $conf;
+
+		// Permissions
+		$this->remove();
+
+		$sql = array();
+
+		return $this->_init($sql);
+	}
+
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/includes/modules/modDomain.class.php b/htdocs/includes/modules/modDomain.class.php
index 1ce44d39fdb..7f51a3a2e12 100644
--- a/htdocs/includes/modules/modDomain.class.php
+++ b/htdocs/includes/modules/modDomain.class.php
@@ -1,150 +1,150 @@
-<?php
-/* Copyright (C) 2007-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *      \defgroup   domain     Module domain
- *      \brief      Module to manage a list of DNS names
- *		\version	$Id$
- */
-
-/**
- *       \file       htdocs/includes/modules/modDomain.class.php
- *       \ingroup    domain
- *       \brief      Fichier de description et activation du module domain
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- *       \class      modDomain
- *       \brief      Classe de description et activation du module Domain
- */
-class modDomain extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      handler d'acces base
-	 */
-	function modDomain($DB)
-	{
-		$this->db = $DB;
-		$this->numero = 1300 ;
-
-		$this->family = "other";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		$this->description = "Gestion d'une base de noms de domaines";
-		$this->version = 'development';			// 'development' or 'experimental' or 'dolibarr' or version
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		// Where to store the module in setup page (0=common,1=interface,2=others,3=very specific)
-		$this->special = 3;
-		$this->picto='generic';
-
-		// Dir
-		//----
-		$this->dirs = array();
-
-		// Config pages
-		//-------------
-		$this->config_page_url = array();
-
-		// Dependancies
-		//-------------
-		$this->depends = array();
-		$this->requiredby = array();
-		$this->langfiles = array("domains");
-
-		// Constantes
-		//-----------
-		$this->const = array();
-
-		// Boites
-		//-------
-		$this->boxes = array();
-
-		// Permissions
-		//------------
-		$this->rights = array();
-		$this->rights_class = 'domain';
-		$r=0;
-
-		$r++;
-		$this->rights[$r][0] = 1301;
-		$this->rights[$r][1] = 'Read domain names';
-		$this->rights[$r][2] = 'r';
-		$this->rights[$r][3] = 1;
-		$this->rights[$r][4] = 'read';
-
-		$r++;
-		$this->rights[$r][0] = 1302;
-		$this->rights[$r][1] = 'Create/modify domain names';
-		$this->rights[$r][2] = 'w';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'create';
-
-		$r++;
-		$this->rights[$r][0] = 1303;
-		$this->rights[$r][1] = 'Delete domain names';
-		$this->rights[$r][2] = 'd';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'delete';
-
-		// Exports
-		//--------
-		$r=0;
-
-		// $this->export_code[$r]          Code unique identifiant l'export (tous modules confondus)
-		// $this->export_label[$r]         Libelle par defaut si traduction de cle "ExportXXX" non trouvee (XXX = Code)
-		// $this->export_permission[$r]    Liste des codes permissions requis pour faire l'export
-		// $this->export_fields_sql[$r]    Liste des champs exportables en codif sql
-		// $this->export_fields_name[$r]   Liste des champs exportables en codif traduction
-		// $this->export_sql[$r]           Requete sql qui offre les donnees a l'export
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		global $conf;
-
-		// Permissions
-		$this->remove();
-
-		$sql = array();
-
-		return $this->_init($sql);
-	}
-
-	/**
-	 *    \brief      Fonction appelee lors de la desactivation d'un module.
-	 *                Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-
-}
-?>
+<?php
+/* Copyright (C) 2007-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *      \defgroup   domain     Module domain
+ *      \brief      Module to manage a list of DNS names
+ *		\version	$Id$
+ */
+
+/**
+ *       \file       htdocs/includes/modules/modDomain.class.php
+ *       \ingroup    domain
+ *       \brief      Fichier de description et activation du module domain
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ *       \class      modDomain
+ *       \brief      Classe de description et activation du module Domain
+ */
+class modDomain extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modDomain($DB)
+	{
+		$this->db = $DB;
+		$this->numero = 1300 ;
+
+		$this->family = "other";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Gestion d'une base de noms de domaines";
+		$this->version = 'development';			// 'development' or 'experimental' or 'dolibarr' or version
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		// Where to store the module in setup page (0=common,1=interface,2=others,3=very specific)
+		$this->special = 3;
+		$this->picto='generic';
+
+		// Dir
+		//----
+		$this->dirs = array();
+
+		// Config pages
+		//-------------
+		$this->config_page_url = array();
+
+		// Dependancies
+		//-------------
+		$this->depends = array();
+		$this->requiredby = array();
+		$this->langfiles = array("domains");
+
+		// Constantes
+		//-----------
+		$this->const = array();
+
+		// Boites
+		//-------
+		$this->boxes = array();
+
+		// Permissions
+		//------------
+		$this->rights = array();
+		$this->rights_class = 'domain';
+		$r=0;
+
+		$r++;
+		$this->rights[$r][0] = 1301;
+		$this->rights[$r][1] = 'Read domain names';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 1;
+		$this->rights[$r][4] = 'read';
+
+		$r++;
+		$this->rights[$r][0] = 1302;
+		$this->rights[$r][1] = 'Create/modify domain names';
+		$this->rights[$r][2] = 'w';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'create';
+
+		$r++;
+		$this->rights[$r][0] = 1303;
+		$this->rights[$r][1] = 'Delete domain names';
+		$this->rights[$r][2] = 'd';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'delete';
+
+		// Exports
+		//--------
+		$r=0;
+
+		// $this->export_code[$r]          Code unique identifiant l'export (tous modules confondus)
+		// $this->export_label[$r]         Libelle par defaut si traduction de cle "ExportXXX" non trouvee (XXX = Code)
+		// $this->export_permission[$r]    Liste des codes permissions requis pour faire l'export
+		// $this->export_fields_sql[$r]    Liste des champs exportables en codif sql
+		// $this->export_fields_name[$r]   Liste des champs exportables en codif traduction
+		// $this->export_sql[$r]           Requete sql qui offre les donnees a l'export
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		global $conf;
+
+		// Permissions
+		$this->remove();
+
+		$sql = array();
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+
+}
+?>
diff --git a/htdocs/includes/modules/modFicheinter.class.php b/htdocs/includes/modules/modFicheinter.class.php
index 060f35bf492..eca7c485296 100644
--- a/htdocs/includes/modules/modFicheinter.class.php
+++ b/htdocs/includes/modules/modFicheinter.class.php
@@ -1,180 +1,180 @@
-<?php
-/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
- * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
- * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
- * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *	\defgroup   ficheinter     Module intervention cards
- *	\brief      Module to manage intervention cards
- *	\version	$Id$
- */
-
-/**
- *	\file       htdocs/includes/modules/modFicheinter.class.php
- *	\ingroup    ficheinter
- *	\brief      Fichier de description et activation du module Ficheinter
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- *	\class      modFicheinter
- *	\brief      Classe de description et activation du module Ficheinter
- */
-class modFicheinter  extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      Database access handler
-	 */
-	function modFicheinter($DB)
-	{
-		global $conf;
-
-		$this->db = $DB ;
-		$this->numero = 70 ;
-
-		$this->family = "crm";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		$this->description = "Gestion des fiches d'intervention";
-
-		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
-		$this->version = 'dolibarr';
-
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		$this->special = 0;
-		$this->picto = "intervention";
-
-		// Data directories to create when module is enabled
-		$this->dirs = array("/ficheinter/temp");
-
-        // Dependencies
-		$this->depends = array("modSociete");
-		$this->requiredby = array();
-		$this->conflictwith = array();
-		$this->langfiles = array("bills","companies","interventions");
-
-		// Config pages
-		$this->config_page_url = array("fichinter.php");
-
-		// Constantes
-		$this->const = array();
-		$r=0;
-
-		$this->const[$r][0] = "FICHEINTER_ADDON_PDF";
-		$this->const[$r][1] = "chaine";
-		$this->const[$r][2] = "soleil";
-		$r++;
-
-		$this->const[$r][0] = "FICHEINTER_ADDON";
-		$this->const[$r][1] = "chaine";
-		$this->const[$r][2] = "pacific";
-		$r++;
-
-		// Boites
-		$this->boxes = array();
-
-		// Permissions
-		$this->rights = array();
-		$this->rights_class = 'ficheinter';
-		$r=0;
-
-        $r++;
-		$this->rights[$r][0] = 61;
-		$this->rights[$r][1] = 'Lire les fiches d\'intervention';
-		$this->rights[$r][2] = 'r';
-		$this->rights[$r][3] = 1;
-		$this->rights[$r][4] = 'lire';
-
-        $r++;
-		$this->rights[$r][0] = 62;
-		$this->rights[$r][1] = 'Creer/modifier les fiches d\'intervention';
-		$this->rights[$r][2] = 'w';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'creer';
-
-        $r++;
-		$this->rights[$r][0] = 64;
-		$this->rights[$r][1] = 'Supprimer les fiches d\'intervention';
-		$this->rights[$r][2] = 'd';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'supprimer';
-
-		$r++;
-    $this->rights[$r][0] = 67;
-    $this->rights[$r][1] = 'Exporter les fiches interventions';
-    $this->rights[$r][2] = 'r';
-    $this->rights[$r][3] = 0;
-    $this->rights[$r][4] = 'export';
-
-    //Exports
-    //--------
-    $r=1;
-
-    $this->export_code[$r]=$this->rights_class.'_'.$r;
-    $this->export_label[$r]='InterventionCardsAndInterventionLines';	// Translation key (used only if key ExportDataset_xxx_z not found)
-    $this->export_permission[$r]=array(array("ficheinter","export"));
-    $this->export_fields_array[$r]=array('s.rowid'=>"IdCompany",'s.nom'=>'CompanyName','s.address'=>'Address','s.cp'=>'Zip','s.ville'=>'Town','s.fk_pays'=>'Country','s.tel'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode','f.rowid'=>"InterId",'f.ref'=>"InterRef",'f.datec'=>"InterDateCreation",'f.duree'=>"InterDuration",'f.fk_statut'=>'InterStatus','f.description'=>"InterNote",'fd.rowid'=>'InterLineId','fd.date'=>"InterLineDate",'fd.duree'=>"InterLineDuration",'fd.description'=>"InterLineDesc");
-		$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.cp'=>'company','s.ville'=>'company','s.fk_pays'=>'company','s.tel'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','f.rowid'=>"intervention",'f.ref'=>"intervention",'f.datec'=>"intervention",'f.duree'=>"intervention",'f.fk_statut'=>"intervention",'f.description'=>"intervention",'fd.rowid'=>"inter_line",'fd.date'=>"inter_line",'fd.duree'=>'inter_line','fd.description'=>'inter_line');
-    $this->export_alias_array[$r]=array('s.rowid'=>"socid",'s.nom'=>'soc_name','s.address'=>'soc_adres','s.cp'=>'soc_zip','s.ville'=>'soc_ville','s.fk_pays'=>'soc_pays','s.tel'=>'soc_tel','s.siren'=>'soc_siren','s.siret'=>'soc_siret','s.ape'=>'soc_ape','s.idprof4'=>'soc_idprof4','s.code_compta'=>'soc_customer_accountancy','s.code_compta_fournisseur'=>'soc_supplier_accountancy','f.rowid'=>"interid",'f.ref'=>"ref",'f.datec'=>"datecreation",'f.duree'=>"duration",'f.fk_statut'=>'status','f.description'=>"note",'fd.rowid'=>'lineid','fd.date'=>"linedate",'fd.duree'=>'lineduration','fd.description'=>"linedescription");
-
-    $this->export_sql_start[$r]='SELECT DISTINCT ';
-    $this->export_sql_end[$r]  =' FROM ('.MAIN_DB_PREFIX.'fichinter as f, '.MAIN_DB_PREFIX.'fichinterdet as fd, '.MAIN_DB_PREFIX.'societe as s)';
-		$this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_fichinter';
-		$this->export_sql_end[$r] .=' AND f.entity = '.$conf->entity;
-    $r++;
-
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		global $conf;
-
-		// Permissions
-		$this->remove();
-
-		$sql = array(
-			 "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity,
-			 "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','ficheinter',".$conf->entity.")",
-		);
-
-		return $this->_init($sql);
-	}
-
-	/**
-	 *    \brief      Fonction appelee lors de la desactivation d'un module.
-	 *                Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-}
-?>
+<?php
+/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
+ * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
+ * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *	\defgroup   ficheinter     Module intervention cards
+ *	\brief      Module to manage intervention cards
+ *	\version	$Id$
+ */
+
+/**
+ *	\file       htdocs/includes/modules/modFicheinter.class.php
+ *	\ingroup    ficheinter
+ *	\brief      Fichier de description et activation du module Ficheinter
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ *	\class      modFicheinter
+ *	\brief      Classe de description et activation du module Ficheinter
+ */
+class modFicheinter  extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      Database access handler
+	 */
+	function modFicheinter($DB)
+	{
+		global $conf;
+
+		$this->db = $DB ;
+		$this->numero = 70 ;
+
+		$this->family = "crm";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Gestion des fiches d'intervention";
+
+		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
+		$this->version = 'dolibarr';
+
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		$this->special = 0;
+		$this->picto = "intervention";
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/ficheinter/temp");
+
+        // Dependencies
+		$this->depends = array("modSociete");
+		$this->requiredby = array();
+		$this->conflictwith = array();
+		$this->langfiles = array("bills","companies","interventions");
+
+		// Config pages
+		$this->config_page_url = array("fichinter.php");
+
+		// Constantes
+		$this->const = array();
+		$r=0;
+
+		$this->const[$r][0] = "FICHEINTER_ADDON_PDF";
+		$this->const[$r][1] = "chaine";
+		$this->const[$r][2] = "soleil";
+		$r++;
+
+		$this->const[$r][0] = "FICHEINTER_ADDON";
+		$this->const[$r][1] = "chaine";
+		$this->const[$r][2] = "pacific";
+		$r++;
+
+		// Boites
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'ficheinter';
+		$r=0;
+
+        $r++;
+		$this->rights[$r][0] = 61;
+		$this->rights[$r][1] = 'Lire les fiches d\'intervention';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 1;
+		$this->rights[$r][4] = 'lire';
+
+        $r++;
+		$this->rights[$r][0] = 62;
+		$this->rights[$r][1] = 'Creer/modifier les fiches d\'intervention';
+		$this->rights[$r][2] = 'w';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'creer';
+
+        $r++;
+		$this->rights[$r][0] = 64;
+		$this->rights[$r][1] = 'Supprimer les fiches d\'intervention';
+		$this->rights[$r][2] = 'd';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'supprimer';
+
+		$r++;
+    $this->rights[$r][0] = 67;
+    $this->rights[$r][1] = 'Exporter les fiches interventions';
+    $this->rights[$r][2] = 'r';
+    $this->rights[$r][3] = 0;
+    $this->rights[$r][4] = 'export';
+
+    //Exports
+    //--------
+    $r=1;
+
+    $this->export_code[$r]=$this->rights_class.'_'.$r;
+    $this->export_label[$r]='InterventionCardsAndInterventionLines';	// Translation key (used only if key ExportDataset_xxx_z not found)
+    $this->export_permission[$r]=array(array("ficheinter","export"));
+    $this->export_fields_array[$r]=array('s.rowid'=>"IdCompany",'s.nom'=>'CompanyName','s.address'=>'Address','s.cp'=>'Zip','s.ville'=>'Town','s.fk_pays'=>'Country','s.tel'=>'Phone','s.siren'=>'ProfId1','s.siret'=>'ProfId2','s.ape'=>'ProfId3','s.idprof4'=>'ProfId4','s.code_compta'=>'CustomerAccountancyCode','s.code_compta_fournisseur'=>'SupplierAccountancyCode','f.rowid'=>"InterId",'f.ref'=>"InterRef",'f.datec'=>"InterDateCreation",'f.duree'=>"InterDuration",'f.fk_statut'=>'InterStatus','f.description'=>"InterNote",'fd.rowid'=>'InterLineId','fd.date'=>"InterLineDate",'fd.duree'=>"InterLineDuration",'fd.description'=>"InterLineDesc");
+		$this->export_entities_array[$r]=array('s.rowid'=>"company",'s.nom'=>'company','s.address'=>'company','s.cp'=>'company','s.ville'=>'company','s.fk_pays'=>'company','s.tel'=>'company','s.siren'=>'company','s.siret'=>'company','s.ape'=>'company','s.idprof4'=>'company','s.code_compta'=>'company','s.code_compta_fournisseur'=>'company','f.rowid'=>"intervention",'f.ref'=>"intervention",'f.datec'=>"intervention",'f.duree'=>"intervention",'f.fk_statut'=>"intervention",'f.description'=>"intervention",'fd.rowid'=>"inter_line",'fd.date'=>"inter_line",'fd.duree'=>'inter_line','fd.description'=>'inter_line');
+    $this->export_alias_array[$r]=array('s.rowid'=>"socid",'s.nom'=>'soc_name','s.address'=>'soc_adres','s.cp'=>'soc_zip','s.ville'=>'soc_ville','s.fk_pays'=>'soc_pays','s.tel'=>'soc_tel','s.siren'=>'soc_siren','s.siret'=>'soc_siret','s.ape'=>'soc_ape','s.idprof4'=>'soc_idprof4','s.code_compta'=>'soc_customer_accountancy','s.code_compta_fournisseur'=>'soc_supplier_accountancy','f.rowid'=>"interid",'f.ref'=>"ref",'f.datec'=>"datecreation",'f.duree'=>"duration",'f.fk_statut'=>'status','f.description'=>"note",'fd.rowid'=>'lineid','fd.date'=>"linedate",'fd.duree'=>'lineduration','fd.description'=>"linedescription");
+
+    $this->export_sql_start[$r]='SELECT DISTINCT ';
+    $this->export_sql_end[$r]  =' FROM ('.MAIN_DB_PREFIX.'fichinter as f, '.MAIN_DB_PREFIX.'fichinterdet as fd, '.MAIN_DB_PREFIX.'societe as s)';
+		$this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid AND f.rowid = fd.fk_fichinter';
+		$this->export_sql_end[$r] .=' AND f.entity = '.$conf->entity;
+    $r++;
+
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		global $conf;
+
+		// Permissions
+		$this->remove();
+
+		$sql = array(
+			 "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity,
+			 "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','ficheinter',".$conf->entity.")",
+		);
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/includes/modules/modLabel.class.php b/htdocs/includes/modules/modLabel.class.php
index df0b374c026..45e81b5f7ec 100644
--- a/htdocs/includes/modules/modLabel.class.php
+++ b/htdocs/includes/modules/modLabel.class.php
@@ -1,124 +1,124 @@
-<?php
-/* Copyright (C) 2007-2009 Regis Houssin       <regis@dolibarr.fr>
- * Copyright (C) 2008      Laurent Destailleur <eldy@users.sourceforge.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *	\defgroup   label         Module labels
- *	\version	$Id$
- *	\brief      Module pour gerer les formats d'impression des etiquettes
- */
-
-/**
- *	\file       htdocs/includes/modules/modLabel.class.php
- *	\ingroup    other
- *	\brief      Fichier de description et activation du module Label
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- \class      modLabel
- \brief      Classe de description et activation du module Label
- */
-
-class modLabel extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      handler d'acces base
-	 */
-	function modLabel($DB)
-	{
-		$this->db = $DB ;
-		$this->numero = 60 ;
-
-		$this->family = "other";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		$this->description = "Gestion des etiquettes";
-		$this->version = 'development';		// 'development' or 'experimental' or 'dolibarr' or version
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		$this->special = 2;
-		$this->picto='label';
-
-		// Data directories to create when module is enabled
-		$this->dirs = array("/label/temp");
-
-		// Dependancies
-		$this->depends = array();
-		$this->requiredby = array();
-
-		// Config pages
-		$this->config_page_url = array("label.php");
-
-		// Constants
-		$this->const = array();
-
-		// Boxes
-		$this->boxes = array();
-
-		// Permissions
-		$this->rights = array();
-		$this->rights_class = 'label';
-
-		$this->rights[1][0] = 601; // id de la permission
-		$this->rights[1][1] = 'Lire les etiquettes'; // libelle de la permission
-		$this->rights[1][3] = 1; // La permission est-elle une permission par defaut
-		$this->rights[1][4] = 'lire';
-
-		$this->rights[2][0] = 602; // id de la permission
-		$this->rights[2][1] = 'Creer/modifier les etiquettes'; // libelle de la permission
-		$this->rights[2][3] = 0; // La permission est-elle une permission par defaut
-		$this->rights[2][4] = 'creer';
-
-		$this->rights[4][0] = 609; // id de la permission
-		$this->rights[4][1] = 'Supprimer les etiquettes'; // libelle de la permission
-		$this->rights[4][3] = 0; // La permission est-elle une permission par defaut
-		$this->rights[4][4] = 'supprimer';
-
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		// Permissions
-		$this->remove();
-
-		$sql = array();
-
-		return $this->_init($sql);
-	}
-
-	/**
-	 *    \brief      Fonction appelee lors de la desactivation d'un module.
-	 *                Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-}
-?>
+<?php
+/* Copyright (C) 2007-2009 Regis Houssin       <regis@dolibarr.fr>
+ * Copyright (C) 2008      Laurent Destailleur <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *	\defgroup   label         Module labels
+ *	\version	$Id$
+ *	\brief      Module pour gerer les formats d'impression des etiquettes
+ */
+
+/**
+ *	\file       htdocs/includes/modules/modLabel.class.php
+ *	\ingroup    other
+ *	\brief      Fichier de description et activation du module Label
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ \class      modLabel
+ \brief      Classe de description et activation du module Label
+ */
+
+class modLabel extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modLabel($DB)
+	{
+		$this->db = $DB ;
+		$this->numero = 60 ;
+
+		$this->family = "other";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Gestion des etiquettes";
+		$this->version = 'development';		// 'development' or 'experimental' or 'dolibarr' or version
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		$this->special = 2;
+		$this->picto='label';
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/label/temp");
+
+		// Dependancies
+		$this->depends = array();
+		$this->requiredby = array();
+
+		// Config pages
+		$this->config_page_url = array("label.php");
+
+		// Constants
+		$this->const = array();
+
+		// Boxes
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'label';
+
+		$this->rights[1][0] = 601; // id de la permission
+		$this->rights[1][1] = 'Lire les etiquettes'; // libelle de la permission
+		$this->rights[1][3] = 1; // La permission est-elle une permission par defaut
+		$this->rights[1][4] = 'lire';
+
+		$this->rights[2][0] = 602; // id de la permission
+		$this->rights[2][1] = 'Creer/modifier les etiquettes'; // libelle de la permission
+		$this->rights[2][3] = 0; // La permission est-elle une permission par defaut
+		$this->rights[2][4] = 'creer';
+
+		$this->rights[4][0] = 609; // id de la permission
+		$this->rights[4][1] = 'Supprimer les etiquettes'; // libelle de la permission
+		$this->rights[4][3] = 0; // La permission est-elle une permission par defaut
+		$this->rights[4][4] = 'supprimer';
+
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		// Permissions
+		$this->remove();
+
+		$sql = array();
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/includes/modules/modMailing.class.php b/htdocs/includes/modules/modMailing.class.php
index 80690dd41ad..5b4bba60e78 100644
--- a/htdocs/includes/modules/modMailing.class.php
+++ b/htdocs/includes/modules/modMailing.class.php
@@ -1,132 +1,132 @@
-<?php
-/* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
- * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**
- *	\defgroup   mailing  Module emailing
- *	\brief      Module to manage EMailings
- *	\version	$Id$
- */
-
-/**
- *	\file       htdocs/includes/modules/modMailing.class.php
- *	\ingroup    mailing
- *	\brief      Fichier de description et activation du module Mailing
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- *	\class      modMailing
- *	\brief      Classe de description et activation du module Mailing
- */
-class modMailing extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      handler d'acces base
-	 */
-	function modMailing($DB)
-	{
-		$this->db = $DB ;
-		$this->numero = 22 ;
-
-		$this->family = "technic";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		$this->description = "Gestion des EMailings";
-		$this->version = 'dolibarr';    // 'experimental' or 'dolibarr' or version
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		$this->special = 0;
-		$this->picto='email';
-
-		// Data directories to create when module is enabled
-		$this->dirs = array("/mailing/temp");
-
-		// Dependances
-		$this->depends = array();
-		$this->requiredby = array();
-		$this->langfiles = array("mails");
-
-		// Config pages
-		$this->config_page_url = array("mailing.php");
-
-		// Constantes
-		$this->const = array();
-
-		// Boites
-		$this->boxes = array();
-
-		// Permissions
-		$this->rights = array();
-		$this->rights_class = 'mailing';
-
-		$this->rights[1][0] = 221; // id de la permission
-		$this->rights[1][1] = 'Consulter les mailings'; // libelle de la permission
-		$this->rights[1][2] = 'r'; // type de la permission (deprecie a ce jour)
-		$this->rights[1][3] = 1; // La permission est-elle une permission par defaut
-		$this->rights[1][4] = 'lire';
-
-		$this->rights[2][0] = 222;
-		$this->rights[2][1] = 'Creer/modifier les mailings (sujet, destinataires...)';
-		$this->rights[2][2] = 'w';
-		$this->rights[2][3] = 0;
-		$this->rights[2][4] = 'creer';
-
-		$this->rights[3][0] = 223;
-		$this->rights[3][1] = 'Valider les mailings (permet leur envoi)';
-		$this->rights[3][2] = 'w';
-		$this->rights[3][3] = 0;
-		$this->rights[3][4] = 'valider';
-
-		$this->rights[4][0] = 229;
-		$this->rights[4][1] = 'Supprimer les mailings)';
-		$this->rights[4][2] = 'd';
-		$this->rights[4][3] = 0;
-		$this->rights[4][4] = 'supprimer';
-
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		// Permissions
-		$this->remove();
-
-		return $this->_init($sql);
-	}
-
-	/**
-	 \brief      Fonction appelee lors de la desactivation d'un module.
-	 Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-}
-?>
+<?php
+/* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**
+ *	\defgroup   mailing  Module emailing
+ *	\brief      Module to manage EMailings
+ *	\version	$Id$
+ */
+
+/**
+ *	\file       htdocs/includes/modules/modMailing.class.php
+ *	\ingroup    mailing
+ *	\brief      Fichier de description et activation du module Mailing
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ *	\class      modMailing
+ *	\brief      Classe de description et activation du module Mailing
+ */
+class modMailing extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modMailing($DB)
+	{
+		$this->db = $DB ;
+		$this->numero = 22 ;
+
+		$this->family = "technic";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		$this->description = "Gestion des EMailings";
+		$this->version = 'dolibarr';    // 'experimental' or 'dolibarr' or version
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		$this->special = 0;
+		$this->picto='email';
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/mailing/temp");
+
+		// Dependances
+		$this->depends = array();
+		$this->requiredby = array();
+		$this->langfiles = array("mails");
+
+		// Config pages
+		$this->config_page_url = array("mailing.php");
+
+		// Constantes
+		$this->const = array();
+
+		// Boites
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'mailing';
+
+		$this->rights[1][0] = 221; // id de la permission
+		$this->rights[1][1] = 'Consulter les mailings'; // libelle de la permission
+		$this->rights[1][2] = 'r'; // type de la permission (deprecie a ce jour)
+		$this->rights[1][3] = 1; // La permission est-elle une permission par defaut
+		$this->rights[1][4] = 'lire';
+
+		$this->rights[2][0] = 222;
+		$this->rights[2][1] = 'Creer/modifier les mailings (sujet, destinataires...)';
+		$this->rights[2][2] = 'w';
+		$this->rights[2][3] = 0;
+		$this->rights[2][4] = 'creer';
+
+		$this->rights[3][0] = 223;
+		$this->rights[3][1] = 'Valider les mailings (permet leur envoi)';
+		$this->rights[3][2] = 'w';
+		$this->rights[3][3] = 0;
+		$this->rights[3][4] = 'valider';
+
+		$this->rights[4][0] = 229;
+		$this->rights[4][1] = 'Supprimer les mailings)';
+		$this->rights[4][2] = 'd';
+		$this->rights[4][3] = 0;
+		$this->rights[4][4] = 'supprimer';
+
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		// Permissions
+		$this->remove();
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 \brief      Fonction appelee lors de la desactivation d'un module.
+	 Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/includes/modules/modTax.class.php b/htdocs/includes/modules/modTax.class.php
index 5662e9071cd..335d2edc33e 100644
--- a/htdocs/includes/modules/modTax.class.php
+++ b/htdocs/includes/modules/modTax.class.php
@@ -1,169 +1,169 @@
-<?php
-/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
- * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
- * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
- * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/**     \defgroup   tax		Module taxes
- \brief      Module pour inclure des fonctions de saisies des taxes (tva) et charges sociales
- */
-
-/**
- *      \file       htdocs/includes/modules/modTax.class.php
- *      \ingroup    tax
- *      \brief      Fichier de description et activation du module Taxe
- *		\version	$Id$
- */
-
-include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
-
-
-/**
- \class 		modTax
- \brief      Classe de description et activation du module Tax
- */
-class modTax extends DolibarrModules
-{
-
-	/**
-	 *   \brief      Constructeur. Definit les noms, constantes et boites
-	 *   \param      DB      handler d'acces base
-	 */
-	function modTax($DB)
-	{
-		global $conf;
-
-		$this->db = $DB ;
-		$this->numero = 500 ;
-
-		$this->family = "financial";
-		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
-		$this->name = preg_replace('/^mod/i','',get_class($this));
-		// Module description used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
-		$this->description = "Gestion des taxes, charges sociales et dividendes";
-
-		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
-		$this->version = 'dolibarr';
-
-		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
-		$this->special = 0;
-		$this->picto='bill';
-
-		// Data directories to create when module is enabled
-		$this->dirs = array("/tax/temp");
-
-		// Config pages
-		$this->config_page_url = array("taxes.php");
-
-		// Dependances
-		$this->depends = array();
-		$this->requiredby = array();
-		$this->conflictwith = array();
-		$this->langfiles = array("compta","bills");
-
-		// Constantes
-		$this->const = array();
-
-		// Boites
-		$this->boxes = array();
-
-		// Permissions
-		$this->rights = array();
-		$this->rights_class = 'tax';
-		$r=0;
-
-		$r++;
-		$this->rights[$r][0] = 91;
-		$this->rights[$r][1] = 'Lire les charges';
-		$this->rights[$r][2] = 'r';
-		$this->rights[$r][3] = 1;
-		$this->rights[$r][4] = 'charges';
-		$this->rights[$r][5] = 'lire';
-
-		$r++;
-		$this->rights[$r][0] = 92;
-		$this->rights[$r][1] = 'Creer/modifier les charges';
-		$this->rights[$r][2] = 'w';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'charges';
-		$this->rights[$r][5] = 'creer';
-
-		$r++;
-		$this->rights[$r][0] = 93;
-		$this->rights[$r][1] = 'Supprimer les charges';
-		$this->rights[$r][2] = 'd';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'charges';
-		$this->rights[$r][5] = 'supprimer';
-
-		$r++;
-		$this->rights[$r][0] = 94;
-		$this->rights[$r][1] = 'Exporter les charges';
-		$this->rights[$r][2] = 'r';
-		$this->rights[$r][3] = 0;
-		$this->rights[$r][4] = 'charges';
-		$this->rights[$r][5] = 'export';
-
-
-		// Exports
-		//--------
-		$r=0;
-
-		$r++;
-		$this->export_code[$r]=$this->rights_class.'_'.$r;
-		$this->export_label[$r]='Taxes et charges sociales, et leurs reglements';
-		$this->export_permission[$r]=array(array("tax","charges","export"));
-		$this->export_fields_array[$r]=array('cc.libelle'=>"Type",'c.rowid'=>"IdSocialContribution",'c.libelle'=>"Label",'c.date_ech'=>'DateDue','c.periode'=>'Period','c.amount'=>"AmountExpected","c.paye"=>"Status",'p.rowid'=>'PaymentId','p.datep'=>'DatePayment','p.amount'=>'AmountPayment','p.num_paiement'=>'Numero');
-		$this->export_entities_array[$r]=array('cc.libelle'=>"tax_type",'c.rowid'=>"tax",'c.libelle'=>'tax','c.date_ech'=>'tax','c.periode'=>'tax','c.amount'=>"tax","c.paye"=>"tax",'p.rowid'=>'payment','p.datep'=>'payment','p.amount'=>'payment','p.num_paiement'=>'payment');
-		$this->export_alias_array[$r]=array('cc.libelle'=>"type",'c.rowid'=>"idsocialcontrib",'c.libelle'=>'label','c.date_ech'=>'datedue','c.periode'=>'period','c.amount'=>"amount_clamed","c.paye"=>"status",'p.rowid'=>'paymentid','p.datep'=>'date_payment','p.amount'=>'amount_payment','p.num_paiement'=>'num_payment');
-
-		$this->export_sql_start[$r]='SELECT DISTINCT ';
-		$this->export_sql_end[$r]  =' FROM '.MAIN_DB_PREFIX.'c_chargesociales as cc, '.MAIN_DB_PREFIX.'chargesociales as c';
-		$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'paiementcharge as p ON p.fk_charge = c.rowid';
-		$this->export_sql_end[$r] .=' WHERE c.fk_type = cc.id';
-		$this->export_sql_end[$r] .=' AND c.entity = '.$conf->entity;
-	}
-
-
-	/**
-	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
-	 *               Definit egalement les repertoires de donnees a creer pour ce module.
-	 */
-	function init()
-	{
-		global $conf;
-
-		// Nettoyage avant activation
-		$this->remove();
-
-		return $this->_init($sql);
-	}
-
-	/**
-	 *    \brief      Fonction appelee lors de la desactivation d'un module.
-	 *                Supprime de la base les constantes, boites et permissions du module.
-	 */
-	function remove()
-	{
-		$sql = array();
-
-		return $this->_remove($sql);
-	}
-}
-?>
+<?php
+/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
+ * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
+ * Copyright (C) 2005-2009 Regis Houssin        <regis@dolibarr.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/**     \defgroup   tax		Module taxes
+ \brief      Module pour inclure des fonctions de saisies des taxes (tva) et charges sociales
+ */
+
+/**
+ *      \file       htdocs/includes/modules/modTax.class.php
+ *      \ingroup    tax
+ *      \brief      Fichier de description et activation du module Taxe
+ *		\version	$Id$
+ */
+
+include_once(DOL_DOCUMENT_ROOT ."/includes/modules/DolibarrModules.class.php");
+
+
+/**
+ \class 		modTax
+ \brief      Classe de description et activation du module Tax
+ */
+class modTax extends DolibarrModules
+{
+
+	/**
+	 *   \brief      Constructeur. Definit les noms, constantes et boites
+	 *   \param      DB      handler d'acces base
+	 */
+	function modTax($DB)
+	{
+		global $conf;
+
+		$this->db = $DB ;
+		$this->numero = 500 ;
+
+		$this->family = "financial";
+		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
+		$this->name = preg_replace('/^mod/i','',get_class($this));
+		// Module description used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
+		$this->description = "Gestion des taxes, charges sociales et dividendes";
+
+		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
+		$this->version = 'dolibarr';
+
+		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
+		$this->special = 0;
+		$this->picto='bill';
+
+		// Data directories to create when module is enabled
+		$this->dirs = array("/tax/temp");
+
+		// Config pages
+		$this->config_page_url = array("taxes.php");
+
+		// Dependances
+		$this->depends = array();
+		$this->requiredby = array();
+		$this->conflictwith = array();
+		$this->langfiles = array("compta","bills");
+
+		// Constantes
+		$this->const = array();
+
+		// Boites
+		$this->boxes = array();
+
+		// Permissions
+		$this->rights = array();
+		$this->rights_class = 'tax';
+		$r=0;
+
+		$r++;
+		$this->rights[$r][0] = 91;
+		$this->rights[$r][1] = 'Lire les charges';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 1;
+		$this->rights[$r][4] = 'charges';
+		$this->rights[$r][5] = 'lire';
+
+		$r++;
+		$this->rights[$r][0] = 92;
+		$this->rights[$r][1] = 'Creer/modifier les charges';
+		$this->rights[$r][2] = 'w';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'charges';
+		$this->rights[$r][5] = 'creer';
+
+		$r++;
+		$this->rights[$r][0] = 93;
+		$this->rights[$r][1] = 'Supprimer les charges';
+		$this->rights[$r][2] = 'd';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'charges';
+		$this->rights[$r][5] = 'supprimer';
+
+		$r++;
+		$this->rights[$r][0] = 94;
+		$this->rights[$r][1] = 'Exporter les charges';
+		$this->rights[$r][2] = 'r';
+		$this->rights[$r][3] = 0;
+		$this->rights[$r][4] = 'charges';
+		$this->rights[$r][5] = 'export';
+
+
+		// Exports
+		//--------
+		$r=0;
+
+		$r++;
+		$this->export_code[$r]=$this->rights_class.'_'.$r;
+		$this->export_label[$r]='Taxes et charges sociales, et leurs reglements';
+		$this->export_permission[$r]=array(array("tax","charges","export"));
+		$this->export_fields_array[$r]=array('cc.libelle'=>"Type",'c.rowid'=>"IdSocialContribution",'c.libelle'=>"Label",'c.date_ech'=>'DateDue','c.periode'=>'Period','c.amount'=>"AmountExpected","c.paye"=>"Status",'p.rowid'=>'PaymentId','p.datep'=>'DatePayment','p.amount'=>'AmountPayment','p.num_paiement'=>'Numero');
+		$this->export_entities_array[$r]=array('cc.libelle'=>"tax_type",'c.rowid'=>"tax",'c.libelle'=>'tax','c.date_ech'=>'tax','c.periode'=>'tax','c.amount'=>"tax","c.paye"=>"tax",'p.rowid'=>'payment','p.datep'=>'payment','p.amount'=>'payment','p.num_paiement'=>'payment');
+		$this->export_alias_array[$r]=array('cc.libelle'=>"type",'c.rowid'=>"idsocialcontrib",'c.libelle'=>'label','c.date_ech'=>'datedue','c.periode'=>'period','c.amount'=>"amount_clamed","c.paye"=>"status",'p.rowid'=>'paymentid','p.datep'=>'date_payment','p.amount'=>'amount_payment','p.num_paiement'=>'num_payment');
+
+		$this->export_sql_start[$r]='SELECT DISTINCT ';
+		$this->export_sql_end[$r]  =' FROM '.MAIN_DB_PREFIX.'c_chargesociales as cc, '.MAIN_DB_PREFIX.'chargesociales as c';
+		$this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'paiementcharge as p ON p.fk_charge = c.rowid';
+		$this->export_sql_end[$r] .=' WHERE c.fk_type = cc.id';
+		$this->export_sql_end[$r] .=' AND c.entity = '.$conf->entity;
+	}
+
+
+	/**
+	 *   \brief      Fonction appelee lors de l'activation du module. Insere en base les constantes, boites, permissions du module.
+	 *               Definit egalement les repertoires de donnees a creer pour ce module.
+	 */
+	function init()
+	{
+		global $conf;
+
+		// Nettoyage avant activation
+		$this->remove();
+
+		return $this->_init($sql);
+	}
+
+	/**
+	 *    \brief      Fonction appelee lors de la desactivation d'un module.
+	 *                Supprime de la base les constantes, boites et permissions du module.
+	 */
+	function remove()
+	{
+		$sql = array();
+
+		return $this->_remove($sql);
+	}
+}
+?>
diff --git a/htdocs/includes/modules/rapport/pdf_paiement.class.php b/htdocs/includes/modules/rapport/pdf_paiement.class.php
index 2875a974e90..1b3e1da2f49 100644
--- a/htdocs/includes/modules/rapport/pdf_paiement.class.php
+++ b/htdocs/includes/modules/rapport/pdf_paiement.class.php
@@ -141,11 +141,11 @@ class pdf_paiement
 		$result = $this->db->query($sql);
 		if ($result)
 		{
-			$lines = $this->db->num_rows($result);
+			$lignes = $this->db->num_rows($result);
 			$i = 0;
 			$var=True;
 
-			while ($i < $lines)
+			while ($i < $lignes)
 			{
 				$objp = $this->db->fetch_object($result);
 				$var=!$var;
@@ -167,9 +167,9 @@ class pdf_paiement
 			dol_print_error($this->db);
 		}
 
-		$pages = intval($lines / $this->line_per_page);
+		$pages = intval($lignes / $this->line_per_page);
 
-		if (($lines % $this->line_per_page)>0)
+		if (($lignes % $this->line_per_page)>0)
 		{
 			$pages++;
 		}
diff --git a/htdocs/includes/modules/supplier_invoice/pdf/pdf_canelle.modules.php b/htdocs/includes/modules/supplier_invoice/pdf/pdf_canelle.modules.php
index 67c654398db..45e71b25524 100755
--- a/htdocs/includes/modules/supplier_invoice/pdf/pdf_canelle.modules.php
+++ b/htdocs/includes/modules/supplier_invoice/pdf/pdf_canelle.modules.php
@@ -239,7 +239,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
 
 					// Unit price before discount
 					$pdf->SetXY ($this->posxup, $curY);
-					$pdf->MultiCell(20, 3, price($object->lines[$i]->pu_ht), 0, 'R', 0);
+					$pdf->MultiCell(18, 3, price($object->lines[$i]->pu_ht), 0, 'R', 0);
 
 					// Quantity
 					$pdf->SetXY ($this->posxqty, $curY);
@@ -529,7 +529,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
 
 		$pdf->line($this->posxup-1, $tab_top, $this->posxup-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxup-1, $tab_top+2);
-		$pdf->MultiCell(20,2, $outputlangs->transnoentities("PriceUHT"),'','C');
+		$pdf->MultiCell(18,2, $outputlangs->transnoentities("PriceUHT"),'','C');
 
 		$pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxqty-1, $tab_top+2);
diff --git a/htdocs/includes/modules/supplier_order/pdf/pdf_muscadet.modules.php b/htdocs/includes/modules/supplier_order/pdf/pdf_muscadet.modules.php
index 91a9bc4f52c..7dfd7e5ccd8 100644
--- a/htdocs/includes/modules/supplier_order/pdf/pdf_muscadet.modules.php
+++ b/htdocs/includes/modules/supplier_order/pdf/pdf_muscadet.modules.php
@@ -249,7 +249,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
 
 					// Unit price before discount
 					$pdf->SetXY ($this->posxup, $curY);
-					$pdf->MultiCell(20, 3, price($object->lines[$i]->subprice), 0, 'R', 0);
+					$pdf->MultiCell(18, 3, price($object->lines[$i]->subprice), 0, 'R', 0);
 
 					// Quantity
 					$pdf->SetXY ($this->posxqty, $curY);
@@ -540,7 +540,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
 
 		$pdf->line($this->posxup-1, $tab_top, $this->posxup-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxup-1, $tab_top+2);
-		$pdf->MultiCell(20,2, $outputlangs->transnoentities("PriceUHT"),'','C');
+		$pdf->MultiCell(18,2, $outputlangs->transnoentities("PriceUHT"),'','C');
 
 		$pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height);
 		$pdf->SetXY ($this->posxqty-1, $tab_top+2);
diff --git a/htdocs/includes/smarty/libs/plugins/function.fetch.php b/htdocs/includes/smarty/libs/plugins/function.fetch.php
index c66ef3b01b7..374cd0a05a6 100644
--- a/htdocs/includes/smarty/libs/plugins/function.fetch.php
+++ b/htdocs/includes/smarty/libs/plugins/function.fetch.php
@@ -1,221 +1,221 @@
-<?php
-/**
- * Smarty plugin
- * @package Smarty
- * @subpackage plugins
- */
-
-
-/**
- * Smarty {fetch} plugin
- *
- * Type:     function<br>
- * Name:     fetch<br>
- * Purpose:  fetch file, web or ftp data and display results
- * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch}
- *       (Smarty online manual)
- * @author Monte Ohrt <monte at ohrt dot com>
- * @param array
- * @param Smarty
- * @return string|null if the assign parameter is passed, Smarty assigns the
- *                     result to a template variable
- */
-function smarty_function_fetch($params, &$smarty)
-{
-    if (empty($params['file'])) {
-        $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty");
-        return;
-    }
-
-    $content = '';
-    if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) {
-        $_params = array('resource_type' => 'file', 'resource_name' => $params['file']);
-        require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
-        if(!smarty_core_is_secure($_params, $smarty)) {
-            $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed');
-            return;
-        }
-        
-        // fetch the file
-        if($fp = @fopen($params['file'],'r')) {
-            while(!feof($fp)) {
-                $content .= fgets ($fp,4096);
-            }
-            fclose($fp);
-        } else {
-            $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\'');
-            return;
-        }
-    } else {
-        // not a local file
-        if(preg_match('!^http://!i',$params['file'])) {
-            // http fetch
-            if($uri_parts = parse_url($params['file'])) {
-                // set defaults
-                $host = $server_name = $uri_parts['host'];
-                $timeout = 30;
-                $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
-                $agent = "Smarty Template Engine ".$smarty->_version;
-                $referer = "";
-                $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
-                $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
-                $_is_proxy = false;
-                if(empty($uri_parts['port'])) {
-                    $port = 80;
-                } else {
-                    $port = $uri_parts['port'];
-                }
-                if(!empty($uri_parts['user'])) {
-                    $user = $uri_parts['user'];
-                }
-                if(!empty($uri_parts['pass'])) {
-                    $pass = $uri_parts['pass'];
-                }
-                // loop through parameters, setup headers
-                foreach($params as $param_key => $param_value) {
-                    switch($param_key) {
-                        case "file":
-                        case "assign":
-                        case "assign_headers":
-                            break;
-                        case "user":
-                            if(!empty($param_value)) {
-                                $user = $param_value;
-                            }
-                            break;
-                        case "pass":
-                            if(!empty($param_value)) {
-                                $pass = $param_value;
-                            }
-                            break;
-                        case "accept":
-                            if(!empty($param_value)) {
-                                $accept = $param_value;
-                            }
-                            break;
-                        case "header":
-                            if(!empty($param_value)) {
-                                if(!preg_match('![\w\d-]+: .+!',$param_value)) {
-                                    $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'");
-                                    return;
-                                } else {
-                                    $extra_headers[] = $param_value;
-                                }
-                            }
-                            break;
-                        case "proxy_host":
-                            if(!empty($param_value)) {
-                                $proxy_host = $param_value;
-                            }
-                            break;
-                        case "proxy_port":
-                            if(!preg_match('!\D!', $param_value)) {
-                                $proxy_port = (int) $param_value;
-                            } else {
-                                $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
-                                return;
-                            }
-                            break;
-                        case "agent":
-                            if(!empty($param_value)) {
-                                $agent = $param_value;
-                            }
-                            break;
-                        case "referer":
-                            if(!empty($param_value)) {
-                                $referer = $param_value;
-                            }
-                            break;
-                        case "timeout":
-                            if(!preg_match('!\D!', $param_value)) {
-                                $timeout = (int) $param_value;
-                            } else {
-                                $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
-                                return;
-                            }
-                            break;
-                        default:
-                            $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'");
-                            return;
-                    }
-                }
-                if(!empty($proxy_host) && !empty($proxy_port)) {
-                    $_is_proxy = true;
-                    $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
-                } else {
-                    $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
-                }
-
-                if(!$fp) {
-                    $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)");
-                    return;
-                } else {
-                    if($_is_proxy) {
-                        fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
-                    } else {
-                        fputs($fp, "GET $uri HTTP/1.0\r\n");
-                    }
-                    if(!empty($host)) {
-                        fputs($fp, "Host: $host\r\n");
-                    }
-                    if(!empty($accept)) {
-                        fputs($fp, "Accept: $accept\r\n");
-                    }
-                    if(!empty($agent)) {
-                        fputs($fp, "User-Agent: $agent\r\n");
-                    }
-                    if(!empty($referer)) {
-                        fputs($fp, "Referer: $referer\r\n");
-                    }
-                    if(isset($extra_headers) && is_array($extra_headers)) {
-                        foreach($extra_headers as $curr_header) {
-                            fputs($fp, $curr_header."\r\n");
-                        }
-                    }
-                    if(!empty($user) && !empty($pass)) {
-                        fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
-                    }
-
-                    fputs($fp, "\r\n");
-                    while(!feof($fp)) {
-                        $content .= fgets($fp,4096);
-                    }
-                    fclose($fp);
-                    $csplit = explode("\r\n\r\n",$content,2);
-
-                    $content = $csplit[1];
-
-                    if(!empty($params['assign_headers'])) {
-                        $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0]));
-                    }
-                }
-            } else {
-                $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax");
-                return;
-            }
-        } else {
-            // ftp fetch
-            if($fp = @fopen($params['file'],'r')) {
-                while(!feof($fp)) {
-                    $content .= fgets ($fp,4096);
-                }
-                fclose($fp);
-            } else {
-                $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\'');
-                return;
-            }
-        }
-
-    }
-
-
-    if (!empty($params['assign'])) {
-        $smarty->assign($params['assign'],$content);
-    } else {
-        return $content;
-    }
-}
-
-/* vim: set expandtab: */
-
-?>
+<?php
+/**
+ * Smarty plugin
+ * @package Smarty
+ * @subpackage plugins
+ */
+
+
+/**
+ * Smarty {fetch} plugin
+ *
+ * Type:     function<br>
+ * Name:     fetch<br>
+ * Purpose:  fetch file, web or ftp data and display results
+ * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch}
+ *       (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com>
+ * @param array
+ * @param Smarty
+ * @return string|null if the assign parameter is passed, Smarty assigns the
+ *                     result to a template variable
+ */
+function smarty_function_fetch($params, &$smarty)
+{
+    if (empty($params['file'])) {
+        $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty");
+        return;
+    }
+
+    $content = '';
+    if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) {
+        $_params = array('resource_type' => 'file', 'resource_name' => $params['file']);
+        require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
+        if(!smarty_core_is_secure($_params, $smarty)) {
+            $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed');
+            return;
+        }
+        
+        // fetch the file
+        if($fp = @fopen($params['file'],'r')) {
+            while(!feof($fp)) {
+                $content .= fgets ($fp,4096);
+            }
+            fclose($fp);
+        } else {
+            $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\'');
+            return;
+        }
+    } else {
+        // not a local file
+        if(preg_match('!^http://!i',$params['file'])) {
+            // http fetch
+            if($uri_parts = parse_url($params['file'])) {
+                // set defaults
+                $host = $server_name = $uri_parts['host'];
+                $timeout = 30;
+                $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
+                $agent = "Smarty Template Engine ".$smarty->_version;
+                $referer = "";
+                $uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
+                $uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
+                $_is_proxy = false;
+                if(empty($uri_parts['port'])) {
+                    $port = 80;
+                } else {
+                    $port = $uri_parts['port'];
+                }
+                if(!empty($uri_parts['user'])) {
+                    $user = $uri_parts['user'];
+                }
+                if(!empty($uri_parts['pass'])) {
+                    $pass = $uri_parts['pass'];
+                }
+                // loop through parameters, setup headers
+                foreach($params as $param_key => $param_value) {
+                    switch($param_key) {
+                        case "file":
+                        case "assign":
+                        case "assign_headers":
+                            break;
+                        case "user":
+                            if(!empty($param_value)) {
+                                $user = $param_value;
+                            }
+                            break;
+                        case "pass":
+                            if(!empty($param_value)) {
+                                $pass = $param_value;
+                            }
+                            break;
+                        case "accept":
+                            if(!empty($param_value)) {
+                                $accept = $param_value;
+                            }
+                            break;
+                        case "header":
+                            if(!empty($param_value)) {
+                                if(!preg_match('![\w\d-]+: .+!',$param_value)) {
+                                    $smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'");
+                                    return;
+                                } else {
+                                    $extra_headers[] = $param_value;
+                                }
+                            }
+                            break;
+                        case "proxy_host":
+                            if(!empty($param_value)) {
+                                $proxy_host = $param_value;
+                            }
+                            break;
+                        case "proxy_port":
+                            if(!preg_match('!\D!', $param_value)) {
+                                $proxy_port = (int) $param_value;
+                            } else {
+                                $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
+                                return;
+                            }
+                            break;
+                        case "agent":
+                            if(!empty($param_value)) {
+                                $agent = $param_value;
+                            }
+                            break;
+                        case "referer":
+                            if(!empty($param_value)) {
+                                $referer = $param_value;
+                            }
+                            break;
+                        case "timeout":
+                            if(!preg_match('!\D!', $param_value)) {
+                                $timeout = (int) $param_value;
+                            } else {
+                                $smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
+                                return;
+                            }
+                            break;
+                        default:
+                            $smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'");
+                            return;
+                    }
+                }
+                if(!empty($proxy_host) && !empty($proxy_port)) {
+                    $_is_proxy = true;
+                    $fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
+                } else {
+                    $fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
+                }
+
+                if(!$fp) {
+                    $smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)");
+                    return;
+                } else {
+                    if($_is_proxy) {
+                        fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
+                    } else {
+                        fputs($fp, "GET $uri HTTP/1.0\r\n");
+                    }
+                    if(!empty($host)) {
+                        fputs($fp, "Host: $host\r\n");
+                    }
+                    if(!empty($accept)) {
+                        fputs($fp, "Accept: $accept\r\n");
+                    }
+                    if(!empty($agent)) {
+                        fputs($fp, "User-Agent: $agent\r\n");
+                    }
+                    if(!empty($referer)) {
+                        fputs($fp, "Referer: $referer\r\n");
+                    }
+                    if(isset($extra_headers) && is_array($extra_headers)) {
+                        foreach($extra_headers as $curr_header) {
+                            fputs($fp, $curr_header."\r\n");
+                        }
+                    }
+                    if(!empty($user) && !empty($pass)) {
+                        fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
+                    }
+
+                    fputs($fp, "\r\n");
+                    while(!feof($fp)) {
+                        $content .= fgets($fp,4096);
+                    }
+                    fclose($fp);
+                    $csplit = explode("\r\n\r\n",$content,2);
+
+                    $content = $csplit[1];
+
+                    if(!empty($params['assign_headers'])) {
+                        $smarty->assign($params['assign_headers'],split("\r\n",$csplit[0]));
+                    }
+                }
+            } else {
+                $smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax");
+                return;
+            }
+        } else {
+            // ftp fetch
+            if($fp = @fopen($params['file'],'r')) {
+                while(!feof($fp)) {
+                    $content .= fgets ($fp,4096);
+                }
+                fclose($fp);
+            } else {
+                $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\'');
+                return;
+            }
+        }
+
+    }
+
+
+    if (!empty($params['assign'])) {
+        $smarty->assign($params['assign'],$content);
+    } else {
+        return $content;
+    }
+}
+
+/* vim: set expandtab: */
+
+?>
diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql
index b48ef199c76..9372d1555df 100644
--- a/htdocs/install/mysql/tables/llx_user.sql
+++ b/htdocs/install/mysql/tables/llx_user.sql
@@ -25,12 +25,8 @@ create table llx_user
   rowid             integer AUTO_INCREMENT PRIMARY KEY,
   datec             datetime,
   tms               timestamp,
-
-  login             varchar(30)       NOT NULL, -- user reference number
-  entity            integer DEFAULT 1 NOT NULL, -- multi company id
-
-  ref_ext           varchar(30),                -- reference into an external system (not used by dolibarr)
-  
+  login             varchar(24) NOT NULL,
+  entity            integer DEFAULT 1 NOT NULL,	-- multi company id
   pass              varchar(32),
   pass_crypted      varchar(128),
   pass_temp         varchar(32),			-- temporary password when asked for forget password
diff --git a/htdocs/lib/.cvsignore b/htdocs/lib/.cvsignore
index 60dbf5fcb1a..6c8214fdbe2 100644
--- a/htdocs/lib/.cvsignore
+++ b/htdocs/lib/.cvsignore
@@ -1 +1 @@
-htmlMimeMail
+htmlMimeMail
diff --git a/htdocs/lib/pdf.lib.php b/htdocs/lib/pdf.lib.php
index f9240f50a5f..a1c1b1aa864 100644
--- a/htdocs/lib/pdf.lib.php
+++ b/htdocs/lib/pdf.lib.php
@@ -372,7 +372,7 @@ function pdf_pagefoot(&$pdf,$outputlangs,$paramfreetext,$fromcompany,$marge_bass
     global $conf,$user;
 
     $outputlangs->load("dict");
-    $line='';
+    $ligne='';
 
     // Line of free text
     if (! empty($conf->global->$paramfreetext))
@@ -387,92 +387,92 @@ function pdf_pagefoot(&$pdf,$outputlangs,$paramfreetext,$fromcompany,$marge_bass
         );
 
         $newfreetext=make_substitutions($conf->global->$paramfreetext,$substitutionarray,$outputlangs,$object);
-        $line.=$outputlangs->convToOutputCharset($newfreetext);
+        $ligne.=$outputlangs->convToOutputCharset($newfreetext);
     }
 
     // First line of company infos
 
     // Juridical status
-    $line1="";
+    $ligne1="";
     if ($fromcompany->forme_juridique_code)
     {
-        $line1.=($line1?" - ":"").$outputlangs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
+        $ligne1.=($ligne1?" - ":"").$outputlangs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
     }
     // Capital
     if ($fromcompany->capital)
     {
-        $line1.=($line1?" - ":"").$outputlangs->transnoentities("CapitalOf",$fromcompany->capital)." ".$outputlangs->transnoentities("Currency".$conf->monnaie);
+        $ligne1.=($ligne1?" - ":"").$outputlangs->transnoentities("CapitalOf",$fromcompany->capital)." ".$outputlangs->transnoentities("Currency".$conf->monnaie);
     }
     // Prof Id 1
     if ($fromcompany->idprof1 && ($fromcompany->pays_code != 'FR' || ! $fromcompany->idprof2))
     {
         $field=$outputlangs->transcountrynoentities("ProfId1",$fromcompany->pays_code);
         if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-        $line1.=($line1?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
+        $ligne1.=($ligne1?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
     }
     // Prof Id 2
     if ($fromcompany->idprof2)
     {
         $field=$outputlangs->transcountrynoentities("ProfId2",$fromcompany->pays_code);
         if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-        $line1.=($line1?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
+        $ligne1.=($ligne1?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
     }
 
     // Second line of company infos
-    $line2="";
+    $ligne2="";
     // Prof Id 3
     if ($fromcompany->idprof3)
     {
         $field=$outputlangs->transcountrynoentities("ProfId3",$fromcompany->pays_code);
         if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-        $line2.=($line2?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
+        $ligne2.=($ligne2?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
     }
     // Prof Id 4
     if ($fromcompany->idprof4)
     {
         $field=$outputlangs->transcountrynoentities("ProfId4",$fromcompany->pays_code);
         if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-        $line2.=($line2?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
+        $ligne2.=($ligne2?" - ":"").$field.": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
     }
     // IntraCommunautary VAT
     if ($fromcompany->tva_intra != '')
     {
-        $line2.=($line2?" - ":"").$outputlangs->transnoentities("VATIntraShort").": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
+        $ligne2.=($ligne2?" - ":"").$outputlangs->transnoentities("VATIntraShort").": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
     }
 
     $pdf->SetFont('','',7);
     $pdf->SetDrawColor(224,224,224);
 
     // On positionne le debut du bas de page selon nbre de lignes de ce bas de page
-    $nbofline=dol_nboflines_bis($line,0,$outputlangs->charset_output);
-    //print 'nbofline='.$nbofline; exit;
-    //print 'e'.$line.'t'.dol_nboflines($line);exit;
-    $posy=$marge_basse + ($nbofline*3) + ($line1?3:0) + ($line2?3:0);
+    $nbofligne=dol_nboflines_bis($ligne,0,$outputlangs->charset_output);
+    //print 'nbofligne='.$nbofligne; exit;
+    //print 'e'.$ligne.'t'.dol_nboflines($ligne);exit;
+    $posy=$marge_basse + ($nbofligne*3) + ($ligne1?3:0) + ($ligne2?3:0);
 
-    if ($line)	// Free text
+    if ($ligne)	// Free text
     {
         $pdf->SetXY($marge_gauche,-$posy);
         $width=20000; $align='L';	// By default, ask a manual break: We use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text.
         if ($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT) { $width=200; $align='C'; }
-        $pdf->MultiCell($width, 3, $line, 0, $align, 0);
-        $posy-=($nbofline*3);	// 6 of ligne + 3 of MultiCell
+        $pdf->MultiCell($width, 3, $ligne, 0, $align, 0);
+        $posy-=($nbofligne*3);	// 6 of ligne + 3 of MultiCell
     }
 
     $pdf->SetY(-$posy);
     $pdf->line($marge_gauche, $page_hauteur-$posy, 200, $page_hauteur-$posy);
     $posy--;
 
-    if ($line1)
+    if ($ligne1)
     {
         $pdf->SetXY($marge_gauche,-$posy);
-        $pdf->MultiCell(200, 2, $line1, 0, 'C', 0);
+        $pdf->MultiCell(200, 2, $ligne1, 0, 'C', 0);
     }
 
-    if ($line2)
+    if ($ligne2)
     {
         $posy-=3;
         $pdf->SetXY($marge_gauche,-$posy);
-        $pdf->MultiCell(200, 2, $line2, 0, 'C', 0);
+        $pdf->MultiCell(200, 2, $ligne2, 0, 'C', 0);
     }
 
     // Show page nb only on iso languages
diff --git a/htdocs/lib/viewfiles.lib.php b/htdocs/lib/viewfiles.lib.php
index f444b9d0a96..a192a0ce1f5 100644
--- a/htdocs/lib/viewfiles.lib.php
+++ b/htdocs/lib/viewfiles.lib.php
@@ -53,13 +53,13 @@ function viewCsvFileContent($file_to_include='',$max_rows=0)
 	$count = 0;
 	
 	print '<table border="1">';
-	for ($line = fgetcsv($fic, 1024); (!feof($fic) && (($max_rows > 0)?($count<=$max_rows):1==1)); $line = fgetcsv($fic, 1024))
+	for ($ligne = fgetcsv($fic, 1024); (!feof($fic) && (($max_rows > 0)?($count<=$max_rows):1==1)); $ligne = fgetcsv($fic, 1024))
 	{
 		print '<tr>';
-		$j = sizeof($line);
+		$j = sizeof($ligne);
 		for ($i = 0; $i < $j; $i++)
 		{
-			print '<td>'.$line[$i].'</td>';
+			print '<td>'.$ligne[$i].'</td>';
 		}
 		print '</tr>';
 		$count++;
diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php
index 509642857aa..6d113735ab9 100644
--- a/htdocs/livraison/class/livraison.class.php
+++ b/htdocs/livraison/class/livraison.class.php
@@ -65,6 +65,7 @@ class Livraison extends CommonObject
 	function Livraison($DB)
 	{
 		$this->db = $DB;
+		$this->lignes = array(); // TODO deprecated
 		$this->lines = array();
 		$this->products = array();
 
@@ -136,19 +137,19 @@ class Livraison extends CommonObject
 				{
 					$commande = new Commande($this->db);
 					$commande->id = $this->commande_id;
-					$this->lines = $commande->fetch_lines();
+					$this->lignes = $commande->fetch_lines();
 				}
 
 
 				/*
 				 *  Insertion des produits dans la base
 				 */
-				for ($i = 0 ; $i < sizeof($this->lines) ; $i++)
+				for ($i = 0 ; $i < sizeof($this->lignes) ; $i++)
 				{
-					$origin_id=$this->lines[$i]->origin_line_id;
-					if (! $origin_id) $origin_id=$this->lines[$i]->commande_ligne_id;	// For backward compatibility
+					$origin_id=$this->lignes[$i]->origin_line_id;
+					if (! $origin_id) $origin_id=$this->lignes[$i]->commande_ligne_id;	// For backward compatibility
 
-					if (! $this->create_line(0, $origin_id, $this->lines[$i]->qty, $this->lines[$i]->fk_product, $this->lines[$i]->description))
+					if (! $this->create_line(0, $origin_id, $this->lignes[$i]->qty, $this->lignes[$i]->fk_product, $this->lignes[$i]->description))
 					{
 						$error++;
 					}
@@ -285,7 +286,7 @@ class Livraison extends CommonObject
 				/*
 				 * Lignes
 				 */
-				$result=$this->fetch_lines();
+				$result=$this->fetch_lignes();
 				if ($result < 0)
 				{
 					return -3;
@@ -490,19 +491,18 @@ class Livraison extends CommonObject
 		$expedition = new Expedition($this->db);
 		$result=$expedition->fetch($sending_id);
 
-		$this->lines = array();
+		$this->lignes = array();
 
-		for ($i = 0 ; $i < sizeof($expedition->lines) ; $i++)
+		for ($i = 0 ; $i < sizeof($expedition->lignes) ; $i++)
 		{
-			$line = new LivraisonLigne($this->db);
-			$line->origin_line_id    = $expedition->lines[$i]->origin_line_id;
-			$line->libelle           = $expedition->lines[$i]->libelle;
-			$line->description       = $expedition->lines[$i]->description;
-			$line->qty               = $expedition->lines[$i]->qty_shipped;
-			$line->fk_product        = $expedition->lines[$i]->fk_product;
-			$line->ref               = $expedition->lines[$i]->ref;
-			
-			$this->lines[$i] = $line;
+			$LivraisonLigne = new LivraisonLigne($this->db);
+			$LivraisonLigne->origin_line_id    = $expedition->lignes[$i]->origin_line_id;
+			$LivraisonLigne->libelle           = $expedition->lignes[$i]->libelle;
+			$LivraisonLigne->description       = $expedition->lignes[$i]->description;
+			$LivraisonLigne->qty               = $expedition->lignes[$i]->qty_shipped;
+			$LivraisonLigne->fk_product        = $expedition->lignes[$i]->fk_product;
+			$LivraisonLigne->ref               = $expedition->lignes[$i]->ref;
+			$this->lignes[$i] = $LivraisonLigne;
 		}
 
 		$this->origin               = $expedition->element;
@@ -524,13 +524,13 @@ class Livraison extends CommonObject
 	 */
 	function addline( $id, $qty )
 	{
-		$num = sizeof($this->lines);
-		$line = new LivraisonLigne($this->db);
+		$num = sizeof($this->lignes);
+		$ligne = new LivraisonLigne($this->db);
 
-		$line->commande_ligne_id = $id;
-		$line->qty = $qty;
+		$ligne->commande_ligne_id = $id;
+		$ligne->qty = $qty;
 
-		$this->lines[$num] = $line;
+		$this->lignes[$num] = $ligne;
 	}
 
 	/**
@@ -657,9 +657,9 @@ class Livraison extends CommonObject
 	 *
 	 *
 	 */
-	function fetch_lines()
+	function fetch_lignes()
 	{
-		$this->lines = array();
+		$this->lignes = array();
 
 		$sql = "SELECT ld.rowid, ld.fk_product, ld.description, ld.subprice, ld.total_ht, ld.qty as qty_shipped,";
 		$sql.= " cd.qty as qty_asked,";
@@ -669,7 +669,7 @@ class Livraison extends CommonObject
 		$sql.= " WHERE ld.fk_origin_line = cd.rowid";
 		$sql.= " AND ld.fk_livraison = ".$this->id;
 
-		dol_syslog("Livraison::fetch_lines sql=".$sql);
+		dol_syslog("Livraison::fetch_lignes sql=".$sql);
 		$resql = $this->db->query($sql);
 		if ($resql)
 		{
@@ -695,6 +695,7 @@ class Livraison extends CommonObject
 				$line->price          = $obj->price;
 				$line->total_ht       = $obj->total_ht;
 
+				$this->lignes[$i] = $line;	// TODO deprecated
 				$this->lines[$i] = $line;
 
 				$i++;
@@ -702,7 +703,7 @@ class Livraison extends CommonObject
 			$this->db->free($resql);
 		}
 
-		return $this->lines;
+		return $this->lignes;
 	}
 
 
@@ -781,17 +782,16 @@ class Livraison extends CommonObject
 		$this->note_public='SPECIMEN';
 
 		$i=0;
-		$line=new LivraisonLigne($this->db);
-		$line->fk_product     = $prodids[0];
-		$line->qty_asked      = 10;
-		$line->qty_shipped    = 9;
-		$line->ref            = 'REFPROD';
-		$line->label          = 'Specimen';
-		$line->description    = 'Description';
-		$line->price          = 100;
-		$line->total_ht       = 100;
-		
-		$this->lines[$i] = $line;
+		$ligne=new LivraisonLigne($this->db);
+		$ligne->fk_product     = $prodids[0];
+		$ligne->qty_asked      = 10;
+		$ligne->qty_shipped    = 9;
+		$ligne->ref            = 'REFPROD';
+		$ligne->label          = 'Specimen';
+		$ligne->description    = 'Description';
+		$ligne->price          = 100;
+		$ligne->total_ht       = 100;
+		$this->lignes[$i] = $ligne;
 	}
 
 	/**
diff --git a/htdocs/livraison/fiche.php b/htdocs/livraison/fiche.php
index c1a70a5a85d..2f46dedb3e9 100644
--- a/htdocs/livraison/fiche.php
+++ b/htdocs/livraison/fiche.php
@@ -268,12 +268,12 @@ if ($_GET["action"] == 'create')
 		 */
 		print '<br><table class="noborder" width="100%">';
 
-		$lines = $commande->fetch_lines(1);
+		$lignes = $commande->fetch_lines(1);
 
 		// Lecture des livraisons deja effectuees
 		$commande->livraison_array();
 
-		$num = sizeof($commande->lines);
+		$num = sizeof($commande->lignes);
 		$i = 0;
 
 		if ($num)
@@ -294,34 +294,34 @@ if ($_GET["action"] == 'create')
 		{
 			$product = new Product($db);
 
-			$line = $commande->lines[$i];
+			$ligne = $commande->lignes[$i];
 			$var=!$var;
 			print "<tr $bc[$var]>\n";
-			if ($line->fk_product > 0)
+			if ($ligne->fk_product > 0)
 			{
-				$product->fetch($line->fk_product);
+				$product->fetch($ligne->fk_product);
 				$product->load_stock();
 
 				print '<td>';
-				print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$line->fk_product.'">'.img_object($langs->trans("ShowProduct"),"product").' '.$product->ref.'</a> - '.$product->libelle;
-				if ($line->description) print nl2br($line->description);
+				print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$ligne->fk_product.'">'.img_object($langs->trans("ShowProduct"),"product").' '.$product->ref.'</a> - '.$product->libelle;
+				if ($ligne->description) print nl2br($ligne->description);
 				print '</td>';
 			}
 			else
 			{
-				print "<td>".nl2br($line->description)."</td>\n";
+				print "<td>".nl2br($ligne->description)."</td>\n";
 			}
 
-			print '<td align="center">'.$line->qty.'</td>';
+			print '<td align="center">'.$ligne->qty.'</td>';
 			/*
 			 *
 			 */
 			print '<td align="center">';
-			$quantite_livree = $commande->livraisons[$line->id];
+			$quantite_livree = $commande->livraisons[$ligne->id];
 			print $quantite_livree;;
 			print '</td>';
 
-			$quantite_commandee = $line->qty;
+			$quantite_commandee = $ligne->qty;
 			$quantite_a_livrer = $quantite_commandee - $quantite_livree;
 
 			if ($conf->stock->enabled)
@@ -331,7 +331,7 @@ if ($_GET["action"] == 'create')
 
 				// Quantite a livrer
 				print '<td align="center">';
-				print '<input name="idl'.$i.'" type="hidden" value="'.$line->id.'">';
+				print '<input name="idl'.$i.'" type="hidden" value="'.$ligne->id.'">';
 				print '<input name="qtyl'.$i.'" type="text" size="6" value="'.min($quantite_a_livrer, $stock).'">';
 				print '</td>';
 
@@ -349,7 +349,7 @@ if ($_GET["action"] == 'create')
 			{
 				// Quantite a livrer
 				print '<td align="center">';
-				print '<input name="idl'.$i.'" type="hidden" value="'.$line->id.'">';
+				print '<input name="idl'.$i.'" type="hidden" value="'.$ligne->id.'">';
 				print '<input name="qtyl'.$i.'" type="text" size="6" value="'.$quantite_a_livrer.'">';
 				print '</td>';
 			}
@@ -498,7 +498,7 @@ else
 			 * Lignes produits
 			 */
 
-			$num_prod = sizeof($delivery->lines);
+			$num_prod = sizeof($delivery->lignes);
 			$i = 0; $total = 0;
 
 			print '<table class="noborder" width="100%">';
@@ -519,40 +519,40 @@ else
 				$var=!$var;
 
 				print "<tr $bc[$var]>";
-				if ($delivery->lines[$i]->fk_product > 0)
+				if ($delivery->lignes[$i]->fk_product > 0)
 				{
 					$product = new Product($db);
-					$product->fetch($delivery->lines[$i]->fk_product);
+					$product->fetch($delivery->lignes[$i]->fk_product);
 
 					print '<td>';
 
 					// Affiche ligne produit
-					$text = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$delivery->lines[$i]->fk_product.'">';
-					if ($delivery->lines[$i]->fk_product_type==1) $text.= img_object($langs->trans('ShowService'),'service');
+					$text = '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$delivery->lignes[$i]->fk_product.'">';
+					if ($delivery->lignes[$i]->fk_product_type==1) $text.= img_object($langs->trans('ShowService'),'service');
 					else $text.= img_object($langs->trans('ShowProduct'),'product');
-					$text.= ' '.$delivery->lines[$i]->ref.'</a>';
-					$text.= ' - '.$delivery->lines[$i]->label;
-					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($delivery->lines[$i]->description));
+					$text.= ' '.$delivery->lignes[$i]->ref.'</a>';
+					$text.= ' - '.$delivery->lignes[$i]->label;
+					$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($delivery->lignes[$i]->description));
 					//print $description;
 					print $html->textwithtooltip($text,$description,3,'','',$i);
-					print_date_range($delivery->lines[$i]->date_start,$delivery->lines[$i]->date_end);
+					print_date_range($delivery->lignes[$i]->date_start,$delivery->lignes[$i]->date_end);
 					if ($conf->global->PRODUIT_DESC_IN_FORM)
 					{
-						print ($delivery->lines[$i]->description && $delivery->lines[$i]->description!=$delivery->lines[$i]->label)?'<br>'.dol_htmlentitiesbr($delivery->lines[$i]->description):'';
+						print ($delivery->lignes[$i]->description && $delivery->lignes[$i]->description!=$delivery->lignes[$i]->label)?'<br>'.dol_htmlentitiesbr($delivery->lignes[$i]->description):'';
 					}
 				}
 				else
 				{
 					print "<td>";
-					if ($delivery->lines[$i]->fk_product_type==1) $text = img_object($langs->trans('Service'),'service');
+					if ($delivery->lignes[$i]->fk_product_type==1) $text = img_object($langs->trans('Service'),'service');
 					else $text = img_object($langs->trans('Product'),'product');
-					print $text.' '.nl2br($delivery->lines[$i]->description);
+					print $text.' '.nl2br($delivery->lignes[$i]->description);
 					print_date_range($objp->date_start,$objp->date_end);
 					print "</td>\n";
 				}
 
-				print '<td align="center">'.$delivery->lines[$i]->qty_asked.'</td>';
-				print '<td align="center">'.$delivery->lines[$i]->qty_shipped.'</td>';
+				print '<td align="center">'.$delivery->lignes[$i]->qty_asked.'</td>';
+				print '<td align="center">'.$delivery->lignes[$i]->qty_shipped.'</td>';
 
 				print "</tr>";
 
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 836706d652e..2a2c180feba 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -116,16 +116,16 @@ function analyse_sql_and_script(&$var,$get)
 analyse_sql_and_script($_GET,1);
 analyse_sql_and_script($_POST,0);
 
-// This is to make Dolibarr working with Plesk. Does not work with IIS.
-set_include_path((isset($_SERVER["DOCUMENT_ROOT"])?$_SERVER["DOCUMENT_ROOT"]:'.').'/htdocs');
+// This is to make Dolibarr working with Plesk
+set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs');
 
 // Add real path in session name
 $realpath='';
 if ( preg_match('/^([^.]+)\/htdocs\//i', realpath($_SERVER["SCRIPT_FILENAME"]), $regs))	$realpath = isset($regs[1])?$regs[1]:'';
 
 // Init session. Name of session is specific to Dolibarr instance.
-$sessionname='DOLSESSID_'.md5($_SERVER["SERVER_NAME"].(isset($_SERVER["DOCUMENT_ROOT"])?$_SERVER["DOCUMENT_ROOT"]:'').$realpath);
-$sessiontimeout='DOLSESSTIMEOUT_'.md5($_SERVER["SERVER_NAME"].(isset($_SERVER["DOCUMENT_ROOT"])?$_SERVER["DOCUMENT_ROOT"]:'').$realpath);
+$sessionname='DOLSESSID_'.md5($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].$realpath);
+$sessiontimeout='DOLSESSTIMEOUT_'.md5($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].$realpath);
 if (! empty($_COOKIE[$sessiontimeout])) ini_set('session.gc_maxlifetime',$_COOKIE[$sessiontimeout]);
 session_name($sessionname);
 session_start();
diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php
index 0c726232467..d3de81c67ee 100644
--- a/htdocs/master.inc.php
+++ b/htdocs/master.inc.php
@@ -101,10 +101,9 @@ if (empty($dolibarr_main_data_root))
 }
 
 // Define some constants
-define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root);			// Filesystem core php (htdocs)
-define('DOL_DATA_ROOT', $dolibarr_main_data_root);					// Filesystem data (documents)
-define('DOL_CLASS_PATH', 'class/');									// Filesystem path to class dir
-define('DOL_CUSTOM_PATH', $dolibarr_main_document_root.'/custom');	// Filesystem path to custom dir
+define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root);		// Filesystem pages php (htdocs)
+define('DOL_DATA_ROOT', $dolibarr_main_data_root);				// Filesystem donnes (documents)
+define('DOL_CLASS_PATH', 'class/');								// Filsystem path to class dir
 // If dolibarr_main_url_root = auto (Hidden feature for developers only), we try to forge it.
 if ($dolibarr_main_url_root == 'auto' && ! empty($_SERVER["SCRIPT_URL"]) && ! empty($_SERVER["SCRIPT_URI"]))
 {
@@ -188,7 +187,7 @@ $conf->file->character_set_client=strtoupper($force_charset_do_notuse);
 $conf->file->cookie_cryptkey = empty($dolibarr_main_cookie_cryptkey)?'':$dolibarr_main_cookie_cryptkey;
 
 // Define array of document root directories
-$conf->file->dol_document_root=array(DOL_DOCUMENT_ROOT, DOL_CUSTOM_PATH);
+$conf->file->dol_document_root=array(DOL_DOCUMENT_ROOT);
 if (! empty($dolibarr_main_document_root_alt))
 {
 	// dolibarr_main_document_root_alt contains several directories
diff --git a/htdocs/paybox/lib/paybox.lib.php b/htdocs/paybox/lib/paybox.lib.php
index 66161f1a4a4..2a90ed791a9 100755
--- a/htdocs/paybox/lib/paybox.lib.php
+++ b/htdocs/paybox/lib/paybox.lib.php
@@ -242,58 +242,58 @@ function html_print_paybox_footer($fromcompany,$langs)
 	global $conf;
 
 	// Juridical status
-	$line1="";
+	$ligne1="";
 	if ($fromcompany->forme_juridique_code)
 	{
-		$line1.=($line1?" - ":"").$langs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
+		$ligne1.=($ligne1?" - ":"").$langs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
 	}
 	// Capital
 	if ($fromcompany->capital)
 	{
-		$line1.=($line1?" - ":"").$langs->transnoentities("CapitalOf",$fromcompany->capital)." ".$langs->transnoentities("Currency".$conf->monnaie);
+		$ligne1.=($ligne1?" - ":"").$langs->transnoentities("CapitalOf",$fromcompany->capital)." ".$langs->transnoentities("Currency".$conf->monnaie);
 	}
 	// Prof Id 1
 	if ($fromcompany->idprof1 && ($fromcompany->pays_code != 'FR' || ! $fromcompany->idprof2))
 	{
 		$field=$langs->transcountrynoentities("ProfId1",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line1.=($line1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof1);
+		$ligne1.=($ligne1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof1);
 	}
 	// Prof Id 2
 	if ($fromcompany->idprof2)
 	{
 		$field=$langs->transcountrynoentities("ProfId2",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line1.=($line1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof2);
+		$ligne1.=($ligne1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof2);
 	}
 
 	// Second line of company infos
-	$line2="";
+	$ligne2="";
 	// Prof Id 3
 	if ($fromcompany->idprof3)
 	{
 		$field=$langs->transcountrynoentities("ProfId3",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line2.=($line2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof3);
+		$ligne2.=($ligne2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof3);
 	}
 	// Prof Id 4
 	if ($fromcompany->idprof4)
 	{
 		$field=$langs->transcountrynoentities("ProfId4",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line2.=($line2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof4);
+		$ligne2.=($ligne2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof4);
 	}
 	// IntraCommunautary VAT
 	if ($fromcompany->tva_intra != '')
 	{
-		$line2.=($line2?" - ":"").$langs->transnoentities("VATIntraShort").": ".$langs->convToOutputCharset($fromcompany->tva_intra);
+		$ligne2.=($ligne2?" - ":"").$langs->transnoentities("VATIntraShort").": ".$langs->convToOutputCharset($fromcompany->tva_intra);
 	}
 
 	print '<br><br><hr>'."\n";
 	print '<center><font style="font-size: 10px;">'."\n";
 	print $fromcompany->nom.'<br>';
-	print $line1.'<br>';
-	print $line2;
+	print $ligne1.'<br>';
+	print $ligne2;
 	print '</font></center>'."\n";
 }
 
diff --git a/htdocs/paypal/lib/paypal.lib.php b/htdocs/paypal/lib/paypal.lib.php
index 3a321b8f644..4bed91f60ca 100755
--- a/htdocs/paypal/lib/paypal.lib.php
+++ b/htdocs/paypal/lib/paypal.lib.php
@@ -72,58 +72,58 @@ function html_print_paypal_footer($fromcompany,$langs)
 	global $conf;
 
 	// Juridical status
-	$line1="";
+	$ligne1="";
 	if ($fromcompany->forme_juridique_code)
 	{
-		$line1.=($line1?" - ":"").$langs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
+		$ligne1.=($ligne1?" - ":"").$langs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
 	}
 	// Capital
 	if ($fromcompany->capital)
 	{
-		$line1.=($line1?" - ":"").$langs->transnoentities("CapitalOf",$fromcompany->capital)." ".$langs->transnoentities("Currency".$conf->monnaie);
+		$ligne1.=($ligne1?" - ":"").$langs->transnoentities("CapitalOf",$fromcompany->capital)." ".$langs->transnoentities("Currency".$conf->monnaie);
 	}
 	// Prof Id 1
 	if ($fromcompany->idprof1 && ($fromcompany->pays_code != 'FR' || ! $fromcompany->idprof2))
 	{
 		$field=$langs->transcountrynoentities("ProfId1",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line1.=($line1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof1);
+		$ligne1.=($ligne1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof1);
 	}
 	// Prof Id 2
 	if ($fromcompany->idprof2)
 	{
 		$field=$langs->transcountrynoentities("ProfId2",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line1.=($line1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof2);
+		$ligne1.=($ligne1?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof2);
 	}
 
 	// Second line of company infos
-	$line2="";
+	$ligne2="";
 	// Prof Id 3
 	if ($fromcompany->idprof3)
 	{
 		$field=$langs->transcountrynoentities("ProfId3",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line2.=($line2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof3);
+		$ligne2.=($ligne2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof3);
 	}
 	// Prof Id 4
 	if ($fromcompany->idprof4)
 	{
 		$field=$langs->transcountrynoentities("ProfId4",$fromcompany->pays_code);
 		if (preg_match('/\((.*)\)/i',$field,$reg)) $field=$reg[1];
-		$line2.=($line2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof4);
+		$ligne2.=($ligne2?" - ":"").$field.": ".$langs->convToOutputCharset($fromcompany->idprof4);
 	}
 	// IntraCommunautary VAT
 	if ($fromcompany->tva_intra != '')
 	{
-		$line2.=($line2?" - ":"").$langs->transnoentities("VATIntraShort").": ".$langs->convToOutputCharset($fromcompany->tva_intra);
+		$ligne2.=($ligne2?" - ":"").$langs->transnoentities("VATIntraShort").": ".$langs->convToOutputCharset($fromcompany->tva_intra);
 	}
 
 	print '<br><br><hr>'."\n";
 	print '<center><font style="font-size: 10px;">'."\n";
 	print $fromcompany->nom.'<br>';
-	print $line1.'<br>';
-	print $line2;
+	print $ligne1.'<br>';
+	print $ligne2;
 	print '</font></center>'."\n";
 }
 
diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php
index 52af2e26ee8..2f530b8eac2 100644
--- a/htdocs/public/demo/index.php
+++ b/htdocs/public/demo/index.php
@@ -344,8 +344,8 @@ function llxHeaderVierge($title, $head = "")
     print "<title>".$title."</title>\n";
     print '<link rel="stylesheet" type="text/css" href="'.DOL_URL_ROOT.'/theme/eldy/style.css.php?lang='.$langs->defaultlang.'">'."\n";
     print '<!-- Includes for JQuery -->'."\n";
-    print '<script type="text/javascript" src="/includes/jquery/js/jquery-latest.min.js"></script>'."\n";
-    print '<script type="text/javascript" src="/includes/jquery/js/jquery-ui-latest.custom.min.js"></script>'."\n";
+    print '<script type="text/javascript" src="/includes/jquery/js/jquery-1.4.3.min.js"></script>'."\n";
+    print '<script type="text/javascript" src="/includes/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>'."\n";
     print '<script type="text/javascript" src="/includes/jquery/js/jquery.tablednd_0_5.js"></script>'."\n";
     if ($head) print $head."\n";
     print '<style type="text/css">';
diff --git a/htdocs/public/error-401.php b/htdocs/public/error-401.php
index 947367f7546..1d98a248aca 100644
--- a/htdocs/public/error-401.php
+++ b/htdocs/public/error-401.php
@@ -11,7 +11,7 @@
     Sorry. You are not allowed to access this resource.
 
     <br>
-    <?php print isset($_SERVER["HTTP_REFERER"])?'You come from '.$_SERVER["HTTP_REFERER"].'.':''; ?>
+    <?php print isset($_SERVER["HTTP_REFERER"])?'You come from '.$_SERVER["HTTP_REFERER"].'.':''; ?>
 
     <hr>
   </body>
diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
index 4383c648a87..fd8344f8596 100644
--- a/htdocs/societe/class/societe.class.php
+++ b/htdocs/societe/class/societe.class.php
@@ -1796,66 +1796,6 @@ class Societe extends CommonObject
 
             if (dol_strlen($chaine) != 14) return -1;
         }
-        
-        //Verify CIF/NIF/NIE if pays ES
-        //Returns: 1 if NIF ok, 2 if CIF ok, 3 if NIE ok, -1 if NIF bad, -2 if CIF bad, -3 if NIE bad, 0 if unexpected bad
-        if ($idprof == 1 && $soc->pays_code == 'ES')
-        {
-        	$string=trim($this->siren);
-            $string=preg_replace('/(\s)/','',$string);
-        	$string = strtoupper($string);
-        	
-   			for ($i = 0; $i < 9; $i ++)
-      			$num[$i] = substr($string, $i, 1);
-			
-      		//Check format
-   			if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $string))
-      			return 0;
-			
-      		//Check NIF
-   			if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $string))
-      			if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 0, 8) % 23, 1))
-         			return 1;
-      			else
-         			return -1;
-         			
-			//algorithm checking type code CIF
-   			$sum = $num[2] + $num[4] + $num[6];
-   			for ($i = 1; $i < 8; $i += 2)
-      			$sum += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]),1,1);
-   			$n = 10 - substr($sum, strlen($sum) - 1, 1);
-			
-   			//Chek special NIF
-   			if (preg_match('/^[KLM]{1}/', $string))
-      			if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 1, 8) % 23, 1))
-         			return 1;
-      			else
-         			return -1;
-			
-         	//Check CIF
-   			if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $string))
-      			if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1))
-         			return 2;
-      			else
-         			return -2;
-         			
-			//Check NIE T
-   			if (preg_match('/^[T]{1}/', $string))
-      			if ($num[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $string))
-         			return 3;
-      			else
-         			return -3;
-         			
-   			//Check NIE XYZ
-   			if (preg_match('/^[XYZ]{1}/', $string))
-      			if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $string), 0, 8) % 23, 1))
-         			return 3;
-      			else
-         			return -3;
-         			
-			//Can not be verified
-   			return -4;
-        }
 
         return $ok;
     }
@@ -1874,7 +1814,7 @@ class Societe extends CommonObject
         $url='';
         if ($idprof == 1 && $soc->pays_code == 'FR') $url='http://www.societe.com/cgi-bin/recherche?rncs='.$soc->siren;
         if ($idprof == 1 && $soc->pays_code == 'GB') $url='http://www.companieshouse.gov.uk/WebCHeck/findinfolink/';
-        if ($idprof == 1 && $soc->pays_code == 'ES') $url='http://www.e-informa.es/servlet/app/portal/ENTP/screen/SProducto/prod/ETIQUETA_EMPRESA/nif/'.$soc->siren;
+
         if ($url) return '<a target="_blank" href="'.$url.'">['.$langs->trans("Check").']</a>';
         return '';
     }
@@ -2126,14 +2066,6 @@ class Societe extends CommonObject
             if ($idprof==3) $formlength=5;		// 4 chiffres et 1 lettre depuis janvier
             if ($idprof==4) $formlength=32;		// No maximum as we need to include a town name in this id
         }
-        
-    	if ($this->pays_code == 'ES')
-        {
-            if ($idprof==1) $formlength=9; 	//CIF/NIF/NIE 9 digits
-            if ($idprof==2) $formlength=12; //NASS 12 digits without /
-            if ($idprof==3) $formlength=5;	//CNAE 5 digits
-            if ($idprof==4) $formlength=32;	//depend of college
-        }
         $selected=$preselected;
         if (! $selected && $idprof==1) $selected=$this->siren;
         if (! $selected && $idprof==2) $selected=$this->siret;
diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php
index edf4c5b21b8..d8e23dff30c 100644
--- a/htdocs/societe/document.php
+++ b/htdocs/societe/document.php
@@ -130,7 +130,7 @@ if ($socid > 0)
 
 
 		// Construit liste des fichiers
-		$filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$',$sortfield,(strtolower($sortorder)=='desc'?SORT_ASC:SORT_DESC),1);
+		$filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$',$sortfield,(strtolower($sortorder)=='desc'?SORT_ASC:SORT_DESC),3);
 		$totalsize=0;
 		foreach($filearray as $key => $file)
 		{
diff --git a/htdocs/theme/auguria/.cvsignore b/htdocs/theme/auguria/.cvsignore
index 98e6ef67fad..a92ea3e3f61 100644
--- a/htdocs/theme/auguria/.cvsignore
+++ b/htdocs/theme/auguria/.cvsignore
@@ -1 +1 @@
-*.db
+*.db
diff --git a/htdocs/theme/auguria/fckeditor/fck_dialog.css b/htdocs/theme/auguria/fckeditor/fck_dialog.css
index 4582b89bf81..53f16ef8d3c 100644
--- a/htdocs/theme/auguria/fckeditor/fck_dialog.css
+++ b/htdocs/theme/auguria/fckeditor/fck_dialog.css
@@ -1,402 +1,402 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the dialog boxes.
- */
-
-html, body
-{
-	background-color: transparent;
-	margin: 0px;
-	padding: 0px;
-}
-
-body
-{
-	padding: 10px;
-}
-
-body, td, input, select, textarea
-{
-	font-size: 11px;
-	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
-}
-
-body, .BackColor
-{
-	background-color: #f7f7f7;
-}
-
-.PopupBody
-{
-	height: 100%;
-	width: 100%;
-	overflow: hidden;
-	background-color: transparent;
-	padding: 0px;
-}
-
-#header
-{
-	cursor: move;
-}
-
-.PopupTitle
-{
-	font-weight: bold;
-	font-size: 14pt;
-	color: #504845;
-	background-color: #dedede;
-	padding: 3px 10px 3px 10px;
-}
-
-.PopupButtons
-{
-	position: absolute;
-	right: 0px;
-	left: 0px;
-	bottom: 0px;
-	border-top: #cec6b5 1px solid;
-	background-color: #DEDEDE;
-	padding: 7px 10px 7px 10px;
-}
-
-.Button
-{
-	border: #7a7261 1px solid;
-	color: #504845;
-	background-color: #cec6b5;
-}
-
-#btnOk
-{
-	width: 100px;
-}
-
-.DarkBackground
-{
-	background-color: #f2f2f2;
-}
-
-.LightBackground
-{
-	background-color: #ffffbe;
-}
-
-.PopupTitleBorder
-{
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTabArea
-{
-	color: #504845;
-	background-color: #DEDEDE;
-}
-
-.PopupTabEmptyArea
-{
-	padding-left: 10px ;
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTab, .PopupTabSelected
-{
-	border-right: #cec6b5 1px solid;
-	border-top: #cec6b5 1px solid;
-	border-left: #cec6b5 1px solid;
-	padding: 3px 5px 3px 5px;
-	color: #504845;
-}
-
-.PopupTab
-{
-	margin-top: 1px;
-	border-bottom: #cec6b5 1px solid;
-	cursor: pointer;
-	cursor: hand;
-}
-
-.PopupTabSelected
-{
-	font-weight:bold;
-	cursor: default;
-	padding-top: 4px;
-	border-bottom: #f1f1e3 1px solid;
-	background-color: #f7f7f7;
-}
-
-.PopupSelectionBox
-{
-	border: #a9a9a9 1px solid !important;
-	background-color: #dcdcdc !important;
-	cursor: pointer;
-	cursor: hand;
-}
-
-#tdBrowse
-{
-	vertical-align: bottom;
-}
-
-/**
- * Dialog frame related styles.
- */
-
-.contents
-{
-	position: absolute;
-	top: 2px;
-	left: 16px;
-	right: 16px;
-	bottom: 20px;
-	background-color: #f7f7f7;
-	overflow: hidden;
-	z-index: 1;
-}
-
-.tl, .tr, .tc, .bl, .br, .bc
-{
-	position: absolute;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-}
-
-* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
-{
-	background-image: url(images/sprites.gif);
-}
-
-.ml, .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.png);
-	background-repeat: repeat-y;
-}
-
-* html .ml, * html .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.rtl .ml, .rtl .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.rtl.png);
-	background-repeat: repeat-y;
-}
-
-* html .rtl .ml, * html .rtl .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.tl
-{
-	top: 0px;
-	left: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -16px;
-}
-
-.rtl .tl
-{
-	background-position: -16px -397px;
-}
-
-.tr
-{
-	top: 0px;
-	right: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -76px;
-}
-
-.rtl .tr
-{
-	background-position: -16px -457px;
-}
-
-.tc
-{
-	top: 0px;
-	right: 16px;
-	left: 16px;
-	height: 16px;
-	background-position: 0px -136px;
-	background-repeat: repeat-x;
-}
-
-.ml
-{
-	top: 16px;
-	left: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: 0px 0px;
-}
-
-.mr
-{
-	top: 16px;
-	right: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: -16px 0px;
-}
-
-.bl
-{
-	bottom: 0px;
-	left: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -196px;
-}
-
-.rtl .bl
-{
-	background-position: -16px -517px;
-}
-
-.br
-{
-	bottom: 0px;
-	right: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -263px;
-}
-
-.rtl .br
-{
-	background-position: -16px -584px;
-}
-
-.bc
-{
-	bottom: 0px;
-	right: 30px;
-	left: 30px;
-	height: 51px;
-	background-position: 0px -330px;
-	background-repeat: repeat-x;
-}
-
-/* For IE6. Do not change it. */
-* html .blocker
-{
-	position: absolute;
-	width: 100%;
-	height: 100%;
-	z-index: 12;
-	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
-}
-
-/* The layer used to cover the dialog when opening a child dialog. */
-.cover
-{
-	position: absolute;
-	top: 0px;
-	left: 14px;
-	right: 14px;
-	bottom: 18px;
-	z-index: 11;
-}
-
-#closeButton
-{
-	position: absolute;
-	right: 0px;
-	top: 0px;
-	margin-top: 5px;
-	margin-right: 10px;
-	width: 20px;
-	height: 20px;
-	cursor: pointer;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-	background-position: -16px -651px;
-}
-
-* html #closeButton
-{
-	cursor: hand;
-	background-image: url(images/sprites.gif);
-}
-
-.rtl #closeButton
-{
-	right: auto;
-	left: 10px;
-	margin-right: 0px;
-}
-
-#closeButton:hover
-{
-	background-position: -16px -687px;
-}
-
-#throbberBlock
-{
-	z-index: 10;
-}
-
-#throbberBlock div
-{
-	float: left;
-	width: 8px;
-	height: 9px;
-	margin-left: 2px;
-	margin-right: 2px;
-	font-size: 1px;	/* IE6 */
-}
-
-/*
-	Color Gradient Generator:
-	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
-*/
-
-.throbber_1
-{
-	background-color: #504845;
-}
-
-.throbber_2
-{
-	background-color: #736D6B;
-}
-
-.throbber_3
-{
-	background-color: #979391;
-}
-
-.throbber_4
-{
-	background-color: #BAB8B7;
-}
-
-.throbber_5
-{
-	background-color: #DEDEDE;
-}
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #504845;
+	background-color: #dedede;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #f2f2f2;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid !important;
+	background-color: #dcdcdc !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f7f7f7;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #504845;
+}
+
+.throbber_2
+{
+	background-color: #736D6B;
+}
+
+.throbber_3
+{
+	background-color: #979391;
+}
+
+.throbber_4
+{
+	background-color: #BAB8B7;
+}
+
+.throbber_5
+{
+	background-color: #DEDEDE;
+}
diff --git a/htdocs/theme/auguria/fckeditor/fck_dialog_ie6.js b/htdocs/theme/auguria/fckeditor/fck_dialog_ie6.js
index 2415bc21607..cd3cb75fddf 100644
--- a/htdocs/theme/auguria/fckeditor/fck_dialog_ie6.js
+++ b/htdocs/theme/auguria/fckeditor/fck_dialog_ie6.js
@@ -1,110 +1,110 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- */
-
-(function()
-{
-	// IE6 doens't handle absolute positioning properly (it is always in quirks
-	// mode). This function fixes the sizes and positions of many elements that
-	// compose the skin (this is skin specific).
-	var fixSizes = window.DoResizeFixes = function()
-	{
-		var fckDlg = window.document.body ;
-
-		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
-		{
-			var child = fckDlg.childNodes[i] ;
-			switch ( child.className )
-			{
-				case 'contents' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
-					break ;
-
-				case 'blocker' :
-				case 'cover' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
-					break ;
-
-				case 'tr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					break ;
-
-				case 'tc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
-					break ;
-
-				case 'ml' :
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'mr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'bl' :
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'br' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'bc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-			}
-		}
-	}
-
-	var closeButtonOver = function()
-	{
-		this.style.backgroundPosition = '-16px -687px' ;
-	} ;
-
-	var closeButtonOut = function()
-	{
-		this.style.backgroundPosition = '-16px -651px' ;
-	} ;
-
-	var fixCloseButton = function()
-	{
-		var closeButton = document.getElementById ( 'closeButton' ) ;
-
-		closeButton.onmouseover	= closeButtonOver ;
-		closeButton.onmouseout	= closeButtonOut ;
-	}
-
-	var onLoad = function()
-	{
-		fixSizes() ;
-		fixCloseButton() ;
-
-		window.attachEvent( 'onresize', fixSizes ) ;
-		window.detachEvent( 'onload', onLoad ) ;
-	}
-
-	window.attachEvent( 'onload', onLoad ) ;
-
-})() ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/htdocs/theme/auguria/fckeditor/fck_editor.css b/htdocs/theme/auguria/fckeditor/fck_editor.css
index 3452f3aef39..0862d375fe6 100644
--- a/htdocs/theme/auguria/fckeditor/fck_editor.css
+++ b/htdocs/theme/auguria/fckeditor/fck_editor.css
@@ -1,465 +1,465 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the editor IFRAME and Toolbar.
- */
-
-/*
-	### Basic Editor IFRAME Styles.
-*/
-
-body
-{
-	padding: 1px;
-	margin: 0;
-	background-color: #ffffff;
-}
-
-#xEditingArea
-{
-    border: #696969 1px solid;
-}
-
-.SourceField
-{
-    padding: 5px;
-    margin: 0px;
-    font-family: Monospace;
-}
-
-/*
-	Toolbar
-*/
-
-.TB_ToolbarSet, .TB_Expand, .TB_Collapse
-{
-    cursor: default;
-    background-color: #f7f7f7;
-}
-
-.TB_ToolbarSet
-{
-    border-top: #f7f7f7 1px outset;
-    border-bottom: #f7f7f7 1px outset;
-}
-
-.TB_ToolbarSet TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.TB_Toolbar
-{
-	height: 24px;
-    display: inline-table;	/* inline = Opera jumping buttons bug */
-}
-
-.TB_Separator
-{
-    width: 1px;
-    height: 16px;
-    margin: 2px;
-    background-color: #999966;
-}
-
-.TB_Start
-{
-    background-image: url(images/toolbar.start.gif);
-    margin: 2px;
-    width: 3px;
-    background-repeat: no-repeat;
-    height: 16px;
-}
-
-.TB_End
-{
-    display: none;
-}
-
-.TB_ExpandImg
-{
-    background-image: url(images/toolbar.expand.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_CollapseImg
-{
-    background-image: url(images/toolbar.collapse.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_SideBorder
-{
-    background-color: #696969;
-}
-
-.TB_Expand, .TB_Collapse
-{
-    padding: 2px 2px 2px 2px;
-    border: #f7f7f7 1px outset;
-}
-
-.TB_Collapse
-{
-    width: 5px;
-}
-
-.TB_Break
-{
-    height: 24px; /* IE needs the height to be set, otherwise no break */
-}
-
-/*
-	Toolbar Button
-*/
-
-.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
-{
-    border: #f7f7f7 1px solid; /* This is the default border */
-    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
-}
-
-.TB_Button_On
-{
-    border: #316ac5 1px solid;
-    background-color: #c1d2ee;
-}
-
-.TB_Button_On_Over, .TB_Button_Off_Over
-{
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
-
-.TB_Button_Off
-{
-    filter: alpha(opacity=70); /* IE */
-    opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Disabled
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 22px;
-}
-
-.TB_Button_Image
-{
-    overflow: hidden;
-    width: 16px;
-    height: 16px;
-    margin: 3px;
-    background-repeat: no-repeat;
-}
-
-.TB_Button_Image img
-{
-    position: relative;
-}
-
-.TB_Button_Off .TB_Button_Text
-{
-   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
-}
-
-.TB_ConnectionLine
-{
-    background-color: #ffffff;
-    height: 1px;
-    margin-left: 1px;   /* ltr */
-    margin-right: 1px;  /* rtl */
-}
-
-.TB_Text
-{
-	height: 22px;
-}
-
-.TB_Button_Off .TB_Text
-{
-   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
-}
-
-.TB_Button_On_Over .TB_Text
-{
-   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
-}
-
-/*
-	Menu
-*/
-
-.MN_Menu
-{
-    border: 1px solid #8f8f73;
-    padding: 2px;
-    background-color: #ffffff;
-    cursor: default;
-}
-
-.MN_Menu, .MN_Menu .MN_Label
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.MN_Item_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 20px;
-}
-
-.MN_Icon
-{
-    background-color: #dedede;
-    text-align: center;
-    height: 20px;
-}
-
-.MN_Label
-{
-    padding-left: 3px;
-    padding-right: 3px;
-}
-
-.MN_Separator
-{
-    height: 3px;
-}
-
-.MN_Separator_Line
-{
-    border-top: #b9b99d 1px solid;
-}
-
-.MN_Item .MN_Icon IMG
-{
-    filter: alpha(opacity=70);
-    opacity: 0.70;
-}
-
-.MN_Item_Over
-{
-    color: #ffffff;
-    background-color: #8a857d;
-}
-
-.MN_Item_Over .MN_Icon
-{
-    background-color: #6c6761;
-}
-
-.MN_Item_Disabled IMG
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.MN_Item_Disabled .MN_Label
-{
-    color: #b7b7b7;
-}
-
-.MN_Arrow
-{
-    padding-right: 3px;
-    padding-left: 3px;
-}
-
-.MN_ConnectionLine
-{
-    background-color: #ffffff;
-}
-
-.Menu .TB_Button_On, .Menu .TB_Button_On_Over
-{
-    border: #8f8f73 1px solid;
-    background-color: #ffffff;
-}
-
-/*
-	### Panel Styles
-*/
-
-.FCK_Panel
-{
-    border: #8f8f73 1px solid;
-    padding: 2px;
-    background-color: #ffffff;
-}
-
-.FCK_Panel, .FCK_Panel TD
-{
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-    font-size: 11px;
-}
-
-/*
-	### Special Combos
-*/
-
-.SC_Panel
-{
-    overflow: auto;
-    white-space: nowrap;
-    cursor: default;
-    border: 1px solid #8f8f73;
-    padding-left: 2px;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #f7f7f7 1px outset;
+    border-bottom: #f7f7f7 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #f7f7f7 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #f7f7f7 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #dedede;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
     padding-right: 2px;
-    background-color: #ffffff;
-}
-
-.SC_Panel, .SC_Panel TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.SC_Item, .SC_ItemSelected
-{
-    margin-top: 2px;
-    margin-bottom: 2px;
-    background-position: left center;
-    padding-left: 11px;
-    padding-right: 3px;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    background-repeat: no-repeat;
-    border: #dddddd 1px solid;
-}
-
-.SC_Item *, .SC_ItemSelected *
-{
-    margin-top: 0px;
-    margin-bottom: 0px;
-}
-
-.SC_ItemSelected
-{
-    border: #9a9afb 1px solid;
-    background-image: url(images/toolbar.arrowright.gif);
-}
-
-.SC_ItemOver
-{
-    border: #404040 1px solid;
-}
-
-.SC_Field
-{
-    border: #b7b7a6 1px solid;
-    cursor: default;
-}
-
-.SC_FieldCaption
-{
-    overflow: visible;
-    padding-right: 5px;
-    padding-left: 5px;
-    opacity: 0.75; /* Safari, Opera and Mozilla */
-    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
-    height: 23px;
-    background-color: #f7f7f7;
-}
-
-.SC_FieldLabel
-{
-    white-space: nowrap;
-    padding: 2px;
-    width: 100%;
-    cursor: default;
-    background-color: #ffffff;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-
-.SC_FieldButton
-{
-    background-position: center center;
-    background-image: url(images/toolbar.buttonarrow.gif);
-    border-left: #b7b7a6 1px solid;
-    width: 14px;
-    background-repeat: no-repeat;
-}
-
-.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
-{
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
-}
-
-.SC_FieldOver
-{
-    border: #316ac5 1px solid;
-}
-
-.SC_FieldOver .SC_FieldButton
-{
-    border-left: #316ac5 1px solid;
-}
-
-/*
-	### Color Selector Panel
-*/
-
-.ColorBoxBorder
-{
-    border: #808080 1px solid;
-    position: static;
-}
-
-.ColorBox
-{
-    font-size: 1px;
-    width: 10px;
-    position: static;
-    height: 10px;
-}
-
-.ColorDeselected, .ColorSelected
-{
-    cursor: default;
-}
-
-.ColorDeselected
-{
-    border: #ffffff 1px solid;
-    padding: 2px;
-    float: left;
-}
-
-.ColorSelected
-{
-    border: #316ac5 1px solid;
-    padding: 2px;
-    float: left;
-    background-color: #c1d2ee;
-}
+    background-color: #ffffff;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #404040 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #316ac5 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c1d2ee;
+}
diff --git a/htdocs/theme/common/.cvsignore b/htdocs/theme/common/.cvsignore
index 98e6ef67fad..a92ea3e3f61 100644
--- a/htdocs/theme/common/.cvsignore
+++ b/htdocs/theme/common/.cvsignore
@@ -1 +1 @@
-*.db
+*.db
diff --git a/htdocs/theme/common/mime/.cvsignore b/htdocs/theme/common/mime/.cvsignore
index 98e6ef67fad..a92ea3e3f61 100644
--- a/htdocs/theme/common/mime/.cvsignore
+++ b/htdocs/theme/common/mime/.cvsignore
@@ -1 +1 @@
-*.db
+*.db
diff --git a/htdocs/theme/common/treemenu/.cvsignore b/htdocs/theme/common/treemenu/.cvsignore
index 78d24c23930..020f3864407 100644
--- a/htdocs/theme/common/treemenu/.cvsignore
+++ b/htdocs/theme/common/treemenu/.cvsignore
@@ -1,2 +1,2 @@
-*.db
-*.db
+*.db
+*.db
diff --git a/htdocs/theme/eldy/fckeditor/fck_dialog.css b/htdocs/theme/eldy/fckeditor/fck_dialog.css
index 4582b89bf81..53f16ef8d3c 100644
--- a/htdocs/theme/eldy/fckeditor/fck_dialog.css
+++ b/htdocs/theme/eldy/fckeditor/fck_dialog.css
@@ -1,402 +1,402 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the dialog boxes.
- */
-
-html, body
-{
-	background-color: transparent;
-	margin: 0px;
-	padding: 0px;
-}
-
-body
-{
-	padding: 10px;
-}
-
-body, td, input, select, textarea
-{
-	font-size: 11px;
-	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
-}
-
-body, .BackColor
-{
-	background-color: #f7f7f7;
-}
-
-.PopupBody
-{
-	height: 100%;
-	width: 100%;
-	overflow: hidden;
-	background-color: transparent;
-	padding: 0px;
-}
-
-#header
-{
-	cursor: move;
-}
-
-.PopupTitle
-{
-	font-weight: bold;
-	font-size: 14pt;
-	color: #504845;
-	background-color: #dedede;
-	padding: 3px 10px 3px 10px;
-}
-
-.PopupButtons
-{
-	position: absolute;
-	right: 0px;
-	left: 0px;
-	bottom: 0px;
-	border-top: #cec6b5 1px solid;
-	background-color: #DEDEDE;
-	padding: 7px 10px 7px 10px;
-}
-
-.Button
-{
-	border: #7a7261 1px solid;
-	color: #504845;
-	background-color: #cec6b5;
-}
-
-#btnOk
-{
-	width: 100px;
-}
-
-.DarkBackground
-{
-	background-color: #f2f2f2;
-}
-
-.LightBackground
-{
-	background-color: #ffffbe;
-}
-
-.PopupTitleBorder
-{
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTabArea
-{
-	color: #504845;
-	background-color: #DEDEDE;
-}
-
-.PopupTabEmptyArea
-{
-	padding-left: 10px ;
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTab, .PopupTabSelected
-{
-	border-right: #cec6b5 1px solid;
-	border-top: #cec6b5 1px solid;
-	border-left: #cec6b5 1px solid;
-	padding: 3px 5px 3px 5px;
-	color: #504845;
-}
-
-.PopupTab
-{
-	margin-top: 1px;
-	border-bottom: #cec6b5 1px solid;
-	cursor: pointer;
-	cursor: hand;
-}
-
-.PopupTabSelected
-{
-	font-weight:bold;
-	cursor: default;
-	padding-top: 4px;
-	border-bottom: #f1f1e3 1px solid;
-	background-color: #f7f7f7;
-}
-
-.PopupSelectionBox
-{
-	border: #a9a9a9 1px solid !important;
-	background-color: #dcdcdc !important;
-	cursor: pointer;
-	cursor: hand;
-}
-
-#tdBrowse
-{
-	vertical-align: bottom;
-}
-
-/**
- * Dialog frame related styles.
- */
-
-.contents
-{
-	position: absolute;
-	top: 2px;
-	left: 16px;
-	right: 16px;
-	bottom: 20px;
-	background-color: #f7f7f7;
-	overflow: hidden;
-	z-index: 1;
-}
-
-.tl, .tr, .tc, .bl, .br, .bc
-{
-	position: absolute;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-}
-
-* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
-{
-	background-image: url(images/sprites.gif);
-}
-
-.ml, .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.png);
-	background-repeat: repeat-y;
-}
-
-* html .ml, * html .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.rtl .ml, .rtl .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.rtl.png);
-	background-repeat: repeat-y;
-}
-
-* html .rtl .ml, * html .rtl .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.tl
-{
-	top: 0px;
-	left: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -16px;
-}
-
-.rtl .tl
-{
-	background-position: -16px -397px;
-}
-
-.tr
-{
-	top: 0px;
-	right: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -76px;
-}
-
-.rtl .tr
-{
-	background-position: -16px -457px;
-}
-
-.tc
-{
-	top: 0px;
-	right: 16px;
-	left: 16px;
-	height: 16px;
-	background-position: 0px -136px;
-	background-repeat: repeat-x;
-}
-
-.ml
-{
-	top: 16px;
-	left: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: 0px 0px;
-}
-
-.mr
-{
-	top: 16px;
-	right: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: -16px 0px;
-}
-
-.bl
-{
-	bottom: 0px;
-	left: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -196px;
-}
-
-.rtl .bl
-{
-	background-position: -16px -517px;
-}
-
-.br
-{
-	bottom: 0px;
-	right: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -263px;
-}
-
-.rtl .br
-{
-	background-position: -16px -584px;
-}
-
-.bc
-{
-	bottom: 0px;
-	right: 30px;
-	left: 30px;
-	height: 51px;
-	background-position: 0px -330px;
-	background-repeat: repeat-x;
-}
-
-/* For IE6. Do not change it. */
-* html .blocker
-{
-	position: absolute;
-	width: 100%;
-	height: 100%;
-	z-index: 12;
-	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
-}
-
-/* The layer used to cover the dialog when opening a child dialog. */
-.cover
-{
-	position: absolute;
-	top: 0px;
-	left: 14px;
-	right: 14px;
-	bottom: 18px;
-	z-index: 11;
-}
-
-#closeButton
-{
-	position: absolute;
-	right: 0px;
-	top: 0px;
-	margin-top: 5px;
-	margin-right: 10px;
-	width: 20px;
-	height: 20px;
-	cursor: pointer;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-	background-position: -16px -651px;
-}
-
-* html #closeButton
-{
-	cursor: hand;
-	background-image: url(images/sprites.gif);
-}
-
-.rtl #closeButton
-{
-	right: auto;
-	left: 10px;
-	margin-right: 0px;
-}
-
-#closeButton:hover
-{
-	background-position: -16px -687px;
-}
-
-#throbberBlock
-{
-	z-index: 10;
-}
-
-#throbberBlock div
-{
-	float: left;
-	width: 8px;
-	height: 9px;
-	margin-left: 2px;
-	margin-right: 2px;
-	font-size: 1px;	/* IE6 */
-}
-
-/*
-	Color Gradient Generator:
-	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
-*/
-
-.throbber_1
-{
-	background-color: #504845;
-}
-
-.throbber_2
-{
-	background-color: #736D6B;
-}
-
-.throbber_3
-{
-	background-color: #979391;
-}
-
-.throbber_4
-{
-	background-color: #BAB8B7;
-}
-
-.throbber_5
-{
-	background-color: #DEDEDE;
-}
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #504845;
+	background-color: #dedede;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #f2f2f2;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid !important;
+	background-color: #dcdcdc !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f7f7f7;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #504845;
+}
+
+.throbber_2
+{
+	background-color: #736D6B;
+}
+
+.throbber_3
+{
+	background-color: #979391;
+}
+
+.throbber_4
+{
+	background-color: #BAB8B7;
+}
+
+.throbber_5
+{
+	background-color: #DEDEDE;
+}
diff --git a/htdocs/theme/eldy/fckeditor/fck_dialog_ie6.js b/htdocs/theme/eldy/fckeditor/fck_dialog_ie6.js
index 2415bc21607..cd3cb75fddf 100644
--- a/htdocs/theme/eldy/fckeditor/fck_dialog_ie6.js
+++ b/htdocs/theme/eldy/fckeditor/fck_dialog_ie6.js
@@ -1,110 +1,110 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- */
-
-(function()
-{
-	// IE6 doens't handle absolute positioning properly (it is always in quirks
-	// mode). This function fixes the sizes and positions of many elements that
-	// compose the skin (this is skin specific).
-	var fixSizes = window.DoResizeFixes = function()
-	{
-		var fckDlg = window.document.body ;
-
-		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
-		{
-			var child = fckDlg.childNodes[i] ;
-			switch ( child.className )
-			{
-				case 'contents' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
-					break ;
-
-				case 'blocker' :
-				case 'cover' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
-					break ;
-
-				case 'tr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					break ;
-
-				case 'tc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
-					break ;
-
-				case 'ml' :
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'mr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'bl' :
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'br' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'bc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-			}
-		}
-	}
-
-	var closeButtonOver = function()
-	{
-		this.style.backgroundPosition = '-16px -687px' ;
-	} ;
-
-	var closeButtonOut = function()
-	{
-		this.style.backgroundPosition = '-16px -651px' ;
-	} ;
-
-	var fixCloseButton = function()
-	{
-		var closeButton = document.getElementById ( 'closeButton' ) ;
-
-		closeButton.onmouseover	= closeButtonOver ;
-		closeButton.onmouseout	= closeButtonOut ;
-	}
-
-	var onLoad = function()
-	{
-		fixSizes() ;
-		fixCloseButton() ;
-
-		window.attachEvent( 'onresize', fixSizes ) ;
-		window.detachEvent( 'onload', onLoad ) ;
-	}
-
-	window.attachEvent( 'onload', onLoad ) ;
-
-})() ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/htdocs/theme/eldy/fckeditor/fck_editor.css b/htdocs/theme/eldy/fckeditor/fck_editor.css
index 3452f3aef39..0862d375fe6 100644
--- a/htdocs/theme/eldy/fckeditor/fck_editor.css
+++ b/htdocs/theme/eldy/fckeditor/fck_editor.css
@@ -1,465 +1,465 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the editor IFRAME and Toolbar.
- */
-
-/*
-	### Basic Editor IFRAME Styles.
-*/
-
-body
-{
-	padding: 1px;
-	margin: 0;
-	background-color: #ffffff;
-}
-
-#xEditingArea
-{
-    border: #696969 1px solid;
-}
-
-.SourceField
-{
-    padding: 5px;
-    margin: 0px;
-    font-family: Monospace;
-}
-
-/*
-	Toolbar
-*/
-
-.TB_ToolbarSet, .TB_Expand, .TB_Collapse
-{
-    cursor: default;
-    background-color: #f7f7f7;
-}
-
-.TB_ToolbarSet
-{
-    border-top: #f7f7f7 1px outset;
-    border-bottom: #f7f7f7 1px outset;
-}
-
-.TB_ToolbarSet TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.TB_Toolbar
-{
-	height: 24px;
-    display: inline-table;	/* inline = Opera jumping buttons bug */
-}
-
-.TB_Separator
-{
-    width: 1px;
-    height: 16px;
-    margin: 2px;
-    background-color: #999966;
-}
-
-.TB_Start
-{
-    background-image: url(images/toolbar.start.gif);
-    margin: 2px;
-    width: 3px;
-    background-repeat: no-repeat;
-    height: 16px;
-}
-
-.TB_End
-{
-    display: none;
-}
-
-.TB_ExpandImg
-{
-    background-image: url(images/toolbar.expand.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_CollapseImg
-{
-    background-image: url(images/toolbar.collapse.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_SideBorder
-{
-    background-color: #696969;
-}
-
-.TB_Expand, .TB_Collapse
-{
-    padding: 2px 2px 2px 2px;
-    border: #f7f7f7 1px outset;
-}
-
-.TB_Collapse
-{
-    width: 5px;
-}
-
-.TB_Break
-{
-    height: 24px; /* IE needs the height to be set, otherwise no break */
-}
-
-/*
-	Toolbar Button
-*/
-
-.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
-{
-    border: #f7f7f7 1px solid; /* This is the default border */
-    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
-}
-
-.TB_Button_On
-{
-    border: #316ac5 1px solid;
-    background-color: #c1d2ee;
-}
-
-.TB_Button_On_Over, .TB_Button_Off_Over
-{
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
-
-.TB_Button_Off
-{
-    filter: alpha(opacity=70); /* IE */
-    opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Disabled
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 22px;
-}
-
-.TB_Button_Image
-{
-    overflow: hidden;
-    width: 16px;
-    height: 16px;
-    margin: 3px;
-    background-repeat: no-repeat;
-}
-
-.TB_Button_Image img
-{
-    position: relative;
-}
-
-.TB_Button_Off .TB_Button_Text
-{
-   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
-}
-
-.TB_ConnectionLine
-{
-    background-color: #ffffff;
-    height: 1px;
-    margin-left: 1px;   /* ltr */
-    margin-right: 1px;  /* rtl */
-}
-
-.TB_Text
-{
-	height: 22px;
-}
-
-.TB_Button_Off .TB_Text
-{
-   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
-}
-
-.TB_Button_On_Over .TB_Text
-{
-   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
-}
-
-/*
-	Menu
-*/
-
-.MN_Menu
-{
-    border: 1px solid #8f8f73;
-    padding: 2px;
-    background-color: #ffffff;
-    cursor: default;
-}
-
-.MN_Menu, .MN_Menu .MN_Label
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.MN_Item_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 20px;
-}
-
-.MN_Icon
-{
-    background-color: #dedede;
-    text-align: center;
-    height: 20px;
-}
-
-.MN_Label
-{
-    padding-left: 3px;
-    padding-right: 3px;
-}
-
-.MN_Separator
-{
-    height: 3px;
-}
-
-.MN_Separator_Line
-{
-    border-top: #b9b99d 1px solid;
-}
-
-.MN_Item .MN_Icon IMG
-{
-    filter: alpha(opacity=70);
-    opacity: 0.70;
-}
-
-.MN_Item_Over
-{
-    color: #ffffff;
-    background-color: #8a857d;
-}
-
-.MN_Item_Over .MN_Icon
-{
-    background-color: #6c6761;
-}
-
-.MN_Item_Disabled IMG
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.MN_Item_Disabled .MN_Label
-{
-    color: #b7b7b7;
-}
-
-.MN_Arrow
-{
-    padding-right: 3px;
-    padding-left: 3px;
-}
-
-.MN_ConnectionLine
-{
-    background-color: #ffffff;
-}
-
-.Menu .TB_Button_On, .Menu .TB_Button_On_Over
-{
-    border: #8f8f73 1px solid;
-    background-color: #ffffff;
-}
-
-/*
-	### Panel Styles
-*/
-
-.FCK_Panel
-{
-    border: #8f8f73 1px solid;
-    padding: 2px;
-    background-color: #ffffff;
-}
-
-.FCK_Panel, .FCK_Panel TD
-{
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-    font-size: 11px;
-}
-
-/*
-	### Special Combos
-*/
-
-.SC_Panel
-{
-    overflow: auto;
-    white-space: nowrap;
-    cursor: default;
-    border: 1px solid #8f8f73;
-    padding-left: 2px;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #f7f7f7 1px outset;
+    border-bottom: #f7f7f7 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #f7f7f7 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #f7f7f7 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #dedede;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
     padding-right: 2px;
-    background-color: #ffffff;
-}
-
-.SC_Panel, .SC_Panel TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.SC_Item, .SC_ItemSelected
-{
-    margin-top: 2px;
-    margin-bottom: 2px;
-    background-position: left center;
-    padding-left: 11px;
-    padding-right: 3px;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    background-repeat: no-repeat;
-    border: #dddddd 1px solid;
-}
-
-.SC_Item *, .SC_ItemSelected *
-{
-    margin-top: 0px;
-    margin-bottom: 0px;
-}
-
-.SC_ItemSelected
-{
-    border: #9a9afb 1px solid;
-    background-image: url(images/toolbar.arrowright.gif);
-}
-
-.SC_ItemOver
-{
-    border: #404040 1px solid;
-}
-
-.SC_Field
-{
-    border: #b7b7a6 1px solid;
-    cursor: default;
-}
-
-.SC_FieldCaption
-{
-    overflow: visible;
-    padding-right: 5px;
-    padding-left: 5px;
-    opacity: 0.75; /* Safari, Opera and Mozilla */
-    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
-    height: 23px;
-    background-color: #f7f7f7;
-}
-
-.SC_FieldLabel
-{
-    white-space: nowrap;
-    padding: 2px;
-    width: 100%;
-    cursor: default;
-    background-color: #ffffff;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-
-.SC_FieldButton
-{
-    background-position: center center;
-    background-image: url(images/toolbar.buttonarrow.gif);
-    border-left: #b7b7a6 1px solid;
-    width: 14px;
-    background-repeat: no-repeat;
-}
-
-.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
-{
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
-}
-
-.SC_FieldOver
-{
-    border: #316ac5 1px solid;
-}
-
-.SC_FieldOver .SC_FieldButton
-{
-    border-left: #316ac5 1px solid;
-}
-
-/*
-	### Color Selector Panel
-*/
-
-.ColorBoxBorder
-{
-    border: #808080 1px solid;
-    position: static;
-}
-
-.ColorBox
-{
-    font-size: 1px;
-    width: 10px;
-    position: static;
-    height: 10px;
-}
-
-.ColorDeselected, .ColorSelected
-{
-    cursor: default;
-}
-
-.ColorDeselected
-{
-    border: #ffffff 1px solid;
-    padding: 2px;
-    float: left;
-}
-
-.ColorSelected
-{
-    border: #316ac5 1px solid;
-    padding: 2px;
-    float: left;
-    background-color: #c1d2ee;
-}
+    background-color: #ffffff;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #404040 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #316ac5 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c1d2ee;
+}
diff --git a/htdocs/theme/eldy/fckeditor/images/.cvsignore b/htdocs/theme/eldy/fckeditor/images/.cvsignore
index 78d24c23930..020f3864407 100644
--- a/htdocs/theme/eldy/fckeditor/images/.cvsignore
+++ b/htdocs/theme/eldy/fckeditor/images/.cvsignore
@@ -1,2 +1,2 @@
-*.db
-*.db
+*.db
+*.db
diff --git a/htdocs/theme/eldy/img/.cvsignore b/htdocs/theme/eldy/img/.cvsignore
index 98e6ef67fad..a92ea3e3f61 100644
--- a/htdocs/theme/eldy/img/.cvsignore
+++ b/htdocs/theme/eldy/img/.cvsignore
@@ -1 +1 @@
-*.db
+*.db
diff --git a/htdocs/theme/freelug/fckeditor/fck_dialog.css b/htdocs/theme/freelug/fckeditor/fck_dialog.css
index 4582b89bf81..53f16ef8d3c 100644
--- a/htdocs/theme/freelug/fckeditor/fck_dialog.css
+++ b/htdocs/theme/freelug/fckeditor/fck_dialog.css
@@ -1,402 +1,402 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the dialog boxes.
- */
-
-html, body
-{
-	background-color: transparent;
-	margin: 0px;
-	padding: 0px;
-}
-
-body
-{
-	padding: 10px;
-}
-
-body, td, input, select, textarea
-{
-	font-size: 11px;
-	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
-}
-
-body, .BackColor
-{
-	background-color: #f7f7f7;
-}
-
-.PopupBody
-{
-	height: 100%;
-	width: 100%;
-	overflow: hidden;
-	background-color: transparent;
-	padding: 0px;
-}
-
-#header
-{
-	cursor: move;
-}
-
-.PopupTitle
-{
-	font-weight: bold;
-	font-size: 14pt;
-	color: #504845;
-	background-color: #dedede;
-	padding: 3px 10px 3px 10px;
-}
-
-.PopupButtons
-{
-	position: absolute;
-	right: 0px;
-	left: 0px;
-	bottom: 0px;
-	border-top: #cec6b5 1px solid;
-	background-color: #DEDEDE;
-	padding: 7px 10px 7px 10px;
-}
-
-.Button
-{
-	border: #7a7261 1px solid;
-	color: #504845;
-	background-color: #cec6b5;
-}
-
-#btnOk
-{
-	width: 100px;
-}
-
-.DarkBackground
-{
-	background-color: #f2f2f2;
-}
-
-.LightBackground
-{
-	background-color: #ffffbe;
-}
-
-.PopupTitleBorder
-{
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTabArea
-{
-	color: #504845;
-	background-color: #DEDEDE;
-}
-
-.PopupTabEmptyArea
-{
-	padding-left: 10px ;
-	border-bottom: #cec6b5 1px solid;
-}
-
-.PopupTab, .PopupTabSelected
-{
-	border-right: #cec6b5 1px solid;
-	border-top: #cec6b5 1px solid;
-	border-left: #cec6b5 1px solid;
-	padding: 3px 5px 3px 5px;
-	color: #504845;
-}
-
-.PopupTab
-{
-	margin-top: 1px;
-	border-bottom: #cec6b5 1px solid;
-	cursor: pointer;
-	cursor: hand;
-}
-
-.PopupTabSelected
-{
-	font-weight:bold;
-	cursor: default;
-	padding-top: 4px;
-	border-bottom: #f1f1e3 1px solid;
-	background-color: #f7f7f7;
-}
-
-.PopupSelectionBox
-{
-	border: #a9a9a9 1px solid !important;
-	background-color: #dcdcdc !important;
-	cursor: pointer;
-	cursor: hand;
-}
-
-#tdBrowse
-{
-	vertical-align: bottom;
-}
-
-/**
- * Dialog frame related styles.
- */
-
-.contents
-{
-	position: absolute;
-	top: 2px;
-	left: 16px;
-	right: 16px;
-	bottom: 20px;
-	background-color: #f7f7f7;
-	overflow: hidden;
-	z-index: 1;
-}
-
-.tl, .tr, .tc, .bl, .br, .bc
-{
-	position: absolute;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-}
-
-* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
-{
-	background-image: url(images/sprites.gif);
-}
-
-.ml, .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.png);
-	background-repeat: repeat-y;
-}
-
-* html .ml, * html .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.rtl .ml, .rtl .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.rtl.png);
-	background-repeat: repeat-y;
-}
-
-* html .rtl .ml, * html .rtl .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.tl
-{
-	top: 0px;
-	left: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -16px;
-}
-
-.rtl .tl
-{
-	background-position: -16px -397px;
-}
-
-.tr
-{
-	top: 0px;
-	right: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -76px;
-}
-
-.rtl .tr
-{
-	background-position: -16px -457px;
-}
-
-.tc
-{
-	top: 0px;
-	right: 16px;
-	left: 16px;
-	height: 16px;
-	background-position: 0px -136px;
-	background-repeat: repeat-x;
-}
-
-.ml
-{
-	top: 16px;
-	left: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: 0px 0px;
-}
-
-.mr
-{
-	top: 16px;
-	right: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: -16px 0px;
-}
-
-.bl
-{
-	bottom: 0px;
-	left: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -196px;
-}
-
-.rtl .bl
-{
-	background-position: -16px -517px;
-}
-
-.br
-{
-	bottom: 0px;
-	right: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -263px;
-}
-
-.rtl .br
-{
-	background-position: -16px -584px;
-}
-
-.bc
-{
-	bottom: 0px;
-	right: 30px;
-	left: 30px;
-	height: 51px;
-	background-position: 0px -330px;
-	background-repeat: repeat-x;
-}
-
-/* For IE6. Do not change it. */
-* html .blocker
-{
-	position: absolute;
-	width: 100%;
-	height: 100%;
-	z-index: 12;
-	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
-}
-
-/* The layer used to cover the dialog when opening a child dialog. */
-.cover
-{
-	position: absolute;
-	top: 0px;
-	left: 14px;
-	right: 14px;
-	bottom: 18px;
-	z-index: 11;
-}
-
-#closeButton
-{
-	position: absolute;
-	right: 0px;
-	top: 0px;
-	margin-top: 5px;
-	margin-right: 10px;
-	width: 20px;
-	height: 20px;
-	cursor: pointer;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-	background-position: -16px -651px;
-}
-
-* html #closeButton
-{
-	cursor: hand;
-	background-image: url(images/sprites.gif);
-}
-
-.rtl #closeButton
-{
-	right: auto;
-	left: 10px;
-	margin-right: 0px;
-}
-
-#closeButton:hover
-{
-	background-position: -16px -687px;
-}
-
-#throbberBlock
-{
-	z-index: 10;
-}
-
-#throbberBlock div
-{
-	float: left;
-	width: 8px;
-	height: 9px;
-	margin-left: 2px;
-	margin-right: 2px;
-	font-size: 1px;	/* IE6 */
-}
-
-/*
-	Color Gradient Generator:
-	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
-*/
-
-.throbber_1
-{
-	background-color: #504845;
-}
-
-.throbber_2
-{
-	background-color: #736D6B;
-}
-
-.throbber_3
-{
-	background-color: #979391;
-}
-
-.throbber_4
-{
-	background-color: #BAB8B7;
-}
-
-.throbber_5
-{
-	background-color: #DEDEDE;
-}
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f7f7f7;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #504845;
+	background-color: #dedede;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #cec6b5 1px solid;
+	background-color: #DEDEDE;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #7a7261 1px solid;
+	color: #504845;
+	background-color: #cec6b5;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #f2f2f2;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #504845;
+	background-color: #DEDEDE;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px ;
+	border-bottom: #cec6b5 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #cec6b5 1px solid;
+	border-top: #cec6b5 1px solid;
+	border-left: #cec6b5 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #504845;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #cec6b5 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight:bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f7f7f7;
+}
+
+.PopupSelectionBox
+{
+	border: #a9a9a9 1px solid !important;
+	background-color: #dcdcdc !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f7f7f7;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=504845&cend=DEDEDE&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #504845;
+}
+
+.throbber_2
+{
+	background-color: #736D6B;
+}
+
+.throbber_3
+{
+	background-color: #979391;
+}
+
+.throbber_4
+{
+	background-color: #BAB8B7;
+}
+
+.throbber_5
+{
+	background-color: #DEDEDE;
+}
diff --git a/htdocs/theme/freelug/fckeditor/fck_dialog_ie6.js b/htdocs/theme/freelug/fckeditor/fck_dialog_ie6.js
index 2415bc21607..cd3cb75fddf 100644
--- a/htdocs/theme/freelug/fckeditor/fck_dialog_ie6.js
+++ b/htdocs/theme/freelug/fckeditor/fck_dialog_ie6.js
@@ -1,110 +1,110 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- */
-
-(function()
-{
-	// IE6 doens't handle absolute positioning properly (it is always in quirks
-	// mode). This function fixes the sizes and positions of many elements that
-	// compose the skin (this is skin specific).
-	var fixSizes = window.DoResizeFixes = function()
-	{
-		var fckDlg = window.document.body ;
-
-		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
-		{
-			var child = fckDlg.childNodes[i] ;
-			switch ( child.className )
-			{
-				case 'contents' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
-					break ;
-
-				case 'blocker' :
-				case 'cover' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
-					break ;
-
-				case 'tr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					break ;
-
-				case 'tc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
-					break ;
-
-				case 'ml' :
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'mr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'bl' :
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'br' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'bc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-			}
-		}
-	}
-
-	var closeButtonOver = function()
-	{
-		this.style.backgroundPosition = '-16px -687px' ;
-	} ;
-
-	var closeButtonOut = function()
-	{
-		this.style.backgroundPosition = '-16px -651px' ;
-	} ;
-
-	var fixCloseButton = function()
-	{
-		var closeButton = document.getElementById ( 'closeButton' ) ;
-
-		closeButton.onmouseover	= closeButtonOver ;
-		closeButton.onmouseout	= closeButtonOut ;
-	}
-
-	var onLoad = function()
-	{
-		fixSizes() ;
-		fixCloseButton() ;
-
-		window.attachEvent( 'onresize', fixSizes ) ;
-		window.detachEvent( 'onload', onLoad ) ;
-	}
-
-	window.attachEvent( 'onload', onLoad ) ;
-
-})() ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/htdocs/theme/freelug/fckeditor/fck_editor.css b/htdocs/theme/freelug/fckeditor/fck_editor.css
index 3452f3aef39..0862d375fe6 100644
--- a/htdocs/theme/freelug/fckeditor/fck_editor.css
+++ b/htdocs/theme/freelug/fckeditor/fck_editor.css
@@ -1,465 +1,465 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the editor IFRAME and Toolbar.
- */
-
-/*
-	### Basic Editor IFRAME Styles.
-*/
-
-body
-{
-	padding: 1px;
-	margin: 0;
-	background-color: #ffffff;
-}
-
-#xEditingArea
-{
-    border: #696969 1px solid;
-}
-
-.SourceField
-{
-    padding: 5px;
-    margin: 0px;
-    font-family: Monospace;
-}
-
-/*
-	Toolbar
-*/
-
-.TB_ToolbarSet, .TB_Expand, .TB_Collapse
-{
-    cursor: default;
-    background-color: #f7f7f7;
-}
-
-.TB_ToolbarSet
-{
-    border-top: #f7f7f7 1px outset;
-    border-bottom: #f7f7f7 1px outset;
-}
-
-.TB_ToolbarSet TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.TB_Toolbar
-{
-	height: 24px;
-    display: inline-table;	/* inline = Opera jumping buttons bug */
-}
-
-.TB_Separator
-{
-    width: 1px;
-    height: 16px;
-    margin: 2px;
-    background-color: #999966;
-}
-
-.TB_Start
-{
-    background-image: url(images/toolbar.start.gif);
-    margin: 2px;
-    width: 3px;
-    background-repeat: no-repeat;
-    height: 16px;
-}
-
-.TB_End
-{
-    display: none;
-}
-
-.TB_ExpandImg
-{
-    background-image: url(images/toolbar.expand.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_CollapseImg
-{
-    background-image: url(images/toolbar.collapse.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_SideBorder
-{
-    background-color: #696969;
-}
-
-.TB_Expand, .TB_Collapse
-{
-    padding: 2px 2px 2px 2px;
-    border: #f7f7f7 1px outset;
-}
-
-.TB_Collapse
-{
-    width: 5px;
-}
-
-.TB_Break
-{
-    height: 24px; /* IE needs the height to be set, otherwise no break */
-}
-
-/*
-	Toolbar Button
-*/
-
-.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
-{
-    border: #f7f7f7 1px solid; /* This is the default border */
-    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
-}
-
-.TB_Button_On
-{
-    border: #316ac5 1px solid;
-    background-color: #c1d2ee;
-}
-
-.TB_Button_On_Over, .TB_Button_Off_Over
-{
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
-
-.TB_Button_Off
-{
-    filter: alpha(opacity=70); /* IE */
-    opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Disabled
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 22px;
-}
-
-.TB_Button_Image
-{
-    overflow: hidden;
-    width: 16px;
-    height: 16px;
-    margin: 3px;
-    background-repeat: no-repeat;
-}
-
-.TB_Button_Image img
-{
-    position: relative;
-}
-
-.TB_Button_Off .TB_Button_Text
-{
-   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
-}
-
-.TB_ConnectionLine
-{
-    background-color: #ffffff;
-    height: 1px;
-    margin-left: 1px;   /* ltr */
-    margin-right: 1px;  /* rtl */
-}
-
-.TB_Text
-{
-	height: 22px;
-}
-
-.TB_Button_Off .TB_Text
-{
-   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
-}
-
-.TB_Button_On_Over .TB_Text
-{
-   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
-}
-
-/*
-	Menu
-*/
-
-.MN_Menu
-{
-    border: 1px solid #8f8f73;
-    padding: 2px;
-    background-color: #ffffff;
-    cursor: default;
-}
-
-.MN_Menu, .MN_Menu .MN_Label
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.MN_Item_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 20px;
-}
-
-.MN_Icon
-{
-    background-color: #dedede;
-    text-align: center;
-    height: 20px;
-}
-
-.MN_Label
-{
-    padding-left: 3px;
-    padding-right: 3px;
-}
-
-.MN_Separator
-{
-    height: 3px;
-}
-
-.MN_Separator_Line
-{
-    border-top: #b9b99d 1px solid;
-}
-
-.MN_Item .MN_Icon IMG
-{
-    filter: alpha(opacity=70);
-    opacity: 0.70;
-}
-
-.MN_Item_Over
-{
-    color: #ffffff;
-    background-color: #8a857d;
-}
-
-.MN_Item_Over .MN_Icon
-{
-    background-color: #6c6761;
-}
-
-.MN_Item_Disabled IMG
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.MN_Item_Disabled .MN_Label
-{
-    color: #b7b7b7;
-}
-
-.MN_Arrow
-{
-    padding-right: 3px;
-    padding-left: 3px;
-}
-
-.MN_ConnectionLine
-{
-    background-color: #ffffff;
-}
-
-.Menu .TB_Button_On, .Menu .TB_Button_On_Over
-{
-    border: #8f8f73 1px solid;
-    background-color: #ffffff;
-}
-
-/*
-	### Panel Styles
-*/
-
-.FCK_Panel
-{
-    border: #8f8f73 1px solid;
-    padding: 2px;
-    background-color: #ffffff;
-}
-
-.FCK_Panel, .FCK_Panel TD
-{
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-    font-size: 11px;
-}
-
-/*
-	### Special Combos
-*/
-
-.SC_Panel
-{
-    overflow: auto;
-    white-space: nowrap;
-    cursor: default;
-    border: 1px solid #8f8f73;
-    padding-left: 2px;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #f7f7f7;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #f7f7f7 1px outset;
+    border-bottom: #f7f7f7 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #f7f7f7 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #f7f7f7 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #f7f7f7;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #f7f7f7 ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #dedede;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8a857d;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #6c6761;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
     padding-right: 2px;
-    background-color: #ffffff;
-}
-
-.SC_Panel, .SC_Panel TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.SC_Item, .SC_ItemSelected
-{
-    margin-top: 2px;
-    margin-bottom: 2px;
-    background-position: left center;
-    padding-left: 11px;
-    padding-right: 3px;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    background-repeat: no-repeat;
-    border: #dddddd 1px solid;
-}
-
-.SC_Item *, .SC_ItemSelected *
-{
-    margin-top: 0px;
-    margin-bottom: 0px;
-}
-
-.SC_ItemSelected
-{
-    border: #9a9afb 1px solid;
-    background-image: url(images/toolbar.arrowright.gif);
-}
-
-.SC_ItemOver
-{
-    border: #404040 1px solid;
-}
-
-.SC_Field
-{
-    border: #b7b7a6 1px solid;
-    cursor: default;
-}
-
-.SC_FieldCaption
-{
-    overflow: visible;
-    padding-right: 5px;
-    padding-left: 5px;
-    opacity: 0.75; /* Safari, Opera and Mozilla */
-    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
-    height: 23px;
-    background-color: #f7f7f7;
-}
-
-.SC_FieldLabel
-{
-    white-space: nowrap;
-    padding: 2px;
-    width: 100%;
-    cursor: default;
-    background-color: #ffffff;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-
-.SC_FieldButton
-{
-    background-position: center center;
-    background-image: url(images/toolbar.buttonarrow.gif);
-    border-left: #b7b7a6 1px solid;
-    width: 14px;
-    background-repeat: no-repeat;
-}
-
-.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
-{
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
-}
-
-.SC_FieldOver
-{
-    border: #316ac5 1px solid;
-}
-
-.SC_FieldOver .SC_FieldButton
-{
-    border-left: #316ac5 1px solid;
-}
-
-/*
-	### Color Selector Panel
-*/
-
-.ColorBoxBorder
-{
-    border: #808080 1px solid;
-    position: static;
-}
-
-.ColorBox
-{
-    font-size: 1px;
-    width: 10px;
-    position: static;
-    height: 10px;
-}
-
-.ColorDeselected, .ColorSelected
-{
-    cursor: default;
-}
-
-.ColorDeselected
-{
-    border: #ffffff 1px solid;
-    padding: 2px;
-    float: left;
-}
-
-.ColorSelected
-{
-    border: #316ac5 1px solid;
-    padding: 2px;
-    float: left;
-    background-color: #c1d2ee;
-}
+    background-color: #ffffff;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #404040 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #f7f7f7;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #316ac5 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c1d2ee;
+}
diff --git a/htdocs/theme/phones/smartphone/tpl/header.tpl.php b/htdocs/theme/phones/smartphone/tpl/header.tpl.php
index aef6cf6f8ea..53adea30107 100644
--- a/htdocs/theme/phones/smartphone/tpl/header.tpl.php
+++ b/htdocs/theme/phones/smartphone/tpl/header.tpl.php
@@ -34,7 +34,7 @@ header("Content-type: text/html; charset=".$conf->file->character_set_client);
 <link rel="apple-touch-icon" href="<?php echo DOL_URL_ROOT.'/theme/phones/smartphone/theme/'.$this->theme.'/thumbs/homescreen.png'; ?>" />
 <link rel="stylesheet" href="<?php echo DOL_URL_ROOT.'/includes/jquery/mobile/jquery.mobile-latest.min.css'; ?>" />
 <link rel="stylesheet" href="<?php echo DOL_URL_ROOT.'/theme/phones/smartphone/theme/default/default.css.php'; ?>" />
-<script src="<?php echo DOL_URL_ROOT.'/includes/jquery/js/jquery-latest.min.js'; ?>"></script>
+<script src="<?php echo DOL_URL_ROOT.'/includes/jquery/js/jquery-1.4.3.min.js'; ?>"></script>
 <script src="<?php echo DOL_URL_ROOT.'/includes/jquery/mobile/jquery.mobile-latest.js'; ?>"></script>
 <!--
 <script src="<?php echo DOL_URL_ROOT.'/includes/jquery/mobile/jquery.mobile-latest.min.js'; ?>"></script>
diff --git a/htdocs/theme/yellow/fckeditor/fck_dialog.css b/htdocs/theme/yellow/fckeditor/fck_dialog.css
index 90b59e89814..3eb1aec5c94 100644
--- a/htdocs/theme/yellow/fckeditor/fck_dialog.css
+++ b/htdocs/theme/yellow/fckeditor/fck_dialog.css
@@ -1,402 +1,402 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the dialog boxes.
- */
-
-html, body
-{
-	background-color: transparent;
-	margin: 0px;
-	padding: 0px;
-}
-
-body
-{
-	padding: 10px;
-}
-
-body, td, input, select, textarea
-{
-	font-size: 11px;
-	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
-}
-
-body, .BackColor
-{
-	background-color: #f1f1e3;
-}
-
-.PopupBody
-{
-	height: 100%;
-	width: 100%;
-	overflow: hidden;
-	background-color: transparent;
-	padding: 0px;
-}
-
-#header
-{
-	cursor: move;
-}
-
-.PopupTitle
-{
-	font-weight: bold;
-	font-size: 14pt;
-	color: #737357;
-	background-color: #e3e3c7;
-	padding: 3px 10px 3px 10px;
-}
-
-.PopupButtons
-{
-	position: absolute;
-	right: 0px;
-	left: 0px;
-	bottom: 0px;
-	border-top: #d5d59d 1px solid;
-	background-color: #e3e3c7;
-	padding: 7px 10px 7px 10px;
-}
-
-.Button
-{
-	border: #737357 1px solid;
-	color: #3b3b1f;
-	background-color: #c7c78f;
-}
-
-#btnOk
-{
-	width: 100px;
-}
-
-.DarkBackground
-{
-	background-color: #eaead1;
-}
-
-.LightBackground
-{
-	background-color: #ffffbe;
-}
-
-.PopupTitleBorder
-{
-	border-bottom: #d5d59d 1px solid;
-}
-
-.PopupTabArea
-{
-	color: #737357;
-	background-color: #e3e3c7;
-}
-
-.PopupTabEmptyArea
-{
-	padding-left: 10px;
-	border-bottom: #d5d59d 1px solid;
-}
-
-.PopupTab, .PopupTabSelected
-{
-	border-right: #d5d59d 1px solid;
-	border-top: #d5d59d 1px solid;
-	border-left: #d5d59d 1px solid;
-	padding: 3px 5px 3px 5px;
-	color: #737357;
-}
-
-.PopupTab
-{
-	margin-top: 1px;
-	border-bottom: #d5d59d 1px solid;
-	cursor: pointer;
-	cursor: hand;
-}
-
-.PopupTabSelected
-{
-	font-weight: bold;
-	cursor: default;
-	padding-top: 4px;
-	border-bottom: #f1f1e3 1px solid;
-	background-color: #f1f1e3;
-}
-
-.PopupSelectionBox
-{
-	border: #ff9933 1px solid !important;
-	background-color: #fffacd !important;
-	cursor: pointer;
-	cursor: hand;
-}
-
-#tdBrowse
-{
-	vertical-align: bottom;
-}
-
-/**
- * Dialog frame related styles.
- */
-
-.contents
-{
-	position: absolute;
-	top: 2px;
-	left: 16px;
-	right: 16px;
-	bottom: 20px;
-	background-color: #f1f1e3;
-	overflow: hidden;
-	z-index: 1;
-}
-
-.tl, .tr, .tc, .bl, .br, .bc
-{
-	position: absolute;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-}
-
-* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
-{
-	background-image: url(images/sprites.gif);
-}
-
-.ml, .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.png);
-	background-repeat: repeat-y;
-}
-
-* html .ml, * html .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.rtl .ml, .rtl .mr
-{
-	position: absolute;
-	background-image: url(images/dialog.sides.rtl.png);
-	background-repeat: repeat-y;
-}
-
-* html .rtl .ml, * html .rtl .mr
-{
-	background-image: url(images/dialog.sides.gif);
-}
-
-.tl
-{
-	top: 0px;
-	left: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -16px;
-}
-
-.rtl .tl
-{
-	background-position: -16px -397px;
-}
-
-.tr
-{
-	top: 0px;
-	right: 0px;
-	width: 16px;
-	height: 16px;
-	background-position: -16px -76px;
-}
-
-.rtl .tr
-{
-	background-position: -16px -457px;
-}
-
-.tc
-{
-	top: 0px;
-	right: 16px;
-	left: 16px;
-	height: 16px;
-	background-position: 0px -136px;
-	background-repeat: repeat-x;
-}
-
-.ml
-{
-	top: 16px;
-	left: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: 0px 0px;
-}
-
-.mr
-{
-	top: 16px;
-	right: 0px;
-	width: 16px;
-	bottom: 51px;
-	background-position: -16px 0px;
-}
-
-.bl
-{
-	bottom: 0px;
-	left: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -196px;
-}
-
-.rtl .bl
-{
-	background-position: -16px -517px;
-}
-
-.br
-{
-	bottom: 0px;
-	right: 0px;
-	width: 30px;
-	height: 51px;
-	background-position: -16px -263px;
-}
-
-.rtl .br
-{
-	background-position: -16px -584px;
-}
-
-.bc
-{
-	bottom: 0px;
-	right: 30px;
-	left: 30px;
-	height: 51px;
-	background-position: 0px -330px;
-	background-repeat: repeat-x;
-}
-
-/* For IE6. Do not change it. */
-* html .blocker
-{
-	position: absolute;
-	width: 100%;
-	height: 100%;
-	z-index: 12;
-	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
-}
-
-/* The layer used to cover the dialog when opening a child dialog. */
-.cover
-{
-	position: absolute;
-	top: 0px;
-	left: 14px;
-	right: 14px;
-	bottom: 18px;
-	z-index: 11;
-}
-
-#closeButton
-{
-	position: absolute;
-	right: 0px;
-	top: 0px;
-	margin-top: 5px;
-	margin-right: 10px;
-	width: 20px;
-	height: 20px;
-	cursor: pointer;
-	background-image: url(images/sprites.png);
-	background-repeat: no-repeat;
-	background-position: -16px -651px;
-}
-
-* html #closeButton
-{
-	cursor: hand;
-	background-image: url(images/sprites.gif);
-}
-
-.rtl #closeButton
-{
-	right: auto;
-	left: 10px;
-	margin-right: 0px;
-}
-
-#closeButton:hover
-{
-	background-position: -16px -687px;
-}
-
-#throbberBlock
-{
-	z-index: 10;
-}
-
-#throbberBlock div
-{
-	float: left;
-	width: 8px;
-	height: 9px;
-	margin-left: 2px;
-	margin-right: 2px;
-	font-size: 1px;	/* IE6 */
-}
-
-/*
-	Color Gradient Generator:
-	http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4
-*/
-
-.throbber_1
-{
-	background-color: #737357;
-}
-
-.throbber_2
-{
-	background-color: #8f8f73;
-}
-
-.throbber_3
-{
-	background-color: #abab8f;
-}
-
-.throbber_4
-{
-	background-color: #c7c7ab;
-}
-
-.throbber_5
-{
-	background-color: #e3e3c7;
-}
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the dialog boxes.
+ */
+
+html, body
+{
+	background-color: transparent;
+	margin: 0px;
+	padding: 0px;
+}
+
+body
+{
+	padding: 10px;
+}
+
+body, td, input, select, textarea
+{
+	font-size: 11px;
+	font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
+}
+
+body, .BackColor
+{
+	background-color: #f1f1e3;
+}
+
+.PopupBody
+{
+	height: 100%;
+	width: 100%;
+	overflow: hidden;
+	background-color: transparent;
+	padding: 0px;
+}
+
+#header
+{
+	cursor: move;
+}
+
+.PopupTitle
+{
+	font-weight: bold;
+	font-size: 14pt;
+	color: #737357;
+	background-color: #e3e3c7;
+	padding: 3px 10px 3px 10px;
+}
+
+.PopupButtons
+{
+	position: absolute;
+	right: 0px;
+	left: 0px;
+	bottom: 0px;
+	border-top: #d5d59d 1px solid;
+	background-color: #e3e3c7;
+	padding: 7px 10px 7px 10px;
+}
+
+.Button
+{
+	border: #737357 1px solid;
+	color: #3b3b1f;
+	background-color: #c7c78f;
+}
+
+#btnOk
+{
+	width: 100px;
+}
+
+.DarkBackground
+{
+	background-color: #eaead1;
+}
+
+.LightBackground
+{
+	background-color: #ffffbe;
+}
+
+.PopupTitleBorder
+{
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTabArea
+{
+	color: #737357;
+	background-color: #e3e3c7;
+}
+
+.PopupTabEmptyArea
+{
+	padding-left: 10px;
+	border-bottom: #d5d59d 1px solid;
+}
+
+.PopupTab, .PopupTabSelected
+{
+	border-right: #d5d59d 1px solid;
+	border-top: #d5d59d 1px solid;
+	border-left: #d5d59d 1px solid;
+	padding: 3px 5px 3px 5px;
+	color: #737357;
+}
+
+.PopupTab
+{
+	margin-top: 1px;
+	border-bottom: #d5d59d 1px solid;
+	cursor: pointer;
+	cursor: hand;
+}
+
+.PopupTabSelected
+{
+	font-weight: bold;
+	cursor: default;
+	padding-top: 4px;
+	border-bottom: #f1f1e3 1px solid;
+	background-color: #f1f1e3;
+}
+
+.PopupSelectionBox
+{
+	border: #ff9933 1px solid !important;
+	background-color: #fffacd !important;
+	cursor: pointer;
+	cursor: hand;
+}
+
+#tdBrowse
+{
+	vertical-align: bottom;
+}
+
+/**
+ * Dialog frame related styles.
+ */
+
+.contents
+{
+	position: absolute;
+	top: 2px;
+	left: 16px;
+	right: 16px;
+	bottom: 20px;
+	background-color: #f1f1e3;
+	overflow: hidden;
+	z-index: 1;
+}
+
+.tl, .tr, .tc, .bl, .br, .bc
+{
+	position: absolute;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+}
+
+* html .tl, * html .tr, * html .tc, * html .bl, * html .br, * html .bc
+{
+	background-image: url(images/sprites.gif);
+}
+
+.ml, .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.png);
+	background-repeat: repeat-y;
+}
+
+* html .ml, * html .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.rtl .ml, .rtl .mr
+{
+	position: absolute;
+	background-image: url(images/dialog.sides.rtl.png);
+	background-repeat: repeat-y;
+}
+
+* html .rtl .ml, * html .rtl .mr
+{
+	background-image: url(images/dialog.sides.gif);
+}
+
+.tl
+{
+	top: 0px;
+	left: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -16px;
+}
+
+.rtl .tl
+{
+	background-position: -16px -397px;
+}
+
+.tr
+{
+	top: 0px;
+	right: 0px;
+	width: 16px;
+	height: 16px;
+	background-position: -16px -76px;
+}
+
+.rtl .tr
+{
+	background-position: -16px -457px;
+}
+
+.tc
+{
+	top: 0px;
+	right: 16px;
+	left: 16px;
+	height: 16px;
+	background-position: 0px -136px;
+	background-repeat: repeat-x;
+}
+
+.ml
+{
+	top: 16px;
+	left: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: 0px 0px;
+}
+
+.mr
+{
+	top: 16px;
+	right: 0px;
+	width: 16px;
+	bottom: 51px;
+	background-position: -16px 0px;
+}
+
+.bl
+{
+	bottom: 0px;
+	left: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -196px;
+}
+
+.rtl .bl
+{
+	background-position: -16px -517px;
+}
+
+.br
+{
+	bottom: 0px;
+	right: 0px;
+	width: 30px;
+	height: 51px;
+	background-position: -16px -263px;
+}
+
+.rtl .br
+{
+	background-position: -16px -584px;
+}
+
+.bc
+{
+	bottom: 0px;
+	right: 30px;
+	left: 30px;
+	height: 51px;
+	background-position: 0px -330px;
+	background-repeat: repeat-x;
+}
+
+/* For IE6. Do not change it. */
+* html .blocker
+{
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	z-index: 12;
+	filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
+}
+
+/* The layer used to cover the dialog when opening a child dialog. */
+.cover
+{
+	position: absolute;
+	top: 0px;
+	left: 14px;
+	right: 14px;
+	bottom: 18px;
+	z-index: 11;
+}
+
+#closeButton
+{
+	position: absolute;
+	right: 0px;
+	top: 0px;
+	margin-top: 5px;
+	margin-right: 10px;
+	width: 20px;
+	height: 20px;
+	cursor: pointer;
+	background-image: url(images/sprites.png);
+	background-repeat: no-repeat;
+	background-position: -16px -651px;
+}
+
+* html #closeButton
+{
+	cursor: hand;
+	background-image: url(images/sprites.gif);
+}
+
+.rtl #closeButton
+{
+	right: auto;
+	left: 10px;
+	margin-right: 0px;
+}
+
+#closeButton:hover
+{
+	background-position: -16px -687px;
+}
+
+#throbberBlock
+{
+	z-index: 10;
+}
+
+#throbberBlock div
+{
+	float: left;
+	width: 8px;
+	height: 9px;
+	margin-left: 2px;
+	margin-right: 2px;
+	font-size: 1px;	/* IE6 */
+}
+
+/*
+	Color Gradient Generator:
+	http://www.herethere.net/~samson/php/color_gradient/?cbegin=737357&cend=E3E3C7&steps=4
+*/
+
+.throbber_1
+{
+	background-color: #737357;
+}
+
+.throbber_2
+{
+	background-color: #8f8f73;
+}
+
+.throbber_3
+{
+	background-color: #abab8f;
+}
+
+.throbber_4
+{
+	background-color: #c7c7ab;
+}
+
+.throbber_5
+{
+	background-color: #e3e3c7;
+}
diff --git a/htdocs/theme/yellow/fckeditor/fck_dialog_ie6.js b/htdocs/theme/yellow/fckeditor/fck_dialog_ie6.js
index 2415bc21607..cd3cb75fddf 100644
--- a/htdocs/theme/yellow/fckeditor/fck_dialog_ie6.js
+++ b/htdocs/theme/yellow/fckeditor/fck_dialog_ie6.js
@@ -1,110 +1,110 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- */
-
-(function()
-{
-	// IE6 doens't handle absolute positioning properly (it is always in quirks
-	// mode). This function fixes the sizes and positions of many elements that
-	// compose the skin (this is skin specific).
-	var fixSizes = window.DoResizeFixes = function()
-	{
-		var fckDlg = window.document.body ;
-
-		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
-		{
-			var child = fckDlg.childNodes[i] ;
-			switch ( child.className )
-			{
-				case 'contents' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
-					break ;
-
-				case 'blocker' :
-				case 'cover' :
-					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
-					break ;
-
-				case 'tr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					break ;
-
-				case 'tc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
-					break ;
-
-				case 'ml' :
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'mr' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
-					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
-					break ;
-
-				case 'bl' :
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'br' :
-					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-
-				case 'bc' :
-					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
-					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
-					break ;
-			}
-		}
-	}
-
-	var closeButtonOver = function()
-	{
-		this.style.backgroundPosition = '-16px -687px' ;
-	} ;
-
-	var closeButtonOut = function()
-	{
-		this.style.backgroundPosition = '-16px -651px' ;
-	} ;
-
-	var fixCloseButton = function()
-	{
-		var closeButton = document.getElementById ( 'closeButton' ) ;
-
-		closeButton.onmouseover	= closeButtonOver ;
-		closeButton.onmouseout	= closeButtonOut ;
-	}
-
-	var onLoad = function()
-	{
-		fixSizes() ;
-		fixCloseButton() ;
-
-		window.attachEvent( 'onresize', fixSizes ) ;
-		window.detachEvent( 'onload', onLoad ) ;
-	}
-
-	window.attachEvent( 'onload', onLoad ) ;
-
-})() ;
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ */
+
+(function()
+{
+	// IE6 doens't handle absolute positioning properly (it is always in quirks
+	// mode). This function fixes the sizes and positions of many elements that
+	// compose the skin (this is skin specific).
+	var fixSizes = window.DoResizeFixes = function()
+	{
+		var fckDlg = window.document.body ;
+
+		for ( var i = 0 ; i < fckDlg.childNodes.length ; i++ )
+		{
+			var child = fckDlg.childNodes[i] ;
+			switch ( child.className )
+			{
+				case 'contents' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 ) ;	// -left -right
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 ) ;	// -bottom -top
+					break ;
+
+				case 'blocker' :
+				case 'cover' :
+					child.style.width = Math.max( 0, fckDlg.offsetWidth - 16 - 16 + 4 ) ;	// -left -right + 4
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 20 - 2 + 4 ) ;	// -bottom -top + 4
+					break ;
+
+				case 'tr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					break ;
+
+				case 'tc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 16 - 16 ) ;
+					break ;
+
+				case 'ml' :
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'mr' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 16 ) ;
+					child.style.height = Math.max( 0, fckDlg.clientHeight - 16 - 51 ) ;
+					break ;
+
+				case 'bl' :
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'br' :
+					child.style.left = Math.max( 0, fckDlg.clientWidth - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+
+				case 'bc' :
+					child.style.width = Math.max( 0, fckDlg.clientWidth - 30 - 30 ) ;
+					child.style.top = Math.max( 0, fckDlg.clientHeight - 51 ) ;
+					break ;
+			}
+		}
+	}
+
+	var closeButtonOver = function()
+	{
+		this.style.backgroundPosition = '-16px -687px' ;
+	} ;
+
+	var closeButtonOut = function()
+	{
+		this.style.backgroundPosition = '-16px -651px' ;
+	} ;
+
+	var fixCloseButton = function()
+	{
+		var closeButton = document.getElementById ( 'closeButton' ) ;
+
+		closeButton.onmouseover	= closeButtonOver ;
+		closeButton.onmouseout	= closeButtonOut ;
+	}
+
+	var onLoad = function()
+	{
+		fixSizes() ;
+		fixCloseButton() ;
+
+		window.attachEvent( 'onresize', fixSizes ) ;
+		window.detachEvent( 'onload', onLoad ) ;
+	}
+
+	window.attachEvent( 'onload', onLoad ) ;
+
+})() ;
diff --git a/htdocs/theme/yellow/fckeditor/fck_editor.css b/htdocs/theme/yellow/fckeditor/fck_editor.css
index b6ea79a6d2d..e59e35ed434 100644
--- a/htdocs/theme/yellow/fckeditor/fck_editor.css
+++ b/htdocs/theme/yellow/fckeditor/fck_editor.css
@@ -1,464 +1,464 @@
-/*
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2008 Frederico Caldeira Knabben
- *
- * == BEGIN LICENSE ==
- *
- * Licensed under the terms of any of the following licenses at your
- * choice:
- *
- *  - GNU General Public License Version 2 or later (the "GPL")
- *    http://www.gnu.org/licenses/gpl.html
- *
- *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- *    http://www.gnu.org/licenses/lgpl.html
- *
- *  - Mozilla Public License Version 1.1 or later (the "MPL")
- *    http://www.mozilla.org/MPL/MPL-1.1.html
- *
- * == END LICENSE ==
- *
- * Styles used by the editor IFRAME and Toolbar.
- */
-
-/*
-	### Basic Editor IFRAME Styles.
-*/
-
-body
-{
-	padding: 1px;
-	margin: 0;
-	background-color: #ffffff;
-}
-
-#xEditingArea
-{
-    border: #696969 1px solid;
-}
-
-.SourceField
-{
-    padding: 5px;
-    margin: 0px;
-    font-family: Monospace;
-}
-
-/*
-	Toolbar
-*/
-
-.TB_ToolbarSet, .TB_Expand, .TB_Collapse
-{
-    cursor: default;
-    background-color: #efefde;
-}
-
-.TB_ToolbarSet
-{
-    border-top: #efefde 1px outset;
-    border-bottom: #efefde 1px outset;
-}
-
-.TB_ToolbarSet TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.TB_Toolbar
-{
-	height: 24px;
-    display: inline-table;	/* inline = Opera jumping buttons bug */
-}
-
-.TB_Separator
-{
-    width: 1px;
-    height: 16px;
-    margin: 2px;
-    background-color: #999966;
-}
-
-.TB_Start
-{
-    background-image: url(images/toolbar.start.gif);
-    margin: 2px;
-    width: 3px;
-    background-repeat: no-repeat;
-    height: 16px;
-}
-
-.TB_End
-{
-    display: none;
-}
-
-.TB_ExpandImg
-{
-    background-image: url(images/toolbar.expand.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_CollapseImg
-{
-    background-image: url(images/toolbar.collapse.gif);
-    background-repeat: no-repeat;
-}
-
-.TB_SideBorder
-{
-    background-color: #696969;
-}
-
-.TB_Expand, .TB_Collapse
-{
-    padding: 2px 2px 2px 2px;
-    border: #efefde 1px outset;
-}
-
-.TB_Collapse
-{
-    width: 5px;
-}
-
-.TB_Break
-{
-    height: 24px; /* IE needs the height to be set, otherwise no break */
-}
-
-/*
-	Toolbar Button
-*/
-
-.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
-{
-    border: #efefde 1px solid; /* This is the default border */
-    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
-}
-
-.TB_Button_On
-{
-    border: #316ac5 1px solid;
-    background-color: #c1d2ee;
-}
-
-.TB_Button_On_Over, .TB_Button_Off_Over
-{
-    border: #316ac5 1px solid;
-    background-color: #dff1ff;
-}
-
-.TB_Button_Off
-{
-    filter: alpha(opacity=70); /* IE */
-    opacity: 0.70; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Disabled
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.TB_Button_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 22px;
-}
-
-.TB_Button_Image
-{
-    overflow: hidden;
-    width: 16px;
-    height: 16px;
-    margin: 3px;
-    background-repeat: no-repeat;
-}
-
-.TB_Button_Image img
-{
-    position: relative;
-}
-
-.TB_Button_Off .TB_Button_Text
-{
-   	background-color: #efefde;  /* Needed because of a bug on Clear Type */
-}
-
-.TB_ConnectionLine
-{
-    background-color: #ffffff;
-    height: 1px;
-    margin-left: 1px;   /* ltr */
-    margin-right: 1px;  /* rtl */
-}
-
-.TB_Text
-{
-	height: 22px;
-}
-
-.TB_Button_Off .TB_Text
-{
-   	background-color: #efefde ;  /* Needed because of a bug on ClearType */
-}
-
-.TB_Button_On_Over .TB_Text
-{
-   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
-}
-
-/*
-	Menu
-*/
-
-.MN_Menu
-{
-    border: 1px solid #8f8f73;
-    padding: 2px;
-    background-color: #ffffff;
-    cursor: default;
-}
-
-.MN_Menu, .MN_Menu .MN_Label
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.MN_Item_Padding
-{
-    visibility: hidden;
-    width: 3px;
-    height: 20px;
-}
-
-.MN_Icon
-{
-    background-color: #e3e3c7;
-    text-align: center;
-    height: 20px;
-}
-
-.MN_Label
-{
-    padding-left: 3px;
-    padding-right: 3px;
-}
-
-.MN_Separator
-{
-    height: 3px;
-}
-
-.MN_Separator_Line
-{
-    border-top: #b9b99d 1px solid;
-}
-
-.MN_Item .MN_Icon IMG
-{
-    filter: alpha(opacity=70);
-    opacity: 0.70;
-}
-
-.MN_Item_Over
-{
-    color: #ffffff;
-    background-color: #8f8f73;
-}
-
-.MN_Item_Over .MN_Icon
-{
-    background-color: #737357;
-}
-
-.MN_Item_Disabled IMG
-{
-    filter: gray() alpha(opacity=30); /* IE */
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-}
-
-.MN_Item_Disabled .MN_Label
-{
-    color: #b7b7b7;
-}
-
-.MN_Arrow
-{
-    padding-right: 3px;
-    padding-left: 3px;
-}
-
-.MN_ConnectionLine
-{
-    background-color: #ffffff;
-}
-
-.Menu .TB_Button_On, .Menu .TB_Button_On_Over
-{
-    border: #8f8f73 1px solid;
-    background-color: #ffffff;
-}
-
-/*
-	### Panel Styles
-*/
-
-.FCK_Panel
-{
-    border: #8f8f73 1px solid;
-    padding: 2px;
-    background-color: #ffffff;
-}
-
-.FCK_Panel, .FCK_Panel TD
-{
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-    font-size: 11px;
-}
-
-/*
-	### Special Combos
-*/
-
-.SC_Panel
-{
-    overflow: auto;
-    white-space: nowrap;
-    cursor: default;
-    border: 1px solid #8f8f73;
-    padding-left: 2px;
-    padding-right: 2px;
-}
-
-.SC_Panel, .SC_Panel TD
-{
-    font-size: 11px;
-    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
-}
-
-.SC_Item, .SC_ItemSelected
-{
-    margin-top: 2px;
-    margin-bottom: 2px;
-    background-position: left center;
-    padding-left: 11px;
-    padding-right: 3px;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    background-repeat: no-repeat;
-    border: #dddddd 1px solid;
-}
-
-.SC_Item *, .SC_ItemSelected *
-{
-    margin-top: 0px;
-    margin-bottom: 0px;
-}
-
-.SC_ItemSelected
-{
-    border: #9a9afb 1px solid;
-    background-image: url(images/toolbar.arrowright.gif);
-}
-
-.SC_ItemOver
-{
-    border: #316ac5 1px solid;
-}
-
-.SC_Field
-{
-    border: #b7b7a6 1px solid;
-    cursor: default;
-}
-
-.SC_FieldCaption
-{
-    overflow: visible;
-    padding-right: 5px;
-    padding-left: 5px;
-    opacity: 0.75; /* Safari, Opera and Mozilla */
-    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
-    height: 23px;
-    background-color: #efefde;
-}
-
-.SC_FieldLabel
-{
-    white-space: nowrap;
-    padding: 2px;
-    width: 100%;
-    cursor: default;
-    background-color: #ffffff;
-    text-overflow: ellipsis;
-    overflow: hidden;
-}
-
-.SC_FieldButton
-{
-    background-position: center center;
-    background-image: url(images/toolbar.buttonarrow.gif);
-    border-left: #b7b7a6 1px solid;
-    width: 14px;
-    background-repeat: no-repeat;
-}
-
-.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
-{
-    opacity: 0.30; /* Safari, Opera and Mozilla */
-    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
-}
-
-.SC_FieldOver
-{
-    border: #316ac5 1px solid;
-}
-
-.SC_FieldOver .SC_FieldButton
-{
-    border-left: #316ac5 1px solid;
-}
-
-/*
-	### Color Selector Panel
-*/
-
-.ColorBoxBorder
-{
-    border: #808080 1px solid;
-    position: static;
-}
-
-.ColorBox
-{
-    font-size: 1px;
-    width: 10px;
-    position: static;
-    height: 10px;
-}
-
-.ColorDeselected, .ColorSelected
-{
-    cursor: default;
-}
-
-.ColorDeselected
-{
-    border: #ffffff 1px solid;
-    padding: 2px;
-    float: left;
-}
-
-.ColorSelected
-{
-    border: #330066 1px solid;
-    padding: 2px;
-    float: left;
-    background-color: #c4cdd6;
-}
+/*
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Styles used by the editor IFRAME and Toolbar.
+ */
+
+/*
+	### Basic Editor IFRAME Styles.
+*/
+
+body
+{
+	padding: 1px;
+	margin: 0;
+	background-color: #ffffff;
+}
+
+#xEditingArea
+{
+    border: #696969 1px solid;
+}
+
+.SourceField
+{
+    padding: 5px;
+    margin: 0px;
+    font-family: Monospace;
+}
+
+/*
+	Toolbar
+*/
+
+.TB_ToolbarSet, .TB_Expand, .TB_Collapse
+{
+    cursor: default;
+    background-color: #efefde;
+}
+
+.TB_ToolbarSet
+{
+    border-top: #efefde 1px outset;
+    border-bottom: #efefde 1px outset;
+}
+
+.TB_ToolbarSet TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.TB_Toolbar
+{
+	height: 24px;
+    display: inline-table;	/* inline = Opera jumping buttons bug */
+}
+
+.TB_Separator
+{
+    width: 1px;
+    height: 16px;
+    margin: 2px;
+    background-color: #999966;
+}
+
+.TB_Start
+{
+    background-image: url(images/toolbar.start.gif);
+    margin: 2px;
+    width: 3px;
+    background-repeat: no-repeat;
+    height: 16px;
+}
+
+.TB_End
+{
+    display: none;
+}
+
+.TB_ExpandImg
+{
+    background-image: url(images/toolbar.expand.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_CollapseImg
+{
+    background-image: url(images/toolbar.collapse.gif);
+    background-repeat: no-repeat;
+}
+
+.TB_SideBorder
+{
+    background-color: #696969;
+}
+
+.TB_Expand, .TB_Collapse
+{
+    padding: 2px 2px 2px 2px;
+    border: #efefde 1px outset;
+}
+
+.TB_Collapse
+{
+    width: 5px;
+}
+
+.TB_Break
+{
+    height: 24px; /* IE needs the height to be set, otherwise no break */
+}
+
+/*
+	Toolbar Button
+*/
+
+.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled
+{
+    border: #efefde 1px solid; /* This is the default border */
+    height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */
+}
+
+.TB_Button_On
+{
+    border: #316ac5 1px solid;
+    background-color: #c1d2ee;
+}
+
+.TB_Button_On_Over, .TB_Button_Off_Over
+{
+    border: #316ac5 1px solid;
+    background-color: #dff1ff;
+}
+
+.TB_Button_Off
+{
+    filter: alpha(opacity=70); /* IE */
+    opacity: 0.70; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Disabled
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.TB_Button_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 22px;
+}
+
+.TB_Button_Image
+{
+    overflow: hidden;
+    width: 16px;
+    height: 16px;
+    margin: 3px;
+    background-repeat: no-repeat;
+}
+
+.TB_Button_Image img
+{
+    position: relative;
+}
+
+.TB_Button_Off .TB_Button_Text
+{
+   	background-color: #efefde;  /* Needed because of a bug on Clear Type */
+}
+
+.TB_ConnectionLine
+{
+    background-color: #ffffff;
+    height: 1px;
+    margin-left: 1px;   /* ltr */
+    margin-right: 1px;  /* rtl */
+}
+
+.TB_Text
+{
+	height: 22px;
+}
+
+.TB_Button_Off .TB_Text
+{
+   	background-color: #efefde ;  /* Needed because of a bug on ClearType */
+}
+
+.TB_Button_On_Over .TB_Text
+{
+   	background-color: #dff1ff ;  /* Needed because of a bug on ClearType */
+}
+
+/*
+	Menu
+*/
+
+.MN_Menu
+{
+    border: 1px solid #8f8f73;
+    padding: 2px;
+    background-color: #ffffff;
+    cursor: default;
+}
+
+.MN_Menu, .MN_Menu .MN_Label
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.MN_Item_Padding
+{
+    visibility: hidden;
+    width: 3px;
+    height: 20px;
+}
+
+.MN_Icon
+{
+    background-color: #e3e3c7;
+    text-align: center;
+    height: 20px;
+}
+
+.MN_Label
+{
+    padding-left: 3px;
+    padding-right: 3px;
+}
+
+.MN_Separator
+{
+    height: 3px;
+}
+
+.MN_Separator_Line
+{
+    border-top: #b9b99d 1px solid;
+}
+
+.MN_Item .MN_Icon IMG
+{
+    filter: alpha(opacity=70);
+    opacity: 0.70;
+}
+
+.MN_Item_Over
+{
+    color: #ffffff;
+    background-color: #8f8f73;
+}
+
+.MN_Item_Over .MN_Icon
+{
+    background-color: #737357;
+}
+
+.MN_Item_Disabled IMG
+{
+    filter: gray() alpha(opacity=30); /* IE */
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+}
+
+.MN_Item_Disabled .MN_Label
+{
+    color: #b7b7b7;
+}
+
+.MN_Arrow
+{
+    padding-right: 3px;
+    padding-left: 3px;
+}
+
+.MN_ConnectionLine
+{
+    background-color: #ffffff;
+}
+
+.Menu .TB_Button_On, .Menu .TB_Button_On_Over
+{
+    border: #8f8f73 1px solid;
+    background-color: #ffffff;
+}
+
+/*
+	### Panel Styles
+*/
+
+.FCK_Panel
+{
+    border: #8f8f73 1px solid;
+    padding: 2px;
+    background-color: #ffffff;
+}
+
+.FCK_Panel, .FCK_Panel TD
+{
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+    font-size: 11px;
+}
+
+/*
+	### Special Combos
+*/
+
+.SC_Panel
+{
+    overflow: auto;
+    white-space: nowrap;
+    cursor: default;
+    border: 1px solid #8f8f73;
+    padding-left: 2px;
+    padding-right: 2px;
+}
+
+.SC_Panel, .SC_Panel TD
+{
+    font-size: 11px;
+    font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif;
+}
+
+.SC_Item, .SC_ItemSelected
+{
+    margin-top: 2px;
+    margin-bottom: 2px;
+    background-position: left center;
+    padding-left: 11px;
+    padding-right: 3px;
+    padding-top: 2px;
+    padding-bottom: 2px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    background-repeat: no-repeat;
+    border: #dddddd 1px solid;
+}
+
+.SC_Item *, .SC_ItemSelected *
+{
+    margin-top: 0px;
+    margin-bottom: 0px;
+}
+
+.SC_ItemSelected
+{
+    border: #9a9afb 1px solid;
+    background-image: url(images/toolbar.arrowright.gif);
+}
+
+.SC_ItemOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_Field
+{
+    border: #b7b7a6 1px solid;
+    cursor: default;
+}
+
+.SC_FieldCaption
+{
+    overflow: visible;
+    padding-right: 5px;
+    padding-left: 5px;
+    opacity: 0.75; /* Safari, Opera and Mozilla */
+    filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */
+    height: 23px;
+    background-color: #efefde;
+}
+
+.SC_FieldLabel
+{
+    white-space: nowrap;
+    padding: 2px;
+    width: 100%;
+    cursor: default;
+    background-color: #ffffff;
+    text-overflow: ellipsis;
+    overflow: hidden;
+}
+
+.SC_FieldButton
+{
+    background-position: center center;
+    background-image: url(images/toolbar.buttonarrow.gif);
+    border-left: #b7b7a6 1px solid;
+    width: 14px;
+    background-repeat: no-repeat;
+}
+
+.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption, .SC_FieldDisabled .TB_ButtonType_Text
+{
+    opacity: 0.30; /* Safari, Opera and Mozilla */
+    filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */
+}
+
+.SC_FieldOver
+{
+    border: #316ac5 1px solid;
+}
+
+.SC_FieldOver .SC_FieldButton
+{
+    border-left: #316ac5 1px solid;
+}
+
+/*
+	### Color Selector Panel
+*/
+
+.ColorBoxBorder
+{
+    border: #808080 1px solid;
+    position: static;
+}
+
+.ColorBox
+{
+    font-size: 1px;
+    width: 10px;
+    position: static;
+    height: 10px;
+}
+
+.ColorDeselected, .ColorSelected
+{
+    cursor: default;
+}
+
+.ColorDeselected
+{
+    border: #ffffff 1px solid;
+    padding: 2px;
+    float: left;
+}
+
+.ColorSelected
+{
+    border: #330066 1px solid;
+    padding: 2px;
+    float: left;
+    background-color: #c4cdd6;
+}
diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
index 6d317a23b83..59db5e91add 100644
--- a/htdocs/user/class/user.class.php
+++ b/htdocs/user/class/user.class.php
@@ -1195,8 +1195,8 @@ class User extends CommonObject
 		if (! $password)
 		{
 			// TODO Mettre appel au module de generation de mot de passe
-			$password=create_random_psw_1('');
-			//$password=create_random_psw_2('');
+			$password=creer_pass_aleatoire_1('');
+			//$password=creer_pass_aleatoire_2('');
 		}
 
 		// Crypte avec md5
@@ -1890,11 +1890,11 @@ class User extends CommonObject
  *	\param	    sel			Donnee aleatoire
  *	\return		string		Mot de passe
  */
-function create_random_psw_1($sel = "")
+function creer_pass_aleatoire_1($sel = "")
 {
-	$length = 8;
+	$longueur = 8;
 
-	return strtolower(substr(md5(uniqid(mt_rand())),0,$length));
+	return strtolower(substr(md5(uniqid(mt_rand())),0,$longueur));
 }
 
 
@@ -1905,14 +1905,14 @@ function create_random_psw_1($sel = "")
  *	\param	    sel			Donnee aleatoire
  *	\return		string		Mot de passe
  */
-function create_random_psw_2($sel = "")
+function creer_pass_aleatoire_2($sel = "")
 {
-	$length=8;
+	$longueur=8;
 
 	$seed = (double) (microtime() + 1) * time();
 	srand($seed);
 
-	for ($i = 0; $i < $length; $i++)
+	for ($i = 0; $i < $longueur; $i++)
 	{
 		if (!$s)
 		{
diff --git a/htdocs/webservices/README b/htdocs/webservices/README
index b4c1137bf67..14535775c52 100644
--- a/htdocs/webservices/README
+++ b/htdocs/webservices/README
@@ -1,14 +1,14 @@
-README (english)
----------------------------------------------------------
-This directory contains files to make Dolibarr a server
-of SOAP Web Services.
-
-* To see all Webservices provided by Dolibarr, just call following Url:
-http://mydomain.com/dolibarr/webservices/server.php
-
-* WSDL file of Web services provided by Dolibarr can be obtained at:
-http://mydomain.com/dolibarr/webservices/server.php?wsdl
-and is also saved in file:
-server.wsdl 
-
-Note, you can test this Webservices by calling the page client.php.
+README (english)
+---------------------------------------------------------
+This directory contains files to make Dolibarr a server
+of SOAP Web Services.
+
+* To see all Webservices provided by Dolibarr, just call following Url:
+http://mydomain.com/dolibarr/webservices/server.php
+
+* WSDL file of Web services provided by Dolibarr can be obtained at:
+http://mydomain.com/dolibarr/webservices/server.php?wsdl
+and is also saved in file:
+server.wsdl 
+
+Note, you can test this Webservices by calling the page client.php.
-- 
GitLab