Index: main/plugin-web/i18n/messages_fr.xml
===================================================================
--- main/plugin-web/i18n/messages_fr.xml	(revision 26836)
+++ main/plugin-web/i18n/messages_fr.xml	(working copy)
@@ -216,6 +216,33 @@
 	<message key="PLUGINS_WEB_CREATEPAGE_ERROR">Une erreur est survenue lors de la création de la page.&lt;br/&gt;Il est conseillé d'actualiser votre vue avant de recommencer car un autre utilisateur a peut-être modifié l'arbre.</message>
 	<message key="PLUGINS_WEB_CREATEPAGE_WAITING_MSG">Veuillez patienter pendant la création de la page.</message>
 	
+	<!-- **************************** -->
+	<message key="PLUGINS_WEB_CREATEPAGE_PAGE_BLANK_TITLE_HELP">Cette page sera vide et ne sera pas visualisable sur le site.&lt;br/&gt;Elle représentera uniquement un groupement pour ses sous-pages le cas échéant</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_LINK_CMS_TITLE_HELP">Selection de la page de redirection</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_CHOOSETEMPLATE_TITLE_HELP">Le gabarit permet de choisir quelle apparence donner à une page. Il peut-être modifier via le bouton gabarit dans le rubban.</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_CHOOSECONTENT_TITLE_HELP">Sélection du nouveau contenu à ajouter dans la section principale de la page</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_CHOOSESERVICE_TITLE_HELP">Sélection du nouveau service à ajouter dans la section principale de la page</message>
+	
+	<message key="PLUGINS_WEB_CREATEPAGE_TEMPLATE_WAITING_MSG">Veuillez patienter pendant l'ajout du gabarit.</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_EXTERNAL_LINK_WAITING_MSG">Veuillez patienter pendant la création de la redirection.</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_GET_TEMPLATE_WAITING_MSG">Veuillez patienter pendant la recherche des gabarits disponibles.</message>
+	<message key="PLUGINS_WEB_CREATEPAGE_GET_CONTENTS_SERVICES_WAITING_MSG">Veuillez patienter pendant la recherche des contenus et des services disponibles.</message>
+	
+	<message key="PLUGINS_WEB_TOOL_CREATEPAGE_ACTIONS_PREVIOUS">&lt; Précédent</message>
+	<message key="PLUGINS_WEB_TOOL_CREATEPAGE_ACTIONS_NEXT">Suivant &gt;</message>
+	
+	<message key="PLUGINS_WEB_TOOL_PAGE_ACTIONS_END">Terminer</message>
+	<message key="PLUGINS_WEB_TOOL_PAGE_ACTIONS_PARAM">Assistant ...</message>
+	
+	<message key="PLUGINS_WEB_TOOL_PAGE_CHECK_PARAM_WIZARD">Afficher l'assistant de paramétrage de la nouvelle page lorsque je cliquerai sur OK</message>
+	
+	<message key="PLUGINS_WEB_CREATE_PAGE_GET_TEMPLATES">Une erreur est survenue : impossible de récupérer la liste des gabarits possibles</message>
+	<message key="PLUGINS_WEB_CREATE_PAGE_GET_CONTENTS_SERVICES">Une erreur est survenue : impossible de récupérer la liste des contenus et des services disponibles</message>
+	
+	<message key="PLUGINS_WEB_CHOOSETAG_TITLE">Choix de l'étiquette</message>
+	<message key="PLUGINS_WEB_CHOOSETAG_TITLE_HELP">Etiqueter la page</message>
+	<!-- **************************** -->
+	
 	<message key="PLUGINS_WEB_CREATEPAGE_DELETE_CONFIRM">Etes-vous sûr de vouloir supprimer cette page et toutes ses sous-pages ?</message>
 	<message key="PLUGINS_WEB_CREATEPAGE_DELETE_WAIT_MSG">Suppression en cours, veuillez patienter ...</message>
 	<message key="PLUGINS_WEB_CREATEPAGE_DELETE_ERROR">Une erreur est survenue lors de la suppression de la page.&lt;br/&gt;Un autre utilisateur a peut-être modifié l'arborescence ou la page est verrouillée.</message>
