diff --git a/ChangeLog b/ChangeLog
index 18496304b2bc2564048c184e10c5f02fdbf428aa..9de89381ea0aca5de159a6e4439478eea3d92cec 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@ English Dolibarr ChangeLog
 ***** ChangeLog for 3.0 compared to 2.9 *****
 
 For users:
+- New: Add a weather on dashboard
 - New: Add a Paypal module
 - New: Can choose third party to use in point of sale module during logon.
 - New: A lot of enhancements into ECM module:
diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php
index 7ce513d7797cbd8f40f1ea13c90a7d876f199a38..ba7a4ffba57e15e12a7b439eb33b1e9230c6a1ab 100644
--- a/htdocs/admin/delais.php
+++ b/htdocs/admin/delais.php
@@ -280,6 +280,36 @@ else
 
 }
 
+// Show logo for weather
+print $langs->trans("DescWeather").'<br>';
+
+$offset=0;
+$cursor=10; // By default
+//if (! empty($conf->global->MAIN_METEO_OFFSET)) $offset=$conf->global->MAIN_METEO_OFFSET;
+//if (! empty($conf->global->MAIN_METEO_GAP)) $cursor=$conf->global->MAIN_METEO_GAP;
+$level0=$offset;           if (! empty($conf->global->MAIN_METEO_LEVEL0)) $level0=$conf->global->MAIN_METEO_LEVEL0;
+$level1=$offset+1*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL1)) $level1=$conf->global->MAIN_METEO_LEVEL1;
+$level2=$offset+2*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL2)) $level2=$conf->global->MAIN_METEO_LEVEL2;
+$level3=$offset+3*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL3)) $level3=$conf->global->MAIN_METEO_LEVEL3;
+$text=''; $options='height="64px"';
+print '<table>';
+print '<tr><td>';
+print img_picto_common($text,'weather/weather-clear.png',$options);
+print '</td><td><= '.$level0.'</td></tr>';
+print '<tr><td>';
+print img_picto_common($text,'weather/weather-few-clouds.png',$options);
+print '</td><td><= '.$level1.'</td></tr>';
+print '<tr><td>';
+print img_picto_common($text,'weather/weather-clouds.png',$options);
+print '</td><td><= '.$level2.'</td></tr>';
+print '<tr><td>';
+print img_picto_common($text,'weather/weather-many-clouds.png',$options);
+print '</td><td><= '.$level3.'</td></tr>';
+print '<tr><td>';
+print img_picto_common($text,'weather/weather-storm.png',$options);
+print '</td><td>> '.$level3.'</td></tr>';
+
+
 
 $db->close();
 
diff --git a/htdocs/index.php b/htdocs/index.php
index de0d06d0c358f2212fd968e9d1db53c5a3b339ad..ba4b40a0dcc87da1fa9ccb9d9b10d6e4ad93a51c 100644
--- a/htdocs/index.php
+++ b/htdocs/index.php
@@ -258,8 +258,12 @@ print '</td><td width="65%" valign="top" class="notopnoleftnoright">';
 
 
 /*
- * Dolibarr Working Board
+ * Dolibarr Working Board with weather
  */
+$showweather=1;
+$rowspan=0;
+$dashboardlines=array();
+
 print '<table class="noborder" width="100%">';
 print '<tr class="liste_titre">';
 print '<td colspan="2">'.$langs->trans("DolibarrWorkBoard").'</td>';
@@ -267,16 +271,15 @@ print '<td align="right">'.$langs->trans("Number").'</td>';
 print '<td align="right">'.$langs->trans("Late").'</td>';
 print '<td>&nbsp;</td>';
 print '<td width="20">&nbsp;</td>';
+if ($showweather) print '<td width="80">&nbsp;</td>';
 print '</tr>';
 
-$nboflate=0;
-$var=true;
 
 //
 // Do not include sections without management permission
 //
 
