diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php
index 22d6f6a30876fec1c75e9f3adaba8fdcda2ff09e..78f85dbb9aa14a52c2b2eee1534dc283733473aa 100644
--- a/htdocs/admin/company.php
+++ b/htdocs/admin/company.php
@@ -18,27 +18,28 @@
  */
 
 /**
-		\file       htdocs/admin/company.php
-		\ingroup    company
-		\brief      Page d'accueil de l'espace administration/configuration
-		\version    $Id$
-*/
+ *	\file       htdocs/admin/company.php
+ *	\ingroup    company
+ *	\brief      Page d'accueil de l'espace administration/configuration
+ *	\version    $Id$
+ */
 
 require("./pre.inc.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/admin.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/images.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formcompany.class.php");
 
 $langs->load("admin");
 $langs->load("companies");
 
 if (!$user->admin)
-  accessforbidden();
+accessforbidden();
 
 
 if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
-  || (isset($_POST["action"]) && $_POST["action"] == 'updateedit') )
+|| (isset($_POST["action"]) && $_POST["action"] == 'updateedit') )
 {
 	dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM",$_POST["nom"]);
 	dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADRESSE",$_POST["address"]);
@@ -57,7 +58,7 @@ if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
 		if (eregi('([^\\\/:]+)$',$_FILES["logo"]["name"],$reg))
 		{
 			$original_file=$reg[1];
-			
+				
 			$isimage=image_format_supported($original_file);
 			if ($isimage >= 0)
 			{
@@ -65,16 +66,16 @@ if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
 				if (! is_dir($conf->societe->dir_logos))
 				{
 					create_exdir($conf->societe->dir_logos);
-				}        
+				}
 				if (dol_move_uploaded_file($_FILES["logo"]["tmp_name"],$conf->societe->dir_logos.'/'.$original_file,1) > 0)
 				{
 					dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO",$original_file);
-					
+						
 					// Create thumbs of logo
 					if ($isimage > 0)
 					{
 						$quality = 80;
-						
+
 						$imgThumbSmall = vignette($conf->societe->dir_logos.'/'.$original_file, 200, 100, '_small', $quality);
 						if (eregi('([^\\\/:]+)$',$imgThumbSmall,$reg))
 						{
@@ -82,7 +83,7 @@ if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
 							dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL",$imgThumbSmall);
 						}
 						else dolibarr_syslog($imgThumbSmall);
-						
+
 						// Cr�ation de la vignette de la page "Soci�t�/Institution"
 						$imgThumbMini = vignette($conf->societe->dir_logos.'/'.$original_file, 100, 30, '_mini', $quality);
 						if (eregi('([^\\\/:]+)$',$imgThumbMini,$reg))
@@ -102,7 +103,7 @@ if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
 			else
 			{
 				$message .= '<div class="error">'.$langs->trans("ErrorOnlyPngJpgSupported").'</div>';
-			}	    
+			}
 		}
 	}
 
@@ -113,7 +114,7 @@ if ( (isset($_POST["action"]) && $_POST["action"] == 'update')
 	dolibarr_set_const($db, "MAIN_INFO_APE",$_POST["ape"]);
 	dolibarr_set_const($db, "MAIN_INFO_RCS",$_POST["rcs"]);
 	dolibarr_set_const($db, "MAIN_INFO_TVAINTRA",$_POST["tva"]);
-	
+
 	dolibarr_set_const($db, "SOCIETE_FISCAL_MONTH_START",$_POST["fiscalmonthstart"]);
 
 	dolibarr_set_const($db, "FACTURE_TVAOPTION",$_POST["optiontva"]);
@@ -142,7 +143,7 @@ if ($_GET["action"] == 'addthumb')
 				dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL",$imgThumbSmall);
 			}
 			else dolibarr_syslog($imgThumbSmall);
-			
+				
 			// Cr�ation de la vignette de la page "Soci�t�/Institution"
 			$imgThumbMini = vignette($conf->societe->dir_logos.'/'.$_GET["file"], 100, 30, '_mini',80);
 			if (image_format_supported($imgThumbSmall) >= 0 && eregi('([^\\\/:]+)$',$imgThumbMini,$reg))
@@ -155,7 +156,7 @@ if ($_GET["action"] == 'addthumb')
 			Header("Location: ".$_SERVER["PHP_SELF"]);
 			exit;
 		}
-  		else 
+		else
 		{
 			$message .= '<div class="error">'.$langs->trans("ErrorImageFormatNotSupported").'</div>';
 			dolibarr_syslog($langs->transnoentities("ErrorImageFormatNotSupported"),LOG_WARNING);
@@ -174,12 +175,12 @@ if ($_GET["action"] == 'removelogo')
 	dol_delete_file($logofile);
 	dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO");
 	$mysoc->logo='';
-	
+
 	$logosmallfile=$conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_small;
 	dol_delete_file($logosmallfile);
 	dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_SMALL");
 	$mysoc->logo_small='';
-	
+
 	$logominifile=$conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini;
 	dol_delete_file($logominifile);
 	dolibarr_del_const($db, "MAIN_INFO_SOCIETE_LOGO_MINI");
@@ -193,6 +194,8 @@ if ($_GET["action"] == 'removelogo')
 llxHeader();
 
 $form = new Form($db);
+$formcompany = new FormCompany($db);
+
 $countrynotdefined='<font class="error">'.$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')</font>';
 
 print_fiche_titre($langs->trans("CompanyFundation"),'','setup');
@@ -201,442 +204,442 @@ print $langs->trans("CompanyFundationDesc")."<br>\n";
 print "<br>\n";
 
 if ((isset($_GET["action"]) && $_GET["action"] == 'edit')
- || (isset($_POST["action"]) && $_POST["action"] == 'updateedit') )
+|| (isset($_POST["action"]) && $_POST["action"] == 'updateedit') )
 {
-  /**
-   * Edition des param�tres
-   */
-    
-  print '<form enctype="multipart/form-data" method="post" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
-  print '<input type="hidden" name="action" value="update">';
-  $var=true;
-  
-  print '<table class="noborder" width="100%">';
-  print '<tr class="liste_titre"><td width="35%">'.$langs->trans("CompanyInfo").'</td><td>'.$langs->trans("Value").'</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyName").'</td><td>';
-  print '<input name="nom" size="30" value="'. $conf->global->MAIN_INFO_SOCIETE_NOM . '"></td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyAddress").'</td><td>';
-  print '<textarea name="address" cols="60" rows="'.ROWS_3.'">'. $conf->global->MAIN_INFO_SOCIETE_ADRESSE . '</textarea></td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyZip").'</td><td>';
-  print '<input name="cp" value="'. $conf->global->MAIN_INFO_SOCIETE_CP . '" size="10"></td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyTown").'</td><td>';
-  print '<input name="ville" size="30" value="'. $conf->global->MAIN_INFO_SOCIETE_VILLE . '"></td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Country").'</td><td>';
-  $form->select_pays($conf->global->MAIN_INFO_SOCIETE_PAYS,'pays_id',($conf->use_javascript_ajax?' onChange="company_save_refresh()"':''));
+	/**
+	 * Edition des param�tres
+	 */
+
+	print '<form enctype="multipart/form-data" method="post" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
+	print '<input type="hidden" name="action" value="update">';
+	$var=true;
+
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre"><td width="35%">'.$langs->trans("CompanyInfo").'</td><td>'.$langs->trans("Value").'</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyName").'</td><td>';
+	print '<input name="nom" size="30" value="'. $conf->global->MAIN_INFO_SOCIETE_NOM . '"></td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyAddress").'</td><td>';
+	print '<textarea name="address" cols="60" rows="'.ROWS_3.'">'. $conf->global->MAIN_INFO_SOCIETE_ADRESSE . '</textarea></td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyZip").'</td><td>';
+	print '<input name="cp" value="'. $conf->global->MAIN_INFO_SOCIETE_CP . '" size="10"></td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyTown").'</td><td>';
+	print '<input name="ville" size="30" value="'. $conf->global->MAIN_INFO_SOCIETE_VILLE . '"></td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Country").'</td><td>';
+	$form->select_pays($conf->global->MAIN_INFO_SOCIETE_PAYS,'pays_id',($conf->use_javascript_ajax?' onChange="company_save_refresh()"':''));
 	if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyCurrency").'</td><td>';