@@ -1393,6 +1420,10 @@
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_CHECKBOX">Par des cases à cocher dans les critères (choix multiple)</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_CHECKBOX_AND_FILTER">Par des cases à cocher puis par filtre sur les résultats</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_NONE">Aucun (choix imposé au visiteur)</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_BEGIN">Recherche sur un intervalle de date (date de début)</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_BEGIN_DESC">Sélectionner une métadonnée de type date pour offrir au visiteur une recherche sur un intervalle de temps.&lt;br/&gt;Si 'Aucune' est choisi, le visiteur ne pourra pas faire de recherche par date.</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_END">Recherche sur un intervalle de date (date de fin)</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_END_DESC">Sélectionner une métadonnée de type date pour offrir au visiteur une recherche sur un intervalle de temps.&lt;br/&gt;Si 'Aucune' est choisi pour la date de début, le visiteur ne pourra pas faire de recherche par date.</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_TAG_CATEGORY">Recherche par étiquette</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_TAG_CATEGORY_DESC">Vous pouvez ajouter le critère de recherche par étiquette en sélectionnant un ensemble d'étiquette.&lt;br/&gt;Le critère portera le nom de l'étiquette et prendra la forme d'une liste déroulante avec la liste des étiquettes filles.&lt;br/&gt;Chaque étiquette sélectionnée donne lieu à un critère de ce type.&lt;br/&gt;Laissez ce paramètre vide pour que ce critère n'apparaissse pas.</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_STRICT_SEARCH_ON_TAGS">Recherche stricte sur les étiquettes</message>
@@ -1412,6 +1443,8 @@
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_ADVANCED_SEARCH_DESC">Cochez cette case pour afficher la recherche avancée (tous les mots, expression exacte, aucun des mots).</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_ON_DOCUMENTS">Documents</message>
 	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_RESULTS">résultat(s)</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_FROM">Du</message>
+	<message key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_TO">Au</message>
 	<message key="FRONT_MODULE_SEARCH_ALL_WORDS">Tous les mots</message>
 	<message key="FRONT_MODULE_SEARCH_EXACT_PHRASE">Expression exacte</message>
 	<message key="FRONT_MODULE_SEARCH_ANY_WORDS">Aucun des mots</message>
@@ -2052,6 +2085,7 @@
 	<message key="PLUGINS_WEB_LAST_PUBLICATION_SEARCH_LASTPUBLISHED_BEFORE">Validés avant le</message>
 	<message key="PLUGINS_WEB_LASTMAJORVALIDATION">Dernière validation</message>
 	<message key="PLUGINS_WEB_LAST_VALIDATION_DATE">Date de dernière publication</message>
+	<message key="PLUGINS_WEB_LAST_MODIFICATION_DATE">Date de dernière modification</message>
 	
 	<!-- OTHER -->
 	<message key="PLUGINS_WEB_HTMLEXPERT_LINK_PAGE_LABEL">Insérer l'url d'une page</message>	  
Index: main/plugin-web/plugin.xml
===================================================================
--- main/plugin-web/plugin.xml	(revision 26836)
+++ main/plugin-web/plugin.xml	(working copy)
@@ -2548,6 +2548,50 @@
 	 <!-- +
     	 | SITEMAP
     	 + -->