-// Number actions to do (late)
+// Number of actions to do (late)
 if ($conf->agenda->enabled && $user->rights->agenda->myactions->read)
 {
 	include_once(DOL_DOCUMENT_ROOT."/comm/action/class/actioncomm.class.php");
@@ -284,49 +287,27 @@ if ($conf->agenda->enabled && $user->rights->agenda->myactions->read)
 	$board->load_board($user);
 	$board->warning_delay=$conf->actions->warning_delay/60/60/24;
 	$board->label=$langs->trans("ActionsToDo");
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Actions"),"task").'</td><td>'.$board->label.'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/action/listactions.php?status=todo">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/comm/action/listactions.php?status=todo">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($board->warning_delay).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+	$board->url=DOL_URL_ROOT.'/comm/action/listactions.php?status=todo&mainmenu=agenda';
+    $board->img=img_object($langs->trans("Actions"),"task");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number customer orders a deal
+// Number of customer orders a deal
 if ($conf->commande->enabled && $user->rights->commande->lire)
 {
 	include_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
 	$board=new Commande($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Orders"),"order").'</td><td>'.$langs->trans("OrdersToProcess").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->commande->traitement->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->commande->traitement->warning_delay/60/60/24;
+    $board->label=$langs->trans("OrdersToProcess");
+    $board->url=DOL_URL_ROOT.'/commande/liste.php?viewstatut=-2';
+    $board->img=img_object($langs->trans("Orders"),"order");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number propale open (expired)
+// Number of commercial proposals opened (expired)
 if ($conf->propal->enabled && $user->rights->propale->lire)
 {
 	$langs->load("propal");
@@ -334,24 +315,15 @@ if ($conf->propal->enabled && $user->rights->propale->lire)
 	include_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php");
 	$board=new Propal($db);
 	$board->load_board($user,"opened");
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Propals"),"propal").'</td><td>'.$langs->trans("PropalsToClose").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=1">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=1">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->propal->cloture->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
+    $board->warning_delay=$conf->propal->cloture->warning_delay/60/60/24;
+    $board->label=$langs->trans("PropalsToClose");
+    $board->url=DOL_URL_ROOT.'/comm/propal.php?viewstatut=1';
+    $board->img=img_object($langs->trans("Propals"),"propal");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number propale CLOSED signed (billed)
+// Number of commercial proposals CLOSED signed (billed)
 if ($conf->propal->enabled && $user->rights->propale->lire)
 {
 	$langs->load("propal");
@@ -359,25 +331,15 @@ if ($conf->propal->enabled && $user->rights->propale->lire)
 	include_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php");
 	$board=new Propal($db);
 	$board->load_board($user,"signed");
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Propals"),"propal").'</td><td>'.$langs->trans("PropalsToBill").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=2">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/comm/propal.php?viewstatut=2">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->propal->facturation->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->propal->facturation->warning_delay/60/60/24;
+    $board->label=$langs->trans("PropalsToBill");
+    $board->url=DOL_URL_ROOT.'/comm/propal.php?viewstatut=2';
+    $board->img=img_object($langs->trans("Propals"),"propal");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number services is enabled (delayed)
+// Number of services enabled (delayed)
 if ($conf->contrat->enabled && $user->rights->contrat->lire)
 {
 	$langs->load("contracts");
@@ -385,22 +347,12 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire)
 	include_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
 	$board=new Contrat($db);
 	$board->load_board($user,"inactives");
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Contract"),"contract").'</td><td>'.$langs->trans("BoardNotActivatedServices").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->contrat->services->inactifs->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->contrat->services->inactifs->warning_delay/60/60/24;
+    $board->label=$langs->trans("BoardNotActivatedServices");
+    $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=0';
+    $board->img=img_object($langs->trans("Contract"),"contract");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
 // Number of active services (expired)
@@ -411,22 +363,12 @@ if ($conf->contrat->enabled && $user->rights->contrat->lire)
 	include_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
 	$board=new Contrat($db);
 	$board->load_board($user,"expired");
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Contract"),"contract").'</td><td>'.$langs->trans("BoardRunningServices").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->contrat->services->expires->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->contrat->services->expires->warning_delay/60/60/24;
+    $board->label=$langs->trans("BoardRunningServices");
+    $board->url=DOL_URL_ROOT.'/contrat/services.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired';
+    $board->img=img_object($langs->trans("Contract"),"contract");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
 // Number of supplier invoices (has paid)
@@ -437,25 +379,15 @@ if ($conf->fournisseur->enabled && $conf->facture->enabled && $user->rights->fac
 	include_once(DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.facture.class.php");
 	$board=new FactureFournisseur($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Bills"),"bill").'</td><td>'.$langs->trans("SupplierBillsToPay").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->facture->fournisseur->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24;
+    $board->label=$langs->trans("SupplierBillsToPay");
+    $board->url=DOL_URL_ROOT.'/fourn/facture/index.php?filtre=paye:0';
+    $board->img=img_object($langs->trans("Bills"),"bill");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number invoices customers (has paid)
+// Number of invoices customers (has paid)
 if ($conf->facture->enabled && $user->rights->facture->lire)
 {
 	$langs->load("bills");
@@ -463,25 +395,15 @@ if ($conf->facture->enabled && $user->rights->facture->lire)
 	include_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
 	$board=new Facture($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Bills"),"bill").'</td><td>'.$langs->trans("CustomerBillsUnpaid").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/facture/impayees.php">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/compta/facture/impayees.php">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->facture->client->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->facture->client->warning_delay/60/60/24;
+    $board->label=$langs->trans("CustomerBillsUnpaid");
+    $board->url=DOL_URL_ROOT.'/compta/facture/impayees.php';
+    $board->img=img_object($langs->trans("Bills"),"bill");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number Scripture closer
+// Number of transactions to conciliate
 if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id)
 {
 	$langs->load("banks");
@@ -489,25 +411,15 @@ if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id
 	include_once(DOL_DOCUMENT_ROOT."/compta/bank/class/account.class.php");
 	$board=new Account($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("TransactionsToConciliate"),"payment").'</td><td>'.$langs->trans("TransactionsToConciliate").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->bank->rappro->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->bank->rappro->warning_delay/60/60/24;
+    $board->label=$langs->trans("TransactionsToConciliate");
+    $board->url=DOL_URL_ROOT.'/compta/bank/index.php?leftmenu=bank&mainmenu=bank';
+    $board->img=img_object($langs->trans("TransactionsToConciliate"),"payment");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Number Scripture closer
+// Number of cheque to send
 if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id)
 {
 	$langs->load("banks");
@@ -515,25 +427,15 @@ if ($conf->banque->enabled && $user->rights->banque->lire && ! $user->societe_id
 	include_once(DOL_DOCUMENT_ROOT."/compta/paiement/cheque/class/remisecheque.class.php");
 	$board=new RemiseCheque($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("BankChecksToReceipt"),"payment").'</td><td>'.$langs->trans("BankChecksToReceipt").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->bank->cheque->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->bank->cheque->warning_delay/60/60/24;
+    $board->label=$langs->trans("BankChecksToReceipt");
+    $board->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=accountancy';
+    $board->img=img_object($langs->trans("BankChecksToReceipt"),"payment");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-// Participant Number valid (awaiting assessment)
+// Number of foundation members
 if ($conf->adherent->enabled && $user->rights->adherent->lire && ! $user->societe_id)
 {
 	$langs->load("members");
@@ -541,35 +443,63 @@ if ($conf->adherent->enabled && $user->rights->adherent->lire && ! $user->societ
 	include_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php");
 	$board=new Adherent($db);
 	$board->load_board($user);
-
-	$var=!$var;
-	print '<tr '.$bc[$var].'><td width="16">'.img_object($langs->trans("Members"),"user").'</td><td>'.$langs->trans("Members").'</td>';
-	print '<td align="right"><a href="'.DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1">'.$board->nbtodo.'</a></td>';
-	print '<td align="right">';
-	print '<a href="'.DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1">';
-	print $board->nbtodolate;
-	print '</a></td><td nowrap align="right">';
-	print ' (>'.ceil($conf->adherent->cotisation->warning_delay/60/60/24).' '.$langs->trans("days").')';
-	print '</td>';
-	print '<td>';
-	if ($board->nbtodolate > 0) { print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning"); $nboflate+=$board->nbtodolate; }
-	else print '&nbsp;';
-	print '</td>';
-	print '</tr>';
-	print "\n";
+    $board->warning_delay=$conf->adherent->cotisation->warning_delay/60/60/24;
+    $board->label=$langs->trans("MembersWithSubscriptionToReceive");
+    $board->url=DOL_URL_ROOT.'/adherents/liste.php?mainmenu=members&statut=1';
+    $board->img=img_object($langs->trans("Members"),"user");
+    $rowspan++;
+    $dashboardlines[]=$board;
 }
 
-print '</table>';
+// Calculate total nb of late
+$totallate=0;
+foreach($dashboardlines as $key => $board)
+{
+    if ($board->nbtodolate > 0) $totallate+=$board->nbtodolate;
+}
 
-if ($nboflate > 0)
+// Show dashboard
+$var=true;
+foreach($dashboardlines as $key => $board)
 {
-	print '<br>';
-	//print '<table width="100%" class="border"><tr><td>';
-	print '<div class="warning">'.img_picto($langs->trans("Alert"),'warning').' '.$langs->trans("WarningYouHaveAtLeastOneTaskLate").'</div>';
-	//print '</td></tr></table>';
+    $var=!$var;
+    print '<tr '.$bc[$var].'><td width="16">'.$board->img.'</td><td>'.$board->label.'</td>';
+    print '<td align="right"><a href="'.$board->url.'">'.$board->nbtodo.'</a></td>';
+    print '<td align="right">';
+    print '<a href="'.$board->url.'">';
+    print $board->nbtodolate;
+    print '</a></td>';
+    print '<td align="left">';
+    if ($board->nbtodolate > 0) print img_picto($langs->trans("NActionsLate",$board->nbtodolate),"warning");
+    else print '&nbsp;';
+    print '</td>';
+    print '<td nowrap="nowrap" align="right">';
+    print ' (>'.ceil($board->warning_delay).' '.$langs->trans("days").')';
+    print '</td>';
+    if ($showweather)
+    {
+        print '<td rowspan="'.$rowspan.'" width="80" style="border-left: 1px solid #DDDDDD" align="center">';
+        $text='';
+        if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate");
+        $options='height="64px"';
+        if ($rowspan <= 2) $options='height="24"';  // Weather logo is smaller if dashboard has few elements
+        else if ($rowspan <= 3) $options='height="48"';  // Weather logo is smaller if dashboard has few elements
+        print showWeather($totallate,$text,$options);
+        //print showWeather(0,'');
+        //print showWeather(40,$text);
+        print '</td>';
+        $showweather=0;
+    }
+    print '</tr>';
+    print "\n";
 }
 
-print '</td></tr></table>';
+
+print '</table>';   // End table array
+
+
+print '</td></tr></table>';      // End table left area
+
 print '<br>';
 
 
@@ -619,4 +549,36 @@ if ($user->admin && empty($conf->global->MAIN_REMOVE_INSTALL_WARNING))
 $db->close();
 
 llxFooter('$Date$ - $Revision$');
+
+
+/**
+ *  Show weather logo. Logo to show depends on $totallate and values for
+ *  $conf->global->MAIN_METEO_OFFSET
+ *  $conf->global->MAIN_METEO_GAP
+ *  @param      $totallate      Nb of element late
+ *  @param      $text           Text to show on logo
+ *  @param      $options        More parameters on img tag
+ *  @return     string          Return img tag of weather
+ */
+function showWeather($totallate,$text,$options)
+{
+    global $conf;
+
+    $out='';
+    $offset=0;
+    $cursor=10; // By default
+    //if (! empty($conf->global->MAIN_METEO_OFFSET)) $offset=$conf->global->MAIN_METEO_OFFSET;
+    //if (! empty($conf->global->MAIN_METEO_GAP)) $cursor=$conf->global->MAIN_METEO_GAP;
+    $level0=$offset;           if (! empty($conf->global->MAIN_METEO_LEVEL0)) $level0=$conf->global->MAIN_METEO_LEVEL0;
+    $level1=$offset+1*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL1)) $level1=$conf->global->MAIN_METEO_LEVEL1;
+    $level2=$offset+2*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL2)) $level2=$conf->global->MAIN_METEO_LEVEL2;
+    $level3=$offset+3*$cursor; if (! empty($conf->global->MAIN_METEO_LEVEL3)) $level3=$conf->global->MAIN_METEO_LEVEL3;
+
+    if ($totallate <= $level0) $out.=img_picto_common($text,'weather/weather-clear.png',$options);
+    if ($totallate > $level0 && $totallate <= $level1) $out.=img_picto_common($text,'weather/weather-few-clouds.png',$options);
+    if ($totallate > $level1 && $totallate <= $level2) $out.=img_picto_common($text,'weather/weather-clouds.png',$options);
+    if ($totallate > $level2 && $totallate <= $level3) $out.=img_picto_common($text,'weather/weather-many-clouds.png',$options);
+    if ($totallate > $level3) $out.=img_picto_common($text,'weather/weather-storm.png',$options);
+    return $out;
+}
 ?>
\ No newline at end of file
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 73b49cf36c9f8975ec411fed2a8c323bed0d4568..60229b25bc7ad22fc472b2d56a5e30dde343c2ea 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -283,6 +283,7 @@ ListOfDirectoriesForModelGenODT=List of directories containing templates files w
 NumberOfModelFilesFound=Number of ODT templates files found in those directories
 ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
 FirstnameNamePosition=Position of firstname/name
+DescWeather=The following pictures will be shown on dashboard when number of late actions reach the following values:
 
 # Modules
 Module0Name=Users & groups
diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
index 7b85de1e8f03f87993687d5430b2b37cb1a0fdb0..98ad76d1fe4875e603ff08e83267e0ea25655f29 100644
--- a/htdocs/langs/en_US/members.lang
+++ b/htdocs/langs/en_US/members.lang
@@ -1,163 +1,164 @@
-# Dolibarr language file - en_US - members
-CHARSET=UTF-8
-MembersArea=Members area
-PublicMembersArea=Public members area
-MemberCard=Member card
-SubscriptionCard=Subscription card
-Member=Member
-Members=Members
-MemberAccount=Member login
-ShowMember=Show member card
-UserNotLinkedToMember=User not linked to a member
-MembersTickets=Members Tickets
-FundationMembers=Foundation members
-Attributs=Attributes
-ErrorMemberTypeNotDefined=Member type not defined
-ListOfPublicMembers=List of public members
-ListOfValidatedPublicMembers=List of validated public members
-ErrorThisMemberIsNotPublic=This member is not public
-ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: <b>%s</b>, login: <b>%s</b>) is already linked to a third party <b>%s</b>. Remove this link first because a third party can't be linked to only a member (and vice versa).
-ErrorUserPermissionAllowsToLinksToItselfOnly=For security reasons, you must be granted permissions to edit all users to be able to link a member to a user that is not yours.
-ThisIsContentOfYourCard=This is details of your card
-CardContent=Content of your member card
-SetLinkToUser=Link to a Dolibarr user
-SetLinkToThirdParty=Link to a Dolibarr third party
-MembersCards=Members business cards
-MembersList=List of members
-MembersListToValid=List of draft members (to be validated)
-MembersListValid=List of valid members
-MembersListUpToDate=List of valid members with up to date subscription
-MembersListNotUpToDate=List of valid members with subscription out of date
-MembersListResiliated=List of resiliated members
-MembersListQualified=List of qualified members
-MenuMembersToValidate=Draft members
-MenuMembersValidated=Validated members
-MenuMembersUpToDate=Up to date members
-MenuMembersNotUpToDate=Out of date members
-MenuMembersResiliated=Resiliated members
-DateAbonment=Subscription date
-DateSubscription=Subscription date
-DateNextSubscription=Next subscription
-DateEndSubscription=Subscription end date
-EndSubscription=End subscription
-SubscriptionId=Subscription id
-MemberId=Member id 
-NewMember=New member
-NewType=New member type
-MemberType=Member type
-MemberTypeId=Member type id
-MemberTypeLabel=Member type label
-MembersTypes=Members types
-MembersAttributes=Members attributes
-SearchAMember=Search a member
-MemberStatusDraft=Draft (needs to be validated)
-MemberStatusDraftShort=Draft
-MemberStatusActive=Validated (waiting subscription)
-MemberStatusActiveShort=Validated
-MemberStatusActiveLate=subscription expired
-MemberStatusActiveLateShort=Expired
-MemberStatusPaid=Subscription up to date
-MemberStatusPaidShort=Up to date
-MemberStatusResiliated=Resiliated member
-MemberStatusResiliatedShort=Resiliated
-MembersStatusToValid=Draft members
-MembersStatusToValidShort=Draft members
-MembersStatusValidated=Validated members
-MembersStatusPaid=Subscription up to date
-MembersStatusPaidShort=Up to date
-MembersStatusNotPaid=Subscription out of date
-MembersStatusNotPaidShort=Out of date
-MembersStatusResiliated=Resiliated members
-MembersStatusResiliatedShort=Resiliated members
-NewCotisation=New contribution
-PaymentSubscription=New contribution payment
-EditMember=Edit member
-SubscriptionEndDate=Subscription's end date
-NewAttribute=New attribute
-AttributeCode=Attribute code
-OptionalFieldsSetup=Optional fields setup
-MembersTypeSetup=Members type setup
-NewSubscription=New subscription
-Subscription=Subscription
-Subscriptions=Subscriptions
-SubscriptionLate=Late
-SubscriptionNotReceived=Subscription never received
-SubscriptionLateShort=Late
-SubscriptionNotReceivedShort=Never received
-ListOfSubscriptions=List of subscriptions
-SendCardByMail=Send card by Email
-AddMember=Add member
-MemberType=Member type
-NoTypeDefinedGoToSetup=No member types defined. Go to setup - Members types
-NewMemberType=New member type
-WelcomeEMail=Welcome e-mail
-SubscriptionRequired=Subscription required
-EditType=Edit member type
-DeleteType=Delete
-VoteAllowed=Vote allowed
-Physical=Physical
-Moral=Moral
-MorPhy=Moral/Physical
-Reenable=Reenable
-ResiliateMember=Resiliate a member
-ConfirmResiliateMember=Are you sure you want to resiliate this member ?
-DeleteMember=Delete a member
-ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions) ?
-DeleteSubscription=Delete a subscription
-ConfirmDeleteSubscription=Are you sure you want to delete this subscription ?
-Filehtpasswd=htpasswd file
-ValidateMember=Validate a member
-ConfirmValidateMember=Are you sure you want to validate this member ?
-FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database. 
-PublicMemberList=Public member list
-BlankSubscriptionForm=Subscription form
-MemberPublicLinks=Public links/pages
-ExportDataset_member_1=Members and subscriptions
-ImportDataset_member_1=Members
-LastMembers=Last %s members
-LastMembersModified=Last %s modified members
-AttributeName=Attribute name
-FieldEdition=% field edition
-AlphaNumOnlyCharsAndNoSpace=only alphanumericals characters without space
-String=String
-Text=Text
-Int=Int
-Date=Date
-DateAndTime=Date and time
-PublicMemberCard=Member public card
-MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe
-AddSubscription=Add subscription
-ShowSubscription=Show subscription
-MemberModifiedInDolibarr=Member modified in Dolibarr
-SendAnEMailToMember=Send information email to member
-DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=EMail subject for member autosubscription
-DescADHERENT_AUTOREGISTER_MAIL=EMail for member autosubscription
-DescADHERENT_MAIL_VALID_SUBJECT=EMail subject for member validation
-DescADHERENT_MAIL_VALID=EMail for member validation
-DescADHERENT_MAIL_COTIS_SUBJECT=EMail subject for subscription
-DescADHERENT_MAIL_COTIS=EMail for subscription
-DescADHERENT_MAIL_RESIL_SUBJECT=EMail subject for member resiliation
-DescADHERENT_MAIL_RESIL=EMail for member resiliation
-DescADHERENT_MAIL_FROM=Sender EMail for automatic emails
-DescADHERENT_ETIQUETTE_TYPE=Format of labels page
-DescADHERENT_CARD_TYPE=Format of cards page
-DescADHERENT_CARD_HEADER_TEXT=Text printed on top of member cards
-DescADHERENT_CARD_TEXT=Text printed on member cards (align on left)
-DescADHERENT_CARD_TEXT_RIGHT=Text printed on member cards (align on right)
-DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards
-DescADHERENT_MAILMAN_LISTS=List(s) for automatic insription of new members (separated by a comma)
-ShowTypeCard=Show type '%s'
-HTPasswordExport=htpassword file generation
-NoThirdPartyAssociatedToMember=No third party associated to this member
-ThirdPartyDolibarr=Dolibarr third party
-MembersAndSubscriptions= Members and Suscriptions
-MoreActions=Complementary action on recording
-MoreActionBankDirect=Create a direct transaction record on account
-MoreActionBankViaInvoice=Create an invoice and payment on account
-MoreActionInvoiceOnly=Create an invoice with no payment
-LinkToGeneratedPages=Generate visit cards
-LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with business cards for all your members or a particular member.
-DocForAllMembersCards=Generate business cards for all members (Format for output actually setup : <b>%s</b>)
-DocForOneMemberCards=Generate business cards for a particular member (Format for output actually setup: <b>%s</b>)
-DocForLabels=Generate address sheets (Format for output actually setup: <b>%s</b>)
+# Dolibarr language file - en_US - members
+CHARSET=UTF-8
+MembersArea=Members area
+PublicMembersArea=Public members area
+MemberCard=Member card
+SubscriptionCard=Subscription card
+Member=Member
+Members=Members
+MemberAccount=Member login
+ShowMember=Show member card
+UserNotLinkedToMember=User not linked to a member
+MembersTickets=Members Tickets
+FundationMembers=Foundation members
+Attributs=Attributes
+ErrorMemberTypeNotDefined=Member type not defined
+ListOfPublicMembers=List of public members
+ListOfValidatedPublicMembers=List of validated public members
+ErrorThisMemberIsNotPublic=This member is not public
+ErrorMemberIsAlreadyLinkedToThisThirdParty=Another member (name: <b>%s</b>, login: <b>%s</b>) is already linked to a third party <b>%s</b>. Remove this link first because a third party can't be linked to only a member (and vice versa).
+ErrorUserPermissionAllowsToLinksToItselfOnly=For security reasons, you must be granted permissions to edit all users to be able to link a member to a user that is not yours.
+ThisIsContentOfYourCard=This is details of your card
+CardContent=Content of your member card
+SetLinkToUser=Link to a Dolibarr user
+SetLinkToThirdParty=Link to a Dolibarr third party
+MembersCards=Members business cards
+MembersList=List of members
+MembersListToValid=List of draft members (to be validated)
+MembersListValid=List of valid members
+MembersListUpToDate=List of valid members with up to date subscription
+MembersListNotUpToDate=List of valid members with subscription out of date
+MembersListResiliated=List of resiliated members
+MembersListQualified=List of qualified members
+MenuMembersToValidate=Draft members
+MenuMembersValidated=Validated members
+MenuMembersUpToDate=Up to date members
+MenuMembersNotUpToDate=Out of date members
+MenuMembersResiliated=Resiliated members
+MembersWithSubscriptionToReceive=Members with subscription to receive
+DateAbonment=Subscription date
+DateSubscription=Subscription date
+DateNextSubscription=Next subscription
+DateEndSubscription=Subscription end date
+EndSubscription=End subscription
+SubscriptionId=Subscription id
+MemberId=Member id 
+NewMember=New member
+NewType=New member type
+MemberType=Member type
+MemberTypeId=Member type id
+MemberTypeLabel=Member type label
+MembersTypes=Members types
+MembersAttributes=Members attributes
+SearchAMember=Search a member
+MemberStatusDraft=Draft (needs to be validated)
+MemberStatusDraftShort=Draft
+MemberStatusActive=Validated (waiting subscription)
+MemberStatusActiveShort=Validated
+MemberStatusActiveLate=subscription expired
+MemberStatusActiveLateShort=Expired
+MemberStatusPaid=Subscription up to date
+MemberStatusPaidShort=Up to date
+MemberStatusResiliated=Resiliated member
+MemberStatusResiliatedShort=Resiliated
+MembersStatusToValid=Draft members
+MembersStatusToValidShort=Draft members
+MembersStatusValidated=Validated members
+MembersStatusPaid=Subscription up to date
+MembersStatusPaidShort=Up to date
+MembersStatusNotPaid=Subscription out of date
+MembersStatusNotPaidShort=Out of date
+MembersStatusResiliated=Resiliated members
+MembersStatusResiliatedShort=Resiliated members
+NewCotisation=New contribution
+PaymentSubscription=New contribution payment
+EditMember=Edit member
+SubscriptionEndDate=Subscription's end date
+NewAttribute=New attribute
+AttributeCode=Attribute code
+OptionalFieldsSetup=Optional fields setup
+MembersTypeSetup=Members type setup
+NewSubscription=New subscription
+Subscription=Subscription
+Subscriptions=Subscriptions
+SubscriptionLate=Late
+SubscriptionNotReceived=Subscription never received
+SubscriptionLateShort=Late
+SubscriptionNotReceivedShort=Never received
+ListOfSubscriptions=List of subscriptions
+SendCardByMail=Send card by Email
+AddMember=Add member
+MemberType=Member type
+NoTypeDefinedGoToSetup=No member types defined. Go to setup - Members types
+NewMemberType=New member type
+WelcomeEMail=Welcome e-mail
+SubscriptionRequired=Subscription required
+EditType=Edit member type
+DeleteType=Delete
+VoteAllowed=Vote allowed
+Physical=Physical
+Moral=Moral
+MorPhy=Moral/Physical
+Reenable=Reenable
+ResiliateMember=Resiliate a member
+ConfirmResiliateMember=Are you sure you want to resiliate this member ?
+DeleteMember=Delete a member
+ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions) ?
+DeleteSubscription=Delete a subscription
+ConfirmDeleteSubscription=Are you sure you want to delete this subscription ?
+Filehtpasswd=htpasswd file
+ValidateMember=Validate a member
+ConfirmValidateMember=Are you sure you want to validate this member ?
+FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database. 
+PublicMemberList=Public member list
+BlankSubscriptionForm=Subscription form
+MemberPublicLinks=Public links/pages
+ExportDataset_member_1=Members and subscriptions
+ImportDataset_member_1=Members
+LastMembers=Last %s members
+LastMembersModified=Last %s modified members
+AttributeName=Attribute name
+FieldEdition=% field edition
+AlphaNumOnlyCharsAndNoSpace=only alphanumericals characters without space
+String=String
+Text=Text
+Int=Int
+Date=Date
+DateAndTime=Date and time
+PublicMemberCard=Member public card
+MemberNotOrNoMoreExpectedToSubscribe=Member not or no more expected to subscribe
+AddSubscription=Add subscription
+ShowSubscription=Show subscription
+MemberModifiedInDolibarr=Member modified in Dolibarr
+SendAnEMailToMember=Send information email to member
+DescADHERENT_AUTOREGISTER_MAIL_SUBJECT=EMail subject for member autosubscription
+DescADHERENT_AUTOREGISTER_MAIL=EMail for member autosubscription
+DescADHERENT_MAIL_VALID_SUBJECT=EMail subject for member validation
+DescADHERENT_MAIL_VALID=EMail for member validation
+DescADHERENT_MAIL_COTIS_SUBJECT=EMail subject for subscription
+DescADHERENT_MAIL_COTIS=EMail for subscription
+DescADHERENT_MAIL_RESIL_SUBJECT=EMail subject for member resiliation
+DescADHERENT_MAIL_RESIL=EMail for member resiliation
+DescADHERENT_MAIL_FROM=Sender EMail for automatic emails
+DescADHERENT_ETIQUETTE_TYPE=Format of labels page
+DescADHERENT_CARD_TYPE=Format of cards page
+DescADHERENT_CARD_HEADER_TEXT=Text printed on top of member cards
+DescADHERENT_CARD_TEXT=Text printed on member cards (align on left)
+DescADHERENT_CARD_TEXT_RIGHT=Text printed on member cards (align on right)
+DescADHERENT_CARD_FOOTER_TEXT=Text printed on bottom of member cards
+DescADHERENT_MAILMAN_LISTS=List(s) for automatic insription of new members (separated by a comma)
+ShowTypeCard=Show type '%s'
+HTPasswordExport=htpassword file generation
+NoThirdPartyAssociatedToMember=No third party associated to this member
+ThirdPartyDolibarr=Dolibarr third party
+MembersAndSubscriptions= Members and Suscriptions
+MoreActions=Complementary action on recording
+MoreActionBankDirect=Create a direct transaction record on account
+MoreActionBankViaInvoice=Create an invoice and payment on account
+MoreActionInvoiceOnly=Create an invoice with no payment
+LinkToGeneratedPages=Generate visit cards
+LinkToGeneratedPagesDesc=This screen allows you to generate PDF files with business cards for all your members or a particular member.
+DocForAllMembersCards=Generate business cards for all members (Format for output actually setup : <b>%s</b>)
+DocForOneMemberCards=Generate business cards for a particular member (Format for output actually setup: <b>%s</b>)
+DocForLabels=Generate address sheets (Format for output actually setup: <b>%s</b>)
 SubscriptionPayment=Subscription payment
\ No newline at end of file
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 644985ed8969e3dd885fff79420c6c8d50b1038e..0ee3099e98d85e3107f20315a9844e52e0894a62 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -285,6 +285,7 @@ ExampleOfDirectoriesForModelGen=Exemples de syntaxe:<br>c:\mydir<br>/home/mydir<
 FollowingSubstitutionKeysCanBeUsed=En plaçant les tags suivant dans le modèle, vous obtiendrez une subsitution avec la valeur personnalisée lors de la génération du document: 
 FullListOnOnlineDocumentation=Liste complète des tags disponibles sur la documentation utilisateur du module Tiers sur le wiki http://wiki.dolibarr.org
 FirstnameNamePosition=Ordre affichage prénom/nom
+DescWeather=Les graphiques suivant seront affichées sur le tableau de bord si le nombre d'éléments en retard atteints ces valeurs:
 
 # Modules= undefined
 Module0Name= Utilisateurs & groupes
diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang
index 3184c9da197a8eefdadbcf3a8fabd14a9a063864..9309c1cfbfeee3da2fb3dd807b15f62917f5e6be 100644
--- a/htdocs/langs/fr_FR/members.lang
+++ b/htdocs/langs/fr_FR/members.lang
@@ -35,6 +35,7 @@ MenuMembersValidated=Adhérents valides
 MenuMembersUpToDate=Adhérents à jour
 MenuMembersNotUpToDate=Adhérents non à jour
 MenuMembersResiliated=Adhérents résiliés
+MembersWithSubscriptionToReceive=Adhérents avec cotisation à recevoir
 DateAbonment=Date adhésion
 DateSubscription=Date adhésion
 DateNextSubscription=Date prochaine adhésion
diff --git a/htdocs/lib/functions.lib.php b/htdocs/lib/functions.lib.php
index c1ee0c141cc3df98754d41d63c73f528fb03c7c0..b3997d3c59b561d888d20fe7865cdc6e12c9ec6a 100644
--- a/htdocs/lib/functions.lib.php
+++ b/htdocs/lib/functions.lib.php
@@ -1110,12 +1110,15 @@ function img_object($alt, $object, $cssclass='')
 }
 
 /**
- *	\brief      Show picto (generic function)
- *	\param      alt         		Text on alt and title of image
- *	\param      picto       		Name of image file to show (I no extension provided, we use '.png')
- *	\param		options				Attribut supplementaire a la balise img
- *	\param		pictoisfullpath		If 1, image path is a full path
- *	\return     string      		Retourne tag img
+ *	Show picto (generic function)
+ *	@param      alt         		Text on alt and title of image
+ *	@param      picto       		Name of image file to show (If no extension provided, we use '.png'). Image must be stored into img directory.
+ *                                  Example: picto.png                  if picto.png is stored into htdocs/theme/mytheme/img
+ *                                  Example: picto.png@mymodule         if picto.png is stored into htdocs/mymodule/img
+ *                                  Example: /mydir/mysubdir/picto.png  if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
+ *	@param		options				Add more attribute on img tag
+ *	@param		pictoisfullpath		If 1, image path is a full path
+ *	@return     string      		Retourne tag img
  */
 function img_picto($alt, $picto, $options='', $pictoisfullpath=0)
 {
@@ -1135,12 +1138,12 @@ function img_picto($alt, $picto, $options='', $pictoisfullpath=0)
 }
 
 /**
- *	\brief      Show picto (generic function)
- *	\param      alt         		Text on alt and title of image
- *	\param      picto       		Nom de l'image a afficher (Si pas d'extension, on met '.png')
- *	\param		options				Attribut supplementaire a la balise img
- *	\param		pictoisfullpath		If 1, image path is a full path
- *	\return     string      		Retourne tag img
+ *	Show picto (generic function)
+ *	@param      alt         		Text on alt and title of image
+ *	@param      picto       		Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory.
+ *	@param		options				Add more attribute on img tag
+ *	@param		pictoisfullpath		If 1, image path is a full path
+ *	@return     string      		Retourne tag img
  */
 function img_picto_common($alt, $picto, $options='', $pictoisfullpath=0)
 {