-  $form->select_currency($conf->global->MAIN_MONNAIE,"currency");
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Tel").'</td><td>';
-  print '<input name="tel" value="'. $conf->global->MAIN_INFO_SOCIETE_TEL . '"></td></tr>';
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Fax").'</td><td>';
-  print '<input name="fax" value="'. $conf->global->MAIN_INFO_SOCIETE_FAX . '"></td></tr>';
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Mail").'</td><td>';
-  print '<input name="mail" size="60" value="'. $conf->global->MAIN_INFO_SOCIETE_MAIL . '"></td></tr>';
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Web").'</td><td>';
-  print '<input name="web" size="60" value="'. $conf->global->MAIN_INFO_SOCIETE_WEB . '"></td></tr>';
-  print '</td></tr>'."\n";
-  
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Gencod").'</td><td>';
-  print '<input name="gencod" size="40" value="'. $conf->global->MAIN_INFO_SOCIETE_GENCOD . '"></td></tr>';
-  print '</td></tr>';
-
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td>'.$langs->trans("Logo").' (png,jpg)</td><td>';
-  print '<table width="100%" class="notopnoleftnoright"><tr><td valign="center">';
-  print '<input type="file" class="flat" name="logo" size="50">';
-  print '</td><td valign="middle" align="right">';
-  if ($mysoc->logo_mini && file_exists($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini))
-  {
-  	print '<a href="'.$_SERVER["PHP_SELF"].'?action=removelogo">'.img_delete($langs->trans("Delete")).'</a>';
-    print ' &nbsp; ';
-    print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=companylogo&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
-  }
-  else
-  {
-    print '<img height="30" src="'.DOL_URL_ROOT.'/theme/common/nophoto.jpg">';
-  }
-  print '</td></tr></table>';
-  print '</td></tr>';
-  
-
-
-  $var=!$var;
-  print '<tr '.$bc[$var].'><td valign="top">'.$langs->trans("Note").'</td><td>';
-  print '<textarea class="flat" name="note" cols="60" rows="'.ROWS_4.'">'.$conf->global->MAIN_INFO_SOCIETE_NOTE.'</textarea></td></tr>';
-  print '</td></tr>';
-  
-  print '</table>';
-  
-  print '<br>';
-    
-    // Identifiants de la soci�t� (propre au pays)
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre"><td>'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
-    $var=true;
-
-    $langs->load("companies");
-    
-    // Recupere code pays
-    $code_pays=substr($langs->defaultlang,-2);    // Par defaut, pays de la localisation
-    if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-    {
-        $sql  = "SELECT code from ".MAIN_DB_PREFIX."c_pays";
-        $sql .= " WHERE rowid = ".$conf->global->MAIN_INFO_SOCIETE_PAYS;
-        $resql=$db->query($sql);
-        if ($resql) {
-            $obj = $db->fetch_object($resql);
-            if ($obj->code) $code_pays=$obj->code;
-        }
-        else {
-            dolibarr_print_error($db);
-        }
-    }
-
-    // Capital
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Capital").'</td><td>';
-    print '<input name="capital" size="20" value="' . $conf->global->MAIN_INFO_CAPITAL . '"></td></tr>';
-
-    // Forme juridique
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td>'.$langs->trans("JuridicalStatus").'</td><td>';
-    if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-    {
-        $form->select_forme_juridique($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE,$code_pays);
-    }
-    else
-    {
-        print $countrynotdefined;
-    }
-    print '</td></tr>';
-
-    // ProfID1
-    if ($langs->transcountry("ProfId1",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId1",$code_pays).'</td><td>';
-        if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-        {
-            print '<input name="siren" size="20" value="' . $conf->global->MAIN_INFO_SIREN . '">';
-        }
-        else
-        {
-            print $countrynotdefined;
-        }
-        print '</td></tr>';
-    }
-
-    // ProfId2
-    if ($langs->transcountry("ProfId2",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId2",$code_pays).'</td><td>';
-        if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-        {
-            print '<input name="siret" size="20" value="' . $conf->global->MAIN_INFO_SIRET . '">';
-        }
-        else
-        {
-            print $countrynotdefined;
-        }
-        print '</td></tr>';
-    }
-
-    // ProfId3
-    if ($langs->transcountry("ProfId3",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId3",$code_pays).'</td><td>';
-        if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-        {
-            print '<input name="ape" size="20" value="' . $conf->global->MAIN_INFO_APE . '">';
-        }
-        else
-        {
-            print $countrynotdefined;
-        }
-        print '</td></tr>';
-    }
-
-    // ProfId4
-    if ($langs->transcountry("ProfId4",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId4",$code_pays).'</td><td>';
-        if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-        {
-            print '<input name="rcs" size="20" value="' . $conf->global->MAIN_INFO_RCS . '">';
-        }
-        else
-        {
-            print $countrynotdefined;
-        }
-        print '</td></tr>';
-    }
-
-    // TVA Intra
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("VATIntra").'</td><td>';
-    print '<input name="tva" size="20" value="' . $conf->global->MAIN_INFO_TVAINTRA . '">';
-    print '</td></tr>';
-
-    print '</table>';
-    
-    
-    /*
-     *  D�but d'ann�e fiscale
-     */
-    print '<br>';
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre">';
-    print '<td>'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
-    print "</tr>\n";
-    $var=true;
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("FiscalMonthStart").'</td><td>';
-    print $form->select_month($conf->global->SOCIETE_FISCAL_MONTH_START,'fiscalmonthstart',1) . '</td></tr>';
-    
-    print "</table>";
-
-
-    /*
-     *  Options fiscale
-     */
-    print '<br>';
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre">';
-    print '<td>'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
-    print '<td align="right">&nbsp;</td>';
-    print "</tr>\n";
-    $var=true;
-    
-    $var=!$var;
-    print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"reel\"".($conf->global->FACTURE_TVAOPTION != "franchise"?" checked":"")."> ".$langs->trans("VATIsUsed")."</label></td>";
-    print '<td colspan="2">';
-    print "<table>";
-    print "<tr><td>".$langs->trans("VATIsUsedDesc")."</td></tr>";
-    print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
-    print "</table>";
-    print "</td></tr>\n";
-    
-    /* Je d�sactive cette option "facturation" car ce statut fiscal n'existe pas. Seul le r�el et franchise existe.
-    Cette option ne doit donc pas etre en "exclusif" avec l'option fiscale de gestion de tva. Peut etre faut-il
-    une option a part qui n'entre pas en conflit avec les choix "assuj�ti TVA" ou "non".
-    $var=!$var;
-    print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"facturation\"".($conf->global->FACTURE_TVAOPTION == "facturation"?" checked":"")."> Option facturation</label></td>";
-    print "<td colspan=\"2\">L'option 'facturation' est utilis�e par les entreprises qui payent la TVA � facturation (vente de mat�riel).</td></tr>\n";
-     */
-    
-    $var=!$var;
-    print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"franchise\"".($conf->global->FACTURE_TVAOPTION == "franchise"?" checked":"")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
-    print '<td colspan="2">';
-    print "<table>";
-    print "<tr><td>".$langs->trans("VATIsNotUsedDesc")."</td></tr>";
-    print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
-    print "</table>";
-    print "</td></tr>\n";
-    
-    print "</table>";
-    
-
-
-    print '<br><center><input type="submit" class="button" value="'.$langs->trans("Save").'"></center>';
-    print '<br>';
-    
-    print '</form>';
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyCurrency").'</td><td>';
+	$form->select_currency($conf->global->MAIN_MONNAIE,"currency");
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Tel").'</td><td>';
+	print '<input name="tel" value="'. $conf->global->MAIN_INFO_SOCIETE_TEL . '"></td></tr>';
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Fax").'</td><td>';
+	print '<input name="fax" value="'. $conf->global->MAIN_INFO_SOCIETE_FAX . '"></td></tr>';
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Mail").'</td><td>';
+	print '<input name="mail" size="60" value="'. $conf->global->MAIN_INFO_SOCIETE_MAIL . '"></td></tr>';
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Web").'</td><td>';
+	print '<input name="web" size="60" value="'. $conf->global->MAIN_INFO_SOCIETE_WEB . '"></td></tr>';
+	print '</td></tr>'."\n";
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Gencod").'</td><td>';
+	print '<input name="gencod" size="40" value="'. $conf->global->MAIN_INFO_SOCIETE_GENCOD . '"></td></tr>';
+	print '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("Logo").' (png,jpg)</td><td>';
+	print '<table width="100%" class="notopnoleftnoright"><tr><td valign="center">';
+	print '<input type="file" class="flat" name="logo" size="50">';
+	print '</td><td valign="middle" align="right">';
+	if ($mysoc->logo_mini && file_exists($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini))
+	{
+		print '<a href="'.$_SERVER["PHP_SELF"].'?action=removelogo">'.img_delete($langs->trans("Delete")).'</a>';
+		print ' &nbsp; ';
+		print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=companylogo&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
+	}
+	else
+	{
+		print '<img height="30" src="'.DOL_URL_ROOT.'/theme/common/nophoto.jpg">';
+	}
+	print '</td></tr></table>';
+	print '</td></tr>';
+
+
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td valign="top">'.$langs->trans("Note").'</td><td>';
+	print '<textarea class="flat" name="note" cols="60" rows="'.ROWS_4.'">'.$conf->global->MAIN_INFO_SOCIETE_NOTE.'</textarea></td></tr>';
+	print '</td></tr>';
+
+	print '</table>';
+
+	print '<br>';
+
+	// Identifiants de la soci�t� (propre au pays)
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre"><td>'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
+	$var=true;
+
+	$langs->load("companies");
+
+	// Recupere code pays
+	$code_pays=substr($langs->defaultlang,-2);    // Par defaut, pays de la localisation
+	if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+	{
+		$sql  = "SELECT code from ".MAIN_DB_PREFIX."c_pays";
+		$sql .= " WHERE rowid = ".$conf->global->MAIN_INFO_SOCIETE_PAYS;
+		$resql=$db->query($sql);
+		if ($resql) {
+			$obj = $db->fetch_object($resql);
+			if ($obj->code) $code_pays=$obj->code;
+		}
+		else {
+			dolibarr_print_error($db);
+		}
+	}
+
+	// Capital
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Capital").'</td><td>';
+	print '<input name="capital" size="20" value="' . $conf->global->MAIN_INFO_CAPITAL . '"></td></tr>';
+
+	// Forme juridique
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("JuridicalStatus").'</td><td>';
+	if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+	{
+		$formcompany->select_forme_juridique($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE,$code_pays);
+	}
+	else
+	{
+		print $countrynotdefined;
+	}
+	print '</td></tr>';
+
+	// ProfID1
+	if ($langs->transcountry("ProfId1",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId1",$code_pays).'</td><td>';
+		if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+		{
+			print '<input name="siren" size="20" value="' . $conf->global->MAIN_INFO_SIREN . '">';
+		}
+		else
+		{
+			print $countrynotdefined;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId2
+	if ($langs->transcountry("ProfId2",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId2",$code_pays).'</td><td>';
+		if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+		{
+			print '<input name="siret" size="20" value="' . $conf->global->MAIN_INFO_SIRET . '">';
+		}
+		else
+		{
+			print $countrynotdefined;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId3
+	if ($langs->transcountry("ProfId3",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId3",$code_pays).'</td><td>';
+		if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+		{
+			print '<input name="ape" size="20" value="' . $conf->global->MAIN_INFO_APE . '">';
+		}
+		else
+		{
+			print $countrynotdefined;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId4
+	if ($langs->transcountry("ProfId4",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId4",$code_pays).'</td><td>';
+		if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+		{
+			print '<input name="rcs" size="20" value="' . $conf->global->MAIN_INFO_RCS . '">';
+		}
+		else
+		{
+			print $countrynotdefined;
+		}
+		print '</td></tr>';
+	}
+
+	// TVA Intra
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("VATIntra").'</td><td>';
+	print '<input name="tva" size="20" value="' . $conf->global->MAIN_INFO_TVAINTRA . '">';
+	print '</td></tr>';
+
+	print '</table>';
+
+
+	/*
+	 *  D�but d'ann�e fiscale
+	 */
+	print '<br>';
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre">';
+	print '<td>'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
+	print "</tr>\n";
+	$var=true;
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("FiscalMonthStart").'</td><td>';
+	print $form->select_month($conf->global->SOCIETE_FISCAL_MONTH_START,'fiscalmonthstart',1) . '</td></tr>';
+
+	print "</table>";
+
+
+	/*
+	 *  Options fiscale
+	 */
+	print '<br>';
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre">';
+	print '<td>'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
+	print '<td align="right">&nbsp;</td>';
+	print "</tr>\n";
+	$var=true;
+
+	$var=!$var;
+	print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"reel\"".($conf->global->FACTURE_TVAOPTION != "franchise"?" checked":"")."> ".$langs->trans("VATIsUsed")."</label></td>";
+	print '<td colspan="2">';
+	print "<table>";
+	print "<tr><td>".$langs->trans("VATIsUsedDesc")."</td></tr>";
+	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
+	print "</table>";
+	print "</td></tr>\n";
+
+	/* Je d�sactive cette option "facturation" car ce statut fiscal n'existe pas. Seul le r�el et franchise existe.
+	 Cette option ne doit donc pas etre en "exclusif" avec l'option fiscale de gestion de tva. Peut etre faut-il
+	 une option a part qui n'entre pas en conflit avec les choix "assuj�ti TVA" ou "non".
+	 $var=!$var;
+	 print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"facturation\"".($conf->global->FACTURE_TVAOPTION == "facturation"?" checked":"")."> Option facturation</label></td>";
+	 print "<td colspan=\"2\">L'option 'facturation' est utilis�e par les entreprises qui payent la TVA � facturation (vente de mat�riel).</td></tr>\n";
+	 */
+
+	$var=!$var;
+	print "<tr ".$bc[$var]."><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" value=\"franchise\"".($conf->global->FACTURE_TVAOPTION == "franchise"?" checked":"")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
+	print '<td colspan="2">';
+	print "<table>";
+	print "<tr><td>".$langs->trans("VATIsNotUsedDesc")."</td></tr>";
+	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
+	print "</table>";
+	print "</td></tr>\n";
+
+	print "</table>";
+
+
+
+	print '<br><center><input type="submit" class="button" value="'.$langs->trans("Save").'"></center>';
+	print '<br>';
+
+	print '</form>';
 }
 else
 {
-    /*
-     * Affichage des param�tres
-     */
+	/*
+	 * Affichage des param�tres
+	 */
 	if ($message) print $message.'<br>';
-	
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre"><td>'.$langs->trans("CompanyInfo").'</td><td>'.$langs->trans("Value").'</td></tr>';
-    $var=true;
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyName").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_NOM . '</td></tr>';
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre"><td>'.$langs->trans("CompanyInfo").'</td><td>'.$langs->trans("Value").'</td></tr>';
+	$var=true;
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyAddress").'</td><td>' . nl2br($conf->global->MAIN_INFO_SOCIETE_ADRESSE) . '</td></tr>';
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyName").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_NOM . '</td></tr>';
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyZip").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_CP . '</td></tr>';
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyAddress").'</td><td>' . nl2br($conf->global->MAIN_INFO_SOCIETE_ADRESSE) . '</td></tr>';
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyTown").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_VILLE . '</td></tr>';
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyZip").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_CP . '</td></tr>';
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyCountry").'</td><td>';
-    print getCountryLabel($conf->global->MAIN_INFO_SOCIETE_PAYS,1);
-    print '</td></tr>';
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyTown").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_VILLE . '</td></tr>';
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyCurrency").'</td><td>';
-    print currency_name($conf->global->MAIN_MONNAIE,1);
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("CompanyCountry").'</td><td>';
+	print getCountryLabel($conf->global->MAIN_INFO_SOCIETE_PAYS,1);
+	print '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("CompanyCurrency").'</td><td>';
+	print currency_name($conf->global->MAIN_MONNAIE,1);
 	print ' ('.$conf->global->MAIN_MONNAIE.')';
-    print '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Tel").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_TEL . '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Fax").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_FAX . '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Mail").'</td><td>' . dol_print_email($conf->global->MAIN_INFO_SOCIETE_MAIL) . '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Web").'</td><td>' . dol_print_url($conf->global->MAIN_INFO_SOCIETE_WEB) . '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Gencod").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_GENCOD . '</td></tr>';
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Logo").'</td><td>';
-    
-    print '<table width="100%" class="notopnoleftnoright"><tr><td valign="center">';
-    print $mysoc->logo;
-    print '</td><td valign="center" align="right">';
-    
-    // On propose la g�n�ration de la vignette si elle n'existe pas
-    if (!is_file($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini) && eregi('(\.jpg|\.jpeg|\.png)$',$mysoc->logo))
-    {
-     	print '<a href="'.$_SERVER["PHP_SELF"].'?action=addthumb&amp;file='.urlencode($mysoc->logo).'">'.img_refresh($langs->trans('GenerateThumb')).'&nbsp;&nbsp;</a>';
-    }
-    else if ($mysoc->logo_mini && is_file($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini))
-    {
-      print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=companylogo&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
-    }
-    else
-    {
-        print '<img height="30" src="'.DOL_URL_ROOT.'/theme/common/nophoto.jpg">';
-    }
+	print '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Tel").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_TEL . '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Fax").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_FAX . '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Mail").'</td><td>' . dol_print_email($conf->global->MAIN_INFO_SOCIETE_MAIL) . '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Web").'</td><td>' . dol_print_url($conf->global->MAIN_INFO_SOCIETE_WEB) . '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Gencod").'</td><td>' . $conf->global->MAIN_INFO_SOCIETE_GENCOD . '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Logo").'</td><td>';
+
+	print '<table width="100%" class="notopnoleftnoright"><tr><td valign="center">';
+	print $mysoc->logo;
+	print '</td><td valign="center" align="right">';
+
+	// On propose la g�n�ration de la vignette si elle n'existe pas
+	if (!is_file($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini) && eregi('(\.jpg|\.jpeg|\.png)$',$mysoc->logo))
+	{
+		print '<a href="'.$_SERVER["PHP_SELF"].'?action=addthumb&amp;file='.urlencode($mysoc->logo).'">'.img_refresh($langs->trans('GenerateThumb')).'&nbsp;&nbsp;</a>';
+	}
+	else if ($mysoc->logo_mini && is_file($conf->societe->dir_logos.'/thumbs/'.$mysoc->logo_mini))
+	{
+		print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=companylogo&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
+	}
+	else
+	{
+		print '<img height="30" src="'.DOL_URL_ROOT.'/theme/common/nophoto.jpg">';
+	}
 	print '</td></tr></table>';
 
-    print '</td></tr>';
+	print '</td></tr>';
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%" valign="top">'.$langs->trans("Note").'</td><td>' . nl2br($conf->global->MAIN_INFO_SOCIETE_NOTE) . '</td></tr>';
+
+	print '</table>';
 
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%" valign="top">'.$langs->trans("Note").'</td><td>' . nl2br($conf->global->MAIN_INFO_SOCIETE_NOTE) . '</td></tr>';
 
-    print '</table>';
+	print '<br>';
 
-	
-    print '<br>';
 
-	
-    // Identifiants de la soci�t� (propre au pays)
+	// Identifiants de la soci�t� (propre au pays)
 	print '<form name="formsoc" method="post">';
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre"><td>'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
-    $var=true;
-
-    // Recupere code pays
-    $code_pays=substr($langs->defaultlang,-2);    // Par defaut, pays de la localisation
-    if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
-    {
-        $sql  = "SELECT code from ".MAIN_DB_PREFIX."c_pays";
-        $sql .= " WHERE rowid = ".$conf->global->MAIN_INFO_SOCIETE_PAYS;
-        $result=$db->query($sql);
-        if ($result)
-        {
-            $obj = $db->fetch_object();
-            if ($obj->code) $code_pays=$obj->code;
-        }
-        else {
-            dolibarr_print_error($db);
-        }
-    }
-
-    // Capital
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Capital").'</td><td>';
-    print $conf->global->MAIN_INFO_CAPITAL . '</td></tr>';
-
-    // Forme juridique
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("JuridicalStatus").'</td><td>';
-    print getFormeJuridiqueLabel($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE,1);
-    print '</td></tr>';
-
-    // ProfId1
-    if ($langs->transcountry("ProfId1",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId1",$code_pays).'</td><td>';
-        if ($langs->transcountry("ProfId1",$code_pays) != '-')
-        {
-            print $conf->global->MAIN_INFO_SIREN;
-        }
-        print '</td></tr>';
-    }
-    
-    // ProfId2
-    if ($langs->transcountry("ProfId2",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId2",$code_pays).'</td><td>';
-        if ($langs->transcountry("ProfId2",$code_pays) != '-')
-        {
-            print $conf->global->MAIN_INFO_SIRET;
-        }
-        print '</td></tr>';
-    }
-    
-    // ProfId3
-    if ($langs->transcountry("ProfId3",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId3",$code_pays).'</td><td>';
-        if ($langs->transcountry("ProfId3",$code_pays) != '-')
-        {
-            print $conf->global->MAIN_INFO_APE;
-        }
-        print '</td></tr>';
-    }
-    
-    // ProfId4
-    if ($langs->transcountry("ProfId4",$code_pays) != '-')
-    {
-        $var=!$var;
-        print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId4",$code_pays).'</td><td>';
-        if ($langs->transcountry("ProfId4",$code_pays) != '-')
-        {
-            print $conf->global->MAIN_INFO_RCS;
-        }
-        print '</td></tr>';
-    }
-    
-    // TVA
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre"><td>'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
+	$var=true;
+
+	// Recupere code pays
+	$code_pays=substr($langs->defaultlang,-2);    // Par defaut, pays de la localisation
+	if ($conf->global->MAIN_INFO_SOCIETE_PAYS)
+	{
+		$sql  = "SELECT code from ".MAIN_DB_PREFIX."c_pays";
+		$sql .= " WHERE rowid = ".$conf->global->MAIN_INFO_SOCIETE_PAYS;
+		$result=$db->query($sql);
+		if ($result)
+		{
+			$obj = $db->fetch_object();
+			if ($obj->code) $code_pays=$obj->code;
+		}
+		else {
+			dolibarr_print_error($db);
+		}
+	}
+
+	// Capital
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("Capital").'</td><td>';
+	print $conf->global->MAIN_INFO_CAPITAL . '</td></tr>';
+
+	// Forme juridique
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("JuridicalStatus").'</td><td>';
+	print getFormeJuridiqueLabel($conf->global->MAIN_INFO_SOCIETE_FORME_JURIDIQUE,1);
+	print '</td></tr>';
+
+	// ProfId1
+	if ($langs->transcountry("ProfId1",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId1",$code_pays).'</td><td>';
+		if ($langs->transcountry("ProfId1",$code_pays) != '-')
+		{
+			print $conf->global->MAIN_INFO_SIREN;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId2
+	if ($langs->transcountry("ProfId2",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId2",$code_pays).'</td><td>';
+		if ($langs->transcountry("ProfId2",$code_pays) != '-')
+		{
+			print $conf->global->MAIN_INFO_SIRET;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId3
+	if ($langs->transcountry("ProfId3",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId3",$code_pays).'</td><td>';
+		if ($langs->transcountry("ProfId3",$code_pays) != '-')
+		{
+			print $conf->global->MAIN_INFO_APE;
+		}
+		print '</td></tr>';
+	}
+
+	// ProfId4
+	if ($langs->transcountry("ProfId4",$code_pays) != '-')
+	{
+		$var=!$var;
+		print '<tr '.$bc[$var].'><td width="35%">'.$langs->transcountry("ProfId4",$code_pays).'</td><td>';
+		if ($langs->transcountry("ProfId4",$code_pays) != '-')
+		{
+			print $conf->global->MAIN_INFO_RCS;
+		}
+		print '</td></tr>';
+	}
+
+	// TVA
 	if ($conf->use_javascript_ajax)
 	{
 		print "\n";
@@ -647,10 +650,10 @@ else
 		print '</script>';
 		print "\n";
 	}
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td>'.$langs->trans("VATIntra").'</td>';
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td>'.$langs->trans("VATIntra").'</td>';
 	print '<td>';
-	if ($conf->global->MAIN_INFO_TVAINTRA) 
+	if ($conf->global->MAIN_INFO_TVAINTRA)
 	{
 		$s='';
 		$code=substr($conf->global->MAIN_INFO_TVAINTRA,0,2);
@@ -676,64 +679,64 @@ else
 	print '</td>';
 	print '</tr>';
 
-    print '</table>';
+	print '</table>';
 	print '</form>';
-	
+
 	/*
-     *  D�but d'ann�e fiscale
-     */
-    print '<br>';
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre">';
-    print '<td>'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
-    print "</tr>\n";
-    $var=true;
-
-    $var=!$var;
-    print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("FiscalMonthStart").'</td><td>';
-    $monthstart=(! empty($conf->global->SOCIETE_FISCAL_MONTH_START)) ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1;
+	 *  D�but d'ann�e fiscale
+	 */
+	print '<br>';
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre">';
+	print '<td>'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
+	print "</tr>\n";
+	$var=true;
+
+	$var=!$var;
+	print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("FiscalMonthStart").'</td><td>';
+	$monthstart=(! empty($conf->global->SOCIETE_FISCAL_MONTH_START)) ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1;
 	print monthArrayOrSelected($monthstart) . '</td></tr>';
-    
-    print "</table>";
-
-    /*
-     *  Options fiscale
-     */
-    print '<br>';
-    print '<table class="noborder" width="100%">';
-    print '<tr class="liste_titre">';
-    print '<td>'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
-    print '<td align="right">&nbsp;</td>';
-    print "</tr>\n";
-    $var=true;
-    
-    $var=!$var;
-    print "<tr ".$bc[$var]."><td width=\"140\"><label><input ".$bc[$var]." type=\"radio\" name=\"optiontva\" disabled value=\"reel\"".($conf->global->FACTURE_TVAOPTION != "franchise"?" checked":"")."> ".$langs->trans("VATIsUsed")."</label></td>";
-    print '<td colspan="2">';
-    print "<table>";
-    print "<tr><td>".$langs->trans("VATIsUsedDesc")."</td></tr>";
-    print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
-    print "</table>";
-    print "</td></tr>\n";
-    
-    $var=!$var;
-    print "<tr ".$bc[$var]."><td width=\"140\"><label><input ".$bc[$var]." type=\"radio\" name=\"optiontva\" disabled value=\"franchise\"".($conf->global->FACTURE_TVAOPTION == "franchise"?" checked":"")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
-    print '<td colspan="2">';
-    print "<table>";
-    print "<tr><td>".$langs->trans("VATIsNotUsedDesc")."</td></tr>";
-    print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
-    print "</table>";
-    print "</td></tr>\n";
-    
-    print "</table>";
-    
-    
-    // Boutons d'action
-    print '<div class="tabsAction">';
-    print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
-    print '</div>';
-    
-    print '<br>';
+
+	print "</table>";
+
+	/*
+	 *  Options fiscale
+	 */
+	print '<br>';
+	print '<table class="noborder" width="100%">';
+	print '<tr class="liste_titre">';
+	print '<td>'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
+	print '<td align="right">&nbsp;</td>';
+	print "</tr>\n";
+	$var=true;
+
+	$var=!$var;
+	print "<tr ".$bc[$var]."><td width=\"140\"><label><input ".$bc[$var]." type=\"radio\" name=\"optiontva\" disabled value=\"reel\"".($conf->global->FACTURE_TVAOPTION != "franchise"?" checked":"")."> ".$langs->trans("VATIsUsed")."</label></td>";
+	print '<td colspan="2">';
+	print "<table>";
+	print "<tr><td>".$langs->trans("VATIsUsedDesc")."</td></tr>";
+	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
+	print "</table>";
+	print "</td></tr>\n";
+
+	$var=!$var;
+	print "<tr ".$bc[$var]."><td width=\"140\"><label><input ".$bc[$var]." type=\"radio\" name=\"optiontva\" disabled value=\"franchise\"".($conf->global->FACTURE_TVAOPTION == "franchise"?" checked":"")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
+	print '<td colspan="2">';
+	print "<table>";
+	print "<tr><td>".$langs->trans("VATIsNotUsedDesc")."</td></tr>";
+	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
+	print "</table>";
+	print "</td></tr>\n";
+
+	print "</table>";
+
+
+	// Boutons d'action
+	print '<div class="tabsAction">';
+	print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
+	print '</div>';
+
+	print '<br>';
 }
 
 $db->close();
@@ -741,13 +744,13 @@ $db->close();
 llxFooter('$Date$ - $Revision$');
 
 
-    
+
 /**
-*    \brief      Retourne le nom traduit ou code+nom d'une devise
-*    \param      code_iso       Code iso de la devise
-*    \param      withcode       1=affiche code + nom
-*    \return     string         Nom traduit de la devise
-*/
+ *    \brief      Retourne le nom traduit ou code+nom d'une devise
+ *    \param      code_iso       Code iso de la devise
+ *    \param      withcode       1=affiche code + nom
+ *    \return     string         Nom traduit de la devise
+ */
 function currency_name($code_iso,$withcode=0)
 {
 	global $langs,$db;
@@ -757,7 +760,7 @@ function currency_name($code_iso,$withcode=0)
 	{
 		return $langs->trans("Currency".$code_iso);
 	}
-	
+
 	// Si pas de traduction, on consulte le libell� par d�faut en table
 	$sql = "SELECT label FROM ".MAIN_DB_PREFIX."c_currencies";
 	$sql.= " WHERE code_iso='".$code_iso."'";
diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
index e5f4334667344bb439ae57d79960416ed82d5417..c917372c262cf5cbbe8305ecefa510889404b576 100644
--- a/htdocs/admin/dict.php
+++ b/htdocs/admin/dict.php
@@ -28,6 +28,7 @@
 
 require("./pre.inc.php");
 require_once(DOL_DOCUMENT_ROOT."/html.formadmin.class.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formcompany.class.php");
 
 $langs->load("other");
 $langs->load("admin");
@@ -715,6 +716,7 @@ function fieldList($fieldlist,$obj='')
 
 	$html = new Form($db);
 	$formadmin = new FormAdmin($db);
+	$formcompany = new FormCompany($db);
 	
 	foreach ($fieldlist as $field => $value)
 	{
@@ -730,7 +732,7 @@ function fieldList($fieldlist,$obj='')
 		}
 		elseif ($fieldlist[$field] == 'region') {
 			print '<td>';
-			$html->select_region($region_id,'region');
+			$formcompany->select_region($region_id,'region');
 			print '</td>';
 		}
 		elseif ($fieldlist[$field] == 'region_id') {
diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php
index 4f115db8b96ca4c96767b61c1575498eeba132e1..4dfec000e00865acf63c0c5c18455cb1bed309ec 100644
--- a/htdocs/comm/action/fiche.php
+++ b/htdocs/comm/action/fiche.php
@@ -448,7 +448,7 @@ if ($_GET["action"] == 'create')
 	}
 	else
 	{
-		$html->select_type_actions($actioncomm->type_code, "actioncode");
+		$htmlactions->select_type_actions($actioncomm->type_code, "actioncode");
 	}
 	print '</td></tr>';
 
diff --git a/htdocs/comm/prospect/fiche.php b/htdocs/comm/prospect/fiche.php
index 06ac6c77903446671297d2da9b618898d6cf6356..7003d4db50c4c622bc746a957c5adfa2a5cd9d32 100644
--- a/htdocs/comm/prospect/fiche.php
+++ b/htdocs/comm/prospect/fiche.php
@@ -28,6 +28,7 @@
 require_once("./pre.inc.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/prospect.class.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formcompany.class.php");
 require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
 require_once(DOL_DOCUMENT_ROOT."/actioncomm.class.php");
 if ($conf->propal->enabled) require_once(DOL_DOCUMENT_ROOT."/propal.class.php");
@@ -72,7 +73,9 @@ if ($_POST["action"] == 'setprospectlevel' && $user->rights->societe->creer)
  *********************************************************************************/  
 
 llxHeader();
+
 $form=new Form($db);
+$formcompany=new FormCompany($db);
 
 if ($socid > 0)
 {
@@ -127,12 +130,12 @@ if ($socid > 0)
 	print '</td><td colspan="3">';
 	if ($_GET['action'] == 'editlevel')
 	{
-		$form->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$societe->id,$societe->fk_prospectlevel,'prospect_level_id',1);
+		$formcompany->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$societe->id,$societe->fk_prospectlevel,'prospect_level_id',1);
 	}
 	else
 	{
 		print $societe->getLibLevel();
-		//$html->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$objsoc->id,$objsoc->mode_reglement,'none');
+		//$formcompany->form_prospect_level($_SERVER['PHP_SELF'].'?socid='.$objsoc->id,$objsoc->mode_reglement,'none');
 	}
 	print "</td>";
 	print '</tr>';
diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php
index cd67020bbcc2a31d874b36ff7a5e4d97ae1c60c4..d1f706f9ca8935f5ab26f9a0e42318cdfca32825 100644
--- a/htdocs/commande/fiche.php
+++ b/htdocs/commande/fiche.php
@@ -29,7 +29,8 @@
 
 require('./pre.inc.php');
 require_once(DOL_DOCUMENT_ROOT."/html.formfile.class.php");
-require_once(DOL_DOCUMENT_ROOT ."/includes/modules/commande/modules_commande.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formorder.class.php");
+require_once(DOL_DOCUMENT_ROOT."/includes/modules/commande/modules_commande.php");
 require_once(DOL_DOCUMENT_ROOT.'/commande/commande.class.php');
 require_once(DOL_DOCUMENT_ROOT.'/actioncomm.class.php');
 require_once(DOL_DOCUMENT_ROOT."/lib/order.lib.php");
@@ -837,6 +838,8 @@ llxHeader('',$langs->trans('Order'),'Commande');
 
 $html = new Form($db);
 $formfile = new FormFile($db);
+$formorder = new FormOrder($db);
+
 
 /*********************************************************************
  *
@@ -971,7 +974,7 @@ if ($_GET['action'] == 'create' && $user->rights->commande->creer)
 			}
 
 			print '<tr><td>'.$langs->trans('Source').'</td><td colspan="2">';
-			$html->selectSourcesCommande('','source_id',1);
+			$formorder->selectSourcesCommande('','source_id',1);
 			print '</td></tr>';
 
 			print '<tr><td>'.$langs->trans('Model').'</td>';
diff --git a/htdocs/contact/fiche.php b/htdocs/contact/fiche.php
index f62222d4cb6f68021c1fd43ebe38a3edcf593b38..b0c564b242fdc6f6e46cf6abeddd485e38e849ab 100644
--- a/htdocs/contact/fiche.php
+++ b/htdocs/contact/fiche.php
@@ -32,6 +32,7 @@ require_once(DOL_DOCUMENT_ROOT."/actioncomm.class.php");
 require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/contact.lib.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formcompany.class.php");
 
 $langs->load("companies");
 $langs->load("users");
@@ -195,6 +196,7 @@ if ($user->rights->societe->contact->creer)
 llxHeader();
 
 $form = new Form($db);
+$formcompany = new FormCompany($db);
 
 if ($socid)
 {
@@ -289,7 +291,7 @@ if ($user->rights->societe->contact->creer)
 
 		// Civility
 		print '<tr><td width="15%">'.$langs->trans("UserTitle").'</td><td colspan="3">';
-		print $form->select_civilite($contact->civilite_id);
+		print $formcompany->select_civilite($contact->civilite_id);
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans("PostOrFunction").'</td><td colspan="3"><input name="poste" type="text" size="50" maxlength="80" value="'.$contact->poste.'"></td>';
@@ -372,7 +374,7 @@ if ($user->rights->societe->contact->creer)
 
 		// Civility
 		print '<tr><td>'.$langs->trans("UserTitle").'</td><td colspan="3">';
-		print $form->select_civilite($contact->civilite_id);
+		print $formcompany->select_civilite($contact->civilite_id);
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans("PostOrFunction" ).'</td><td colspan="3"><input name="poste" type="text" size="50" maxlength="80" value="'.$contact->poste.'"></td></tr>';
diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php
index 2582cab201972d44219cabae404e883f0054c946..3145a2b722cb8d3ceda15f5152f4aadc213c5368 100644
--- a/htdocs/fourn/commande/dispatch.php
+++ b/htdocs/fourn/commande/dispatch.php
@@ -20,11 +20,11 @@
  */
 
 /**
-   \file      htdocs/fourn/commande/fiche.php
-   \ingroup   commande
-   \brief     Fiche de ventilation des commandes fournisseurs
-   \version   $Id$
-*/
+ \file      htdocs/fourn/commande/fiche.php
+ \ingroup   commande
+ \brief     Fiche de ventilation des commandes fournisseurs
+ \version   $Id$
+ */
 
 require('./pre.inc.php');
 require_once(DOL_DOCUMENT_ROOT.'/includes/modules/supplier_order/modules_commandefournisseur.php');
@@ -45,15 +45,15 @@ if (!$user->rights->fournisseur->commande->lire) accessforbidden();
 $socid=0;
 if ($user->societe_id >	0)
 {
-  $action	= '';
-  $socid = $user->societe_id;
+	$action	= '';
+	$socid = $user->societe_id;
 }
 
 // R�cup�ration	de l'id	de projet
 $projetid =	0;
 if ($_GET["projetid"])
 {
-  $projetid =	$_GET["projetid"];
+	$projetid =	$_GET["projetid"];
 }
 
 $mesg='';
@@ -63,23 +63,23 @@ $mesg='';
  */
 if ($_POST["action"] ==	'dispatch' && $user->rights->fournisseur->commande->receptionner)
 {
-  $commande = new CommandeFournisseur($db);
-  $commande->fetch($_GET["id"]);
+	$commande = new CommandeFournisseur($db);
+	$commande->fetch($_GET["id"]);
 
-  foreach($_POST as $key => $value)
-    {
-      if ( eregi('^product_([0-9]+)$', $key, $reg) )
+	foreach($_POST as $key => $value)
 	{
+		if ( eregi('^product_([0-9]+)$', $key, $reg) )
+		{
 	  $prod = "product_".$reg[1];
 	  $qty = "qty_".$reg[1];
 	  $ent = "entrepot_".$reg[1];
 	  $pu = "pu_".$reg[1];
 	  $result = $commande->DispatchProduct($user, $_POST[$prod], $_POST[$qty], $_POST[$ent], $_POST[$pu]);
+		}
 	}
-    }
 
-  Header("Location: dispatch.php?id=".$_GET["id"]);
-  exit;
+	Header("Location: dispatch.php?id=".$_GET["id"]);
+	exit;
 }
 
 
@@ -96,307 +96,307 @@ $html =	new Form($db);
 $id = $_GET['id'];
 if ($id	> 0)
 {
-  //if ($mesg) print $mesg.'<br>';
-  
-  $commande = new CommandeFournisseur($db);
-  if ( $commande->fetch($_GET['id']) >= 0)
-    {
-      $soc = new Societe($db);
-      $soc->fetch($commande->socid);
-      
-      $author = new User($db);
-      $author->id = $commande->user_author_id;
-      $author->fetch();
-      
-      $h = 0;
-      $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/fiche.php?id='.$commande->id;
-      $head[$h][1] = $langs->trans("OrderCard");
-      $h++;
-      
-      $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/dispatch.php?id='.$commande->id;
-      $head[$h][1] = $langs->trans("OrderDispatch");
-      $a = $h;
-      $h++;
-      
-      $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/note.php?id='.$commande->id;
-      $head[$h][1] = $langs->trans("Note");
-      $h++;
-      
-      $head[$h][0] = DOL_URL_ROOT.'/fourn/commande/history.php?id='.$commande->id;
-      $head[$h][1] = $langs->trans("OrderFollow");
-      $h++;
-      
-      $title=$langs->trans("SupplierOrder");
-      dolibarr_fiche_head($head, $a, $title);
-      	
-      /*
-       *	Commande
-       */
-      print '<table class="border" width="100%">';
-      // Ref
-      print '<tr><td width="20%">'.$langs->trans("Ref").'</td>';
-      print '<td colspan="5">'.$commande->ref.'</td>';
-      print '</tr>';
-	
-      // Fournisseur
-      print '<tr><td width="20%">'.$langs->trans("Supplier")."</td>";
-      print '<td colspan="5">';
-      print '<b><a href="'.DOL_URL_ROOT.'/fourn/fiche.php?socid='.$soc->id.'">';
-      print img_object($langs->trans("ShowSupplier"),'company').'	'.$soc->nom.'</a></b></td>';
-      print '</tr>';
-	
-      // Statut
-      print '<tr>';
-      print '<td>'.$langs->trans("Status").'</td>';
-      print '<td width="50%" colspan="5">';
-      print $commande->getLibStatut(4);
-      print "</td></tr>";
-
-      if ($commande->methode_commande_id > 0)
-	{
-	  print '<tr><td>'.$langs->trans("Date").'</td><td colspan="2">';
-	      
-	  if ($commande->date_commande)
-	    {
-	      print dolibarr_print_date($commande->date_commande,"dayhourtext")."\n";
-	    }
-	
-	  print '</td><td width="50%" colspan="3">';
-	  if ($commande->methode_commande)
-	    {
-	      print "M�thode : " .$commande->methode_commande;
-	    }
-	  print "</td></tr>";
-	}
-	
-      // Auteur
-      print '<tr><td>'.$langs->trans("AuthorRequest").'</td>';
-      print '<td colspan="2">'.$author->getNomUrl(1).'</td>';
-      print '<td colspan="3" width="50%">';
-      print "&nbsp;</td></tr>";		
-      print "</table>";
-	
-      if ($mesg) print $mesg;
-      else print '<br>';
-	
-      /*
-       * Lignes de commandes
-       */
-      if ($commande->statut == 3 || $commande->statut == 4 || $commande->statut == 5)
-	{
-	  print '<form method="POST" action="dispatch.php?id='.$commande->id.'">';
-	  print '<input type="hidden" name="action" value="dispatch">';
-	  print '<table class="noborder" width="100%">';
-	
-	  $sql = "SELECT cfd.fk_product, sum(cfd.qty) as qty";
-	  $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd";
-	  $sql.= " WHERE cfd.fk_commande = ".$commande->id;
-	  $sql.= " GROUP BY cfd.fk_product";
-	
-	  $resql = $db->query($sql);
-	  if ($resql)
-	    {
-	      while ( $row = $db->fetch_row($resql) )
-		{
-		  $products_dispatched[$row[0]] = $row[1];
-		}
-	      $db->free($resql);
-	    }
-
-	  $sql = "SELECT l.ref,l.fk_product,l.description, l.subprice, sum(l.qty) as qty";
-	  $sql.= ", l.rowid";
-	  $sql.= ", p.label";
-	  $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as l";
-	  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON l.fk_product=p.rowid";
-	  $sql.= " WHERE l.fk_commande = ".$commande->id;
-	  $sql.= " GROUP BY l.fk_product";
-	  $sql.= " ORDER BY l.rowid";
-	
-	  $resql = $db->query($sql);
-	  if ($resql)
-	  {
-	  	$num = $db->num_rows($resql);
-	    $i = 0;
-	    
-	    if ($num)
-	    {
-	    	print '<tr class="liste_titre">';
-	    	print '<td>'.$langs->trans("Description").'</td>';
-	    	
-	    	print '<td align="right">'.$langs->trans("QtyOrdered").'</td>';
-	    	print '<td align="right">'.$langs->trans("QtyDispatched").'</td>';
-	    	print '<td align="right">'.$langs->trans("Warehouse").'</td>';
-	    	print '<td align="right">'.$langs->trans("QtyDelivered").'</td>';
-	    	print "</tr>\n";
-	    }
-	    
-	    $entrepot = new Entrepot($db);
-	    
-	    $var=true;
-	    while ($i < $num)
-	    {
-	    	$objp = $db->fetch_object($resql);
-	    	// On n'affiche pas les produits personnalis�s
-	    	if ($objp->fk_product)
-	    	{
-	    		$var=!$var;
-	    		print "<tr ".$bc[$var].">";
-	    		print '<td>';
-	    		print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
-	    		print ' - '.$objp->label;
-	    		if ($objp->description) print '<br>'.nl2br($objp->description);
-	    		print '<input name="product_'.$i.'" type="hidden" value="'.$objp->fk_product.'">';
-	    		print '<input name="pu_'.$i.'" type="hidden" value="'.$objp->subprice.'">';
-	    		print "</td>\n";
-	    		
-	    		print '<td align="right">'.$objp->qty.'</td>';
-	    		print '<td align="right">'.$products_dispatched[$objp->fk_product].'</td>';
-	    		
-	    		print '<td align="right">';
-	    		
-	    		if (sizeof($user->entrepots) === 1)
-	    		{
-	    			$uentrepot = array();
-	    			$uentrepot[$user->entrepots[0]['id']] = $user->entrepots[0]['label'];
-	    			$html->select_array("entrepot_".$i, $uentrepot);
-	    		}
-	    		else
-	    		{
-	    			$html->select_array("entrepot_".$i, $entrepot->list_array());
-	    		}
-	    		print "</td>\n";
-	    		print '<td align="right"><input name="qty_'.$i.'" type="text" size="8" value="'.($objp->qty-$products_dispatched[$objp->fk_product]).'"></td>';
-	    		print "</tr>\n";
-	    	}
-	    	$i++;
-	    }
-	    $db->free($resql);
-	  }
-	  else
-	  {
-	    dolibarr_print_error($db);
-	  }
-		
-	  print "</table>\n";
-      print "<br/>\n";
-	  print '<center><input type="submit" class="button" value="'.$langs->trans("Save").'"></center></form>';
-	}
-	
-      print "<br/>\n";
-	print '<table class="noborder" width="100%">';
-	
-
-      $sql = "SELECT p.ref,cfd.fk_product, cfd.qty";
-      $sql.= ", cfd.rowid";
-      $sql.= ", p.label, e.label as entrepot";
-      $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd";
-      $sql.= " , ".MAIN_DB_PREFIX."product as p ";
-      $sql.= " , ".MAIN_DB_PREFIX."entrepot as e ";
-      $sql.= " WHERE cfd.fk_commande = ".$commande->id;
-      $sql.= " AND cfd.fk_product = p.rowid";
-      $sql.= " AND cfd.fk_entrepot = e.rowid";
-      $sql.= " ORDER BY cfd.rowid ASC;";
-
-      $resql = $db->query($sql);
-      if ($resql)
-	{
-	  $num = $db->num_rows($resql);
-	  $i = 0;
-	
-	  if ($num)
-	    {
-	      print '<tr class="liste_titre">';
-	      print '<td>'.$langs->trans("Description").'</td>';
-	      print '<td align="right">'.$langs->trans("QtyDispatched").'</td>';
-	      print '<td align="right">'.$langs->trans("Warehouse").'</td>';
-	      print "</tr>\n";
-	    }
-	  $var=false;
-
-	  while ($i < $num)
-	    {
-	      $objp = $db->fetch_object($resql);
-	      print "<tr $bc[$var]>";
-	      print '<td>';
-	      print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
-	      print ' - '.$objp->label;
-	      print "</td>\n";
-
-	      print '<td align="right">'.$objp->qty.'</td>';
-	      print '<td align="right">'.stripslashes($objp->entrepot).'</td>';
-	      print "</tr>\n";
-
-	      $i++;
-	      $var=!$var;
-	    }
-	  $db->free($resql);
-	}
-      else
-	{
-	  dolibarr_print_error($db);
-	}
-		
-      print "</table>\n";
-      print '</div>';
-
-      /**
-       * Boutons actions
-       */
-      if ($user->societe_id == 0 && $commande->statut	< 3	&& ($_GET["action"]	<> 'valid' || $_GET['action'] == 'builddoc'))
+	//if ($mesg) print $mesg.'<br>';
+
+	$commande = new CommandeFournisseur($db);
+	if ( $commande->fetch($_GET['id']) >= 0)
 	{
-	  print '<div	class="tabsAction">';
-	
-	  if ($commande->statut == 0 && $num > 0)
-	    {
-	      if ($user->rights->fournisseur->commande->valider)
+		$soc = new Societe($db);
+		$soc->fetch($commande->socid);
+
+		$author = new User($db);
+		$author->id = $commande->user_author_id;
+		$author->fetch();
+
+		$h = 0;
+		$head[$h][0] = DOL_URL_ROOT.'/fourn/commande/fiche.php?id='.$commande->id;
+		$head[$h][1] = $langs->trans("OrderCard");
+		$h++;
+
+		$head[$h][0] = DOL_URL_ROOT.'/fourn/commande/dispatch.php?id='.$commande->id;
+		$head[$h][1] = $langs->trans("OrderDispatch");
+		$a = $h;
+		$h++;
+
+		$head[$h][0] = DOL_URL_ROOT.'/fourn/commande/note.php?id='.$commande->id;
+		$head[$h][1] = $langs->trans("Note");
+		$h++;
+
+		$head[$h][0] = DOL_URL_ROOT.'/fourn/commande/history.php?id='.$commande->id;
+		$head[$h][1] = $langs->trans("OrderFollow");
+		$h++;
+
+		$title=$langs->trans("SupplierOrder");
+		dolibarr_fiche_head($head, $a, $title);
+			
+		/*
+		 *	Commande
+		 */
+		print '<table class="border" width="100%">';
+		// Ref
+		print '<tr><td width="20%">'.$langs->trans("Ref").'</td>';
+		print '<td colspan="5">'.$commande->ref.'</td>';
+		print '</tr>';
+
+		// Fournisseur
+		print '<tr><td width="20%">'.$langs->trans("Supplier")."</td>";
+		print '<td colspan="5">';
+		print '<b><a href="'.DOL_URL_ROOT.'/fourn/fiche.php?socid='.$soc->id.'">';
+		print img_object($langs->trans("ShowSupplier"),'company').'	'.$soc->nom.'</a></b></td>';
+		print '</tr>';
+
+		// Statut
+		print '<tr>';
+		print '<td>'.$langs->trans("Status").'</td>';
+		print '<td width="50%" colspan="5">';
+		print $commande->getLibStatut(4);
+		print "</td></tr>";
+
+		if ($commande->methode_commande_id > 0)
 		{
-		  print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=valid">'.$langs->trans("Valid").'</a>';
+			print '<tr><td>'.$langs->trans("Date").'</td><td colspan="2">';
+
+			if ($commande->date_commande)
+			{
+				print dolibarr_print_date($commande->date_commande,"dayhourtext")."\n";
+			}
+
+			print '</td><td width="50%" colspan="3">';
+			if ($commande->methode_commande)
+			{
+				print $langs->trans("Method")." : " .$commande->methode_commande;
+			}
+			print "</td></tr>";
 		}
-	    }
-	
-	  if ($commande->statut == 1)
-	    {
-	      if ($user->rights->fournisseur->commande->approuver)
+
+		// Auteur
+		print '<tr><td>'.$langs->trans("AuthorRequest").'</td>';
+		print '<td colspan="2">'.$author->getNomUrl(1).'</td>';
+		print '<td colspan="3" width="50%">';
+		print "&nbsp;</td></tr>";
+		print "</table>";
+
+		if ($mesg) print $mesg;
+		else print '<br>';
+
+		/*
+		 * Lignes de commandes
+		 */
+		if ($commande->statut == 3 || $commande->statut == 4 || $commande->statut == 5)
 		{
-		  print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=approve">'.$langs->trans("ApproveOrder").'</a>';
-	
-		  print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=refuse">'.$langs->trans("RefuseOrder").'</a>';
+			print '<form method="POST" action="dispatch.php?id='.$commande->id.'">';
+			print '<input type="hidden" name="action" value="dispatch">';
+			print '<table class="noborder" width="100%">';
+
+			$sql = "SELECT cfd.fk_product, sum(cfd.qty) as qty";
+			$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd";
+			$sql.= " WHERE cfd.fk_commande = ".$commande->id;
+			$sql.= " GROUP BY cfd.fk_product";
+
+			$resql = $db->query($sql);
+			if ($resql)
+			{
+				while ( $row = $db->fetch_row($resql) )
+				{
+					$products_dispatched[$row[0]] = $row[1];
+				}
+				$db->free($resql);
+			}
+
+			$sql = "SELECT l.ref,l.fk_product,l.description, l.subprice, sum(l.qty) as qty";
+			$sql.= ", l.rowid";
+			$sql.= ", p.label";
+			$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as l";
+			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON l.fk_product=p.rowid";
+			$sql.= " WHERE l.fk_commande = ".$commande->id;
+			$sql.= " GROUP BY l.fk_product";
+			$sql.= " ORDER BY l.rowid";
+
+			$resql = $db->query($sql);
+			if ($resql)
+			{
+				$num = $db->num_rows($resql);
+				$i = 0;
+
+				if ($num)
+				{
+					print '<tr class="liste_titre">';
+					print '<td>'.$langs->trans("Description").'</td>';
+
+					print '<td align="right">'.$langs->trans("QtyOrdered").'</td>';
+					print '<td align="right">'.$langs->trans("QtyDispatched").'</td>';
+					print '<td align="right">'.$langs->trans("Warehouse").'</td>';
+					print '<td align="right">'.$langs->trans("QtyDelivered").'</td>';
+					print "</tr>\n";
+				}
+
+				$entrepot = new Entrepot($db);
+
+				$var=true;
+				while ($i < $num)
+				{
+					$objp = $db->fetch_object($resql);
+					// On n'affiche pas les produits personnalis�s
+					if ($objp->fk_product)
+					{
+						$var=!$var;
+						print "<tr ".$bc[$var].">";
+						print '<td>';
+						print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
+						print ' - '.$objp->label;
+						if ($objp->description) print '<br>'.nl2br($objp->description);
+						print '<input name="product_'.$i.'" type="hidden" value="'.$objp->fk_product.'">';
+						print '<input name="pu_'.$i.'" type="hidden" value="'.$objp->subprice.'">';
+						print "</td>\n";
+
+						print '<td align="right">'.$objp->qty.'</td>';
+						print '<td align="right">'.$products_dispatched[$objp->fk_product].'</td>';
+
+						print '<td align="right">';
+
+						if (sizeof($user->entrepots) === 1)
+						{
+							$uentrepot = array();
+							$uentrepot[$user->entrepots[0]['id']] = $user->entrepots[0]['label'];
+							$html->select_array("entrepot_".$i, $uentrepot);
+						}
+						else
+						{
+							$html->select_array("entrepot_".$i, $entrepot->list_array());
+						}
+						print "</td>\n";
+						print '<td align="right"><input name="qty_'.$i.'" type="text" size="8" value="'.($objp->qty-$products_dispatched[$objp->fk_product]).'"></td>';
+						print "</tr>\n";
+					}
+					$i++;
+				}
+				$db->free($resql);
+			}
+			else
+			{
+				dolibarr_print_error($db);
+			}
+
+			print "</table>\n";
+			print "<br/>\n";
+			print '<center><input type="submit" class="button" value="'.$langs->trans("Save").'"></center></form>';
 		}
-	
-	      if ($user->rights->fournisseur->commande->annuler)
+
+		print "<br/>\n";
+		print '<table class="noborder" width="100%">';
+
+
+		$sql = "SELECT p.ref,cfd.fk_product, cfd.qty";
+		$sql.= ", cfd.rowid";
+		$sql.= ", p.label, e.label as entrepot";
+		$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as cfd";
+		$sql.= " , ".MAIN_DB_PREFIX."product as p ";
+		$sql.= " , ".MAIN_DB_PREFIX."entrepot as e ";
+		$sql.= " WHERE cfd.fk_commande = ".$commande->id;
+		$sql.= " AND cfd.fk_product = p.rowid";
+		$sql.= " AND cfd.fk_entrepot = e.rowid";
+		$sql.= " ORDER BY cfd.rowid ASC;";
+
+		$resql = $db->query($sql);
+		if ($resql)
 		{
-		  print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=cancel">'.$langs->trans("CancelOrder").'</a>';
+			$num = $db->num_rows($resql);
+			$i = 0;
+
+			if ($num)
+			{
+				print '<tr class="liste_titre">';
+				print '<td>'.$langs->trans("Description").'</td>';
+				print '<td align="right">'.$langs->trans("QtyDispatched").'</td>';
+				print '<td align="right">'.$langs->trans("Warehouse").'</td>';
+				print "</tr>\n";
+			}
+			$var=false;
+
+			while ($i < $num)
+			{
+				$objp = $db->fetch_object($resql);
+				print "<tr $bc[$var]>";
+				print '<td>';
+				print '<a href="'.DOL_URL_ROOT.'/product/fournisseurs.php?id='.$objp->fk_product.'">'.img_object($langs->trans("ShowProduct"),'product').' '.$objp->ref.'</a>';
+				print ' - '.$objp->label;
+				print "</td>\n";
+
+				print '<td align="right">'.$objp->qty.'</td>';
+				print '<td align="right">'.stripslashes($objp->entrepot).'</td>';
+				print "</tr>\n";
+
+				$i++;
+				$var=!$var;
+			}
+			$db->free($resql);
 		}
-	
-	    }
-	
-	  if ($commande->statut == 2)
-	    {
-	      if ($user->rights->fournisseur->commande->annuler)
+		else
 		{
-		  print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=cancel">'.$langs->trans("CancelOrder").'</a>';
+			dolibarr_print_error($db);
 		}
-	    }
-	
-	  if ($commande->statut == 0)
-	    {
-	      if ($user->rights->fournisseur->commande->creer)
+
+		print "</table>\n";
+		print '</div>';
+
+		/**
+		 * Boutons actions
+		 */
+		if ($user->societe_id == 0 && $commande->statut	< 3	&& ($_GET["action"]	<> 'valid' || $_GET['action'] == 'builddoc'))
 		{
-		  print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=delete">'.$langs->trans("Delete").'</a>';
+			print '<div	class="tabsAction">';
+
+			if ($commande->statut == 0 && $num > 0)
+			{
+				if ($user->rights->fournisseur->commande->valider)
+				{
+					print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=valid">'.$langs->trans("Valid").'</a>';
+				}
+			}
+
+			if ($commande->statut == 1)
+			{
+				if ($user->rights->fournisseur->commande->approuver)
+				{
+					print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=approve">'.$langs->trans("ApproveOrder").'</a>';
+
+					print '<a class="butAction"	href="fiche.php?id='.$commande->id.'&amp;action=refuse">'.$langs->trans("RefuseOrder").'</a>';
+				}
+
+				if ($user->rights->fournisseur->commande->annuler)
+				{
+					print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=cancel">'.$langs->trans("CancelOrder").'</a>';
+				}
+
+			}
+
+			if ($commande->statut == 2)
+			{
+				if ($user->rights->fournisseur->commande->annuler)
+				{
+					print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=cancel">'.$langs->trans("CancelOrder").'</a>';
+				}
+			}
+
+			if ($commande->statut == 0)
+			{
+				if ($user->rights->fournisseur->commande->creer)
+				{
+					print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&amp;action=delete">'.$langs->trans("Delete").'</a>';
+				}
+			}
+			print "</div>";
 		}
-	    }	       
-	  print "</div>";
+		/*
+		 *
+		 *
+		 */
+	}
+	else
+	{
+		// Commande	non	trouv�e
+		dolibarr_print_error($db);
 	}
-      /*
-       *
-       *
-       */
-    }
-  else
-    {
-      // Commande	non	trouv�e
-      dolibarr_print_error($db);
-    }
 }
 
 $db->close();
diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php
index 15057b52ca0dd60462b30d1d6b5b8f39ef87083f..8002c21c1f00c95b9fe7148d2dd7d26aca8dcede 100644
--- a/htdocs/fourn/commande/fiche.php
+++ b/htdocs/fourn/commande/fiche.php
@@ -28,6 +28,7 @@
 
 require('./pre.inc.php');
 require_once(DOL_DOCUMENT_ROOT."/html.formfile.class.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formorder.class.php");
 require_once(DOL_DOCUMENT_ROOT.'/includes/modules/supplier_order/modules_commandefournisseur.php');
 require_once DOL_DOCUMENT_ROOT."/fourn/fournisseur.product.class.php";
 if ($conf->projet->enabled)	require_once(DOL_DOCUMENT_ROOT.'/project.class.php');
@@ -464,6 +465,7 @@ llxHeader('',$langs->trans("OrderCard"),"CommandeFournisseur");
 
 $html =	new	Form($db);
 $formfile = new FormFile($db);
+$formorder = new FormOrder($db);
 
 /* *************************************************************************** */
 /*                                                                             */
@@ -1015,7 +1017,7 @@ if ($id > 0)
 			print '</td></tr>';
 
 			print '<tr><td>'.$langs->trans("OrderMode").'</td><td>';
-			$html->select_methodes_commande('',"methodecommande",1);
+			$formorder->select_methodes_commande('',"methodecommande",1);
 			print '</td></tr>';
 
 			print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="30" type="text" name="commentaire"></td></tr>';
diff --git a/htdocs/html.form.class.php b/htdocs/html.form.class.php
index 630a458f1ab55199d169a1aa94f7fd12787ec9ca..66393537303aebcba16ac2cd1a0df123236baeff 100644
--- a/htdocs/html.form.class.php
+++ b/htdocs/html.form.class.php
@@ -170,207 +170,6 @@ class Form
 	}
 
 
-	/**
-	 *    \brief      Retourne la liste d�roulante des d�partements/province/cantons tout pays confondu ou pour un pays donn�.
-	 *    \remarks    Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays.
-	 *    \remarks    La cle de la liste est le code (il peut y avoir plusieurs entr�e pour
-	 *                un code donn�e mais dans ce cas, le champ pays diff�re).
-	 *                Ainsi les liens avec les d�partements se font sur un d�partement ind�pendemment de son nom.
-	 *    \param      selected        code forme juridique a pr�s�lectionn�
-	 *    \param      pays_code       0=liste tous pays confondus, sinon code du pays � afficher
-	 */
-	function select_departement($selected='',$pays_code=0)
-	{
-		global $conf,$langs,$user;
-		 
-		dolibarr_syslog("Form::select_departement selected=$selected, pays_code=$pays_code",LOG_DEBUG);
-	  
-		$langs->load("dict");
-
-		$htmlname='departement_id';
-
-		// On recherche les d�partements/cantons/province active d'une region et pays actif
-		$sql = "SELECT d.rowid, d.code_departement as code , d.nom, d.active, p.libelle as libelle_pays, p.code as code_pays FROM";
-		$sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_pays as p";
-		$sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid";
-		$sql .= " AND d.active = 1 AND r.active = 1 AND p.active = 1";
-		if ($pays_code) $sql .= " AND p.code = '".$pays_code."'";
-		$sql .= " ORDER BY p.code, d.code_departement";
-
-		dolibarr_syslog("Form::select_departement sql=".$sql);
-		$result=$this->db->query($sql);
-		if ($result)
-		{
-	  print '<select class="flat" name="'.$htmlname.'">';
-	  if ($pays_code) print '<option value="0">&nbsp;</option>';
-	  $num = $this->db->num_rows($result);
-	  $i = 0;
-	  dolibarr_syslog("Form::select_departement num=$num",LOG_DEBUG);
-	  if ($num)
-	  {
-	  	$pays='';
-	  	while ($i < $num)
-	  	{
-	  		$obj = $this->db->fetch_object($result);
-	  		if ($obj->code == '0')		// Le code peut etre une chaine
-	  		{
-	  			print '<option value="0">&nbsp;</option>';
-	  		}
-	  		else {
-	  			if (! $pays || $pays != $obj->libelle_pays)
-	  			{
-	  				// Affiche la rupture si on est en mode liste multipays
-	  				if (! $pays_code && $obj->code_pays)
-	  				{
-	  					print '<option value="-1">----- '.$obj->libelle_pays." -----</option>\n";
-	  					$pays=$obj->libelle_pays;
-	  				}
-	  			}
-	  			 
-	  			if ($selected > 0 && $selected == $obj->rowid)
-	  			{
-	  				print '<option value="'.$obj->rowid.'" selected="true">';
-	  			}
-	  			else
-	  			{
-	  				print '<option value="'.$obj->rowid.'">';
-	  			}
-	  			// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
-	  			print $obj->code . ' - ' . ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->nom!='-'?$obj->nom:''));
-	  			print '</option>';
-	  		}
-	  		$i++;
-	  	}
-	  }
-	  print '</select>';
-			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
-		}
-		else {
-			dolibarr_print_error($this->db);
-		}
-	}
-
-
-	/**
-	 *    \brief      Retourne la liste d�roulante des regions actives dont le pays est actif
-	 *    \remarks    La cle de la liste est le code (il peut y avoir plusieurs entr�e pour
-	 *                un code donn�e mais dans ce cas, le champ pays et lang diff�re).
-	 *                Ainsi les liens avec les regions se font sur une region independemment
-	 *                de son nom.
-	 */
-
-	function select_region($selected='',$htmlname='region_id')
-	{
-		global $conf,$langs;
-		$langs->load("dict");
-
-		$sql = "SELECT r.rowid, r.code_region as code, r.nom as libelle, r.active, p.libelle as libelle_pays FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p";
-		$sql .= " WHERE r.fk_pays=p.rowid AND r.active = 1 and p.active = 1 ORDER BY libelle_pays, libelle ASC";
-
-		dolibarr_syslog("Form::select_region sql=".$sql);
-		if ($this->db->query($sql))
-		{
-			print '<select class="flat" name="'.$htmlname.'">';
-			$num = $this->db->num_rows();
-			$i = 0;
-			if ($num)
-	  {
-	  	$pays='';
-	  	while ($i < $num)
-	  	{
-	  		$obj = $this->db->fetch_object();
-	  		if ($obj->code == 0) {
-	  			print '<option value="0">&nbsp;</option>';
-	  		}
-	  		else {
-	  			if ($pays == '' || $pays != $obj->libelle_pays)
-	  			{
-	  				// Affiche la rupture
-	  				print '<option value="-1" disabled="disabled">----- '.$obj->libelle_pays." -----</option>\n";
-	  				$pays=$obj->libelle_pays;
-	  			}
-
-	  			if ($selected > 0 && $selected == $obj->code)
-		    {
-		    	print '<option value="'.$obj->code.'" selected="true">'.$obj->libelle.'</option>';
-		    }
-		    else
-		    {
-		    	print '<option value="'.$obj->code.'">'.$obj->libelle.'</option>';
-		    }
-	  		}
-	  		$i++;
-	  	}
-	  }
-	  print '</select>';
-		}
-		else {
-			dolibarr_print_error($this->db);
-		}
-	}
-
-
-	/**
-	 *   	\brief      Renvoie la liste des sources de commandes
-	 *		\param      selected		Id de la source pr�-s�lectionn�e
-	 *    	\param     	htmlname 		Nom de la liste deroulante
-	 *      \param     	addempty		0=liste sans valeur nulle, 1=ajoute valeur inconnue
-	 *      \return		array			Tableau des sources de commandes
-	 */
-	function selectSourcesCommande($selected='',$htmlname='source_id',$addempty=0)
-	{
-		global $conf,$langs;
-		print '<select class="flat" name="'.$htmlname.'" '.$htmloption.'>';
-		if ($addempty) print '<option value="-1" selected="true">&nbsp;</option>';
-
-		// \TODO Aller cherches les sources dans dictionnaire
-		print '<option value="0"'.($selected=='0'?' selected="true"':'').'>'.$langs->trans('OrderSource0').'</option>';
-		print '<option value="1"'.($selected=='1'?' selected="true"':'').'>'.$langs->trans('OrderSource1').'</option>';
-		print '<option value="2"'.($selected=='2'?' selected="true"':'').'>'.$langs->trans('OrderSource2').'</option>';
-		print '<option value="3"'.($selected=='3'?' selected="true"':'').'>'.$langs->trans('OrderSource3').'</option>';
-		print '<option value="4"'.($selected=='4'?' selected="true"':'').'>'.$langs->trans('OrderSource4').'</option>';
-		print '<option value="5"'.($selected=='5'?' selected="true"':'').'>'.$langs->trans('OrderSource5').'</option>';
-		print '<option value="6"'.($selected=='6'?' selected="true"':'').'>'.$langs->trans('OrderSource6').'</option>';
-
-		print '</select>';
-	}
-
-
-	/**
-	 *
-	 *
-	 */
-	function select_methodes_commande($selected='',$htmlname='source_id',$addempty=0)
-	{
-		global $conf,$langs;
-		$listemethodes=array();
-
-		$sql = "SELECT rowid, libelle ";
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_methode_commande_fournisseur";
-		$sql.= " WHERE active = 1";
-
-		dolibarr_syslog("Form::select_methodes_commande sql=".$sql);
-		$resql=$this->db->query($sql);
-		if ($resql)
-		{
-			$i = 0;
-			$num = $this->db->num_rows($resql);
-			while ($i < $num)
-			{
-				$obj = $this->db->fetch_object($resql);
-				$listemethodes[$obj->rowid] = $obj->libelle;
-				$i++;
-			}
-		}
-		else
-		{
-			dolibarr_print_error($this->db);
-			return -1;
-		}
-
-		print $this->select_array($htmlname,$listemethodes,$selected,$addempty);
-		return 1;
-	}
 
 	/**
 	 *    \brief     Retourne la liste d�roulante des pays actifs, dans la langue de l'utilisateur
@@ -515,27 +314,6 @@ class Form
 	}
 
 
-	/**
-	 *    \brief      Retourne la liste des types de comptes financiers
-	 *    \param      selected        Type pr�-s�lectionn�
-	 *    \param      htmlname        Nom champ formulaire
-	 */
-	function select_type_actions($selected='',$htmlname='actioncode')
-	{
-		global $langs,$user;
-
-		require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
-		$caction=new CActionComm($this->db);
-
-		$arraylist=$caction->liste_array(1,'code');
-		$arraylist[0]='&nbsp;';
-		asort($arraylist);
-
-		$this->select_array($htmlname, $arraylist, $selected);
-		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
-	}
-
-
 	/**
 	 *		\brief      Return list of social contributions
 	 *		\param      selected        Preselected type
@@ -1361,110 +1139,6 @@ class Form
 	}
 
 
-	/**
-	 *		\brief      Renvoie la liste des types d'effectifs possibles (pas de traduction car nombre)
-	 *		\param		mode		0=renvoi id+libelle, 1=renvoi code+libelle
-	 *    	\return     array		tableau des types d'effectifs
-	 */
-	function effectif_array($mode=0)
-	{
-		$effs = array();
-
-		$sql = "SELECT id, code, libelle";
-		$sql .= " FROM ".MAIN_DB_PREFIX."c_effectif";
-		$sql.= " WHERE active = 1";
-		$sql .= " ORDER BY id ASC";
-		dolibarr_syslog('Form::effectif_array sql='.$sql,LOG_DEBUG);
-		$resql=$this->db->query($sql);
-		if ($resql)
-		{
-			$num = $this->db->num_rows($resql);
-			$i = 0;
-
-			while ($i < $num)
-			{
-				$objp = $this->db->fetch_object($resql);
-				if (! $mode) $key=$objp->id;
-				else $key=$objp->code;
-
-				$effs[$key] = $objp->libelle!='-'?$objp->libelle:'';
-				$i++;
-			}
-			$this->db->free($resql);
-		}
-		return $effs;
-	}
-
-	/**
-	 *    \brief      Renvoie la liste des formes juridiques existantes (pas de traduction car unique au pays)
-	 *    \return     array      tableau des formes juridiques
-	 */
-	function forme_juridique_array()
-	{
-		$fj = array();
-
-		$sql = "SELECT code, libelle";
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_forme_juridique";
-		$sql.= " WHERE active = 1";
-		$sql.= " ORDER BY code ASC";
-		dolibarr_syslog('Form::forme_juridique_array sql='.$sql,LOG_DEBUG);
-		$resql=$this->db->query($sql);
-		if ($resql)
-		{
-			$num = $this->db->num_rows($resql);
-			$i = 0;
-
-			while ($i < $num)
-			{
-				$objp = $this->db->fetch_object($resql);
-				$fj[$objp->code] = $objp->libelle!='-'?$objp->libelle:'';
-				$i++;
-			}
-			$this->db->free($resql);
-		}
-		return $fj;
-	}
-
-	/**
-	 *    	\brief      Renvoie la liste des libelles traduits des types actifs de societes
-	 *		\param		mode		0=renvoi id+libelle, 1=renvoi code+libelle
-	 *    	\return     array      	tableau des types
-	 */
-	function typent_array($mode=0)
-	{
-		global $langs;
-
-		$effs = array();
-
-		$sql = "SELECT id, code, libelle";
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_typent";
-		$sql.= " WHERE active = 1";
-		$sql.= " ORDER by id";
-		dolibarr_syslog('Form::typent_array sql='.$sql,LOG_DEBUG);
-		$resql=$this->db->query($sql);
-		if ($resql)
-		{
-			$num = $this->db->num_rows($resql);
-			$i = 0;
-
-			while ($i < $num)
-			{
-				$objp = $this->db->fetch_object($resql);
-				if (! $mode) $key=$objp->id;
-				else $key=$objp->code;
-
-				if ($langs->trans($objp->code) != $objp->code)
-				$effs[$key] = $langs->trans($objp->code);
-				else
-				$effs[$key] = $objp->libelle!='-'?$objp->libelle:'';
-				$i++;
-			}
-			$this->db->free($resql);
-		}
-
-		return $effs;
-	}
-
 	/**
 	 *      \brief      Charge dans cache la liste des conditions de paiements possibles
 	 *      \return     int             Nb lignes charg�es, 0 si d�j� charg�es, <0 si ko
@@ -1791,128 +1465,6 @@ class Form
 	}
 
 
-
-	/**
-	 *    \brief      Retourne la liste d�roulante des civilite actives
-	 *    \param      selected    civilite pr�-s�lectionn�e
-	 */
-	function select_civilite($selected='')
-	{
-		global $conf,$langs,$user;
-		$langs->load("dict");
-
-		$sql = "SELECT rowid, code, civilite, active FROM ".MAIN_DB_PREFIX."c_civilite";
-		$sql .= " WHERE active = 1";
-
-		dolibarr_syslog("Form::select_civilite sql=".$sql);
-		if ($this->db->query($sql))
-		{
-			print '<select class="flat" name="civilite_id">';
-			print '<option value="">&nbsp;</option>';
-			$num = $this->db->num_rows();
-			$i = 0;
-			if ($num)
-			{
-				while ($i < $num)
-				{
-					$obj = $this->db->fetch_object();
-					if ($selected == $obj->code)
-					{
-						print '<option value="'.$obj->code.'" selected="true">';
-					}
-					else
-					{
-						print '<option value="'.$obj->code.'">';
-					}
-					// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
-					print ($langs->trans("Civility".$obj->code)!="Civility".$obj->code ? $langs->trans("Civility".$obj->code) : ($obj->civilite!='-'?$obj->civilite:''));
-					print '</option>';
-					$i++;
-				}
-			}
-			print '</select>';
-			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
-		}
-		else
-		{
-			dolibarr_print_error($this->db);
-		}
-	}
-
-
-	/**
-	 *    \brief      Retourne la liste d�roulante des formes juridiques tous pays confondus ou pour un pays donn�.
-	 *    \remarks    Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays
-	 *    \param      selected        Code forme juridique a pr�-s�lectionn�
-	 *    \param      pays_code       0=liste tous pays confondus, sinon code du pays � afficher
-	 */
-	function select_forme_juridique($selected='',$pays_code=0)
-	{
-		global $conf,$langs,$user;
-		$langs->load("dict");
-
-		// On recherche les formes juridiques actives des pays actifs
-		$sql  = "SELECT f.rowid, f.code as code , f.libelle as nom, f.active, p.libelle as libelle_pays, p.code as code_pays";
-		$sql .= " FROM llx_c_forme_juridique as f, llx_c_pays as p";
-		$sql .= " WHERE f.fk_pays=p.rowid";
-		$sql .= " AND f.active = 1 AND p.active = 1";
-		if ($pays_code) $sql .= " AND p.code = '".$pays_code."'";
-		$sql .= " ORDER BY p.code, f.code";
-
-		dolibarr_syslog("Form::select_forme_juridique sql=".$sql);
-		$result=$this->db->query($sql);
-		if ($result)
-		{
-			print '<div id="particulier2" class="visible">';
-			print '<select class="flat" name="forme_juridique_code">';
-			if ($pays_code) print '<option value="0">&nbsp;</option>';
-			$num = $this->db->num_rows($result);
-			$i = 0;
-			if ($num)
-			{
-				$pays='';
-				while ($i < $num)
-				{
-					$obj = $this->db->fetch_object($result);
-					if ($obj->code == 0) {
-						print '<option value="0">&nbsp;</option>';
-					}
-					else {
-						if (! $pays || $pays != $obj->libelle_pays) {
-							// Affiche la rupture si on est en mode liste multipays
-							if (! $pays_code && $obj->code_pays) {
-								print '<option value="0">----- '.$obj->libelle_pays." -----</option>\n";
-								$pays=$obj->libelle_pays;
-							}
-						}
-
-						if ($selected > 0 && $selected == $obj->code)
-						{
-							print '<option value="'.$obj->code.'" selected="true">';
-						}
-						else
-						{
-							print '<option value="'.$obj->code.'">';
-						}
-						// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
-						print $obj->code . ' - ';
-						print ($langs->trans("JuridicalStatus".$obj->code)!="JuridicalStatus".$obj->code?$langs->trans("JuridicalStatus".$obj->code):($obj->nom!='-'?$langs->convToOutputCharset($obj->nom):''));
-						print '</option>';
-					}
-					$i++;
-				}
-			}
-			print '</select>';
-			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
-			print '</div>';
-		}
-		else
-		{
-			dolibarr_print_error($this->db);
-		}
-	}
-
-
 	/**
 	 *    	\brief  Affiche formulaire de demande de confirmation
 	 *    	\param  page        	page
@@ -2082,38 +1634,6 @@ class Form
 		}
 	}
 
-	/**
-	 *    \brief      Affiche formulaire de selection de l'assuj�tissement � la TVA
-	 *    \param      page        Page
-	 *    \param      selected    Id condition pr�-s�lectionn�e
-	 *    \param      htmlname    Nom du formulaire select
-	 */
-	function form_assujetti_tva($page, $selected='', $htmlname='')
-	{
-		global $langs;
-		$options = array(0=>"non",1=>"oui");
-		if ($htmlname != "none")
-		{
-			print '<form method="post" action="'.$page.'">';
-			print '<input type="hidden" name="action" value="setassujtva">';
-			print '<table class="noborder" cellpadding="0" cellspacing="0">';
-			print '<tr><td>';
-			$this->select_assujetti_tva($selected,$htmlname);
-			print '</td>';
-			print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
-			print '</tr></table></form>';
-		}
-		else
-		{
-			if ($selected != "")
-			{
-				print $options[$selected];
-			} else {
-				print "&nbsp;";
-			}
-		}
-	}
-
 
 	/**
 	 *    \brief      Affiche formulaire de selection des modes de reglement
@@ -2148,58 +1668,6 @@ class Form
 	}
 
 
-	/**
-	 *  \brief      Affiche formulaire de selection des modes de reglement
-	 *  \param      page        Page
-	 *  \param      selected    Id or code preselected
-	 *  \param      htmlname    Nom du formulaire select
-	 *	\param		empty		Add empty value in list
-	 */
-	function form_prospect_level($page, $selected='', $htmlname='prospect_level_id', $empty=0)
-	{
-		global $langs;
-
-		print '<form method="post" action="'.$page.'">';
-		print '<input type="hidden" name="action" value="setprospectlevel">';
-		print '<table class="noborder" cellpadding="0" cellspacing="0">';
-		print '<tr><td>';
-
-		print '<select class="flat" name="'.$htmlname.'">';
-		if ($empty) print '<option value="">&nbsp;</option>';
-
-		dolibarr_syslog('Form::form_prospect_level',LOG_DEBUG);
-		$sql = "SELECT code, label";
-		$sql.= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
-		$sql.= " WHERE active > 0";
-		$sql.= " ORDER BY sortorder";
-		$resql = $this->db->query($sql);
-		if ($resql)
-		{
-			$num = $this->db->num_rows($resql);
-			$i = 0;
-			while ($i < $num)
-			{
-				$obj = $this->db->fetch_object($resql);
-
-				print '<option value="'.$obj->code.'"';
-				if ($selected == $obj->code) print ' selected="true"';
-				print '>';
-				$level=$langs->trans($obj->code);
-				if ($level == $obj->code) $level=$langs->trans($obj->label);
-				print $level;
-				print '</option>';
-
-				$i++;
-			}
-		}
-		else dolibarr_print_error($this->db);
-		print '</select>';
-
-		print '</td>';
-		print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
-		print '</tr></table></form>';
-	}
-
 	/**
 	 *    	\brief      Affiche formulaire de selection de la remise fixe
 	 *    	\param      page        	Page URL where form is shown
diff --git a/htdocs/html.formactions.class.php b/htdocs/html.formactions.class.php
index 09c7de801dfc5044e64666539b2eabfa7a109595..16457a369dd82c3f068e5662052580e98b0fe1f3 100644
--- a/htdocs/html.formactions.class.php
+++ b/htdocs/html.formactions.class.php
@@ -148,4 +148,27 @@ class FormActions
 		}
 	}
 
+	
+	/**
+	 *    \brief      Retourne la liste des types de comptes financiers
+	 *    \param      selected        Type pr�-s�lectionn�
+	 *    \param      htmlname        Nom champ formulaire
+	 */
+	function select_type_actions($selected='',$htmlname='actioncode')
+	{
+		global $langs,$user;
+
+		require_once(DOL_DOCUMENT_ROOT."/cactioncomm.class.php");
+		require_once(DOL_DOCUMENT_ROOT."/html.form.class.php");
+		$caction=new CActionComm($this->db);
+		$form=new Form($this->db);
+		
+		$arraylist=$caction->liste_array(1,'code');
+		$arraylist[0]='&nbsp;';
+		asort($arraylist);
+
+		$form->select_array($htmlname, $arraylist, $selected);
+		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
+	}
+		
 }
diff --git a/htdocs/html.formcompany.class.php b/htdocs/html.formcompany.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..94600a9c226eda8b8da22695f67ee0e4f337a251
--- /dev/null
+++ b/htdocs/html.formcompany.class.php
@@ -0,0 +1,441 @@
+<?php
+/* 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.
+ */
+
+/**
+ *	\file       htdocs/html.formcompany.class.php
+ *	\brief      Fichier de la classe des fonctions pr�d�finie de composants html
+ *	\version	$Id$
+ */
+
+
+/**
+ *	\class      FormCompany
+ *	\brief      Classe permettant la g�n�ration de composants html
+ *	\remarks	Only common components must be here.
+ */
+class FormCompany
+{
+	var $db;
+	var $error;
+
+
+
+	/**
+	 *	\brief     Constructeur
+	 *	\param     DB      handler d'acc�s base de donn�e
+	 */
+	function FormCompany($DB)
+	{
+		$this->db = $DB;
+
+		return 1;
+	}
+
+
+	/**
+	 *    	\brief      Renvoie la liste des libelles traduits des types actifs de societes
+	 *		\param		mode		0=renvoi id+libelle, 1=renvoi code+libelle
+	 *    	\return     array      	tableau des types
+	 */
+	function typent_array($mode=0)
+	{
+		global $langs;
+
+		$effs = array();
+
+		$sql = "SELECT id, code, libelle";
+		$sql.= " FROM ".MAIN_DB_PREFIX."c_typent";
+		$sql.= " WHERE active = 1";
+		$sql.= " ORDER by id";
+		dolibarr_syslog('Form::typent_array sql='.$sql,LOG_DEBUG);
+		$resql=$this->db->query($sql);
+		if ($resql)
+		{
+			$num = $this->db->num_rows($resql);
+			$i = 0;
+
+			while ($i < $num)
+			{
+				$objp = $this->db->fetch_object($resql);
+				if (! $mode) $key=$objp->id;
+				else $key=$objp->code;
+
+				if ($langs->trans($objp->code) != $objp->code)
+				$effs[$key] = $langs->trans($objp->code);
+				else
+				$effs[$key] = $objp->libelle!='-'?$objp->libelle:'';
+				$i++;
+			}
+			$this->db->free($resql);
+		}
+
+		return $effs;
+	}
+
+	/**
+	 *		\brief      Renvoie la liste des types d'effectifs possibles (pas de traduction car nombre)
+	 *		\param		mode		0=renvoi id+libelle, 1=renvoi code+libelle
+	 *    	\return     array		tableau des types d'effectifs
+	 */
+	function effectif_array($mode=0)
+	{
+		$effs = array();
+
+		$sql = "SELECT id, code, libelle";
+		$sql .= " FROM ".MAIN_DB_PREFIX."c_effectif";
+		$sql.= " WHERE active = 1";
+		$sql .= " ORDER BY id ASC";
+		dolibarr_syslog('Form::effectif_array sql='.$sql,LOG_DEBUG);
+		$resql=$this->db->query($sql);
+		if ($resql)
+		{
+			$num = $this->db->num_rows($resql);
+			$i = 0;
+
+			while ($i < $num)
+			{
+				$objp = $this->db->fetch_object($resql);
+				if (! $mode) $key=$objp->id;
+				else $key=$objp->code;
+
+				$effs[$key] = $objp->libelle!='-'?$objp->libelle:'';
+				$i++;
+			}
+			$this->db->free($resql);
+		}
+		return $effs;
+	}
+
+
+	/**
+	 *  \brief      Affiche formulaire de selection des modes de reglement
+	 *  \param      page        Page
+	 *  \param      selected    Id or code preselected
+	 *  \param      htmlname    Nom du formulaire select
+	 *	\param		empty		Add empty value in list
+	 */
+	function form_prospect_level($page, $selected='', $htmlname='prospect_level_id', $empty=0)
+	{
+		global $langs;
+
+		print '<form method="post" action="'.$page.'">';
+		print '<input type="hidden" name="action" value="setprospectlevel">';
+		print '<table class="noborder" cellpadding="0" cellspacing="0">';
+		print '<tr><td>';
+
+		print '<select class="flat" name="'.$htmlname.'">';
+		if ($empty) print '<option value="">&nbsp;</option>';
+
+		dolibarr_syslog('Form::form_prospect_level',LOG_DEBUG);
+		$sql = "SELECT code, label";
+		$sql.= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
+		$sql.= " WHERE active > 0";
+		$sql.= " ORDER BY sortorder";
+		$resql = $this->db->query($sql);
+		if ($resql)
+		{
+			$num = $this->db->num_rows($resql);
+			$i = 0;
+			while ($i < $num)
+			{
+				$obj = $this->db->fetch_object($resql);
+
+				print '<option value="'.$obj->code.'"';
+				if ($selected == $obj->code) print ' selected="true"';
+				print '>';
+				$level=$langs->trans($obj->code);
+				if ($level == $obj->code) $level=$langs->trans($obj->label);
+				print $level;
+				print '</option>';
+
+				$i++;
+			}
+		}
+		else dolibarr_print_error($this->db);
+		print '</select>';
+
+		print '</td>';
+		print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
+		print '</tr></table></form>';
+	}
+
+
+	/**
+	 *    \brief      Retourne la liste d�roulante des d�partements/province/cantons tout pays confondu ou pour un pays donn�.
+	 *    \remarks    Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays.
+	 *    \remarks    La cle de la liste est le code (il peut y avoir plusieurs entr�e pour
+	 *                un code donn�e mais dans ce cas, le champ pays diff�re).
+	 *                Ainsi les liens avec les d�partements se font sur un d�partement ind�pendemment de son nom.
+	 *    \param      selected        code forme juridique a pr�s�lectionn�
+	 *    \param      pays_code       0=liste tous pays confondus, sinon code du pays � afficher
+	 */
+	function select_departement($selected='',$pays_code=0)
+	{
+		global $conf,$langs,$user;
+			
+		dolibarr_syslog("Form::select_departement selected=$selected, pays_code=$pays_code",LOG_DEBUG);
+			
+		$langs->load("dict");
+
+		$htmlname='departement_id';
+
+		// On recherche les d�partements/cantons/province active d'une region et pays actif
+		$sql = "SELECT d.rowid, d.code_departement as code , d.nom, d.active, p.libelle as libelle_pays, p.code as code_pays FROM";
+		$sql .= " ".MAIN_DB_PREFIX ."c_departements as d, ".MAIN_DB_PREFIX."c_regions as r,".MAIN_DB_PREFIX."c_pays as p";
+		$sql .= " WHERE d.fk_region=r.code_region and r.fk_pays=p.rowid";
+		$sql .= " AND d.active = 1 AND r.active = 1 AND p.active = 1";
+		if ($pays_code) $sql .= " AND p.code = '".$pays_code."'";
+		$sql .= " ORDER BY p.code, d.code_departement";
+
+		dolibarr_syslog("Form::select_departement sql=".$sql);
+		$result=$this->db->query($sql);
+		if ($result)
+		{
+			print '<select class="flat" name="'.$htmlname.'">';
+			if ($pays_code) print '<option value="0">&nbsp;</option>';
+			$num = $this->db->num_rows($result);
+			$i = 0;
+			dolibarr_syslog("Form::select_departement num=$num",LOG_DEBUG);
+			if ($num)
+			{
+				$pays='';
+				while ($i < $num)
+				{
+					$obj = $this->db->fetch_object($result);
+					if ($obj->code == '0')		// Le code peut etre une chaine
+					{
+						print '<option value="0">&nbsp;</option>';
+					}
+					else {
+						if (! $pays || $pays != $obj->libelle_pays)
+						{
+							// Affiche la rupture si on est en mode liste multipays
+							if (! $pays_code && $obj->code_pays)
+							{
+								print '<option value="-1">----- '.$obj->libelle_pays." -----</option>\n";
+								$pays=$obj->libelle_pays;
+							}
+						}
+
+						if ($selected > 0 && $selected == $obj->rowid)
+						{
+							print '<option value="'.$obj->rowid.'" selected="true">';
+						}
+						else
+						{
+							print '<option value="'.$obj->rowid.'">';
+						}
+						// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
+						print $obj->code . ' - ' . ($langs->trans($obj->code)!=$obj->code?$langs->trans($obj->code):($obj->nom!='-'?$obj->nom:''));
+						print '</option>';
+					}
+					$i++;
+				}
+			}
+			print '</select>';
+			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
+		}
+		else
+		{
+			dolibarr_print_error($this->db);
+		}
+	}
+
+	
+	/**
+	 *    \brief      Retourne la liste d�roulante des regions actives dont le pays est actif
+	 *    \remarks    La cle de la liste est le code (il peut y avoir plusieurs entr�e pour
+	 *                un code donn�e mais dans ce cas, le champ pays et lang diff�re).
+	 *                Ainsi les liens avec les regions se font sur une region independemment
+	 *                de son nom.
+	 */
+	function select_region($selected='',$htmlname='region_id')
+	{
+		global $conf,$langs;
+		$langs->load("dict");
+
+		$sql = "SELECT r.rowid, r.code_region as code, r.nom as libelle, r.active, p.libelle as libelle_pays FROM ".MAIN_DB_PREFIX."c_regions as r, ".MAIN_DB_PREFIX."c_pays as p";
+		$sql .= " WHERE r.fk_pays=p.rowid AND r.active = 1 and p.active = 1 ORDER BY libelle_pays, libelle ASC";
+
+		dolibarr_syslog("Form::select_region sql=".$sql);
+		if ($this->db->query($sql))
+		{
+			print '<select class="flat" name="'.$htmlname.'">';
+			$num = $this->db->num_rows();
+			$i = 0;
+			if ($num)
+			{
+				$pays='';
+				while ($i < $num)
+				{
+					$obj = $this->db->fetch_object();
+					if ($obj->code == 0) {
+						print '<option value="0">&nbsp;</option>';
+					}
+					else {
+						if ($pays == '' || $pays != $obj->libelle_pays)
+						{
+							// Affiche la rupture
+							print '<option value="-1" disabled="disabled">----- '.$obj->libelle_pays." -----</option>\n";
+							$pays=$obj->libelle_pays;
+						}
+
+						if ($selected > 0 && $selected == $obj->code)
+						{
+							print '<option value="'.$obj->code.'" selected="true">'.$obj->libelle.'</option>';
+						}
+						else
+						{
+							print '<option value="'.$obj->code.'">'.$obj->libelle.'</option>';
+						}
+					}
+					$i++;
+				}
+			}
+			print '</select>';
+		}
+		else 
+		{
+			dolibarr_print_error($this->db);
+		}
+	}
+
+	
+	/**
+	 *    \brief      Retourne la liste d�roulante des civilite actives
+	 *    \param      selected    civilite pr�-s�lectionn�e
+	 */
+	function select_civilite($selected='')
+	{
+		global $conf,$langs,$user;
+		$langs->load("dict");
+
+		$sql = "SELECT rowid, code, civilite, active FROM ".MAIN_DB_PREFIX."c_civilite";
+		$sql .= " WHERE active = 1";
+
+		dolibarr_syslog("Form::select_civilite sql=".$sql);
+		if ($this->db->query($sql))
+		{
+			print '<select class="flat" name="civilite_id">';
+			print '<option value="">&nbsp;</option>';
+			$num = $this->db->num_rows();
+			$i = 0;
+			if ($num)
+			{
+				while ($i < $num)
+				{
+					$obj = $this->db->fetch_object();
+					if ($selected == $obj->code)
+					{
+						print '<option value="'.$obj->code.'" selected="true">';
+					}
+					else
+					{
+						print '<option value="'.$obj->code.'">';
+					}
+					// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
+					print ($langs->trans("Civility".$obj->code)!="Civility".$obj->code ? $langs->trans("Civility".$obj->code) : ($obj->civilite!='-'?$obj->civilite:''));
+					print '</option>';
+					$i++;
+				}
+			}
+			print '</select>';
+			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
+		}
+		else
+		{
+			dolibarr_print_error($this->db);
+		}
+	}
+
+
+	/**
+	 *    \brief      Retourne la liste d�roulante des formes juridiques tous pays confondus ou pour un pays donn�.
+	 *    \remarks    Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays
+	 *    \param      selected        Code forme juridique a pr�-s�lectionn�
+	 *    \param      pays_code       0=liste tous pays confondus, sinon code du pays � afficher
+	 */
+	function select_forme_juridique($selected='',$pays_code=0)
+	{
+		global $conf,$langs,$user;
+		$langs->load("dict");
+
+		// On recherche les formes juridiques actives des pays actifs
+		$sql  = "SELECT f.rowid, f.code as code , f.libelle as nom, f.active, p.libelle as libelle_pays, p.code as code_pays";
+		$sql .= " FROM llx_c_forme_juridique as f, llx_c_pays as p";
+		$sql .= " WHERE f.fk_pays=p.rowid";
+		$sql .= " AND f.active = 1 AND p.active = 1";
+		if ($pays_code) $sql .= " AND p.code = '".$pays_code."'";
+		$sql .= " ORDER BY p.code, f.code";
+
+		dolibarr_syslog("Form::select_forme_juridique sql=".$sql);
+		$result=$this->db->query($sql);
+		if ($result)
+		{
+			print '<div id="particulier2" class="visible">';
+			print '<select class="flat" name="forme_juridique_code">';
+			if ($pays_code) print '<option value="0">&nbsp;</option>';
+			$num = $this->db->num_rows($result);
+			$i = 0;
+			if ($num)
+			{
+				$pays='';
+				while ($i < $num)
+				{
+					$obj = $this->db->fetch_object($result);
+					if ($obj->code == 0) {
+						print '<option value="0">&nbsp;</option>';
+					}
+					else {
+						if (! $pays || $pays != $obj->libelle_pays) {
+							// Affiche la rupture si on est en mode liste multipays
+							if (! $pays_code && $obj->code_pays) {
+								print '<option value="0">----- '.$obj->libelle_pays." -----</option>\n";
+								$pays=$obj->libelle_pays;
+							}
+						}
+
+						if ($selected > 0 && $selected == $obj->code)
+						{
+							print '<option value="'.$obj->code.'" selected="true">';
+						}
+						else
+						{
+							print '<option value="'.$obj->code.'">';
+						}
+						// Si traduction existe, on l'utilise, sinon on prend le libell� par d�faut
+						print $obj->code . ' - ';
+						print ($langs->trans("JuridicalStatus".$obj->code)!="JuridicalStatus".$obj->code?$langs->trans("JuridicalStatus".$obj->code):($obj->nom!='-'?$langs->convToOutputCharset($obj->nom):''));
+						print '</option>';
+					}
+					$i++;
+				}
+			}
+			print '</select>';
+			if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
+			print '</div>';
+		}
+		else
+		{
+			dolibarr_print_error($this->db);
+		}
+	}
+
+}
+
+?>
diff --git a/htdocs/html.formorder.class.php b/htdocs/html.formorder.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8ce07f0a0f0e293cd04611d76ea4a4b15614653
--- /dev/null
+++ b/htdocs/html.formorder.class.php
@@ -0,0 +1,114 @@
+<?php
+/* 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.
+ */
+
+/**
+ *	\file       htdocs/html.formorder.class.php
+ *	\brief      Fichier de la classe des fonctions pr�d�finie de composants html
+ *	\version	$Id$
+ */
+
+
+/**
+ *	\class      FormOrder
+ *	\brief      Classe permettant la g�n�ration de composants html
+ *	\remarks	Only common components must be here.
+ */
+class FormOrder
+{
+	var $db;
+	var $error;
+
+
+
+	/**
+	 *	\brief     Constructeur
+	 *	\param     DB      handler d'acc�s base de donn�e
+	 */
+	function FormOrder($DB)
+	{
+		$this->db = $DB;
+
+		return 1;
+	}
+
+
+	/**
+	 *   	\brief      Renvoie la liste des sources de commandes
+	 *		\param      selected		Id de la source pr�-s�lectionn�e
+	 *    	\param     	htmlname 		Nom de la liste deroulante
+	 *      \param     	addempty		0=liste sans valeur nulle, 1=ajoute valeur inconnue
+	 *      \return		array			Tableau des sources de commandes
+	 */
+	function selectSourcesCommande($selected='',$htmlname='source_id',$addempty=0)
+	{
+		global $conf,$langs;
+		print '<select class="flat" name="'.$htmlname.'" '.$htmloption.'>';
+		if ($addempty) print '<option value="-1" selected="true">&nbsp;</option>';
+
+		// \TODO Aller chercher les sources dans dictionnaire
+		print '<option value="0"'.($selected=='0'?' selected="true"':'').'>'.$langs->trans('OrderSource0').'</option>';
+		print '<option value="1"'.($selected=='1'?' selected="true"':'').'>'.$langs->trans('OrderSource1').'</option>';
+		print '<option value="2"'.($selected=='2'?' selected="true"':'').'>'.$langs->trans('OrderSource2').'</option>';
+		print '<option value="3"'.($selected=='3'?' selected="true"':'').'>'.$langs->trans('OrderSource3').'</option>';
+		print '<option value="4"'.($selected=='4'?' selected="true"':'').'>'.$langs->trans('OrderSource4').'</option>';
+		print '<option value="5"'.($selected=='5'?' selected="true"':'').'>'.$langs->trans('OrderSource5').'</option>';
+		print '<option value="6"'.($selected=='6'?' selected="true"':'').'>'.$langs->trans('OrderSource6').'</option>';
+
+		print '</select>';
+	}
+
+
+	/**
+	 *
+	 *
+	 */
+	function select_methodes_commande($selected='',$htmlname='source_id',$addempty=0)
+	{
+		global $conf,$langs;
+		$listemethodes=array();
+
+		$sql = "SELECT rowid, libelle ";
+		$sql.= " FROM ".MAIN_DB_PREFIX."c_methode_commande_fournisseur";
+		$sql.= " WHERE active = 1";
+
+		dolibarr_syslog("Form::select_methodes_commande sql=".$sql);
+		$resql=$this->db->query($sql);
+		if ($resql)
+		{
+			$i = 0;
+			$num = $this->db->num_rows($resql);
+			while ($i < $num)
+			{
+				$obj = $this->db->fetch_object($resql);
+				$listemethodes[$obj->rowid] = $obj->libelle;
+				$i++;
+			}
+		}
+		else
+		{
+			dolibarr_print_error($this->db);
+			return -1;
+		}
+
+		print $this->select_array($htmlname,$listemethodes,$selected,$addempty);
+		return 1;
+	}
+
+}
+
+?>
diff --git a/htdocs/soc.php b/htdocs/soc.php
index 7b4024f3632a1750fce5bf1e9386db5a8ed7fce3..5a53fd81d6c2fced251ee353352c24424487f37f 100644
--- a/htdocs/soc.php
+++ b/htdocs/soc.php
@@ -30,6 +30,7 @@
 
 require("pre.inc.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php");
+require_once(DOL_DOCUMENT_ROOT."/html.formcompany.class.php");
 require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
 
 $langs->load("companies");
@@ -266,6 +267,8 @@ if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == 'yes' &&
 llxHeader();
 
 $form = new Form($db);
+$formcompany = new FormCompany($db);
+
 $countrynotdefined=$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')';
 
 
@@ -390,7 +393,7 @@ $_GET["action"] == 'create' || $_POST["action"] == 'create')
 			print '<td colspan=2>&nbsp;</td></tr>';
 
 			print '<tr><td>'.$langs->trans("UserTitle").'</td><td>';
-			print $form->select_civilite($contact->civilite_id).'</td>';
+			print $formcompany->select_civilite($contact->civilite_id).'</td>';
 			print '<td colspan=2>&nbsp;</td></tr>';
 		}
 
@@ -483,7 +486,7 @@ $_GET["action"] == 'create' || $_POST["action"] == 'create')
 		print '<tr><td>'.$langs->trans('State').'</td><td colspan="3">';
 		if ($soc->pays_id)
 		{
-			$form->select_departement($soc->departement_id,$soc->pays_code);
+			$formcompany->select_departement($soc->departement_id,$soc->pays_code);
 		}
 		else
 		{
@@ -546,7 +549,7 @@ $_GET["action"] == 'create' || $_POST["action"] == 'create')
 		print '<td colspan="3">';
 		if ($soc->pays_id)
 		{
-			$form->select_forme_juridique($soc->forme_juridique_code,$soc->pays_code);
+			$formcompany->select_forme_juridique($soc->forme_juridique_code,$soc->pays_code);
 		}
 		else
 		{
@@ -555,11 +558,11 @@ $_GET["action"] == 'create' || $_POST["action"] == 'create')
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans("Type").'</td><td>'."\n";
-		$form->select_array("typent_id",$form->typent_array(0), $soc->typent_id);
+		$form->select_array("typent_id",$formcompany->typent_array(0), $soc->typent_id);
 		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
 		print '</td>';
 		print '<td>'.$langs->trans("Staff").'</td><td>';
-		$form->select_array("effectif_id",$form->effectif_array(0), $soc->effectif_id);
+		$form->select_array("effectif_id",$formcompany->effectif_array(0), $soc->effectif_id);
 		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
 		print '</td></tr>';
 
@@ -834,7 +837,7 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans('State').'</td><td colspan="3">';
-		$form->select_departement($soc->departement_id,$soc->pays_code);
+		$formcompany->select_departement($soc->departement_id,$soc->pays_code);
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans('Phone').'</td><td><input type="text" name="tel" value="'.$soc->tel.'"></td>';
@@ -920,15 +923,15 @@ elseif ($_GET["action"] == 'edit' || $_POST["action"] == 'edit')
 		print '<tr><td>'.$langs->trans("Capital").'</td><td colspan="3"><input type="text" name="capital" size="10" value="'.$soc->capital.'"> '.$langs->trans("Currency".$conf->monnaie).'</td></tr>';
 
 		print '<tr><td>'.$langs->trans('JuridicalStatus').'</td><td colspan="3">';
-		$form->select_forme_juridique($soc->forme_juridique_code,$soc->pays_code);
+		$formcompany->select_forme_juridique($soc->forme_juridique_code,$soc->pays_code);
 		print '</td></tr>';
 
 		print '<tr><td>'.$langs->trans("Type").'</td><td>';
-		$form->select_array("typent_id",$form->typent_array(0), $soc->typent_id);
+		$form->select_array("typent_id",$formcompany->typent_array(0), $soc->typent_id);
 		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
 		print '</td>';
 		print '<td>'.$langs->trans("Staff").'</td><td>';
-		$form->select_array("effectif_id",$form->effectif_array(0), $soc->effectif_id);
+		$form->select_array("effectif_id",$formcompany->effectif_array(0), $soc->effectif_id);
 		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionnarySetup"),1);
 		print '</td></tr>';
 
@@ -1147,7 +1150,7 @@ else
 	print '<tr><td>'.$langs->trans('JuridicalStatus').'</td><td colspan="3">'.$soc->forme_juridique.'</td></tr>';
 
 	// Type + Staff
-	$arr = $form->typent_array(1);
+	$arr = $formcompany->typent_array(1);
 	$soc->typent= $arr[$soc->typent_code];
 	print '<tr><td>'.$langs->trans("Type").'</td><td>'.$soc->typent.'</td><td>'.$langs->trans("Staff").'</td><td>'.$soc->effectif.'</td></tr>';