+     <feature name="userinterface.sitemap.create">
+		<extensions>
+    		<!-- Ajouter une page -->
+    		<extension id="org.ametys.web.userinterface.AddPage"
+					   point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
+					   class="org.ametys.web.clientsideelement.AddPageClientSideElement">
+				<action class="org.ametys.ribbon.control.button.SitemapOrModifiablePageActionButton">
+					<param name="action">org.ametys.web.tool.page.Add.act</param>
+
+					<param name="label" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_LABEL</param>
+					<param name="default-description" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_DESC</param>
+					<param name="no-right-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NORIGHT_DESC</param>
+					<param name="no-selection-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NOSELECTION_DESC</param>
+					<param name="footer" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_FOOTER</param>
+					<param name="icon-small" file="true">img/actions/page_add_16.png</param>
+					<param name="icon-medium" file="true">img/actions/page_add_32.png</param>
+					<param name="icon-large" file="true">img/actions/page_add_50.png</param>
+					
+					<param name="workflowInitActionId">1</param>
+					<param name="workflow-workflowName">content</param>	
+					<param name="workflowEditActionId">2</param>
+					
+					<param name="right-addcontent">Web_Rights_Page_AddContent</param>
+					<param name="right-addservice">Web_Rights_Page_AddService</param>
+					<param name="right-settemplate">Web_Rights_Page_Templates</param>
+					<param name="right-setlinkpage">Web_Rights_Page_LinkPage</param>
+					<param name="right-addtag">Web_Rights_Page_Tag</param>
+				</action>
+				<scripts>
+					<file>js/org/ametys/web/tool/page/Actions.i18n.js</file>
+					<file>js/org/ametys/web/tool/page/AddPageWizzard.i18n.js</file>
+					<file>js/org/ametys/ribbon/control/button/SitemapOrModifiablePageActionButton.js</file>
+					<file>js/org/ametys/web/page/TemplatesMenu.i18n.js</file>	
+					<file>js/org/ametys/web/page/LinkPage.i18n.js</file>		
+					<file>js/org/ametys/web/zone/AddContentAction.i18n.js</file>
+					<file>js/org/ametys/web/zone/AddServiceAction.i18n.js</file>
+				</scripts>
+				<css>
+					<file>css/pages/addpage.css</file>
+				</css>
+				<right>Web_Rights_Page_Handle</right>
+			</extension>
+		</extensions>     
+     </feature>
 	 <feature name="userinterface.sitemap">
     	<extensions>
 			<extension id="org.ametys.web.userinterface.Sitemap"
@@ -2588,29 +2632,6 @@
 		       	</css>
     		</extension>
     		
-    		<!-- Ajouter une page -->
-    		<extension id="org.ametys.web.userinterface.AddPage"
-					   point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
-					   class="org.ametys.runtime.ui.impl.StaticContextualClientSideElement">
-				<action class="org.ametys.ribbon.control.button.SitemapOrModifiablePageActionButton">
-					<param name="action">org.ametys.web.tool.page.Add.act</param>
-
-					<param name="label" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_LABEL</param>
-					<param name="default-description" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_DESC</param>
-					<param name="no-right-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NORIGHT_DESC</param>
-					<param name="no-selection-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NOSELECTION_DESC</param>
-					<param name="footer" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_FOOTER</param>
-					<param name="icon-small" file="true">img/actions/page_add_16.png</param>
-					<param name="icon-medium" file="true">img/actions/page_add_32.png</param>
-					<param name="icon-large" file="true">img/actions/page_add_50.png</param>
-				</action>
-				<scripts>
-					<file>js/org/ametys/web/tool/page/Actions.i18n.js</file>
-					<file>js/org/ametys/ribbon/control/button/SitemapOrModifiablePageActionButton.js</file>
-				</scripts>
-				<right>Web_Rights_Page_Handle</right>
-			</extension>
-			
 			<!-- Supprimer une page -->
     		<extension id="org.ametys.web.userinterface.DeletePage"
 					   point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
@@ -3539,7 +3560,6 @@
 					
 					<param name="workflowInitActionId">1</param>
 					<param name="workflow-workflowName">content</param>
-					<param name="content-language-to-create">fr</param> <!-- FIXME hardcoded -->
 				</action>
 				<scripts>
 					<file plugin="cms">js/org/ametys/cms/ribbon/button/Menu.js</file>
@@ -3824,7 +3844,6 @@
 				<label i18n="true">PLUGINS_WEB_SERVICE_SITEMAP_LABEL</label>
 				<description i18n="true">PLUGINS_WEB_SERVICE_SITEMAP_DESCRIPTION</description>
 				<thumbnail>
