diff --git a/htdocs/lib/lib_head.js b/htdocs/lib/lib_head.js
index 0b9eb29f52e9ac5ecca91a8f2b5a3324b5f52ffc..6ed9abb0db2234beee57ee17e36818a97c8ba58a 100644
--- a/htdocs/lib/lib_head.js
+++ b/htdocs/lib/lib_head.js
@@ -23,38 +23,40 @@ function autofilltownfromzip_PopupPostalCode(url_root, postalcode,objecttown,obj
     url = url + '&targettown=window.opener.document.formsoc.' + objecttown.name;
     url = url + '&targetcountry=window.opener.document.formsoc.' + objectcountry.name;
     url = url + '&targetstate=window.opener.document.formsoc.' + objectstate.name;
-    //  alert(url);
+    // alert(url);
     var hWnd = window.open(url, "SearchPostalCodeWindow", "width=" + 300 + ",height=" + 150 + ",resizable=yes,scrollbars=yes");
     if((document.window != null) && (!hWnd.opener)) hWnd.opener = document.window;
 }
 
 
-/*=================================================================
-	Purpose:  Pour la saisie des dates par calendrier
-	Input:    base			   "/theme/eldy"
-	          dateFieldID      "dateo"        Nom du champ
-              format           "dd/MM/yyyy"   Format issu de Dolibarr de SimpleDateFormat a utiliser pour retour
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Pour la saisie des dates par calendrier Input: base "/theme/eldy" dateFieldID
+ * "dateo" Nom du champ format "dd/MM/yyyy" Format issu de Dolibarr de
+ * SimpleDateFormat a utiliser pour retour
+ * ==================================================================
+ */
 function showDP(base,dateFieldID,format,codelang)
 {
-	//check to see if another box is already showing
+	// check to see if another box is already showing
 	var alreadybox=getObjectFromID("DPCancel");
 	if (alreadybox) closeDPBox();	// This erase value of showDP.datefieldID
 
-	//alert("showDP "+codelang);
+	// alert("showDP "+codelang);
 	showDP.datefieldID=dateFieldID;	// Must be after the close
 
 	var dateField=getObjectFromID(dateFieldID);
 	
-	//get positioning
+	// get positioning
 	var thetop=getTop(dateField)+dateField.offsetHeight;
 
-//	var xxx=getObjectFromID('bottompage');
-//alert(xxx.style.pixelTop);
-//alert(document.body.clientHeight);
-//alert(document.body.style.offsetTop);
-//alert(thetop);
-//alert(window.innerHeight);
+// var xxx=getObjectFromID('bottompage');
+// alert(xxx.style.pixelTop);
+// alert(document.body.clientHeight);
+// alert(document.body.style.offsetTop);
+// alert(thetop);
+// alert(window.innerHeight);
 	if (thetop+160 > window.innerHeight)
 		thetop=thetop-160-20;
 	var theleft=getLeft(dateField);
@@ -117,8 +119,8 @@ function resetDP(base,dateFieldID,format,codelang)
 
 function loadMonth(base,month,year,ymd,codelang)
 {
-	/*showDP.box.innerHTML="Loading...";*/
-	//alert(codelang);
+	/* showDP.box.innerHTML="Loading..."; */
+	// alert(codelang);
 	var theURL=base+"datepicker.php?cm=shw&lang="+codelang;
 	theURL+="&m="+encodeURIComponent(month);
 	theURL+="&y="+encodeURIComponent(year);
@@ -131,7 +133,8 @@ function loadMonth(base,month,year,ymd,codelang)
 	
 	req=loadXMLDoc(theURL,null,false);
 	if (req.responseText == '') alert('Failed to get URL '.theURL);
- 	//alert(theURL+' - '+req.responseText);  // L'url doit avoir la meme racine que la pages et elements sinon pb de securite.
+ 	// alert(theURL+' - '+req.responseText); // L'url doit avoir la meme racine
+	// que la pages et elements sinon pb de securite.
 	showDP.box.innerHTML=req.responseText;	
 }
 
@@ -201,7 +204,7 @@ function dpHighlightDay(year,month,day,tradMonths){
 	displayinfo.innerHTML=months[month-1]+" "+day+", "+year;
 }
 
-//Returns an object given an id
+// Returns an object given an id
 function getObjectFromID(id){
 	var theObject;
 	if(document.getElementById)
@@ -244,16 +247,16 @@ function getLeft(theitem){
 function loadXMLDoc(url,readyStateFunction,async) 
 {
 	// req must be defined by caller with
-	// var req = false; 
+	// var req = false;
  
 	// branch for native XMLHttpRequest object (Mozilla, Safari...)
 	if (window.XMLHttpRequest)
 	{
 		req = new XMLHttpRequest();
 		
-//		if (req.overrideMimeType) {
-//      		req.overrideMimeType('text/xml');
-//    	}
+// if (req.overrideMimeType) {
+// req.overrideMimeType('text/xml');
+// }
 	}
 	// branch for IE/Windows ActiveX version
 	else if (window.ActiveXObject)
@@ -281,22 +284,23 @@ function loadXMLDoc(url,readyStateFunction,async)
 	// Exemple of function for readyStateFuncyion:
 	// function ()
        // {
-       //     if ( (req.readyState == 4) && (req.status == 200) ) {
-       //        if (req.responseText == 1) { newStatus = 'AAA'; }
-       //        if (req.responseText == 0) { newStatus = 'BBB'; }
-       //        if (currentStatus != newStatus) {
-       //            if (newStatus == "AAA") { obj.innerHTML = 'AAA'; }
-       //            else { obj.innerHTML = 'BBB'; }
-       //            currentStatus = newStatus;
-       //        }
-       //    }
+       // if ( (req.readyState == 4) && (req.status == 200) ) {
+       // if (req.responseText == 1) { newStatus = 'AAA'; }
+       // if (req.responseText == 0) { newStatus = 'BBB'; }
+       // if (currentStatus != newStatus) {
+       // if (newStatus == "AAA") { obj.innerHTML = 'AAA'; }
+       // else { obj.innerHTML = 'BBB'; }
+       // currentStatus = newStatus;
+       // }
+       // }
        // }
 	req.open("GET", url, async);
 	req.send(null);
 	return req;
 }
 
-// To hide/show select Boxes with IE6 (and only IE6 because IE6 has a bug and not put popup completely on the front)
+// To hide/show select Boxes with IE6 (and only IE6 because IE6 has a bug and
+// not put popup completely on the front)
 function hideSelectBoxes() {
 	var brsVersion = parseInt(window.navigator.appVersion.charAt(0), 10);
 	if (brsVersion <= 6 && window.navigator.userAgent.indexOf("MSIE 6") > -1) 
@@ -324,26 +328,22 @@ function displaySelectBoxes() {
 
 
 
-/*=================================================================
-	Function: formatDate (javascript object Date(), format)
-	Purpose:  Returns a date in the output format specified.
-              The format string can use the following tags:
-				 Field        | Tags
-				 -------------+-------------------------------
-				 Year         | yyyy (4 digits), yy (2 digits)
-				 Month        | MM (2 digits)
-				 Day of Month | dd (2 digits)
-				 Hour (1-12)  | hh (2 digits)
-				 Hour (0-23)  | HH (2 digits)
-				 Minute       | mm (2 digits)
-				 Second       | ss (2 digits)
-	Author:   Laurent Destailleur
-	Author:   Matelli (see http://matelli.fr/showcases/patchs-dolibarr/update-date-input-in-action-form.html)
-	Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Function:
+ * formatDate (javascript object Date(), format) Purpose: Returns a date in the
+ * output format specified. The format string can use the following tags: Field |
+ * Tags -------------+------------------------------- Year | yyyy (4 digits), yy
+ * (2 digits) Month | MM (2 digits) Day of Month | dd (2 digits) Hour (1-12) |
+ * hh (2 digits) Hour (0-23) | HH (2 digits) Minute | mm (2 digits) Second | ss
+ * (2 digits) Author: Laurent Destailleur Author: Matelli (see
+ * http://matelli.fr/showcases/patchs-dolibarr/update-date-input-in-action-form.html)
+ * Licence: GPL
+ * ==================================================================
+ */
 function formatDate(date,format)
 {
-	//alert('formatDate date='+date+' format='+format);
+	// alert('formatDate date='+date+' format='+format);
 	
 	// Force parametres en chaine
 	format=format+"";
@@ -363,12 +363,14 @@ function formatDate(date,format)
 		c=format.charAt(i);	// Recupere char du format
 		substr="";
 		j=i;
-		while ((format.charAt(j)==c) && (j < format.length))	// Recupere char successif identiques
+		while ((format.charAt(j)==c) && (j < format.length))	// Recupere char
+																// successif
+																// identiques
 		{
 			substr += format.charAt(j++);
 		}
 
-		//alert('substr='+substr);
+		// alert('substr='+substr);
 		if (substr == 'yyyy')      { result=result+year; }
 		else if (substr == 'yy')   { result=result+year.substring(2,4); }
 		else if (substr == 'M')    { result=result+month; }
@@ -384,33 +386,27 @@ function formatDate(date,format)
 		i+=substr.length;
 	}
 
-	//alert(result);
+	// alert(result);
 	return result;
 }
 
 
-/*=================================================================
-	Function: getDateFromFormat(date_string, format_string)
-	Purpose:  This function takes a date string and a format string.
-			  It parses the date string with format and it returns
-			  the date as a javascript Date() object.
-			  If date does not match format, it returns 0.
-              The format string can use the following tags:
-				 Field        | Tags
-				 -------------+-------------------------------
-				 Year         | yyyy (4 digits), yy (2 digits)
-				 Month        | MM (2 digits)
-				 Day of Month | dd (2 digits)
-				 Hour (1-12)  | hh (2 digits)
-				 Hour (0-23)  | HH (2 digits)
-				 Minute       | mm (2 digits)
-				 Second       | ss (2 digits)
-	Author:   Laurent Destailleur
-	Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Function:
+ * getDateFromFormat(date_string, format_string) Purpose: This function takes a
+ * date string and a format string. It parses the date string with format and it
+ * returns the date as a javascript Date() object. If date does not match
+ * format, it returns 0. The format string can use the following tags: Field |
+ * Tags -------------+------------------------------- Year | yyyy (4 digits), yy
+ * (2 digits) Month | MM (2 digits) Day of Month | dd (2 digits) Hour (1-12) |
+ * hh (2 digits) Hour (0-23) | HH (2 digits) Minute | mm (2 digits) Second | ss
+ * (2 digits) Author: Laurent Destailleur Licence: GPL
+ * ==================================================================
+ */
 function getDateFromFormat(val,format)
 {
-	//alert('getDateFromFormat val='+val+' format='+format);
+	// alert('getDateFromFormat val='+val+' format='+format);
 
 	// Force parametres en chaine
 	val=val+"";
@@ -425,19 +421,22 @@ function getDateFromFormat(val,format)
 	var seconde=now.getSeconds();
 
 	var i=0;
-	var d=0;    // -d- follows the date string while -i- follows the format string 
+	var d=0;    // -d- follows the date string while -i- follows the format
+				// string
 
 	while (i < format.length)
 	{
 		c=format.charAt(i);	// Recupere char du format
 		substr="";
 		j=i;
-		while ((format.charAt(j)==c) && (j < format.length))	// Recupere char successif identiques
+		while ((format.charAt(j)==c) && (j < format.length))	// Recupere char
+																// successif
+																// identiques
 		{
 			substr += format.charAt(j++);
 		}
 
-		//alert('substr='+substr);
+		// alert('substr='+substr);
         if (substr == "yyyy") year=getIntegerInString(val,d,4,4); 
         if (substr == "yy")   year=""+(getIntegerInString(val,d,2,2)-0+1900); 
         if (substr == "MM" ||substr == "M") 
@@ -477,16 +476,18 @@ function getDateFromFormat(val,format)
 	if (minute==null||(minute<0)||(minute>60)) { return 0; }
 	if (seconde==null||(seconde<0)||(seconde>60)) { return 0; }
 		
-	//alert(year+' '+month+' '+day+' '+hour+' '+minute+' '+seconde);
+	// alert(year+' '+month+' '+day+' '+hour+' '+minute+' '+seconde);
 	var newdate=new Date(year,month-1,day,hour,minute,seconde);
 
 	return newdate;
 }
 
-/*=================================================================
-	Function: stringIsInteger(string)
-	Purpose:  Return true if string is an integer
-==================================================================*/
+/*
+ * ================================================================= 
+ * Function:
+ * stringIsInteger(string) Purpose: Return true if string is an integer
+ * ==================================================================
+ */
 function stringIsInteger(str)
 {
 	var digits="1234567890";
@@ -500,10 +501,13 @@ function stringIsInteger(str)
 	return true;
 }
 
-/*=================================================================
-	Function: getIntegerInString(string,pos,minlength,maxlength)
-	Purpose:  Return part of string from position i that is integer
-==================================================================*/
+/*
+ * ================================================================= 
+ * Function:
+ * getIntegerInString(string,pos,minlength,maxlength) Purpose: Return part of
+ * string from position i that is integer
+ * ==================================================================
+ */
 function getIntegerInString(str,i,minlength,maxlength)
 {
 	for (var x=maxlength; x>=minlength; x--)
@@ -516,83 +520,88 @@ function getIntegerInString(str,i,minlength,maxlength)
 }
 
 
-/*=================================================================
-Purpose:  Clean string to have it url encoded
-Input:    s
-Author:   Laurent Destailleur
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Clean string to have it url encoded Input: s Author: Laurent Destailleur
+ * Licence: GPL
+ * ==================================================================
+ */
 function urlencode(s) {
 	return s.replace(/\+/gi,'%2B');
 }
 
 
-/*=================================================================
-Purpose:  Show a popup HTML page.
-Input:    url,title
-Author:   Laurent Destailleur
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Show a popup HTML page. Input: url,title Author: Laurent Destailleur Licence:
+ * GPL ==================================================================
+ */
 function newpopup(url,title) {
-var argv = newpopup.arguments;
-var argc = newpopup.arguments.length;
-tmp=url;
-var l = (argc > 2) ? argv[2] : 600;
-var h = (argc > 3) ? argv[3] : 400;
-var wfeatures="directories=0,menubar=0,status=0,resizable=0,scrollbars=1,toolbar=0,width="+l+",height="+h+",left=" + eval("(screen.width - l)/2") + ",top=" + eval("(screen.height - h)/2");
-fen=window.open(tmp,title,wfeatures);
-return false;
+	var argv = newpopup.arguments;
+	var argc = newpopup.arguments.length;
+	tmp=url;
+	var l = (argc > 2) ? argv[2] : 600;
+	var h = (argc > 3) ? argv[3] : 400;
+	var wfeatures="directories=0,menubar=0,status=0,resizable=0,scrollbars=1,toolbar=0,width="+l+",height="+h+",left=" + eval("(screen.width - l)/2") + ",top=" + eval("(screen.height - h)/2");
+	fen=window.open(tmp,title,wfeatures);
+	return false;
 }
 
 
-/*=================================================================
-	Purpose:  Fonction pour champ saisie en mode ajax. Used for autocompletion of products.
-	Author:   Laurent Destailleur
-	Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Fonction pour champ saisie en mode ajax. Used for autocompletion of products.
+ * Author: Laurent Destailleur Licence: GPL
+ * ==================================================================
+ */
 function publish_selvalue(obj) { $(obj.name).value = obj.options[obj.selectedIndex].value; }
 
 
 
-/*=================================================================
-	Purpose:  Set value of a field after return of Ajax call. Used for autocompletion.
-	Input:    HTML field name, val
-	Author:   Regis Houssin
-	Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Set value of a field after return of Ajax call. Used for autocompletion.
+ * Input: HTML field name, val Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function ac_return(field, val){
-/*        alert('field.name='+field.name+'-'+val.innerHTML); */
+/* alert('field.name='+field.name+'-'+val.innerHTML); */
         /* on met en place l'expression reguliere */
         var regex = new RegExp('[0123456789]*-idcache', 'i');
         /* on l'applique au contenu */
         var idCache = regex.exec(val.innerHTML);
         /* on recupere id */
         id = idCache[0].replace('-idcache', '');
-/*        alert('field.name='+field.name+'-'+idCache[0]+'-'+id); */ 
+/* alert('field.name='+field.name+'-'+idCache[0]+'-'+id); */ 
         /* et on l'affecte au champ cache */
-/*        alert('field.name='+field.name+'-'+val.innerHTML+'-id='+id); */
+/* alert('field.name='+field.name+'-'+val.innerHTML+'-id='+id); */
         $(field.name+'_id').value = id;
 }
 
-/*=================================================================
-	Purpose:  Applique un delai avant execution. Used for autocompletion of companies.
-	Input:    funct, delay
-	Author:   Regis Houssin
-	Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Applique un delai avant execution. Used for autocompletion of companies.
+ * Input: funct, delay Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
  function ac_delay(funct,delay) {
  	// delay before start of action
   	setTimeout(funct,delay);
 }
 
- 
-/*=================================================================
-	Purpose:  Clean values of a "Sortable.serialize". 
-	          Used by drag and drop. Works for Scriptaculous and jQuery.
-	Input:    expr
-	Author:   Regis Houssin
-	Licence:  GPL
-==================================================================*/
+
+/*
+ * ================================================================= 
+ * Purpose:
+ * Clean values of a "Sortable.serialize". Used by drag and drop. Works for
+ * Scriptaculous and jQuery. Input: expr Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function cleanSerialize(expr) {
 	var reg = new RegExp("(&)", "g");
 	var reg2 = new RegExp("[^A-Z0-9,]", "g");
@@ -602,13 +611,13 @@ function cleanSerialize(expr) {
 }
 
 
-/*=================================================================
-Purpose:  Display a temporary message in input text fields (For showing help message on input field).
-Input:    fieldId
-Input:    message
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Display a temporary message in input text fields (For showing help message on
+ * input field). Input: fieldId Input: message Author: Regis Houssin Licence:
+ * GPL ==================================================================
+ */
 function displayMessage(fieldId,message) {
 	var textbox = document.getElementById(fieldId);
 	if (textbox.value == '') {
@@ -617,25 +626,27 @@ function displayMessage(fieldId,message) {
 	}
 }
 
-/*=================================================================
-Purpose:  Hide a temporary message in input text fields (For showing help message on input field).
-Input:    fiedId
-Input:    message
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose:
+ * Hide a temporary message in input text fields (For showing help message on
+ * input field). Input: fiedId Input: message Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function hideMessage(fieldId,message) {
 	var textbox = document.getElementById(fieldId);
 	textbox.style.color = 'black';
 	if (textbox.value == message) textbox.value = '';
 }
 
-/*=================================================================
-Purpose:  To show an element (To support multiselect of checkboxes in some pages)
-Input:    fieldId
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+
+/*
+ * ================================================================= 
+ * Purpose: To
+ * show an element (To support multiselect of checkboxes in some pages) Input:
+ * fieldId Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function displayElement(fieldId) {
 	var elementId = document.getElementById(fieldId);
 	if (elementId.style.visibility == 'hidden') {
@@ -643,12 +654,13 @@ function displayElement(fieldId) {
 	}
 }
 
-/*=================================================================
-Purpose:  To hide an element (To support multiselect of checkboxes in some pages)
-Input:    fieldId
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose: To
+ * hide an element (To support multiselect of checkboxes in some pages) Input:
+ * fieldId Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function hideElement(fieldId) {
 	var elementId = document.getElementById(fieldId);
 	if (elementId.style.visibility == 'visible') {
@@ -656,12 +668,13 @@ function hideElement(fieldId) {
 	}
 }
 
-/*=================================================================
-Purpose:  To check a checkbox (To support multiselect of checkboxes in some pages)
-Input:    fieldId
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose: To
+ * check a checkbox (To support multiselect of checkboxes in some pages) Input:
+ * fieldId Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function checkBox(boxId) {
 	var elementId = document.getElementById(boxId);
 	if (elementId.checked == false) {
@@ -669,12 +682,13 @@ function checkBox(boxId) {
 	}
 }
 
-/*=================================================================
-Purpose:  To uncheck a checkbox (To support multiselect of checkboxes in some pages)
-Input:    fieldId
-Author:   Regis Houssin
-Licence:  GPL
-==================================================================*/
+/*
+ * ================================================================= 
+ * Purpose: To
+ * uncheck a checkbox (To support multiselect of checkboxes in some pages)
+ * Input: fieldId Author: Regis Houssin Licence: GPL
+ * ==================================================================
+ */
 function uncheckBox(boxId) {
 	var elementId = document.getElementById(boxId);
 	if (elementId.checked == true) {
@@ -682,4 +696,3 @@ function uncheckBox(boxId) {
 	}
 }
 
-