diff --git a/htdocs/admin/ldap.php b/htdocs/admin/ldap.php
index 7c9981d5fa05e28d534d2c24b3c00f6bee108f15..15140b45a87ac80a8752b0c7b1ca7e85510f2278 100644
--- a/htdocs/admin/ldap.php
+++ b/htdocs/admin/ldap.php
@@ -47,6 +47,7 @@ $langs->load("admin");
 if (!$user->admin)
   accessforbidden();
 
+
 /*
  * Actions
  */
@@ -61,7 +62,6 @@ if ($_GET["action"] == 'setvalue' && $user->admin)
 	{
 		print $db->error();
 	}
-
 	if (! dolibarr_set_const($db, 'LDAP_SERVER_HOST',$_POST["host"]))
 	{
 		print $db->error();
@@ -86,11 +86,7 @@ if ($_GET["action"] == 'setvalue' && $user->admin)
 	{
 		print $db->error();
 	}
-	if (! dolibarr_set_const($db, 'LDAP_USER_DN',$_POST["user"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_GROUP_DN',$_POST["group"]))
+	if (! dolibarr_set_const($db, 'LDAP_SERVER_USE_TLS',$_POST["usetls"]))
 	{
 		print $db->error();
 	}
@@ -102,55 +98,6 @@ if ($_GET["action"] == 'setvalue' && $user->admin)
 	{
 		print $db->error();
 	}
-	if (! dolibarr_set_const($db, 'LDAP_CONTACT_DN',$_POST["contact"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_SERVER_USE_TLS',$_POST["usetls"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_LOGIN',$_POST["fieldlogin"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_NAME',$_POST["fieldname"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_FIRSTNAME',$_POST["fieldfirstname"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_MAIL',$_POST["fieldmail"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_PHONE',$_POST["fieldphone"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_FAX',$_POST["fieldfax"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_MOBILE',$_POST["fieldmobile"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FILTER_CONNECTION',$_POST["filterconnection"]))
-	{
-		print $db->error();
-	}
-	if (! dolibarr_set_const($db, 'LDAP_FIELD_LOGIN_SAMBA',$_POST["fieldloginsamba"]))
-	{
-		print $db->error();
-	}
-	if ($db->query($sql))
-    {
-    	Header("Location: ldap.php");
-    	exit;
-    }
 }
 
 
@@ -173,18 +120,81 @@ if ($mesg) print '<div class="error">'.$mesg.'</div>';
 else print '<br>';
 
 
-print '<form method="post" action="ldap.php?action=setvalue">';
+// Onglets
+$h = 0;
+
+$head[$h][0] = DOL_URL_ROOT."/admin/ldap.php";
+$head[$h][1] = $langs->trans("LDAPGlobalParameters");
+$hselected=$h;
+$h++;
+
+if ($conf->global->LDAP_SYNCHRO_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_users.php";
+	$head[$h][1] = $langs->trans("LDAPUsersAndGroupsSynchro");
+	$h++;
+}
+
+if ($conf->global->LDAP_CONTACT_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_contacts.php";
+	$head[$h][1] = $langs->trans("LDAPContactsSynchro");
+	$h++;
+}
+
+if ($conf->global->LDAP_MEMBERS_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_members.php";
+	$head[$h][1] = $langs->trans("LDAPMembersSynchro");
+	$h++;
+}
+
+dolibarr_fiche_head($head, $hselected, $langs->trans("LDAP"));
+
+$var=true;
+$html=new Form($db);
+
+
+print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?action=setvalue">';
 
 print '<table class="noborder" width="100%">';
+
+// Liste de synchro actives
+print '<tr class="liste_titre">';
+print '<td colspan="3">'.$langs->trans("LDAPSynchronization").'</td>';
+print "</tr>\n";
+
+// Synchro utilisateurs/groupes active
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPDnSynchroActive").'</td><td>';
+$arraylist=array();
+$arraylist['0']=$langs->trans("No");
+$arraylist['ldap2dolibarr']=$langs->trans("LDAPToDolibarr");
+$arraylist['dolibarr2ldap']=$langs->trans("DolibarrToLDAP");
+$html->select_array('activesynchro',$arraylist,$conf->global->LDAP_SYNCHRO_ACTIVE);
+print '</td><td>'.$langs->trans("LDAPDnSynchroActiveExample");
+if ($conf->global->LDAP_SYNCHRO_ACTIVE && ! $conf->global->LDAP_USER_DN)
+{
+	print '<br><font class="error">'.$langs->trans("LDAPSetupNotComplete").'</font>';
+}
+print '</td></tr>';
+
+// Synchro contact active
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPDnContactActive").'</td><td>';
+$arraylist=array();
+$arraylist['0']=$langs->trans("No");
+$arraylist['1']=$langs->trans("DolibarrToLDAP");
+$html->select_array('activecontact',$arraylist,$conf->global->LDAP_CONTACT_ACTIVE);
+print '</td><td>'.$langs->trans("LDAPDnContactActiveExample").'</td></tr>';
+
+
 print '<tr class="liste_titre">';
 print '<td>'.$langs->trans("Parameter").'</td>';
 print '<td>'.$langs->trans("Value").'</td>';
 print '<td>'.$langs->trans("Example").'</td>';
 print "</tr>\n";
    
-$var=true;
-$html=new Form($db);
-
 // Type
 $var=!$var;
 print '<tr '.$bc[$var].'><td>'.$langs->trans("Type").'</td><td>';
@@ -266,172 +276,6 @@ $html->select_array('usetls',$arraylist,$conf->global->LDAP_SERVER_USE_TLS);
 print '</td><td>'.$langs->trans("LDAPServerUseTLSExample").'</td></tr>';
 
 
-print '<tr class="liste_titre">';
-print '<td colspan="3">'.$langs->trans("LDAPSynchronizeUsersAndGroup").'</td>';
-print "</tr>\n";
-
-// Synchro utilisateurs/groupes active
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPDnSynchroActive").'</td><td>';
-$arraylist=array();
-$arraylist['0']=$langs->trans("No");
-$arraylist['ldap2dolibarr']=$langs->trans("LDAPToDolibarr");
-$arraylist['dolibarr2ldap']=$langs->trans("DolibarrToLDAP");
-$html->select_array('activesynchro',$arraylist,$conf->global->LDAP_SYNCHRO_ACTIVE);
-print '</td><td>'.$langs->trans("LDAPDnSynchroActiveExample").'</td></tr>';
-
-// DN Pour les utilisateurs
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPUserDn").'</td><td>';
-print '<input size="25" type="text" name="user" value="'.$conf->global->LDAP_USER_DN.'">';
-print '</td><td>'.$langs->trans("LDAPUserDnExample").'</td></tr>';
-
-// Champ de login
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldLogin").'</td><td>';
-if ($conf->global->LDAP_FIELD_LOGIN)
-{
-  print '<input size="25" type="text" name="fieldlogin" value="'.$conf->global->LDAP_FIELD_LOGIN.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldlogin" value="uid">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldLoginExample").'</td></tr>';
-
-// Filtre de connexion
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFilterConnection").'</td><td>';
-if ($conf->global->LDAP_FILTER_CONNECTION)
-{
-  print '<input size="25" type="text" name="filterconnection" value="'.$conf->global->LDAP_FILTER_CONNECTION.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="filterconnection" value="&(objectClass=user)(objectCategory=person)">';
-}
-print '</td><td>'.$langs->trans("LDAPFilterConnectionExample").'</td></tr>';
-
-// DN pour les groupes
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPGroupDn").'</td><td>';
-print '<input size="25" type="text" name="group" value="'.$conf->global->LDAP_GROUP_DN.'">';
-print '</td><td>'.$langs->trans("LDAPGroupDnExample").'</td></tr>';
-
-
-print '<tr class="liste_titre">';
-print '<td colspan="3">'.$langs->trans("LDAPSynchronizeContacts").'</td>';
-print "</tr>\n";
-
-// Synchro contact active
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPDnContactActive").'</td><td>';
-$arraylist=array();
-$arraylist['0']=$langs->trans("No");
-$arraylist['1']=$langs->trans("Yes");
-$html->select_array('activecontact',$arraylist,$conf->global->LDAP_CONTACT_ACTIVE);
-print '</td><td>'.$langs->trans("LDAPDnContactActiveExample").'</td></tr>';
-
-// DN Pour les contacts
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPContactDn").'</td><td>';
-print '<input size="25" type="text" name="contact" value="'.$conf->global->LDAP_CONTACT_DN.'">';
-print '</td><td>'.$langs->trans("LDAPContactDnExample").'</td></tr>';
-
-print '<tr class="liste_titre">';
-print '<td colspan="3">'.$langs->trans("LDAPAttributes").'</td>';
-print "</tr>\n";
-
-// Login
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldLoginSamba").'</td><td>';
-if ($conf->global->LDAP_FIELD_LOGIN_SAMBA)
-{
-  print '<input size="25" type="text" name="fieldloginsamba" value="'.$conf->global->LDAP_FIELD_LOGIN_SAMBA.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldloginsamba" value="samaccountname">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldLoginSambaExample").'</td></tr>';
-
-// Name
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldName").'</td><td>';
-if ($conf->global->LDAP_FIELD_NAME)
-{
-  print '<input size="25" type="text" name="fieldname" value="'.$conf->global->LDAP_FIELD_NAME.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldname" value="sn">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldNameExample").'</td></tr>';
-
-// Firstname
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldFirstName").'</td><td>';
-if ($conf->global->LDAP_FIELD_FIRSTNAME)
-{
-  print '<input size="25" type="text" name="fieldfirstname" value="'.$conf->global->LDAP_FIELD_FIRSTNAME.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldfirstname" value="givenname">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldFirstNameExample").'</td></tr>';
-
-// Mail
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldMail").'</td><td>';
-if ($conf->global->LDAP_FIELD_MAIL)
-{
-  print '<input size="25" type="text" name="fieldmail" value="'.$conf->global->LDAP_FIELD_MAIL.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldmail" value="mail">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldMailExample").'</td></tr>';
-
-// Phone
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldPhone").'</td><td>';
-if ($conf->global->LDAP_FIELD_PHONE)
-{
-  print '<input size="25" type="text" name="fieldphone" value="'.$conf->global->LDAP_FIELD_PHONE.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldphone" value="telephonenumber">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldPhoneExample").'</td></tr>';
-
-// Fax
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldFax").'</td><td>';
-if ($conf->global->LDAP_FIELD_FAX)
-{
-  print '<input size="25" type="text" name="fieldfax" value="'.$conf->global->LDAP_FIELD_FAX.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldfax" value="facsimiletelephonenumber">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldFaxExample").'</td></tr>';
-
-// Mobile
-$var=!$var;
-print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldMobile").'</td><td>';
-if ($conf->global->LDAP_FIELD_MOBILE)
-{
-  print '<input size="25" type="text" name="fieldmobile" value="'.$conf->global->LDAP_FIELD_MOBILE.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="fieldmobile" value="mobile">';
-}
-print '</td><td>'.$langs->trans("LDAPFieldMobileExample").'</td></tr>';
 
 
 print '<tr><td colspan="3" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
@@ -439,6 +283,8 @@ print '</table>';
 
 print '</form>';
 
+print '</div>';
+
 
 
 /*
@@ -446,84 +292,75 @@ print '</form>';
  */
 if (function_exists("ldap_connect"))
 {
-	if ($conf->global->LDAP_SERVER_HOST)
+	if ($conf->global->LDAP_SERVER_HOST && $conf->global->LDAP_ADMIN_DN && $conf->global->LDAP_ADMIN_PASS)
 	{
-	    print '<a class="tabAction" href="ldap.php?action=test">'.$langs->trans("LDAPTestConnect").'</a><br><br>';
+		print '<a class="tabAction" href="'.$_SERVER["PHP_SELF"].'?action=test">'.$langs->trans("LDAPTestConnect").'</a><br><br>';
 	}
-	
-	
-	if ($conf->global->LDAP_SERVER_HOST && $conf->global->LDAP_ADMIN_DN && $conf->global->LDAP_ADMIN_PASS && $_GET["action"] == 'test')
+
+	if ($_GET["action"] == 'test')
 	{
-		$ldap = New AuthLdap();
-		// Test ldap_connect
-		// ce test n'est pas fiable car une ressource est constamment retourn�e
-		// il faut se fier au test ldap_bind
+		$ldap = new AuthLdap();	// Les parametres sont pass�s et r�cup�r�s via $conf
+
 		$ds = $ldap->connect();
 		if ($ds)
 		{
-			print img_picto('','info');
-			print $langs->trans("LDAPTestOK").'<br>';
-		}
-		else
-		{
-			print img_picto('','alerte');
-			print $langs->trans("LDAPTestKO").'<br>';
-			print "<br>";
-			print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
-			print "<br>";
-		}
+			// Test ldap_bind
+			$bind = $ldap->bind();
+			if ($bind)
+			{
+				print img_picto('','info').' ';
+				print '<font class="ok">'.$langs->trans("LDAPTCPConnectOK",$conf->global->LDAP_SERVER_HOST,$conf->global->LDAP_SERVER_PORT).'</font><br>';
+			}
+			else
+			{
+				print img_picto('','error').' ';
+				print $langs->trans("LDAPTCPConnectKO",$conf->global->LDAP_SERVER_HOST,$conf->global->LDAP_SERVER_PORT).' : ';
+				print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
+				print "<br>";
+			}
 
-		if ($ds)
-		{
 			// Test ldap_getversion
 			if (($ldap->getVersion() == 3))
 			{
-				print img_picto('','info');
-				print $langs->trans("LDAPSetupForVersion3").'<br>';
+				print img_picto('','info').' ';
+				print '<font class="ok">'.$langs->trans("LDAPSetupForVersion3").'</font><br>';
 			}
 			else
 			{
-				print img_picto('','info');
+				print img_picto('','info').' ';
 				print $langs->trans("LDAPSetupForVersion2").'<br>';
 			}
-	
-		  // Test ldap_bind
-			$bind = $ldap->bind();
-			
-			if ($bind)
+
+			// Test ldap_unbind
+			$unbind = $ldap->unbind();
+
+			if ($unbind)
 			{
-				print img_picto('','info');
-				print "Connexion au dn $dn r�ussi<br>";
+				print img_picto('','info').' ';
+				print '<font class="ok">'.$langs->trans("LDAPUnbindSuccessfull").'</font><br>';
 			}
 			else
 			{
-				print img_picto('','alerte');
-				print "Connexion au dn $dn rat� : ";
-				print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
+				print img_picto('','error').' ';
+				print $langs->trans("LDAPUnbindFailed");
 				print "<br>";
+				print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
 			}
 
-		  // Test ldap_unbind
-		  $unbind = $ldap->unbind();
-		  
-		  if ($unbind)
-		  {
-		  	print img_picto('','info');
-		  	print "D�connection du dn $dn r�ussi<br>";
-		  }
-		  else
-		  {
-			  print img_picto('','alerte');
-			  print "D�connection du dn $dn rat�";
-			  print "<br>";
-			  print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
-			}
 		}
+		else
+		{
+			print img_picto('','error').' ';
+			print $langs->trans("LDAPTCPConnectKO",$conf->global->LDAP_SERVER_HOST,$conf->global->LDAP_SERVER_PORT).'<br>';
+			print "<br>";
+			print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
+			print "<br>";
+		}
+
 	}
 }
 
 $db->close();
 
 llxFooter('$Date$ - $Revision$');
-
 ?>
diff --git a/htdocs/admin/ldap_contacts.php b/htdocs/admin/ldap_contacts.php
new file mode 100644
index 0000000000000000000000000000000000000000..abc9d41f3055178539c68a583598d0d0f3eaa5a7
--- /dev/null
+++ b/htdocs/admin/ldap_contacts.php
@@ -0,0 +1,140 @@
+<?php
+/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004 Sebastien Di Cintio  <sdicintio@ressource-toi.org>
+ * Copyright (C) 2004 Benoit Mortier       <benoit.mortier@opensides.be>
+ * Copyright (C) 2005 Regis Houssin        <regis.houssin@cap-networks.com>
+ * Copyright (C) 2006 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.
+ *
+ * $Id$
+ * $Source$
+ */
+ 
+/**
+    	\file       htdocs/admin/ldap.php
+		\ingroup    ldap
+		\brief      Page d'administration/configuration du module Ldap
+		\version    $Revision$
+        \remarks    Exemple configuration :
+                    LDAP_SERVER_HOST    Serveur LDAP		      192.168.1.50
+                    LDAP_SERVER_PORT    Port LDAP             389
+                    LDAP_ADMIN_DN       Administrateur LDAP	  cn=adminldap,dc=societe,dc=com	
+                    LDAP_ADMIN_PASS     Mot de passe		      xxxxxxxx
+                    LDAP_USER_DN        DN des utilisateurs	  ou=users,dc=societe,dc=com
+                    LDAP_GROUP_DN       DN des groupes		    ou=groups,dc=societe,dc=com	
+                    LDAP_CONTACT_DN     DN des contacts		    ou=contacts,dc=societe,dc=com
+                    LDAP_SERVER_TYPE    Type				          Openldap
+*/
+
+require("./pre.inc.php");
+require_once(DOL_DOCUMENT_ROOT."/lib/authldap.lib.php");
+
+$langs->load("admin");
+
+if (!$user->admin)
+  accessforbidden();
+
+
+/*
+ * Actions
+ */
+ 
+if ($_GET["action"] == 'setvalue' && $user->admin)
+{
+
+}
+
+
+
+/*
+ * Visu
+ */
+
+llxHeader();
+
+print_fiche_titre($langs->trans("LDAPSetup"),'','setup');
+
+// Test si fonction LDAP actives
+if (! function_exists("ldap_connect"))
+{
+	$mesg=$langs->trans("LDAPFunctionsNotAvailableOnPHP");
+}
+
+if ($mesg) print '<div class="error">'.$mesg.'</div>';
+else print '<br>';
+
+
+// Onglets
+$h = 0;
+
+$head[$h][0] = DOL_URL_ROOT."/admin/ldap.php";
+$head[$h][1] = $langs->trans("LDAPGlobalParameters");
+$h++;
+
+if ($conf->global->LDAP_SYNCHRO_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_users.php";
+	$head[$h][1] = $langs->trans("LDAPUsersAndGroupsSynchro");
+	$h++;
+}
+
+if ($conf->global->LDAP_CONTACT_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_contacts.php";
+	$head[$h][1] = $langs->trans("LDAPContactsSynchro");
+	$hselected=$h;
+	$h++;
+}
+
+if ($conf->global->LDAP_MEMBERS_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_members.php";
+	$head[$h][1] = $langs->trans("LDAPMembersSynchro");
+	$h++;
+}
+
+dolibarr_fiche_head($head, $hselected, $langs->trans("LDAP"));
+
+
+print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?action=setvalue">';
+
+print '<table class="noborder" width="100%">';
+
+print '<tr class="liste_titre">';
+print '<td colspan="3">'.$langs->trans("LDAPSynchronizeContacts").'</td>';
+print "</tr>\n";
+   
+$var=true;
+$html=new Form($db);
+
+
+// Not available
+print '<tr '.$bc[!$var].'><td colspan="3">'.$langs->trans("LDAPParametersAreStillHardCoded").'</td></tr>';
+
+
+print '<tr><td colspan="3" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
+print '</table>';
+
+print '</form>';
+
+print '</div>';
+
+
+$db->close();
+
+llxFooter('$Date$ - $Revision$');
+
+?>
diff --git a/htdocs/admin/ldap_users.php b/htdocs/admin/ldap_users.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a64592558ac23c0e2cc36e5f2f7efdf9b382354
--- /dev/null
+++ b/htdocs/admin/ldap_users.php
@@ -0,0 +1,283 @@
+<?php
+/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ * Copyright (C) 2004 Sebastien Di Cintio  <sdicintio@ressource-toi.org>
+ * Copyright (C) 2004 Benoit Mortier       <benoit.mortier@opensides.be>
+ * Copyright (C) 2005 Regis Houssin        <regis.houssin@cap-networks.com>
+ * Copyright (C) 2006 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.
+ *
+ * $Id$
+ * $Source$
+ */
+ 
+/**
+    	\file       htdocs/admin/ldap.php
+		\ingroup    ldap
+		\brief      Page d'administration/configuration du module Ldap
+		\version    $Revision$
+        \remarks    Exemple configuration :
+                    LDAP_SERVER_HOST    Serveur LDAP		      192.168.1.50
+                    LDAP_SERVER_PORT    Port LDAP             389
+                    LDAP_ADMIN_DN       Administrateur LDAP	  cn=adminldap,dc=societe,dc=com	
+                    LDAP_ADMIN_PASS     Mot de passe		      xxxxxxxx
+                    LDAP_USER_DN        DN des utilisateurs	  ou=users,dc=societe,dc=com
+                    LDAP_GROUP_DN       DN des groupes		    ou=groups,dc=societe,dc=com	
+                    LDAP_CONTACT_DN     DN des contacts		    ou=contacts,dc=societe,dc=com
+                    LDAP_SERVER_TYPE    Type				          Openldap
+*/
+
+require("./pre.inc.php");
+require_once(DOL_DOCUMENT_ROOT."/lib/authldap.lib.php");
+
+$langs->load("admin");
+
+if (!$user->admin)
+  accessforbidden();
+
+
+/*
+ * Actions
+ */
+ 
+if ($_GET["action"] == 'setvalue' && $user->admin)
+{
+	if (! dolibarr_set_const($db, 'LDAP_USER_DN',$_POST["user"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_GROUP_DN',$_POST["group"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_FIELD_LOGIN',$_POST["fieldlogin"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_FILTER_CONNECTION',$_POST["filterconnection"]))
+	{
+		print $db->error();
+	}
+}
+
+
+
+/*
+ * Visu
+ */
+
+llxHeader();
+
+print_fiche_titre($langs->trans("LDAPSetup"),'','setup');
+
+// Test si fonction LDAP actives
+if (! function_exists("ldap_connect"))
+{
+	$mesg=$langs->trans("LDAPFunctionsNotAvailableOnPHP");
+}
+
+if ($mesg) print '<div class="error">'.$mesg.'</div>';
+else print '<br>';
+
+
+// Onglets
+$h = 0;
+
+$head[$h][0] = DOL_URL_ROOT."/admin/ldap.php";
+$head[$h][1] = $langs->trans("LDAPGlobalParameters");
+$h++;
+
+if ($conf->global->LDAP_SYNCHRO_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_users.php";
+	$head[$h][1] = $langs->trans("LDAPUsersAndGroupsSynchro");
+	$hselected=$h;
+	$h++;
+}
+
+if ($conf->global->LDAP_CONTACT_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_contacts.php";
+	$head[$h][1] = $langs->trans("LDAPContactsSynchro");
+	$h++;
+}
+
+if ($conf->global->LDAP_MEMBERS_ACTIVE)
+{
+	$head[$h][0] = DOL_URL_ROOT."/admin/ldap_members.php";
+	$head[$h][1] = $langs->trans("LDAPMembersSynchro");
+	$h++;
+}
+
+dolibarr_fiche_head($head, $hselected, $langs->trans("LDAP"));
+
+
+print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?action=setvalue">';
+
+print '<table class="noborder" width="100%">';
+   
+$var=true;
+$html=new Form($db);
+
+
+print '<tr class="liste_titre">';
+print '<td colspan="3">'.$langs->trans("LDAPSynchronizeUsersAndGroup").'</td>';
+print "</tr>\n";
+
+// DN Pour les utilisateurs
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPUserDn").'</td><td>';
+print '<input size="38" type="text" name="user" value="'.$conf->global->LDAP_USER_DN.'">';
+print '</td><td>'.$langs->trans("LDAPUserDnExample").'</td></tr>';
+
+// DN pour les groupes
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPGroupDn").'</td><td>';
+print '<input size="38" type="text" name="group" value="'.$conf->global->LDAP_GROUP_DN.'">';
+print '</td><td>'.$langs->trans("LDAPGroupDnExample").'</td></tr>';
+
+// Filtre de connexion
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFilterConnection").'</td><td>';
+if ($conf->global->LDAP_FILTER_CONNECTION)
+{
+  print '<input size="38" type="text" name="filterconnection" value="'.$conf->global->LDAP_FILTER_CONNECTION.'">';
+}
+else
+{
+  print '<input size="38" type="text" name="filterconnection" value="&(objectClass=user)(objectCategory=person)">';
+}
+print '</td><td>'.$langs->trans("LDAPFilterConnectionExample").'</td></tr>';
+
+// Login unix
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldLoginUnix").'</td><td>';
+if ($conf->global->LDAP_FIELD_LOGIN)
+{
+	print '<input size="25" type="text" name="fieldlogin" value="'.$conf->global->LDAP_FIELD_LOGIN.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldlogin" value="uid">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldLoginExample").'</td></tr>';
+
+// Login samba
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldLoginSamba").'</td><td>';
+if ($conf->global->LDAP_FIELD_LOGIN_SAMBA)
+{
+	print '<input size="25" type="text" name="fieldloginsamba" value="'.$conf->global->LDAP_FIELD_LOGIN_SAMBA.'">';
+}
+else
+{
+	print '<input size="25" type="text" name="fieldloginsamba" value="samaccountname">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldLoginSambaExample").'</td></tr>';
+
+// Name
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldName").'</td><td>';
+if ($conf->global->LDAP_FIELD_NAME)
+{
+  print '<input size="25" type="text" name="fieldname" value="'.$conf->global->LDAP_FIELD_NAME.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldname" value="sn">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldNameExample").'</td></tr>';
+
+// Firstname
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldFirstName").'</td><td>';
+if ($conf->global->LDAP_FIELD_FIRSTNAME)
+{
+  print '<input size="25" type="text" name="fieldfirstname" value="'.$conf->global->LDAP_FIELD_FIRSTNAME.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldfirstname" value="givenname">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldFirstNameExample").'</td></tr>';
+
+// Mail
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldMail").'</td><td>';
+if ($conf->global->LDAP_FIELD_MAIL)
+{
+  print '<input size="25" type="text" name="fieldmail" value="'.$conf->global->LDAP_FIELD_MAIL.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldmail" value="mail">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldMailExample").'</td></tr>';
+
+// Phone
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldPhone").'</td><td>';
+if ($conf->global->LDAP_FIELD_PHONE)
+{
+  print '<input size="25" type="text" name="fieldphone" value="'.$conf->global->LDAP_FIELD_PHONE.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldphone" value="telephonenumber">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldPhoneExample").'</td></tr>';
+
+// Fax
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldFax").'</td><td>';
+if ($conf->global->LDAP_FIELD_FAX)
+{
+  print '<input size="25" type="text" name="fieldfax" value="'.$conf->global->LDAP_FIELD_FAX.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldfax" value="facsimiletelephonenumber">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldFaxExample").'</td></tr>';
+
+// Mobile
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldMobile").'</td><td>';
+if ($conf->global->LDAP_FIELD_MOBILE)
+{
+  print '<input size="25" type="text" name="fieldmobile" value="'.$conf->global->LDAP_FIELD_MOBILE.'">';
+}
+else
+{
+  print '<input size="25" type="text" name="fieldmobile" value="mobile">';
+}
+print '</td><td>'.$langs->trans("LDAPFieldMobileExample").'</td></tr>';
+
+
+
+print '<tr><td colspan="3" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
+print '</table>';
+
+print '</form>';
+
+print '</div>';
+
+
+
+$db->close();
+
+llxFooter('$Date$ - $Revision$');
+
+?>
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 5ba866152bd79db783849ef44dbf9d688aaa5116..ae6c306617a385bb780bc0d9807136e2256d122e 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -491,11 +491,15 @@ AddSubscriptionIntoAccount=Add subscriptions into bank or cash account, of bank
 AdherentMailRequired=EMail required to create a new member
 ##### LDAP setup #####
 LDAPSetup=LDAP Setup
+LDAPGlobalParameters=Global parameters
+LDAPUsersAndGroupsSynchro=Users/groups synchro
+LDAPContactsSynchro=Contacts synchro
+LDAPSynchronization=LDAP synchronisation
 LDAPFunctionsNotAvailableOnPHP=LDAP functions are not availbale on your PHP
-LDAPSynchronizeUsersAndGroup=Synchronize Dolibarr or LDAP users and groups
+LDAPSynchronizeUsersAndGroup=Synchronize Dolibarr users and groups with LDAP
 LDAPToDolibarr=LDAP -> Dolibarr
 DolibarrToLDAP=Dolibarr -> LDAP
-LDAPSynchronizeContacts=Synchronize Dolibarr contacts to LDAP
+LDAPSynchronizeContacts=Synchronize Dolibarr contacts with LDAP
 LDAPTypeExample=OpenLdap, Egroupware or Active Directory
 LDAPPrimaryServer=LDAP primary server
 LDAPSecondaryServer=LDAP secondary server
@@ -523,16 +527,20 @@ LDAPDnContactActiveExample=Activated/Unactivated synchronization
 LDAPContactDn=Dolibarr contacts' DN
 LDAPContactDnExample=Complete DN (ex: ou=contacts,dc=society,dc=com)
 LDAPTestConnect=Test LDAP connection
-LDAPTestOK=Connect to LDAP server successful
-LDAPTestKO=Connect to LDAP server failed
+LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
+LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
+LDAPUnbindSuccessfull=Disconnect successfull
+LDAPUnbindFailed=Disconnect failed
+LDAPConnectToDNSuccessfull=Connection au DN (%s) r�ussie
+LDAPConnectToDNFailed=Connection au DN (%s) �chou�e
 LDAPSetupForVersion3=LDAP server configured for version 3
 LDAPSetupForVersion2=LDAP server configured for version 2
-LDAPFieldLogin=Login attribute
+LDAPFieldLoginUnix=Login (unix)
 LDAPFieldLoginExample=Default attribute : uid
 LDAPFilterConnection=Search filter
 LDAPFilterConnectionExample=Default filter : &(objectClass=user)(objectCategory=person)
 LDAPAttributes=LDAP attributes
-LDAPFieldLoginSamba=Login
+LDAPFieldLoginSamba=Login (samba, activedirectory)
 LDAPFieldLoginSambaExample=Default attribute : samaccountname (Samba and ActiveDirectory)
 LDAPFieldName=Name
 LDAPFieldNameExample=Default attribute : sn
@@ -546,6 +554,8 @@ LDAPFieldFax=Fax number
 LDAPFieldFaxExample=Default attribute : facsimiletelephonenumber
 LDAPFieldMobile=Cellular phone
 LDAPFieldMobileExample=Default attribute : mobile
+LDAPParametersAreStillHardCoded=LDAP parametres are still hardcoded (in contact class)
+LDAPSetupNotComplete=LDAP setup not complete (go on others tabs)
 ##### Products #####
 ProductSetup=Products module setup
 NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index 843cfe45d8a438b9d72bdb83b7df9245ab30cb41..48fec98d506b22f070d9f233a7113122a53b4896 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -491,11 +491,15 @@ AddSubscriptionIntoAccount=Enregistrer cotisations dans compte bancaire ou caiss
 AdherentMailRequired=EMail obligatoire pour cr�er un nouvel adh�rent
 ##### LDAP setup #####
 LDAPSetup=Configuration du module LDAP
+LDAPGlobalParameters=Param�tres globals
+LDAPUsersAndGroupsSynchro=Synchro utilisateurs/groupes
+LDAPContactsSynchro=Synchro contacts
+LDAPSynchronization=Synchronisation LDAP
 LDAPFunctionsNotAvailableOnPHP=Les fonctions LDAP ne sont pas disponibles sur votre PHP
-LDAPSynchronizeUsersAndGroup=Synchronisation des utilisateurs et groupes Dolibarr ou LDAP
+LDAPSynchronizeUsersAndGroup=Synchronisation des utilisateurs et groupes Dolibarr avec LDAP
 LDAPToDolibarr=LDAP -> Dolibarr
 DolibarrToLDAP=Dolibarr -> LDAP
-LDAPSynchronizeContacts=Synchronisation des contacts Dolibarr vers LDAP
+LDAPSynchronizeContacts=Synchronisation des contacts Dolibarr avec LDAP
 LDAPTypeExample=OpenLdap, Egroupware ou Active Directory
 LDAPPrimaryServer=Serveur primaire
 LDAPSecondaryServer=Serveur secondaire
@@ -523,16 +527,20 @@ LDAPDnContactActiveExample=Synchronisation activ
 LDAPContactDn=DN des contacts Dolibarr
 LDAPContactDnExample=DN complet (ex: ou=contacts,dc=societe,dc=com)
 LDAPTestConnect=Tester la connexion LDAP
-LDAPTestOK=Connexion au serveur LDAP r�ussie
-LDAPTestKO=Connexion au serveur LDAP echou�e
+LDAPTCPConnectOK=Connexion TCP au serveur LDAP r�ussie (Server=%s, Port=%s)
+LDAPTCPConnectKO=Connexion TCP au serveur LDAP �chou�e (Server=%s, Port=%s)
+LDAPUnbindSuccessfull=D�connection r�ussie
+LDAPUnbindFailed=D�connection �chou�e
+LDAPConnectToDNSuccessfull=Connection au DN (%s) r�ussie
+LDAPConnectToDNFailed=Connection au DN (%s) �chou�e
 LDAPSetupForVersion3=Serveur LDAP configur� en version 3
 LDAPSetupForVersion2=Serveur LDAP configur� en version 2
-LDAPFieldLogin=Attribut du Login
+LDAPFieldLoginUnix=Login (unix)
 LDAPFieldLoginExample=Attribut par d�faut : uid
 LDAPFilterConnection=Filtre de recherche
 LDAPFilterConnectionExample=Filtre par d�faut : &(objectClass=user)(objectCategory=person)
 LDAPAttributes=Attributs LDAP
-LDAPFieldLoginSamba=Login
+LDAPFieldLoginSamba=Login (samba, activedirectory)
 LDAPFieldLoginSambaExample=Attribut par d�faut : samaccountname (Samba et ActiveDirectory)
 LDAPFieldName=Nom
 LDAPFieldNameExample=Attribut par d�faut : sn
@@ -546,6 +554,8 @@ LDAPFieldFax=Num
 LDAPFieldFaxExample=Attribut par d�faut : facsimiletelephonenumber
 LDAPFieldMobile=T�l�phone portable
 LDAPFieldMobileExample=Attribut par d�faut : mobile
+LDAPParametersAreStillHardCoded=Les parametres LDAP sont cod�s en dur (dans classe contact)
+LDAPSetupNotComplete=Configuration LDAP incompl�te (� compl�ter sur les autres onglets)
 ##### Products #####
 ProductSetup=Configuration du module Produits
 NumberOfProductShowInSelect=Nombre de produits max dans les listes d�roulantes (0=aucune limite)