-					<small>img/service/sitemap_16.png</small>
 					<medium>img/service/sitemap_32.png</medium>
 					<large>img/service/sitemap_48.png</large>
 				</thumbnail>
@@ -3916,7 +3935,7 @@
                             <enumeration>
                                 <custom-enumerator class="org.ametys.web.frontoffice.ContentTypesForSearchEnumerator"/>
                             </enumeration>
-                            <widget>sorted-multiselect</widget>
+                            <widget>content-types</widget>
                         </parameter>
                         <parameter name="search-by-content-types-choice" type="string" multiple="false">
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE</label>
@@ -3944,11 +3963,23 @@
                                 </entry>
                             </enumeration>
                         </parameter>
+                        <parameter name="search-by-common-date-begin" type="string" multiple="false">
+                        	<label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_BEGIN</label>
+                        	<description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_BEGIN_DESC</description>
+                        	<widget>typed-metadata</widget>
+                        </parameter>
+                         <parameter name="search-by-common-date-end" type="string" multiple="false">
+                        	<label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_END</label>
+                        	<description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_CONTENTTYPE_CHOICE_DATE_END_DESC</description>
+                        	<widget>typed-metadata</widget>
+                        </parameter>
                         <parameter name="advanced-search" type="boolean">
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_ADVANCED_SEARCH</label>
                             <description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_ADVANCED_SEARCH_DESC</description>
                         </parameter>
-                        <parameter name="search-by-pages" type="string" multiple="true">
+                    </group>
+                    <group>
+                    	<parameter name="search-by-pages" type="string" multiple="true">
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_SECTION</label>
                             <description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_BY_SECTION_DESC</description>
                             <widget>current-sitemap</widget>
@@ -3961,8 +3992,8 @@
                             	<param name="allowProviders">true</param>
                                 <param name="onlyTagsWithChildren">true</param>
                             </widget-params>
-                        </parameter>
-                        <parameter name="strict-search-on-tags" type="boolean">
+                        </parameter>  
+                   		<parameter name="strict-search-on-tags" type="boolean">
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_STRICT_SEARCH_ON_TAGS</label>
                             <description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_STRICT_SEARCH_ON_TAGS_DESC</description>
                         </parameter>
@@ -3970,8 +4001,6 @@
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_ON_ALL_SITES</label>
                             <description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_ON_ALL_SITES_DESC</description>
                         </parameter>
-                    </group>
-                    <group>
                         <parameter name="search-mode" type="string">
                             <label i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_MODE</label>
                             <description i18n="true">PLUGINS_WEB_SERVICE_FRONT_SEARCH_MODE_DESC</description>
Index: main/plugin-web/sitemap-front.xmap
===================================================================
--- main/plugin-web/sitemap-front.xmap	(revision 26836)
+++ main/plugin-web/sitemap-front.xmap	(working copy)
@@ -58,6 +58,7 @@
 		
 		<map:serializers>
             <map:serializer name="fo2pdf" mime-type="application/pdf" src="org.ametys.runtime.cocoon.FOPNGSerializer" />
+			<map:serializer name="html-doc" mime-type="application/vnd.ms-word" src="org.apache.cocoon.serialization.HTMLSerializer" />
 		</map:serializers>
 		
 		<map:actions>
@@ -280,6 +281,8 @@
 					<map:parameter name="search-by-pages" value="{parent-context-attr:search-by-pages}"/>
 					<map:parameter name="search-multisite" value="{parent-context-attr:search-multisite}"/>
                     <map:parameter name="service-group-id" value="{parent-context-attr:service-group-id}"/>
+				    <map:parameter name="startDate" value="{parent-context-attr:search-by-common-date-begin}"/>
+				    <map:parameter name="endDate" value="{parent-context-attr:search-by-common-date-end}"/>
 				</map:generate>
 				<map:transform type="i18n" label="xml">
 					<map:parameter name="locale" value="{request-attr:sitemapLanguage}"/>
