diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php
index 811ba37792424d8308f64f1ece12f72f76cdb2c8..475072bb8a01be4a1bd732953835276a57dcd0ce 100644
--- a/htdocs/admin/ihm.php
+++ b/htdocs/admin/ihm.php
@@ -141,7 +141,10 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
     // D�sactiver le calendrier popup
     $var=!$var;
     print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("UsePopupCalendar").'</td><td>';
-    $liste_popup_calendar=array('0'=>$langs->trans("No"),'eldy'=>$langs->trans("Yes").' (style eldy)','andre'=>$langs->trans("Yes").' (style andre)');
+    $liste_popup_calendar=array(
+		'0'=>$langs->trans("No"),
+		'eldy'=>$langs->trans("Yes").' (style eldy)',
+		'andre'=>$langs->trans("Yes").' (style andre)');
     $html->select_array('popup_calendar',$liste_popup_calendar,$conf->global->MAIN_POPUP_CALENDAR);
     print ' ('.$langs->trans("AvailableOnlyIfJavascriptNotDisabled").')';
     print '</td></tr>';
diff --git a/htdocs/lib/lib_head.js b/htdocs/lib/lib_head.js
index 09e3eda4a110c3601e49e4036ef7413c8701f3bb..35c01d660612dc8940e2d0497666ff3ea3388229 100644
--- a/htdocs/lib/lib_head.js
+++ b/htdocs/lib/lib_head.js
@@ -76,17 +76,28 @@ function showDP(base,dateFieldID,format)
 	showDP.box.style.top=thetop + "px";
 	showDP.box.style.left=theleft + "px";
 	
-	if(dateField.value)	// Si il y avait valeur initiale dans champ
+	if (dateField.value)	// Si il y avait valeur initiale dans champ
 	{
 		selDate=getDateFromFormat(dateField.value,format);
 		if (selDate)
 		{
+			// Success to parse value in field according to format
 			year=selDate.getFullYear();
 			month=selDate.getMonth()+1;
 			day=selDate.getDate();
 			datetime=selDate.getTime();
 			ymd=formatDate(selDate,'yyyyMMdd');
 		}
+		else
+		{
+			// Failed to parse value in field according to format
+			selDate=new Date();
+			year=selDate.getFullYear();
+			month=selDate.getUTCMonth()+1;
+			day=selDate.getDate();
+			datetime=selDate.getTime();
+			ymd=formatDate(selDate,'yyyyMMdd');
+		}
 	}
 	else
 	{
@@ -386,10 +397,178 @@ document.onmousemove=positiontip;
 
 
 
+/*=================================================================
+	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
+	Licence:  GPL
+==================================================================*/
+function formatDate(date,format)
+{
+	//alert('formatDate date='+date+' format='+format);
+	
+	// Force parametres en chaine
+	format=format+"";
+	
+	var result="";
+
+	var year=date.getYear()+""; if (year.length < 4) { year=""+(year-0+1900); }
+	var month=date.getMonth()+1;
+	var day=date.getDate();
+	var hour=date.getHours();
+	var min=date.getMinutes();
+	var seconde=date.getSeconds();
+
+	var i=0;
+	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
+		{
+			substr += format.charAt(j++);
+		}
+
+		//alert('substr='+substr);
+		if (substr == 'yyyy')      { result=result+year; }
+		else if (substr == 'yy')   { result=result+year.substring(2,4); }
+		else if (substr == 'MM')   { result=result+(month<1||month>9?"":"0")+month; }
+		else if (substr == 'd')    { result=result+day; }
+		else if (substr == 'dd')   { result=result+(day<1||day>9?"":"0")+day; }
+		else if (substr == 'hh')   { if (hour > 12) hour-=12; result=result+(hour<1||hour>9?"":"0")+hour; }
+		else if (substr == 'HH')   { result=result+(hour<1||hour>9?"":"0")+hour; }
+		else if (substr == 'mm')   { result=result+(minute<1||minute>9?"":"0")+minute; }
+		else if (substr == 'ss')   { result=result+(seconde<1||seconde>9?"":"0")+seconde; }
+		else { result=result+substr; }
+		
+		i+=substr.length;
+	}
+
+	//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(val,format)
+{
+	//alert('getDateFromFormat val='+val+' format='+format);
+
+	// Force parametres en chaine
+	val=val+"";
+	format=format+"";
+
+	var now=new Date();
+	var year=now.getYear(); if (year.length < 4) { year=""+(year-0+1900); }
+	var month=now.getMonth()+1;
+	var day=now.getDate();
+	var hour=now.getHours();
+	var minute=now.getMinutes();
+	var seconde=now.getSeconds();
+
+	var i=0;
+	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
+		{
+			substr += format.charAt(j++);
+		}
+
+		//alert('substr='+substr);
+		if (substr == "yyyy") year=getIntegerInString(val,i,4,4);
+		if (substr == "yy")   year=""+(getIntegerInString(val,i,2,2)-0+1900);
+		if (substr == "MM")   month=getIntegerInString(val,i,2,2);
+		if (substr == "M")    month=getIntegerInString(val,i,1,2);
+		if (substr == "dd")   day=getIntegerInString(val,i,1,2);
+		if (substr == "hh")   hour=getIntegerInString(val,i,1,2);
+		if (substr == "HH")   hour=getIntegerInString(val,i,1,2);
+		if (substr == "mm")   minute=getIntegerInString(val,i,1,2);
+		if (substr == "ss")   seconde=getIntegerInString(val,i,1,2);
+	
+		i+=substr.length;
+	}
+	
+	// Check if format param are ok
+	if (year==null||year<1) { return 0; }
+	if (month==null||(month<1)||(month>12)) { return 0; }
+	if (day==null||(day<1)||(day>31)) { return 0; }
+	if (hour==null||(hour<0)||(hour>24)) { return 0; }
+	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);
+	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(str)
+{
+	var digits="1234567890";
+	for (var i=0; i < str.length; i++)
+	{
+		if (digits.indexOf(str.charAt(i))==-1)
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+/*=================================================================
+	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--)
+	{
+		var substr=str.substring(i,i+x);
+		if (substr.length < minlength) { return null; }
+		if (stringIsInteger(substr)) { return substr; }
+	}
+	return null;
+}
 
 
 /*=================================================================
-  Purpose:  Fonction pour champ saisie en mode ajax
+	Purpose:  Fonction pour champ saisie en mode ajax
 	Author:   Laurent Destailleur
 	Licence:  GPL
 ==================================================================*/