@@ -572,6 +575,26 @@
                 </map:act>
             </map:match>
             
+            <map:match pattern="content-type.*.doc">
+                <map:act type="get-ctype-infos">
+                    <map:aggregate element="view">
+                        <map:part src="cocoon:/content"/>
+                        <map:part src="cocoon:/content-pages"/>
+                    </map:aggregate>
+                    <map:transform type="i18n">
+                        <map:parameter name="locale" value="{request-attr:renderingLanguage}"/>
+                        <map:parameter name="plugin" value="{request-attr:pluginName}"/>
+                    </map:transform>
+                    <map:transform src="content-view://{../1}/view-{request-param:metadataSetName}/doc.xsl"/>
+                    <map:transform type="docbook-enhancement"/>
+                    <map:transform type="i18n">
+                        <map:parameter name="locale" value="{request-attr:renderingLanguage}"/>
+                        <map:parameter name="plugin" value="{pluginName}"/>
+                    </map:transform>
+                    <map:serialize type="html-doc"/>
+                </map:act>
+            </map:match>
+            
             <map:match pattern="content-type.*.html">
                 <map:act type="get-ctype-infos">
                     <map:aggregate element="view">
Index: main/plugin-web/pages/services/search/search-criteria/search-criteria_3.3.xsl
===================================================================
--- main/plugin-web/pages/services/search/search-criteria/search-criteria_3.3.xsl	(revision 26836)
+++ main/plugin-web/pages/services/search/search-criteria/search-criteria_3.3.xsl	(working copy)
@@ -171,13 +171,53 @@
            <!-- Multisite -->
            <xsl:call-template name="form-search-element-multisite"/>
            
+           <!-- Dates -->
+           <xsl:call-template name="form-search-element-dates"/>
+           
            <!-- Template common for submit button -->
            <xsl:call-template name="common-utils-input-submit">
                <xsl:with-param name="class-name">search</xsl:with-param>
                <xsl:with-param name="i18nkey" select="'plugin.web:FRONT_MODULE_SEARCH_BUTTON_OK'" />                                
            </xsl:call-template>
+                      
 	</xsl:template>
 		
+	<!-- Dates -->
+	<xsl:template name="form-search-element-dates">
+		<xsl:if test="/search/form/fields/dates = 'true'">
+			<div class="field">
+				<div class="label"><label for="startDate"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_FROM" i18n:catalogue="plugin.web"/></label></div>
+				<div class="input">
+					<input id="startDate-{$uniqueId}" type="text" name="startDate" maxlength="10">
+						<xsl:if test="/search/form/values/startDate"><xsl:attribute name="value"><xsl:value-of select="/search/form/values/startDate"/></xsl:attribute></xsl:if>
+					</input>
+				</div>
+				<div class="field-end"></div>
+			</div>
+			<div class="field">
+				<div class="label"><label for="endDate"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_TO" i18n:catalogue="plugin.web"/></label></div>
+				<div class="input">
+					<input id="endDate-{$uniqueId}" type="text" name="endDate" maxlength="10">
+						<xsl:if test="/search/form/values/endDate"><xsl:attribute name="value"><xsl:value-of select="/search/form/values/endDate"/></xsl:attribute></xsl:if>
+					</input>
+				</div>
+				<div class="field-end"></div>
+			</div>
+			<script type="text/javascript">
+				$j(document).ready(function () 
+				{
+					var idStart = "startDate-"+"<xsl:value-of select="$uniqueId"/>";
+					var idEnd = "endDate-"+"<xsl:value-of select="$uniqueId"/>";
+					
+					var opt = { dateFormat: 'dd/mm/yy', altFormat: 'dd/mm/yy'};
+					
+					$j('#'+idStart).datepicker(opt);
+					$j('#'+idEnd).datepicker(opt);
+				});
+			</script>
+		</xsl:if>
+	</xsl:template>	
+		
     <!-- Keywords -->
     <xsl:template name="form-search-element-keywords">
         <div class="field">
Index: main/plugin-web/pages/services/search/search-criteria/search-criteria.xsl
===================================================================
--- main/plugin-web/pages/services/search/search-criteria/search-criteria.xsl	(revision 26836)
+++ main/plugin-web/pages/services/search/search-criteria/search-criteria.xsl	(working copy)
@@ -309,9 +309,48 @@
 				 -->
 			</xsl:if>
 			
+			 <!-- Dates -->
+          	<xsl:call-template name="form-search-element-dates"/>
+			
 			<div class="button"><button type="submit" class="search"><i18n:text i18n:key="FRONT_MODULE_SEARCH_BUTTON_OK"/></button></div>
 	</xsl:template>
 		
+	<!-- Dates -->
+	<xsl:template name="form-search-element-dates">
+		<xsl:if test="/search/form/fields/dates = 'true'">
+			<div class="field">
+				<div class="label"><label for="startDate"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_FROM" i18n:catalogue="plugin.web"/></label></div>
+				<div class="input">
+					<input id="startDate-{$uniqueId}" type="text" name="startDate" maxlength="10">
+						<xsl:if test="/search/form/values/startDate"><xsl:attribute name="value"><xsl:value-of select="/search/form/values/startDate"/></xsl:attribute></xsl:if>
+					</input>
+				</div>
+				<div class="field-end"></div>
+			</div>
+			<div class="field">
+				<div class="label"><label for="endDate"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_DATE_TO" i18n:catalogue="plugin.web"/></label></div>
+				<div class="input">
+					<input id="endDate-{$uniqueId}" type="text" name="endDate" maxlength="10">
+						<xsl:if test="/search/form/values/endDate"><xsl:attribute name="value"><xsl:value-of select="/search/form/values/endDate"/></xsl:attribute></xsl:if>
+					</input>
+				</div>
+				<div class="field-end"></div>
+			</div>
+			<script type="text/javascript">
+				$j(document).ready(function () 
+				{
+					var idStart = "startDate-"+"<xsl:value-of select="$uniqueId"/>";
+					var idEnd = "endDate-"+"<xsl:value-of select="$uniqueId"/>";
+					
+					var opt = { dateFormat: 'dd/mm/yy', altFormat: 'dd/mm/yy'};
+					
+					$j('#'+idStart).datepicker(opt);
+					$j('#'+idEnd).datepicker(opt);
+				});
+			</script>
+		</xsl:if>
+	</xsl:template>	
+		
 	<xsl:template name="script-autocompletion">
 		<script type="text/javascript">
 			<xsl:comment>
Index: main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java
===================================================================
--- main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java	(revision 26836)
+++ main/plugin-web/src/org/ametys/web/frontoffice/SearchGenerator.java	(working copy)
@@ -16,8 +16,10 @@
 package org.ametys.web.frontoffice;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.BitSet;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -29,6 +31,7 @@
 import org.apache.cocoon.xml.AttributesImpl;
 import org.apache.cocoon.xml.XMLUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.lucene.document.DateTools;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queryParser.MultiFieldQueryParser;
@@ -43,6 +46,7 @@
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.TermRangeQuery;
 import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.search.TopFieldCollector;
 import org.apache.lucene.search.WildcardQuery;
@@ -179,7 +183,8 @@
         _addContentTypeQuery(query, request);
         _addTagsQuery(query, request);
         _addPagesQuery(query, request);
-        
+        _addDateQuery(query, request);
+
         return query;
     }
     
@@ -202,10 +207,87 @@
         _addContentTypeQuery(query, cType);
         _addTagsQuery(query, request);
         _addPagesQuery(query, request);
+        _addDateQuery(query, request);
         
         return query;
     }
     
+    private void _addDateQuery(BooleanQuery query, Request request)
+    {
+        String startDateId = parameters.getParameter("startDate", "");
+        String endDateId = parameters.getParameter("endDate", "");
+        
+        String endDate = request.getParameter("endDate");
+        String startDate = request.getParameter("startDate");
+
+        // We check if startDate < endDate. If not, we swap.
+        if (StringUtils.isNotEmpty(endDate) && StringUtils.isNotEmpty(startDate))
+        {                
+            SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
+
+            try
+            {
+                Date dateS = format.parse(startDate);
+                Date dateE = format.parse(endDate);
+                
+                if (dateS.compareTo(dateE) > 0) 
+                {
+                    String dateAux = startDate;
+                    startDate = endDate;
+                    endDate = dateAux;
+                }
+            }
+            catch (java.text.ParseException e)
+            {
+                getLogger().error(e.getMessage());
+            }
+        }
+        
+        if (StringUtils.isNotEmpty(endDate))
+        {
+            String endDateFormat = _toDateFormat(endDate);
+            if (endDateFormat != null)
+            {
+                query.add(new TermRangeQuery(startDateId, null, endDateFormat, false, true), BooleanClause.Occur.MUST);
+            }
+        }
+        
+        if (StringUtils.isNotEmpty(startDate))
+        {
+            String startDateFormat = _toDateFormat(startDate);
+            if (startDateFormat != null)
+            {
+                // Two cases are possible :
+                // An event could have an end date (query 1)
+                // If not, the start date is also the end date (query 2)
+                BooleanQuery endDateQuery = new BooleanQuery();
+               
+                if (!endDateId.equals(""))
+                {
+                    endDateQuery.add(new TermRangeQuery(endDateId, startDateFormat, null, true, false), BooleanClause.Occur.SHOULD);
+                }
+                endDateQuery.add(new TermRangeQuery(startDateId, startDateFormat, null, true, false), BooleanClause.Occur.SHOULD);
+                
+                query.add(endDateQuery, BooleanClause.Occur.MUST);
+            }
+        }
+    }
+    
+    private String _toDateFormat(String date)
+    {
+        try
+        {
+            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
+            Date dateD = sdf.parse(date);
+            return DateTools.dateToString(dateD, DateTools.Resolution.DAY);
+        }
+        catch (java.text.ParseException e)
+        {
+            getLogger().warn("Format de date invalide.");
+        }
+        return null;
+    }
+    
     @Override
     protected String[] getFields ()
     {
@@ -310,6 +392,13 @@
             }
             XMLUtils.endElement(contentHandler, "sites");
         }
+        
+        String startDate = parameters.getParameter("startDate", "");
+        
+        if (!startDate.equals(""))
+        {
+            XMLUtils.createElement(contentHandler, "dates", "true");
+        }
     }
     
     @Override
@@ -323,6 +412,48 @@
         _saxTags(request);
         _saxPages(request);
         _saxMultisite(request);
+        _saxDates(request);
+    }
+    
+    private void _saxDates(Request request) throws SAXException
+    {
+        String startDate = request.getParameter("startDate");
+        String endDate = request.getParameter("endDate");
+        if (startDate != null && !startDate.equals(""))
+        { 
+            if (endDate != null && !endDate.equals(""))
+            { 
+                SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
+
+                try
+                {
+                    Date dateS = format.parse(startDate);
+                    Date dateE = format.parse(endDate);
+                    
+                    if (dateS.compareTo(dateE) <= 0) 
+                    {
+                        XMLUtils.createElement(contentHandler, "endDate", endDate);
+                        XMLUtils.createElement(contentHandler, "startDate", startDate);
+                    }
+                    else
+                    {
+                        XMLUtils.createElement(contentHandler, "endDate", startDate);
+                        XMLUtils.createElement(contentHandler, "startDate", endDate);
+                    }
+                }
+                catch (java.text.ParseException e)
+                {
+                    getLogger().error(e.getMessage());
+                }
+            }     
+        }
+        else
+        {
+            if (endDate != null && !endDate.equals(""))
+            {
+                XMLUtils.createElement(contentHandler, "endDate", endDate);
+            }
+        }
     }
     
     private void _saxTextField(Request request) throws SAXException
