Index: Template-CMSWEB.patch
===================================================================
--- Template-CMSWEB.patch	(revision 0)
+++ Template-CMSWEB.patch	(revision 0)
@@ -0,0 +1,1368 @@
+Index: webapp/cms/plugins/newsletter/pages/service/list/list.xsl
+===================================================================
+--- webapp/cms/plugins/newsletter/pages/service/list/list.xsl	(revision 8890)
++++ webapp/cms/plugins/newsletter/pages/service/list/list.xsl	(working copy)
+@@ -30,7 +30,7 @@
+ 	<xsl:template match="/Newsletters">
+ 		<html>
+ 			<body>
+-				<div id="service-newsletter-list">
++				<div class="service newsletter list">
+ 					
+ 					<!-- Title -->
+ 					<xsl:choose>
+Index: webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl
+===================================================================
+--- webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl	(revision 8890)
++++ webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl	(working copy)
+@@ -39,7 +39,7 @@
+                 <xsl:call-template name="css"/>
+             </head>
+ 			<body>
+-				<div id="service-newsletter-form-{$uniqueId}" class="newsletter-subscribe">
++				<div id="service-newsletter-form-{$uniqueId}" class="service newsletter subscribe">
+ 					
+ 					<!-- Title -->
+ 					<xsl:choose>
+@@ -133,54 +133,68 @@
+ 					<i18n:param><xsl:value-of select="Categories/category/title"/></i18n:param>
+ 				</i18n:translate>
+ 			</p>
+-			<!-- email -->
+-			<label for="subscribe-email"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL"/></label><br/>
+-			<input type="text" name="email" class="text" id="subscribe-email-{$uniqueId}" value="{FormResult/email}">
+-				<xsl:if test="FormResult/msg = 'invalid-email'">
+-					<xsl:attribute name="class">invalid</xsl:attribute>
+-				</xsl:if>
+-			</input>
++
++            <!-- category -->
++            <input type="hidden" name="category" value="{Categories/category/@id}"/>
++                        
++            <!-- email -->
++            <div class="field">
++                <div class="label">
++                    <label for="subscribe-email"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL"/></label>                
++                </div>
++                <div class="input">
++                    <input type="text" name="email" class="text" id="subscribe-email-{$uniqueId}" value="{FormResult/email}">
++                        <xsl:if test="FormResult/msg = 'invalid-email'">
++                            <xsl:attribute name="class">invalid</xsl:attribute>
++                        </xsl:if>
++                    </input>                
++                </div>
++            </div>
+ 			<xsl:if test="FormResult/msg = 'invalid-email'">
+-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL_INVALID"/></div>
++				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL_INVALID"/></p>
+ 			</xsl:if>
+ 			<xsl:if test="FormResult/msg = 'already-exist'">
+-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_EMAIL_ALREADY_EXISTS"/></div>
++				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_EMAIL_ALREADY_EXISTS"/></p>
+ 			</xsl:if>
+-			<br/><br/>
+-			
+-			<!-- category -->
+-			<input type="hidden" name="category" value="{Categories/category/@id}"/>
+ 			
+ 			<!-- captcha -->
+-			<label for="captcha"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA"/></label><br/>
+-
+-			<xsl:call-template name="captcha">
+-				<xsl:with-param name="key-name" select="'captcha-key'"/>
+-	
+-				<xsl:with-param name="value-name" select="'captcha'"/>
+-				<xsl:with-param name="value-id" select="concat('captcha-', $uniqueId)"/>
+-				<xsl:with-param name="value-style">float: left; margin-top: <xsl:value-of select="(@height - 16) div 2"/>px; width: <xsl:value-of select="@width"/>px;</xsl:with-param>
+-				<xsl:with-param name="value-class">
+-                    <xsl:text>captcha</xsl:text>
+-    				<xsl:if test="FormResult/msg = 'invalid-captcha'">
+-                        <xsl:text> invalid</xsl:text>
+-    				</xsl:if>
+-				</xsl:with-param>
+-	
+-				<xsl:with-param name="image-alt"/>
+-				<xsl:with-param name="image-alt-i18n" select="false()"/>
+-				<xsl:with-param name="image-class">captcha-image</xsl:with-param>
+-				<xsl:with-param name="image-style">float:left; margin: 3px 3px 0 10px</xsl:with-param>
+-			</xsl:call-template> 
+-
++            <div class="field">
++                <div class="label">
++                    <label for="captcha"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA"/></label>
++                </div>
++                <div class="input">
++                    <xsl:call-template name="captcha">
++                        <xsl:with-param name="key-name" select="'captcha-key'"/>
++            
++                        <xsl:with-param name="value-name" select="'captcha'"/>
++                        <xsl:with-param name="value-id" select="concat('captcha-', $uniqueId)"/>
++                        <xsl:with-param name="value-style">float: left; margin-top: <xsl:value-of select="(@height - 16) div 2"/>px; width: <xsl:value-of select="@width"/>px;</xsl:with-param>
++                        <xsl:with-param name="value-class">
++                            <xsl:text>captcha</xsl:text>
++                            <xsl:if test="FormResult/msg = 'invalid-captcha'">
++                                <xsl:text> invalid</xsl:text>
++                            </xsl:if>
++                        </xsl:with-param>
++            
++                        <xsl:with-param name="image-alt"/>
++                        <xsl:with-param name="image-alt-i18n" select="false()"/>
++                        <xsl:with-param name="image-class">captcha-image</xsl:with-param>
++                        <xsl:with-param name="image-style">float:left; margin: 3px 3px 0 10px</xsl:with-param>
++                    </xsl:call-template>                
++                </div>
++            </div>
++                        
+ 			<xsl:if test="FormResult/msg = 'invalid-captcha'">
+-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA_INVALID"/></div>
++				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA_INVALID"/></p>
+ 			</xsl:if>
+-			<br class="break"/>
++            <div class="bottom"><xsl:comment>empty</xsl:comment></div>
+ 			
+ 			<input type="hidden" name="subscribe"/>
+ 			<input type="hidden" name="siteName" value="{$siteName}"/>
+-			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_INPUT_SUBMIT" i18n:attr="value"/>
++			
++            <div class="button">
++                <input type="submit" class="submit" value="NEWSLETTERS_SERVICE_INPUT_SUBMIT" i18n:attr="value"/>
++            </div>
+ 		</form>
+ 	</xsl:template>
+ 	
+@@ -198,26 +212,30 @@
+ 		</xsl:choose>
+ 		
+ 		<xsl:if test="FormResult/msg = 'invalid-category'">
+-			<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CATEGORY_INVALID"/></div>
++			<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CATEGORY_INVALID"/></p>
+ 		</xsl:if>
+ 			
+-		<br/><br/>
+ 	</xsl:template>
+ 	
+ 	<xsl:template match="category">
+ 		<xsl:param name="indent">0</xsl:param>
+ 		
+ 		<xsl:variable name="id" select="@id"/>
+-		<input type="checkbox" name="category" value="{@id}" id="category_{$uniqueId}_{position()}" style="margin-left: {$indent}px">
+-			<xsl:if test="/NewsletterService/FormResult/category[. = $id]">
+-				<xsl:attribute name="checked">checked</xsl:attribute>
+-			</xsl:if>
+-		</input>
+-		<label for="category_{$uniqueId}_{position()}"><xsl:value-of select="title"/></label>
+-		<xsl:if test="description != ''">
+-			<span class="description">(<xsl:value-of select="description"/>)</span>
+-		</xsl:if>
+-		<br/>
++		<div class="field checkbox">
++            <div class="input">
++                <input type="checkbox" name="category" value="{@id}" id="category_{$uniqueId}_{position()}" style="margin-left: {$indent}px">
++                    <xsl:if test="/NewsletterService/FormResult/category[. = $id]">
++                        <xsl:attribute name="checked">checked</xsl:attribute>
++                    </xsl:if>
++                </input>            
++            </div>
++            <div class="label">
++                <label for="category_{$uniqueId}_{position()}"><xsl:value-of select="title"/></label>
++                <xsl:if test="description != ''">
++                    <span class="description">(<xsl:value-of select="description"/>)</span>
++                </xsl:if>            
++            </div>            
++        </div>
+ 		
+ 		<xsl:apply-templates select="category">
+ 			<xsl:with-param name="indent" select="$indent + 20"/>
+Index: webapp/cms/plugins/newsletter/pages/unsubscribe.xsl
+===================================================================
+--- webapp/cms/plugins/newsletter/pages/unsubscribe.xsl	(revision 8890)
++++ webapp/cms/plugins/newsletter/pages/unsubscribe.xsl	(working copy)
+@@ -85,8 +85,7 @@
+ 			<input type="hidden" name="categoryId" value="{categoryId}"/>
+ 			<input type="hidden" name="email" value="{email}"/>
+ 			
+-			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_UNSUBSCRIBE_CONFIRM_BTN" i18n:attr="value">
+-			</input>
++			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_UNSUBSCRIBE_CONFIRM_BTN" i18n:attr="value"/>
+ 		</form>
+ 	</xsl:template>
+ 	
+Index: webapp/cms/plugins/news/pages/services/calendar/calendar.xsl
+===================================================================
+--- webapp/cms/plugins/news/pages/services/calendar/calendar.xsl	(revision 8890)
++++ webapp/cms/plugins/news/pages/services/calendar/calendar.xsl	(working copy)
+@@ -156,9 +156,9 @@
+             </head>
+             
+             <body id="default">
+-                <div class="events-calendar">
++                <div class="service events-calendar">
+                 	<xsl:if test="$title != ''">
+-	                    <h1 class="title"><xsl:value-of select="$title"/></h1>
++	                    <h1><xsl:value-of select="$title"/></h1>
+                 	</xsl:if>
+                     <div id="calendar-{$uniqueId}"/>
+                     <div id="day-events-{$uniqueId}" class="events" style="display:none">
+Index: webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl
+===================================================================
+--- webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl	(revision 8892)
++++ webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl	(working copy)
+@@ -89,7 +89,7 @@
+ 				</script>
+ 			</head>
+ 			<body>
+-				<div id="{$id}" class="show-tweets">
++				<div id="{$id}" class="service socialnetworking tweets">
+ 					<noscript>
+ 						<p><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_BEGIN"/></p>
+ 						<ul>
+Index: webapp/cms/plugins/mypage/pages/services/search.xsl
+===================================================================
+--- webapp/cms/plugins/mypage/pages/services/search.xsl	(revision 8890)
++++ webapp/cms/plugins/mypage/pages/services/search.xsl	(working copy)
+@@ -45,7 +45,7 @@
+             </head>
+             
+             <body id="default">
+-                <div class="mypage-search-wrapper">
++                <div class="service service-mypage service-search service-mypage-search">
+                     
+                     <xsl:choose>
+                         <xsl:when test="normalize-space(parameters/header) != ''">
+@@ -56,6 +56,14 @@
+                         </xsl:otherwise>
+                     </xsl:choose>
+                     
++                    <xsl:if test="@executed = 'true' and not(parameters/on-same-page = 'true')">
++                        <div class="back">
++                            <a href="{$cms-context}/{@url}">
++                                <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BACK_TO_FORM"/>
++                            </a>
++                        </div>
++                    </xsl:if>                    
++                    
+                     <xsl:if test="not(persons/person) or parameters/on-same-page = 'true'">
+                         <xsl:call-template name="search-form"/>
+                         
+@@ -65,10 +73,10 @@
+                     </xsl:if>
+                     
+                     <xsl:if test="@executed = 'true'">
+-                        <div class="results">
+-                            <a name="results"/>
++                        <a name="nav"/>
+                         
+-                            <h2 class="title"><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_TITLE"/></h2>
++                        <div class="results">
++                            <h2><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_TITLE"/></h2>
+                             
+                             <xsl:choose>
+                                 <xsl:when test="persons/person">
+@@ -101,168 +109,161 @@
+                         </div>
+                     </xsl:if>
+                     
+-                    <xsl:if test="@executed = 'true' and not(parameters/on-same-page = 'true')">
+-                        <a href="{$cms-context}/{@url}">
+-                            <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BACK_TO_FORM"/>
+-                        </a>
+-                    </xsl:if>
+                 </div>
+             </body>
+         </html>
+     </xsl:template>
+     
+     <xsl:template name="search-form">
+-        <div class="search-form">
+         
+-            <form name="search-form" action="{$cms-context}/{@url}#results" method="POST">
+-                <input type="hidden" name="execute-search" value="true"/>
+-                
+-                <xsl:apply-templates select="parameters/search-attributes/attribute" mode="input"/>
+-                
+-                <div class="button">
+-                    <button type="submit" class="search">
+-                        <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_SEARCH_ACTION"/>
+-                    </button>
+-                </div>
+-            </form>
++        <form name="search-form" action="{$cms-context}/{@url}#results" method="POST">
++            <input type="hidden" name="execute-search" value="true"/>
+             
+-        </div>
++            <xsl:apply-templates select="parameters/search-attributes/attribute" mode="input"/>
++            
++            <div class="button">
++                <button type="submit" class="search">
++                    <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_SEARCH_ACTION"/>
++                </button>
++            </div>
++        </form>
++            
+     </xsl:template>
+     
+     <xsl:template name="alpha-search">
+         <xsl:variable name="attribute" select="/search/parameters/search-attributes/attribute[@alpha-search = 'true']/@id"/>
+         
+-        <div class="alpha-search">
++        <div class="results-sort alpha">
+             <h2><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BY_LETTER"/></h2>
+             
+             <form name="alpha-form" action="{$cms-context}/{@url}#results" method="POST">
+-                <ul class="alpha-nav">
+-                     <li class="letter">
++                <ul>
++                     <li>
+                         <input type="submit" name="firstLetter" value="A">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'A'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                         </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                         <input type="submit" name="firstLetter" value="B">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'B'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                         </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                         <input type="submit" name="firstLetter" value="C">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'C'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                         </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                         <input type="submit" name="firstLetter" value="D">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'D'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                         </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                         <input type="submit" name="firstLetter" value="E">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'E'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                         </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="F">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'F'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="G">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'G'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="H">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'H'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="I">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'I'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="J">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'J'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="K">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'K'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="L">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'L'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="M">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'M'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="N">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'N'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="O">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'O'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="P">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'P'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="Q">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Q'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="R">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'R'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="S">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'S'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="T">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'T'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="U">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'U'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="V">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'V'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="W">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'W'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="X">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'X'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="Y">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Y'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+                      </li>
+-                     <li class="letter">
++                     <li>
+                          <input type="submit" name="firstLetter" value="Z">
+                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Z'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
+                          </input>
+@@ -277,7 +278,7 @@
+         <xsl:variable name="fieldId" select="concat(@id, '-', $uniqueId)"/>
+         <div class="field">
+             <div class="label"><label for="{$fieldId}"><xsl:copy-of select="label/i18n:*"/><xsl:text> </xsl:text></label></div>
+-            <div>
++            <div class="input">
+                 <xsl:choose>
+                     <xsl:when test="value">
+                         <select id="{$fieldId}" name="{@name}">
+@@ -293,7 +294,7 @@
+                         </select>
+                     </xsl:when>
+                     <xsl:otherwise>
+-                        <input id="{$fieldId}" type="text" name="{@name}">
++                        <input id="{$fieldId}" type="text" name="{@name}" class="text">
+                             <xsl:if test="not(ancestor::search/@first-letter) or ancestor::search/@first-letter = ''">
+                                 <xsl:attribute name="value"><xsl:value-of select="ancestor::search/values/value[@attribute = $id]/@value"/></xsl:attribute>
+                             </xsl:if>
+Index: webapp/cms/plugins/cms/stylesheets/helper/common.xsl
+===================================================================
+--- webapp/cms/plugins/cms/stylesheets/helper/common.xsl	(revision 8899)
++++ webapp/cms/plugins/cms/stylesheets/helper/common.xsl	(working copy)
+@@ -141,9 +141,7 @@
+ 		
+ 			<input type="hidden" name="{$key-name}" id="{$key-id}" value="{$id}"/>
+ 			
+-			<input type="text" name="{$value-name}" maxlength="6" id="{$value-id}" style="{$value-style}" class="{$value-class}"/>
+-			
+-			<img style="{$image-style}" class="{$image-class}" src="{$contextPath}/plugins/cms/captcha/{$id}/image.png" id="{$image-id}">
++            <img style="{$image-style}" class="{$image-class}" src="{$contextPath}/plugins/cms/captcha/{$id}/image.png" id="{$image-id}">
+                 <xsl:attribute name="alt">
+                     <xsl:if test="$image-alt-i18n and $image-alt-catalogue != ''">
+                         <xsl:value-of select="$image-alt-catalogue"/>
+@@ -151,10 +149,13 @@
+                     </xsl:if>
+                     <xsl:value-of select="$image-alt"/>
+                 </xsl:attribute>
+-				<xsl:if test="$image-alt-i18n"><xsl:attribute name="i18n:attr">alt</xsl:attribute></xsl:if>
+-			</img>
++                <xsl:if test="$image-alt-i18n"><xsl:attribute name="i18n:attr">alt</xsl:attribute></xsl:if>
++            </img>
++            
++            <div class="image-captcha-help"><i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH_NOSCRIPT" i18n:catalogue="plugin.cms"/></div>
++            			
++            <input type="text" name="{$value-name}" maxlength="6" id="{$value-id}" style="{$value-style}" class="{$value-class}"/>
+ 			
+-			<div class="image-captcha-help"><i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH_NOSCRIPT" i18n:catalogue="plugin.cms"/></div>
+ 		</noscript>
+ 		
+ 		<script type="text/javascript">
+Index: webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl
+===================================================================
+--- webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl	(revision 8892)
++++ webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl	(working copy)
+@@ -32,14 +32,13 @@
+ 			</head>
+ 			
+ 			<body>
+-				<div class="tag-cloud-wrapper">
++				<div class="service tags tag-cloud">
+ 				
+ 					<xsl:if test="$service-title != ''">
+ 	        			<h1><xsl:value-of select="$service-title" /></h1>
+ 	        		</xsl:if>
+ 	        	
+-	        		<div class="tag-cloud">
+-	        			
++	        		<div class="innertube">
+ 	        			<xsl:choose>
+ 			        		<xsl:when test="/tagCloud/searchUrl">
+ 			        			<xsl:choose>
+@@ -77,7 +76,7 @@
+ 			        			</xsl:choose>
+ 			        		</xsl:otherwise>
+ 			        	</xsl:choose>
+-			        	<div style="clear: left"></div>
++			        	<div class="bottom"><xsl:comment>empty</xsl:comment></div>
+ 		        	</div>
+ 				</div>
+ 			</body>
+@@ -106,11 +105,10 @@
+ 				</xsl:if>
+ 				
+ 				<input type="hidden" name="tags-1" value="{@tag}"/>
+-					<input type="hidden" name="tags-size" value="1"/>
++				<input type="hidden" name="tags-size" value="1"/>
+ 				<input type="hidden" name="submit-form"/>
+ 				
+ 				<input type="submit" name="submit" value="{text()}" class="tag size{@font-size}" title="{text()} - {frequency}"/>
+-			
+ 			</div>
+ 	</form>
+ 	</xsl:template>
+Index: webapp/cms/plugins/syndication/pages/feed2xhtml.xsl
+===================================================================
+--- webapp/cms/plugins/syndication/pages/feed2xhtml.xsl	(revision 8892)
++++ webapp/cms/plugins/syndication/pages/feed2xhtml.xsl	(working copy)
+@@ -29,14 +29,14 @@
+ 			</head>
+ 			
+ 			<body>
+-				<xsl:if test="$header != ''"><h3><xsl:value-of select="$header"/></h3></xsl:if>
+-			
+-				<div class="feed-wrapper">
++				<div class="service syndication">
+ 					
++                    <xsl:if test="$header != ''"><h1><xsl:value-of select="$header"/></h1></xsl:if>
++                                    
+ 					<xsl:apply-templates select="image"/>
+ 					
+-					<h1><xsl:value-of select="@title"/></h1>
+-					<h2><xsl:value-of select="@description"/></h2>
++					<h2><xsl:value-of select="@title"/></h2>
++					<h3><xsl:value-of select="@description"/></h3>
+ 					
+ 					<!-- 
+ 					<xsl:if test="link">
+@@ -72,7 +72,12 @@
+ 	</xsl:template>
+ 	
+ 	<xsl:template match="entry"> 
+-		<div class="feed-entry">
++		<div>
++             <xsl:attribute name="class">feed-entry
++                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
++                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
++                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>
++            </xsl:attribute>
+ 			
+ 			<!-- Item title -->
+ 			<div class="feed-entry-title">
+Index: webapp/cms/plugins/odf-web/pages/services/search/search.xsl
+===================================================================
+--- webapp/cms/plugins/odf-web/pages/services/search/search.xsl	(revision 8890)
++++ webapp/cms/plugins/odf-web/pages/services/search/search.xsl	(working copy)
+@@ -47,12 +47,10 @@
+ 		<xsl:choose>
+ 			<xsl:when test="hits/hit">
+ 				<xsl:call-template name="hits"/>
+-				
+ 				<xsl:call-template name="pagination"/>
+ 			</xsl:when>
+-			
+ 			<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
+-				<div class="no-result"><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_NO_RESULT"/></div>
++				<p class="no-result"><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_NO_RESULT"/></p>
+ 			</xsl:when>
+ 		</xsl:choose>
+ 	</xsl:template>
+@@ -83,7 +81,7 @@
+ 		 + -->
+ 	<xsl:template name="results-sort">
+ 		<div class="results-sort">
+-			<ul class="sort">
++			<ul>
+ 				<li><span><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_SORT_BY"/></span></li>
+ 				<li>
+ 					<xsl:choose>
+Index: webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl
+===================================================================
+--- webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl	(revision 8889)
++++ webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl	(working copy)
+@@ -45,7 +45,7 @@
+ 		
+ 			<body id="default">
+ 				
+-				<div id="service-search-wrapper">
++				<div class="service service-search service-search-default">
+ 					
+ 					<xsl:choose>
+ 						<xsl:when test="$header != ''"><h1><xsl:value-of select="$header"/></h1></xsl:when>
+@@ -81,11 +81,10 @@
+ 			<!-- Textfield -->
+ 			<div class="field">
+ 				<div class="label"><label for="search-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_KEYWORDS"/></label></div>
+-				<div>
+-					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}"/>
+-					<br/>
++				<div class="input">
++					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}" class="text"/>
+ 					<xsl:if test="/search/illegal-textfield">
+-						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
++						<p class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></p>
+ 					</xsl:if>
+ 				</div>
+ 			</div>
+@@ -94,8 +93,8 @@
+ 			<xsl:if test="/search/form/fields/all-words">
+ 				<div class="field">
+ 					<div class="label"><label for="search-all-words-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_ALL_WORDS"/></label></div>
+-					<div>
+-						<input id="search-all-words-{$uniqueId}" type="text" name="all-words" value="{/search/form/values/all-words}"/>
++					<div class="input">
++						<input id="search-all-words-{$uniqueId}" type="text" name="all-words" value="{/search/form/values/all-words}" class="text"/>
+ 					</div>
+ 				</div>
+ 			</xsl:if>
+@@ -103,8 +102,8 @@
+ 			<xsl:if test="/search/form/fields/exact-wording">
+ 				<div class="field">
+ 					<div class="label"><label for="search-exact-wording-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_EXACT_PHRASE"/></label></div>
+-					<div>
+-						<input id="search-exact-wording-{$uniqueId}" type="text" name="exact-wording" value="{/search/form/values/exact-wording}"/>
++					<div class="input">
++						<input id="search-exact-wording-{$uniqueId}" type="text" name="exact-wording" value="{/search/form/values/exact-wording}" class="text"/>
+ 					</div>
+ 				</div>
+ 			</xsl:if>
+@@ -112,8 +111,8 @@
+ 			<xsl:if test="/search/form/fields/no-words">
+ 				<div class="field">
+ 					<div class="label"><label for="search-no-words-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_ANY_WORDS"/></label></div>
+-					<div>
+-						<input id="search-no-words-{$uniqueId}" type="text" name="no-words" value="{/search/form/values/no-words}"/>
++					<div class="input">
++						<input id="search-no-words-{$uniqueId}" type="text" name="no-words" value="{/search/form/values/no-words}" class="text"/>
+ 					</div>
+ 				</div>
+ 			</xsl:if>
+@@ -122,7 +121,7 @@
+ 				<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
+ 					<div class="field">
+ 						<div class="label"><label for="page-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_PAGES"/></label></div>
+-						<div>
++						<div class="input">
+ 							<select name="pages" id="page-input">
+ 								<option>
+ 									<xsl:attribute name="value">
+@@ -140,57 +139,53 @@
+ 									</option>
+ 								</xsl:for-each>
+ 							</select>
+-							<br/>
+ 						</div>
+ 					</div>
+ 				</xsl:when>
+ 				<xsl:when test="count(/search/form/fields/pages/page) = 1">
+-					<div><input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/></div>
++					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+ 				</xsl:when>
+ 			</xsl:choose>
+ 			
+ 			<xsl:choose>
+-					<xsl:when test="/search/form/fields/content-types-choice = 'list' and count(/search/form/fields/content-types/type) &gt; 1">
+-						<div class="field">
+-						<div class="label"><label for="ctype-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE"/></label></div>
+-						<div>
+-							<select name="content-types" id="ctype-input">
+-								<option>
+-									<xsl:attribute name="value">
+-										<xsl:for-each select="/search/form/fields/content-types/type"><xsl:value-of select="@id"/><xsl:if test="position() != last()">,</xsl:if></xsl:for-each>
+-									</xsl:attribute>
+-									<i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE_ALL_OPTION"/>
+-								</option>
+-								<xsl:for-each select="/search/form/fields/content-types/type">
+-									<xsl:variable name="id" select="@id"/>
+-									<option value="{$id}">
+-										<xsl:if test="/search/form/values/content-type[$id = .]">
+-											<xsl:attribute name="selected">selected</xsl:attribute>
+-										</xsl:if>
+-										<xsl:copy-of select="."/>
+-									</option>
+-								</xsl:for-each>
+-							</select>
+-							<br/>
+-						</div>
+-					</div>
+-					</xsl:when>
+-					<xsl:when test="count(/search/form/fields/content-types/type) = 1">
+-						<div><input type="hidden" name="content-types" value="{/search/form/fields/content-types/type/@id}"/></div>
+-					</xsl:when>
+-					<xsl:when test="/search/form/fields/content-types-choice = 'none' or /search/form/fields/content-types-choice = 'filter'">
+-						<div>
+-							<xsl:for-each select="/search/form/fields/content-types/type">
+-								<input type="hidden" name="content-types" value="{@id}"/>
+-							</xsl:for-each>
+-						</div>
+-					</xsl:when>
++				<xsl:when test="/search/form/fields/content-types-choice = 'list' and count(/search/form/fields/content-types/type) &gt; 1">
++					<div class="field">
++					   <div class="label"><label for="ctype-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE"/></label></div>
++    					<div class="input">
++    						<select name="content-types" id="ctype-input">
++    							<option>
++    								<xsl:attribute name="value">
++    									<xsl:for-each select="/search/form/fields/content-types/type"><xsl:value-of select="@id"/><xsl:if test="position() != last()">,</xsl:if></xsl:for-each>
++    								</xsl:attribute>
++    								<i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE_ALL_OPTION"/>
++    							</option>
++    							<xsl:for-each select="/search/form/fields/content-types/type">
++    								<xsl:variable name="id" select="@id"/>
++    								<option value="{$id}">
++    									<xsl:if test="/search/form/values/content-type[$id = .]">
++    										<xsl:attribute name="selected">selected</xsl:attribute>
++    									</xsl:if>
++    									<xsl:copy-of select="."/>
++    								</option>
++    							</xsl:for-each>
++    						</select>
++    					</div>
++				</div>
++				</xsl:when>
++				<xsl:when test="count(/search/form/fields/content-types/type) = 1">
++					<input type="hidden" name="content-types" value="{/search/form/fields/content-types/type/@id}"/>
++				</xsl:when>
++				<xsl:when test="/search/form/fields/content-types-choice = 'none' or /search/form/fields/content-types-choice = 'filter'">
++					<xsl:for-each select="/search/form/fields/content-types/type">
++						<input type="hidden" name="content-types" value="{@id}"/>
++					</xsl:for-each>
++				</xsl:when>
+ 			</xsl:choose>
+ 			
+ 			<xsl:for-each select="/search/form/fields/tags/category">
+ 				<div class="field">
+ 					<div class="label"><label for="tag-input-{position()}"><xsl:value-of select="title"/></label></div>
+-					<div>
++					<div class="input">
+ 						<select name="tags-{position()}" id="tag-input-{position()}">
+ 							<option>
+ 								<xsl:attribute name="value">
+@@ -208,12 +203,11 @@
+ 								</option>
+ 							</xsl:for-each>
+ 						</select>
+-						<br/>
+ 					</div>
+ 				</div>
+ 			</xsl:for-each>
+ 			<xsl:if test="/search/form/fields/tags/category">
+-				<div><input type="hidden" name="tags-size" value="{count(/search/form/fields/tags/category)}"/></div>
++				<input type="hidden" name="tags-size" value="{count(/search/form/fields/tags/category)}"/>
+ 			</xsl:if>
+ 			
+ 			<xsl:if test="/search/form/fields/multisite"> 
+@@ -221,7 +215,7 @@
+ 			
+ 				<div class="field">
+ 					<div class="label"><label for="sites-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_MULTISITE_CHOICE"/></label></div>
+-					<div>
++					<div class="input">
+ 						<xsl:variable name="select-size">
+ 							<xsl:choose>
+ 								<xsl:when test="count(/search/form/fields/sites/site) &gt; 5">5</xsl:when>
+Index: webapp/cms/plugins/web/pages/services/resources/search.xsl
+===================================================================
+--- webapp/cms/plugins/web/pages/services/resources/search.xsl	(revision 8889)
++++ webapp/cms/plugins/web/pages/services/resources/search.xsl	(working copy)
+@@ -44,12 +44,20 @@
+ 		
+ 			<body id="default">
+ 				
+-				<div id="service-search-wrapper">
++				<div class="service service-search">
+ 					
+ 					<xsl:if test="$header != ''">
+ 						<h1><xsl:value-of select="$header"/></h1>
+ 					</xsl:if>
+ 					
++                    <xsl:if test="hits/hit and $on-same-page != 'true'">
++                        <div class="back">
++                            <a href="{$cms-context}/{url}" title="FRONT_MODULE_SEARCH_BACK_TO_SEARCH_TITLE" i18n:attr="title">
++                                <i18n:text i18n:key="FRONT_MODULE_SEARCH_BACK_TO_SEARCH"/>
++                            </a>
++                        </div>
++                    </xsl:if>                    
++                    
+ 					<form action="{$cms-context}/{/search/url}#nav" method="post" class="search">
+ 						<xsl:choose>
+ 							<xsl:when test="$on-same-page = 'true' or count(hits/hit) = 0">
+@@ -59,9 +67,6 @@
+ 								<xsl:call-template name="form-search-hidden"/>
+ 							</xsl:otherwise>
+ 						</xsl:choose>
+-						<xsl:if test="hits/hit and $on-same-page != 'true'">
+-							<div class="back"><a href="{$cms-context}/{url}" title="FRONT_MODULE_SEARCH_BACK_TO_SEARCH_TITLE" i18n:attr="title"><i18n:text i18n:key="FRONT_MODULE_SEARCH_BACK_TO_SEARCH"/></a></div>
+-						</xsl:if>
+ 							
+ 						<a name="nav"/>
+ 						
+@@ -71,14 +76,12 @@
+ 					</form>	
+ 					
+ 					<xsl:choose>
+-					
+ 						<xsl:when test="hits/hit">
+ 							<xsl:call-template name="hits"/>
+-							
+ 							<xsl:call-template name="pagination"/>
+ 						</xsl:when>
+ 						<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
+-							<div class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></div>
++							<p class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></p>
+ 						</xsl:when>
+ 					</xsl:choose>
+ 					
+@@ -92,27 +95,34 @@
+ 		 | Template for results
+ 		 + -->
+ 	<xsl:template name="hits">
+-		
+-		<dl class="search-hits">
+-							
+-			<xsl:for-each select="/search/hits/hit">
+-				<dt class="hit resource">
+-					<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
+-					<img class="icon" src="{$contextPath}/{icon}" alt=""/>
+-					<a href="{$cms-context}/{uri}" title="{title}"><xsl:value-of select="title"/></a>
+-					<span class="size"> <xsl:value-of select="size"/></span>
+-				</dt>
+-				<dd class="hit resource">	
+-					<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
+-					<xsl:value-of select="excerpt"/>
+-					<xsl:if test="/search/form/values/multisite">
+-						<br/>
+-						<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
+-					</xsl:if>
+-				</dd>
+-			</xsl:for-each>
+-			
+-		</dl>
++		<div class="results">
++            <ul>
++                <xsl:for-each select="/search/hits/hit">
++                    <li>
++                        <xsl:attribute name="class">resource
++                            <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
++                            <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
++                            <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                           
++                        </xsl:attribute>
++                        <div class="service-search-item">
++                            <img class="icon" src="{$contextPath}/{icon}" alt=""/>
++                            <a href="{$cms-context}/{uri}" title="{title}"><xsl:value-of select="title"/></a>
++                            <span class="size"> <xsl:value-of select="size"/></span>
++                        </div>
++                        <xsl:if test="excerpt">
++                            <div class="service-search-excerpt">
++                                <xsl:value-of select="excerpt"/>
++                            </div> 
++                        </xsl:if>
++                        <xsl:if test="/search/form/values/multisite">
++                            <div class="service-search-site">
++                                <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
++                            </div>
++                        </xsl:if>                                                 
++                    </li>
++                </xsl:for-each>
++            </ul>
++        </div>
+ 	</xsl:template>	
+ 	
+ 	<!-- +
+@@ -120,7 +130,7 @@
+ 		 + -->
+ 	<xsl:template name="results-sort">
+ 		<div class="results-sort">
+-			<ul class="sort">
++			<ul>
+ 				<li><span><i18n:text i18n:key="FRONT_MODULE_SEARCH_SORT_BY"/></span></li>
+ 				<li>
+ 					<xsl:choose>
+@@ -152,70 +162,68 @@
+ 		 + -->
+ 	<xsl:template name="pagination">
+ 		<form id="reload" method="post" action="{$cms-context}/{/search/url}#nav" accept-charset="UTF-8">
+-			<div>
+-                <input type="hidden" name="submit-form">
+-                    <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
+-                        <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
+-                    </xsl:if>
+-                </input>
+-                <xsl:if test="/search/zone-item/@id">
+-                    <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
++            <input type="hidden" name="submit-form">
++                <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
++                    <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
+                 </xsl:if>
+-                
+-				<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
+-				<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
+-				<input type="hidden" name="start" value="{/search/form/values/start}"/>
+-				
+-				<!-- Creator -->
+-				<xsl:for-each select="/search/form/values/creator">
+-					<input type="hidden" name="dc_creator" value="{.}"/>
+-				</xsl:for-each>
+-		
+-				<!-- Format -->
+-				<xsl:for-each select="/search/form/values/format">
+-					<input type="hidden" name="dc_format" value="{.}"/>
+-				</xsl:for-each>
+-						
+-				<!-- Publisher -->
+-				<xsl:for-each select="/search/form/values/publisher">
+-					<input type="hidden" name="dc_publisher" value="{.}"/>
+-				</xsl:for-each>
+-				
+-				<!-- Rights -->
+-				<xsl:for-each select="/search/form/values/rights">
+-					<input type="hidden" name="dc_rights" value="{.}"/>
+-				</xsl:for-each>
+-		
+-				<!-- Page(s) -->
+-				<xsl:choose>
+-					<xsl:when test="count(/search/form/fields/pages/page) &gt;= 1">
+-						<xsl:for-each select="/search/form/values/page">
+-							<input type="hidden" name="pages" value="{.}"/>
+-						</xsl:for-each>
+-					</xsl:when>
+-					<xsl:when test="count(/search/form/fields/pages/page) = 1">
+-						<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+-					</xsl:when>
+-				</xsl:choose>
+-		
+-				<xsl:if test="/search/form/values/multisite">
+-					<input type="hidden" name="multisite" value="true"/>
+-					<xsl:for-each select="/search/form/values/site">
+-						<input type="hidden" name="sites" value="{.}"/>
++            </input>
++            <xsl:if test="/search/zone-item/@id">
++                <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
++            </xsl:if>
++            
++			<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
++			<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
++			<input type="hidden" name="start" value="{/search/form/values/start}"/>
++			
++			<!-- Creator -->
++			<xsl:for-each select="/search/form/values/creator">
++				<input type="hidden" name="dc_creator" value="{.}"/>
++			</xsl:for-each>
++	
++			<!-- Format -->
++			<xsl:for-each select="/search/form/values/format">
++				<input type="hidden" name="dc_format" value="{.}"/>
++			</xsl:for-each>
++					
++			<!-- Publisher -->
++			<xsl:for-each select="/search/form/values/publisher">
++				<input type="hidden" name="dc_publisher" value="{.}"/>
++			</xsl:for-each>
++			
++			<!-- Rights -->
++			<xsl:for-each select="/search/form/values/rights">
++				<input type="hidden" name="dc_rights" value="{.}"/>
++			</xsl:for-each>
++	
++			<!-- Page(s) -->
++			<xsl:choose>
++				<xsl:when test="count(/search/form/fields/pages/page) &gt;= 1">
++					<xsl:for-each select="/search/form/values/page">
++						<input type="hidden" name="pages" value="{.}"/>
+ 					</xsl:for-each>
+-				</xsl:if>
+-				
+-				<xsl:choose>
+-					<xsl:when test="/search/sort-by-title-for-sorting">
+-						<input type="hidden" name="sort-by-title-for-sorting"/>
+-					</xsl:when>
+-					<xsl:when test="/search/sort-by-date">
+-						<input type="hidden" name="sort-by-date"/>
+-					</xsl:when>
+-					<xsl:otherwise>
+-					</xsl:otherwise>
+-				</xsl:choose>
+-			</div>
++				</xsl:when>
++				<xsl:when test="count(/search/form/fields/pages/page) = 1">
++					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
++				</xsl:when>
++			</xsl:choose>
++	
++			<xsl:if test="/search/form/values/multisite">
++				<input type="hidden" name="multisite" value="true"/>
++				<xsl:for-each select="/search/form/values/site">
++					<input type="hidden" name="sites" value="{.}"/>
++				</xsl:for-each>
++			</xsl:if>
++			
++			<xsl:choose>
++				<xsl:when test="/search/sort-by-title-for-sorting">
++					<input type="hidden" name="sort-by-title-for-sorting"/>
++				</xsl:when>
++				<xsl:when test="/search/sort-by-date">
++					<input type="hidden" name="sort-by-date"/>
++				</xsl:when>
++				<xsl:otherwise>
++				</xsl:otherwise>
++			</xsl:choose>
+ 			
+ 			<div class="pagination">
+ 				
+@@ -358,7 +366,6 @@
+ 				<div class="label"><label for="search-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_KEYWORDS"/></label></div>
+ 				<div>
+ 					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}"/>
+-					<br/>
+ 					<xsl:if test="/search/illegal-textfield">
+ 						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
+ 					</xsl:if>
+@@ -388,12 +395,11 @@
+ 									</option>
+ 								</xsl:for-each>
+ 							</select>
+-							<br/>
+ 						</div>
+ 					</div>
+ 				</xsl:when>
+ 				<xsl:when test="count(/search/form/fields/pages/page) = 1">
+-					<div><input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/></div>
++					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+ 				</xsl:when>
+ 			</xsl:choose>
+ 			
+@@ -403,7 +409,6 @@
+ 				<div class="label"><label for="creator-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CREATOR"/></label></div>
+ 				<div>
+ 					<input id="creator-input-{$uniqueId}" type="text" name="dc_creator" value="{/search/form/values/creator}"/>
+-					<br/>
+ 					<xsl:if test="/search/illegal-textfield">
+ 						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
+ 					</xsl:if>
+@@ -428,7 +433,6 @@
+ 								</option>
+ 							</xsl:for-each>
+ 						</select>
+-						<br/>
+ 					</div>
+ 				</div>
+ 			</xsl:if>
+@@ -472,7 +476,6 @@
+ 								</option>
+ 							</xsl:for-each>
+ 						</select>
+-						<br/>
+ 					</div>
+ 				</div>
+ 			</xsl:if>
+Index: webapp/cms/plugins/web/pages/services/search/search.xsl
+===================================================================
+--- webapp/cms/plugins/web/pages/services/search/search.xsl	(revision 8889)
++++ webapp/cms/plugins/web/pages/services/search/search.xsl	(working copy)
+@@ -56,7 +56,7 @@
+ 				<xsl:call-template name="pagination"/>
+ 			</xsl:when>
+ 			<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
+-				<div class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></div>
++				<p class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></p>
+ 			</xsl:when>
+ 		</xsl:choose>
+ 	</xsl:template>
+@@ -90,30 +90,42 @@
+ 		 + -->
+ 	<xsl:template name="hits">
+ 		
+-		<dl class="search-hits">
++		<ul>
+ 							
+ 			<xsl:for-each select="/search/hits/hit|/search/content-types/*[@current = 'true']/hits/hit">
+ 			
+ 				<xsl:choose>
+ 					<xsl:when test="type = 'resource'"> 
+-						<dt class="hit resource">
+-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
+-							<img class="icon" src="{$contextPath}/{icon}" alt=""/>
+-							<a href="{$cms-context}/{uri}.html" title="{title}"><xsl:value-of select="title"/></a>
+-							<span class="size"> (<xsl:value-of select="size"/>)</span>
+-						</dt>
+-						<dd class="hit resource">	
+-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
+-							<xsl:value-of select="excerpt"/>
+-							<xsl:if test="/search/form/values/multisite">
+-								<br/>
+-								<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
+-							</xsl:if>
+-						</dd>
++						<li>
++                            <xsl:attribute name="class">hit resource
++                                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
++                                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
++                                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                           
++                            </xsl:attribute>                        
++							<div class="service-search-item">
++                                <img class="icon" src="{$contextPath}/{icon}" alt=""/>
++    							<a href="{$cms-context}/{uri}.html" title="{title}"><xsl:value-of select="title"/></a>
++    							<span class="size"> (<xsl:value-of select="size"/>)</span>
++                            </div>
++                            <xsl:if test="excerpt">
++                                <div class="service-search-excerpt">
++                                    <xsl:value-of select="excerpt"/>
++                                </div> 
++                            </xsl:if>                            
++                            <xsl:if test="/search/form/values/multisite">
++                                <div class="service-search-site">
++                                    <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
++                                </div>
++                            </xsl:if>
++						</li>
+ 					</xsl:when>
+ 					<xsl:otherwise>
+-						<dt class="hit page">
+-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit page even</xsl:attribute></xsl:if>
++						<li>
++                            <xsl:attribute name="class">hit page
++                                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
++                                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
++                                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                        
++                            </xsl:attribute>
+ 							<a title="{title}">
+                                 <xsl:attribute name="href">
+                                     <xsl:value-of select="$cms-context"/>
+@@ -142,22 +154,23 @@
+                                 </xsl:attribute>
+                                 <xsl:value-of select="title"/>
+                             </a>
+-						</dt>
+-						<dd class="hit page">	
+-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit page even</xsl:attribute></xsl:if>
+-							<xsl:value-of select="excerpt"/>
+-							
+-							<xsl:if test="/search/form/values/multisite">
+-								<br/>
+-								<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
+-							</xsl:if>
+-						</dd>
++                            <xsl:if test="excerpt">
++                                <div class="service-search-excerpt">
++                                    <xsl:value-of select="excerpt"/>
++                                </div> 
++                            </xsl:if>
++                            <xsl:if test="/search/form/values/multisite">
++                                <div class="service-search-site">
++                                    <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
++                                </div>
++                            </xsl:if>
++						</li>
+ 					</xsl:otherwise>
+ 				</xsl:choose>
+ 				
+ 			</xsl:for-each>
+ 			
+-		</dl>
++		</ul>
+ 	</xsl:template>	
+ 	
+ 	<!-- +
+@@ -165,7 +178,7 @@
+ 		 + -->
+ 	<xsl:template name="results-sort">
+ 		<div class="results-sort">
+-			<ul class="sort">
++			<ul>
+ 				<li><span><i18n:text i18n:key="FRONT_MODULE_SEARCH_SORT_BY"/></span></li>
+ 				<li>
+ 					<xsl:choose>
+@@ -197,7 +210,6 @@
+ 						</xsl:otherwise>
+ 					</xsl:choose>
+ 				</li>
+-				
+ 			</ul>
+ 		</div>
+ 	</xsl:template>
+@@ -208,75 +220,73 @@
+ 		 + -->
+ 	<xsl:template name="pagination">
+ 		<form id="reload" method="post" action="{$cms-context}/{/search/url}#nav" accept-charset="UTF-8">
+-			<div>
+-                <input type="hidden" name="submit-form">
+-                    <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
+-                        <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
+-                    </xsl:if>
+-                </input>
+-                <xsl:if test="/search/zone-item/@id">
+-                    <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
++            <input type="hidden" name="submit-form">
++                <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
++                    <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
+                 </xsl:if>
+-                
+-				<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
+-				
+-				<!-- All words -->
+-				<xsl:if test="/search/form/fields/all-words">
+-					<input type="hidden" name="all-words" value="{/search/form/values/all-words}"/>
+-				</xsl:if>
+-				
+-				<!-- Exact wording or phrase -->
+-				<xsl:if test="/search/form/fields/exact-wording">
+-					<input type="hidden" name="exact-wording" value="{/search/form/values/exact-wording}"/>
+-				</xsl:if>
+-				
+-				<!-- No words -->
+-				<xsl:if test="/search/form/fields/no-words">
+-					<input type="hidden" name="no-words" value="{/search/form/values/no-words}"/>
+-				</xsl:if>
++            </input>
++            <xsl:if test="/search/zone-item/@id">
++                <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
++            </xsl:if>
++            
++			<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
+ 			
+-				<!-- Page(s) -->
+-				<xsl:choose>
+-					<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
+-						<xsl:for-each select="/search/form/values/page">
+-							<input type="hidden" name="pages" value="{.}"/>
+-						</xsl:for-each>
+-					</xsl:when>
+-					<xsl:when test="count(/search/form/fields/pages/page) = 1">
+-						<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+-					</xsl:when>
+-				</xsl:choose>
++			<!-- All words -->
++			<xsl:if test="/search/form/fields/all-words">
++				<input type="hidden" name="all-words" value="{/search/form/values/all-words}"/>
++			</xsl:if>
++			
++			<!-- Exact wording or phrase -->
++			<xsl:if test="/search/form/fields/exact-wording">
++				<input type="hidden" name="exact-wording" value="{/search/form/values/exact-wording}"/>
++			</xsl:if>
++			
++			<!-- No words -->
++			<xsl:if test="/search/form/fields/no-words">
++				<input type="hidden" name="no-words" value="{/search/form/values/no-words}"/>
++			</xsl:if>
+ 		
+-				<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
+-				<input type="hidden" name="start" value="{/search/form/values/start}"/>
+-				<xsl:for-each select="/search/form/values/content-type">
+-					<input type="hidden" name="content-types" value="{.}"/>
+-				</xsl:for-each>
+-				<xsl:for-each select="/search/form/values/tag">
+-					<input type="hidden" name="tags" value="{.}"/>
+-				</xsl:for-each>
+-				<xsl:if test="/search/form/values/multisite">
+-					<input type="hidden" name="multisite" value="true"/>
+-					<xsl:for-each select="/search/form/values/site">
+-						<input type="hidden" name="sites" value="{.}"/>
++			<!-- Page(s) -->
++			<xsl:choose>
++				<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
++					<xsl:for-each select="/search/form/values/page">
++						<input type="hidden" name="pages" value="{.}"/>
+ 					</xsl:for-each>
+-				</xsl:if>
+-				
+-				<xsl:for-each select="/search/content-types/*[@current = 'true']">
+-					<input type="hidden" name="current-ctype-filter" value="{local-name()}"/>
++				</xsl:when>
++				<xsl:when test="count(/search/form/fields/pages/page) = 1">
++					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
++				</xsl:when>
++			</xsl:choose>
++	
++			<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
++			<input type="hidden" name="start" value="{/search/form/values/start}"/>
++			<xsl:for-each select="/search/form/values/content-type">
++				<input type="hidden" name="content-types" value="{.}"/>
++			</xsl:for-each>
++			<xsl:for-each select="/search/form/values/tag">
++				<input type="hidden" name="tags" value="{.}"/>
++			</xsl:for-each>
++			<xsl:if test="/search/form/values/multisite">
++				<input type="hidden" name="multisite" value="true"/>
++				<xsl:for-each select="/search/form/values/site">
++					<input type="hidden" name="sites" value="{.}"/>
+ 				</xsl:for-each>
+-				
+-				<xsl:choose>
+-					<xsl:when test="/search//sort-by-title-for-sorting">
+-						<input type="hidden" name="sort-by-title-for-sorting"/>
+-					</xsl:when>
+-					<xsl:when test="/search//sort-by-last-validation">
+-						<input type="hidden" name="sort-by-last-validation"/>
+-					</xsl:when>
+-					<xsl:otherwise>
+-					</xsl:otherwise>
+-				</xsl:choose>
+-			</div>
++			</xsl:if>
++			
++			<xsl:for-each select="/search/content-types/*[@current = 'true']">
++				<input type="hidden" name="current-ctype-filter" value="{local-name()}"/>
++			</xsl:for-each>
++			
++			<xsl:choose>
++				<xsl:when test="/search//sort-by-title-for-sorting">
++					<input type="hidden" name="sort-by-title-for-sorting"/>
++				</xsl:when>
++				<xsl:when test="/search//sort-by-last-validation">
++					<input type="hidden" name="sort-by-last-validation"/>
++				</xsl:when>
++				<xsl:otherwise>
++				</xsl:otherwise>
++			</xsl:choose>
+ 			
+ 			<div class="pagination">
+ 				
Index: webapp/cms/WEB-INF/param/workflow-person.xml
===================================================================
--- webapp/cms/WEB-INF/param/workflow-person.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/workflow-person.xml	(revision 0)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+	<initial-actions>
+		<action id="1" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreatePersonFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</initial-actions>
+	
+	<!-- +
+	     | GLOBAL ACTIONS
+	     + -->
+	<global-actions>
+		<action id="5" name="plugin.web:WORKFLOW_ACTION_DELETE" finish="TRUE">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+						<arg name="right">Workflow_Rights_Delete</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.DeleteContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="4" />
+			</results>
+		</action>
+	</global-actions>
+	
+	<!-- +
+	     | COMMON ACTIONS
+	     + -->
+	<common-actions>
+		<action id="2" name="plugin.web:WORKFLOW_ACTION_EDIT">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+						<arg name="right">Workflow_Rights_Edition_Online</arg>
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.EditODFContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</common-actions>
+	<steps>
+		<step id="1" name="plugin.web:WORKFLOW_STATE_DRAFT">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<action id="4" name="plugin.web:WORKFLOW_ACTION_VALIDATE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+								<arg name="right">Workflow_Rights_Validate</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="3" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="3" name="plugin.web:WORKFLOW_STATE_VALIDATED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+			</actions>
+            <post-functions>
+                <function type="avalon">
+                    <arg name="role">org.ametys.web.workflow.ValidationStepFunction</arg>
+                </function>
+            </post-functions>
+		</step>
+		<step id="4" name="plugin.web:WORKFLOW_STATE_FINISHED" />
+	</steps>
+</workflow>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/apogee/degrees_conversion.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/degrees_conversion.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/degrees_conversion.xml	(revision 0)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+ <!--+
+     + Correspondance Apogee - CDM pour les Types de diplomes
+     +  table apogee_typ_diplome - colonne COD_TPD_ETB
+     +  -> correspondance avec les codes du fichier : constantes_cdmfr/degrees.xml
+     + -->
+<degrees>
+<degree code="C2i">C2i</degree>
+<degree code="D">D</degree>
+<degree code="DES">DES</degree>
+<degree code="DESC">DESC</degree>
+<degree code="DU">DU</degree>
+<degree code="L">L</degree>
+<degree code="LP">LP</degree>
+<degree code="M">M</degree>
+<degree code="S">S</degree>
+<degree code="SC">SC</degree>
+<degree code="SDU">SDU</degree>
+<degree code="SETR">SETR</degree>
+<degree code="SLM">SLM</degree>
+<degree code="SODO">SODO</degree>
+<degree code="SP">SP</degree>
+<degree code="SPHA">SPHA</degree>
+<degree code="XX">XX</degree>
+<degree code="INC">INC</degree>
+
+</degrees>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/apogee/disciplines_conversion.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/disciplines_conversion.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/disciplines_conversion.xml	(revision 0)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!--
+	Correspondance Apogee - CDM pour les disciplines (pour les Program)
+	table diplome colonne COD_SDS
+	-> correspondance avec les codes du fichier : constantes_cdmfr/domain-discipline.xml
+	select distinct a.cod_sds, a.lib_sds from SEC_DIS_SIS a, diplome d where a.cod_sds=d.cod_sds;
+	--> 
+<disciplines>
+
+	<!-- Droit, Économie et Gestion -->
+	<discipline code='0001.1'>DRT.1</discipline>    <!--Histoire-->
+	<discipline code='0001.2'>DRT.2</discipline>    <!--Droit public-->
+	<discipline code='0001.3'>DRT.3</discipline>    <!--Science politique-->
+	<discipline code='0001.4'>DRT.4</discipline>    <!--Economie-->
+	<discipline code='0001.5'>DRT.5</discipline>    <!--Gestion et management-->
+
+	<!-- Lettres et Sciences Humaines -->
+	<discipline code='0002.1'>LET.1</discipline>    <!--Archéologie, ethnologie, préhistoire-->
+	<discipline code='0002.2'>LET.2</discipline>    <!--Psychologie-->
+	<discipline code='0002.3'>LET.3</discipline>    <!--Sciences de l'éducation-->
+	<discipline code='0002.4'>LET.4</discipline>    <!--Social -->
+	<discipline code='0002.5'>LET.5</discipline>    <!--Sociologie, démographie-->
+    <discipline code='0002.6'>LET.6</discipline>    <!--Information et communication-->
+  
+	<!-- Santé/paramédical -->
+	<discipline code='0003.1'>MED.1</discipline>    <!--Études médicales, odontologiques et sage femme-->
+	<discipline code='0003.2'>MED.2</discipline>    <!--Sciences du médicament, pharmacie-->
+	<discipline code='0003.3'>MED.3</discipline>    <!--Études paramédicales-->
+	<discipline code='0003.4'>MED.4</discipline>    <!--Santé publique -->
+	<discipline code='0003.5'>MED.5</discipline>    <!--Thermalisme--> 
+	<discipline code='0003.6'>MED.6</discipline>    <!--Spécialités médicales pour étrangers -->  
+	<discipline code='0003.7'>MED.7</discipline>    <!--Spécialités médicales -->    
+
+ 	<!-- Sciences et Technologies -->
+	<discipline code='0004.1'>SCT.1</discipline>    <!--Mathématiques-->
+	<discipline code='0004.2'>SCT.2</discipline>    <!--Chimie-->
+	<discipline code='0004.3'>SCT.3</discipline>    <!--Physique-->
+	<discipline code='0004.5'>SCT.5</discipline>    <!--Biologie-->
+	<discipline code='0004.6'>SCT.6</discipline>    <!--Sciences de l'ingénieur-->
+	<discipline code='0004.7'>SCT.7</discipline>    <!--Sciences du sport-->
+	<discipline code='0004.10'>SCT.10</discipline>    <!--Informatique-->
+	<discipline code='0004.11'>SCT.11</discipline>    <!--Sciences agronomiques-->
+	<discipline code='0004.12'>SCT.12</discipline>    <!--Sciences pour l'alimentation -->
+	<discipline code='0004.13'>SCT.13</discipline>    <!--Oenologie -->
+	
+	<!-- Education et formation -->
+	<discipline code='0005.1'>EDU.1</discipline>    <!--Education et formation-->
+	
+</disciplines>
+
+
Index: webapp/cms/WEB-INF/param/odf/apogee/educationTypes_conversion.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/educationTypes_conversion.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/educationTypes_conversion.xml	(revision 0)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+    <!--+
+	+ Correspondance Apogee - CDM pour la Natude la formation
+	+
+	+  table  diplome - colonne COD_NDI
+	+  -> correspondance avec les codes du fichier : constantes_cdmfr/educationTypes.xml
+	+ -->
+<educationTypes>
+	<!-- Diplôme national de l'Ens Sup. -->
+	<educationType code="1">ET1</educationType>
+	<!-- Diplôme d'université homologué -->
+	<educationType code="2">ET2</educationType>
+	<!-- Diplôme d'université non homologué -->
+	<educationType code="3">ET2</educationType>
+	<!-- Préparation aux concours -->
+	<educationType code="4">ET3</educationType>
+	<!-- Certificat -->
+	<educationType code="CE">ET4</educationType>
+
+	<!-- Auditeur libre
+	<educationType code="5">ET5</educationType>
+         -->
+	<!-- Conventions
+	<educationType code="6">ET5</educationType>
+         -->
+	<!-- Attestations
+	<educationType code="AT">ET5</educationType>
+        -->
+	<!-- Certificat
+	<educationType code="CE">ET4</educationType>
+        -->
+	<!-- Autres
+	<educationType code="AU">ET5</educationType>
+        -->
+</educationTypes>
Index: webapp/cms/WEB-INF/param/odf/apogee/educationalElements.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/educationalElements.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/educationalElements.xml	(revision 0)
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<sqlMap namespace="EducationalElements">
+	<!-- Element pédagogique -->
+    <resultMap class="org.ametys.odf.apogee.course.CourseResultItem" id="educationalElement">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<!-- Type d'element pedagogique : ue, ecue...  -->
+  		<result property="nelCode" column="COD_NEL"/>
+  		<!-- Libelle element pedagogique -->
+  		<result property="title" column="LIB_ELP"/>
+  		<!-- Code periode -->
+  		<result property="pelCode" column="COD_PEL"/>
+  		<!-- Code composante -->
+		<result property="cmpCode" column="COD_CMP"/>
+		<!-- Lieu d'enseignement -->
+		<result property="libLieElp" column="LIB_LIE_ELP"/>
+		<!-- Enseignement a distance -->
+		<result property="isDistant" column="TEM_A_DIS_ELP"/>
+		<!-- Nombre credits -->
+		<result property="crdElp" column="NBR_CRD_ELP"/>
+		<!-- Volume horaire -->
+		<result property="nbrVolElp" column="NBR_VOL_ELP"/>
+		<!-- Code volume horaire -->
+		<result property="volElpCode" column="COD_VOL_ELP"/>
+		<!-- Nombre d'heures CM -->
+		<result property="nbrVolCM" column="NBR_HEU_CM_ELP"/>
+		<!-- Nombre d'heures TD -->
+		<result property="nbrVolTD" column="NBR_HEU_TD_ELP"/>
+		<!-- Nombre d'heures TP -->
+		<result property="nbrVolTP" column="NBR_HEU_TP_ELP"/>
+		<!-- Capacite max etudiants -->
+		<result property="studentNbrMax" column="CAP_MAX_ELP"/>
+  	</resultMap>
+
+  	
+  	<!-- Element pédagogique : données partielles -->
+    <resultMap class="org.ametys.odf.apogee.course.CourseResultItem" id="educationalElementSearchItem">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<result property="nelCode" column="COD_NEL"/>
+  		<result property="title" column="LIB_ELP"/>
+  	</resultMap>
+
+	
+	<!-- Element pédagogique : Container -->
+    <resultMap class="org.ametys.odf.apogee.program.ContainerResultItem" id="educationalElementContainer">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<result property="nelCode" column="COD_NEL"/>
+  		<result property="title" column="LIB_ELP"/>
+  	</resultMap>
+  		
+	<!-- Element pédagogique : données partielles Container -->
+    <resultMap class="org.ametys.odf.apogee.program.ContainerResultItem" id="educationalElementSearchContainer">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<result property="nelCode" column="COD_NEL"/>
+  		<result property="title" column="LIB_ELP"/>
+  	</resultMap>
+  	
+  	
+  	<!-- Liste d'Elements pédagogiques -->
+    <resultMap class="org.ametys.odf.apogee.course.CourseListResultItem" id="courseList">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<result property="lseCode" column="COD_LSE"/>
+  		<!-- Nombre choix max -->
+  		<result property="maxMandatory" column="NBR_MAX_ELP_OBL_CHX"/>
+  		<!-- Nombre choix min -->
+  		<result property="minMandatory" column="NBR_MIN_ELP_OBL_CHX"/>
+  		<!-- Libelle liste -->
+  		<result property="title" column="LIB_LSE"/>
+  		<!-- Type de liste : obligatoire ou a choix -->
+  		<result property="typLseCode" column="COD_TYP_LSE"/>
+  	</resultMap>
+  	
+  	
+  	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée par le moteur de recherche
+ 		+   des élements pédagogiques
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   #type# : Type d'élement
+ 		+   #code# : Code ELP
+ 		+   #title# : Libellé de l'élement
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   Aucun
+ 		+ 
+		+ Retourne:
+		+   Liste des Elements pédagogique de type UE, UELA, ECUE, ECLA...
+		+ 		
+ 		+-->
+	<select id="searchEducationalElements" parameterClass="java.util.Map" resultMap="educationalElementSearchItem">
+		SELECT elp.COD_ELP, elp.COD_NEL, elp.LIB_ELP
+			FROM element_pedagogi elp
+		WHERE elp.ETA_ELP='O'
+			AND elp.TEM_SUS_ELP='N'
+			<isPropertyAvailable prepend="and" property="type">
+				upper(elp.COD_NEL) LIKE CONCAT(upper(#type#), '%')
+			</isPropertyAvailable>
+			<isPropertyAvailable prepend="and" property="code">
+					upper(elp.COD_ELP) LIKE CONCAT(upper(#code#), '%')
+			</isPropertyAvailable>
+			<isPropertyAvailable prepend="and" property="title">
+					upper(elp.LIB_ELP) LIKE '%' || upper(#title#) || '%'
+			</isPropertyAvailable>
+		ORDER BY elp.COD_ELP
+	</select>
+	
+  	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée par le moteur de recherche
+ 		+   des containers
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   #type# : Type d'élement
+ 		+   #code# : Code ELP
+ 		+   #title# : Libellé de l'élement
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   Aucun
+ 		+ 
+		+ Retourne:
+		+   Liste des Elements pédagogique de type SEM,...
+		+ 		
+ 		+-->
+	<select id="searchEducationalElementsContainers" parameterClass="java.util.Map" resultMap="educationalElementSearchContainer">
+		SELECT elp.COD_ELP, elp.COD_NEL, elp.LIB_ELP
+			FROM element_pedagogi elp
+		WHERE elp.ETA_ELP='O'
+			AND elp.TEM_SUS_ELP='N'
+			<isPropertyAvailable prepend="and" property="type">
+				upper(elp.COD_NEL) LIKE CONCAT(upper(#type#), '%')
+			</isPropertyAvailable>
+			<isPropertyAvailable prepend="and" property="code">
+					upper(elp.COD_ELP) LIKE CONCAT(upper(#code#), '%')
+			</isPropertyAvailable>
+			<isPropertyAvailable prepend="and" property="title">
+					upper(elp.LIB_ELP) LIKE '%' || upper(#title#) || '%'
+			</isPropertyAvailable>
+		ORDER BY elp.COD_ELP
+	</select>
+		
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée pour importer un élément, après sélection
+ 		+   dans la liste des résultats
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #year# : Année administrative définie en paramètre dans _admin
+		+   #elpCode# : code ELP
+ 		+ 
+		+ Retourne:
+		+   Récupère un Element pédagogique
+		+   bx2 à voir elp.lib_cmt_elp à mettre dans le descriptif et rapatrier les enseignants responsables
+        + actuellement les charges ens ne sont pas renseignée à voir avec la nouvelle habilitation		
+ 		+-->
+	<select id="getEducationalElement" parameterClass="java.util.Map" resultMap="educationalElement">
+		SELECT DISTINCT(elp.COD_ELP), elp.COD_NEL, elp.LIB_ELP, elp.LIB_CMT_ELP, elp.COD_PEL,
+			   elp.LIB_LIE_ELP, elp.TEM_A_DIS_ELP, elp.NBR_CRD_ELP, 
+			   elp.NBR_VOL_ELP, elp.COD_VOL_ELP, charge.NBR_HEU_CM_ELP, charge.NBR_HEU_TD_ELP, charge.NBR_HEU_TP_ELP,
+			   elp.COD_CMP, elp.CAP_MAX_ELP
+		FROM element_pedagogi elp, elp_charge_ens charge
+		WHERE elp.COD_ELP=charge.COD_ELP(+)
+		AND (charge.COD_ANU IS NULL OR charge.COD_ANU=#year#)
+		AND upper(elp.COD_ELP)=upper(#elpCode#)
+		AND elp.ETA_ELP='O'
+		AND elp.TEM_SUS_ELP='N'
+	</select>
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée pour importer un container, après sélection
+ 		+   dans la liste des résultats
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #elpCode# : code ELP
+ 		+ 
+		+ Retourne:
+		+   Récupère un Container
+		+ 		
+ 		+-->
+	<select id="getContainer" parameterClass="java.util.Map" resultMap="educationalElementContainer">
+		SELECT elp.COD_ELP, elp.COD_NEL, elp.LIB_ELP
+		FROM element_pedagogi elp
+		WHERE upper(elp.COD_ELP)=upper(#elpCode#)
+		AND elp.ETA_ELP='O'
+		AND elp.TEM_SUS_ELP='N'
+	</select>
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée pour remonter
+ 		+   la liste des élements fils de l'élement courant
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #elpCode# : code ELP
+ 		+ 
+		+ Retourne:
+		+   Récupère le code de la liste d'element si elle existe
+		+ 		
+ 		+-->
+	<select id="hasChildren" parameterClass="java.lang.String" resultClass="java.lang.String">
+		select COD_LSE
+		FROM elp_regroupe_lse
+		WHERE upper(COD_ELP)=upper(#elpCode#)
+		AND (DAT_FRM_REL_LSE_ELP IS NULL OR DAT_FRM_REL_LSE_ELP &gt;= sysdate)
+	</select>	
+
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée pour remonter
+ 		+   les informations d'une liste d'élements
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #elpCode# : code ELP
+		+   #lseCode# : Code LSE
+ 		+ 
+		+ Retourne:
+		+   Récupère les infos sur une liste d'éléments pédagogiques
+		+ 		
+ 		+-->
+	<select id="getCourseList" parameterClass="java.util.Map" resultMap="courseList">
+		select  elp_lse.COD_ELP, elp_lse.COD_LSE, 
+			    elp_lse.NBR_MAX_ELP_OBL_CHX, elp_lse.NBR_MIN_ELP_OBL_CHX, 
+			    lse.COD_TYP_LSE, lse.LIB_LSE
+		FROM elp_regroupe_lse elp_lse,
+			 liste_elp lse 
+		WHERE elp_lse.COD_LSE=lse.COD_LSE(+)
+		AND upper(elp_lse.COD_ELP)=upper(#elpCode#)
+		AND upper(elp_lse.COD_LSE)=upper(#lseCode#)
+	</select>	
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée pour remonter
+ 		+   la liste des fils d'une liste d'éléments pédagogiques
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #lseCode# : Code LSE
+ 		+ 
+		+ Retourne:
+		+   Récupère la liste des fils d'une liste d'éléments pédagogiques
+		+ 		
+ 		+-->
+    <!--+        
+ 		+	Récupère la liste des fils d'une liste d'éléments pédagogiques
+ 		+-->
+	<select id="getCourseListChildren" parameterClass="java.lang.String" resultClass="java.lang.String">
+		SELECT DISTINCT(elp.COD_ELP)
+		FROM lse_regroupe_elp lse_elp, element_pedagogi elp
+		WHERE lse_elp.COD_ELP=elp.COD_ELP(+)
+		AND elp.ETA_ELP='O'
+		AND elp.TEM_SUS_ELP='N'
+		AND upper(lse_elp.COD_LSE)=upper(#lseCode#)	
+		ORDER BY elp.COD_ELP
+	</select>	
+	
+
+</sqlMap>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/apogee/levels_conversion.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/levels_conversion.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/levels_conversion.xml	(revision 0)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+    <!--+
+	+ Correspondance Apogee - CDM pour les Niveau d'etude
+	+
+	+  table  typ_diplome - colonne COD_NIF
+	+  -> correspondance avec les codes du fichier : constantes_cdmfr/levels.xml
+	+ -->
+<levels>
+    <level code="0">baccalaureat</level>
+	<level code="1">licence1</level>
+	<level code="2">licence2</level>
+	<level code="3">licence3</level>
+	<level code="4">master1</level>
+	<level code="5">master2</level>
+	<level code="6">doctorat</level>
+</levels>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/apogee/orgUnits.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/orgUnits.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/orgUnits.xml	(revision 0)
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<sqlMap namespace="OrgUnits">
+
+  	<resultMap class="org.ametys.odf.apogee.orgunit.OrgUnitResultItem" id="orgUnit">
+		<result property="codCmp" column="COD_CMP"/>
+		<result property="codRneCmp" column="COD_RNE_CMP"/>
+		<result property="lib1Cmp" column="LIB1_CMP"/>
+		<result property="lib2Cmp" column="LIB2_CMP"/>
+		<result property="codTpc" column="COD_TPC"/>
+		<result property="libTpc" column="LIB_TPC"/>
+		<result property="codSis" column="COD_SIS"/>
+		<result property="acronym" column="LIC_CMP"/>
+	</resultMap>
+	
+	<resultMap class="org.ametys.odf.apogee.orgunit.OrgUnitResultItem" id="orgUnitSearchItem">
+		<result property="codCmp" column="COD_CMP"/>
+		<result property="codRneCmp" column="COD_RNE_CMP"/>
+		<result property="lib1Cmp" column="LIB1_CMP"/>
+		<result property="lib2Cmp" column="LIB2_CMP"/>
+		<result property="codTpc" column="COD_TPC"/>
+	</resultMap>
+	
+	<resultMap class="org.ametys.odf.apogee.orgunit.OrgUnitResultItem" id="associatedOrgUnit">
+		<result property="codEtb" column="COD_ETB"/>
+		<result property="libEtb" column="LIB_ETB"/>
+	</resultMap>
+	
+	<resultMap class="org.ametys.odf.apogee.orgunit.OrgUnitResultItem" id="rootOrgUnit">
+		<result property="codEtb" column="COD_ETB"/>
+		<result property="libEtb" column="LIB_ETB"/>
+		<result property="acronym" column="LIC_ETB"/>
+		<result property="libTpe" column="LIB_TPE"/>
+	</resultMap>
+	
+	<!--+
+		+	ORGUNIT : Etablissement
+		+  (etb.COD_COM_ADR_ETB) 
+		+--><!--
+	<select id="getRootOrgUnit" resultMap="rootOrgUnit">
+		SELECT vap.PAR_VAP as ETB_COD,
+			   (SELECT vap.PAR_VAP FROM variable_appli vap where vap.COD_VAP='ETB_LIB') as ETB_LIB, 
+			   (SELECT vap.PAR_VAP FROM variable_appli vap where vap.COD_VAP='ETB_AD1') as ETB_AD1,
+			   (SELECT vap.PAR_VAP FROM variable_appli vap where vap.COD_VAP='ETB_AD2') as ETB_AD2,
+			   (SELECT vap.PAR_VAP FROM variable_appli vap where vap.COD_VAP='ETB_AD3') as ETB_AD3,
+			   (SELECT vap.PAR_VAP FROM variable_appli vap where vap.COD_VAP='ETB_CPO') as ETB_CPO,
+			    etb.COD_TPE, etb.COD_STE, etb.LIB_OFF_ETB, etb.LIC_ETB,
+			    statut.LIB_STE, typ.COD_SIS_TPE, typ.LIB_TPE
+		FROM variable_appli vap,
+			 etablissement etb,
+			 statut_etb statut,
+			 typ_etb typ
+		WHERE vap.PAR_VAP=etb.COD_ETB(+)
+		AND etb.COD_STE=statut.COD_STE(+)
+		AND etb.COD_TPE=typ.COD_TPE(+)
+		AND vap.COD_VAP='ETB_COD'
+	</select>
+	-->
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée lors de la synchronisation de l'établissement (OrgUnit)
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #cod_etb# : code établissement
+ 		+ 
+		+ Retourne:
+		+   Les informations concernant l'établissement
+		+ 
+		+		
+ 		+-->
+	<select id="getRootOrgUnit" parameterClass="java.lang.String" resultMap="rootOrgUnit">
+		SELECT etb.COD_ETB, etb.LIB_OFF_ETB as LIB_ETB, etb.LIC_ETB, typ.LIB_TPE
+		FROM etablissement etb, typ_etb typ
+		WHERE etb.COD_TPE=typ.COD_TPE(+)
+		AND etb.COD_ETB=(#cod_etb#)
+	</select>	
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée :
+ 		+     - après une recherche sur les composantes
+ 		+     - pendant l'import d'un élement qui référence cette composante
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #cod_cmp# : code composante
+ 		+ 
+		+ Retourne:
+		+   La composante
+		+ 		
+ 		+-->
+	<select id="getOrgUnitByCode" parameterClass="java.lang.String" resultMap="orgUnit">
+		SELECT cmp.COD_CMP, cmp.COD_RNE_CMP, cmp.INT_1_EDI_DIP_CMP as LIB1_CMP, cmp.INT_2_EDI_DIP_CMP as LIB2_CMP,
+			    cmp.LIB_WEB_CMP, cmp.LIC_CMP, cmp.COD_TPC,
+				typ_cmp.LIB_TPC, typ_cmp.COD_SIS
+		FROM composante cmp, 
+			 typ_composante typ_cmp
+		WHERE cmp.COD_TPC=typ_cmp.COD_TPC(+) 
+		AND upper(cmp.COD_CMP)=upper(#cod_cmp#)	
+	</select>
+	
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée durant l'import d'une formation
+ 		+   pour récupérer les composantes liées à une formation.
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #dip# : code diplome
+		+   #vdi# : code VDI
+ 		+ 
+		+ Retourne:
+		+   Composante liée a un diplome et une version de diplome
+		+ 		
+ 		+-->
+	<select id="getProgramOrgUnits" parameterClass="java.util.Map" resultMap="orgUnitSearchItem">
+		SELECT cmp.COD_CMP, cmp.COD_RNE_CMP, cmp.INT_1_EDI_DIP_CMP as LIB1_CMP, cmp.INT_2_EDI_DIP_CMP as LIB2_CMP, cmp.COD_TPC
+		FROM  cmp_habiliter_vdi vdi_cmp, composante cmp  
+		WHERE vdi_cmp.COD_CMP=cmp.COD_CMP(+)
+		AND upper(vdi_cmp.COD_DIP)=upper(#dip#)
+		AND vdi_cmp.COD_VRS_VDI=#vdi#
+		AND cmp.COD_NAT_CMP='J'
+	</select>	
+
+
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée durant l'import d'une formation
+ 		+   pour récupérer les établissement cohabilités liées à une formation.
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #dip# : code diplome
+		+   #vdi# : code VDI
+ 		+ 
+		+ Retourne:
+		+   Etablissements cohabilités lié a un diplome et une version de diplome
+		+ 		
+ 		+-->
+ 	<select id="getAssociatedEducationUnits" parameterClass="java.util.Map" resultMap="associatedOrgUnit">
+		SELECT DISTINCT(etb.COD_ETB), etb.LIB_ETB 	
+		FROM  vdi_cohabilite_etb vdi_etb, etablissement etb  
+		WHERE vdi_etb.COD_ETB=etb.COD_ETB(+) 
+		AND upper(vdi_etb.COD_DIP)=upper(#dip#)
+		AND vdi_etb.COD_VRS_VDI=#vdi#
+	</select>		
+
+	<!--+ 
+ 		+ Cas d'utilisation:
+ 		+   Cette requête est utilisée par le moteur de recherche
+ 		+   des composantes.
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   #cod_cmp# : Code composante
+ 		+   #cod_tpc# : Type de composante
+ 		+   #title# : Libellé de la composante
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   Aucun
+ 		+ 
+		+ Retourne:
+		+   Liste des composantes
+		+ 		
+ 		+-->
+	<select id="searchOrgUnits" parameterClass="java.util.Map" resultMap="orgUnitSearchItem">
+		SELECT cmp.COD_CMP, cmp.COD_RNE_CMP, cmp.INT_1_EDI_DIP_CMP as LIB1_CMP, cmp.INT_2_EDI_DIP_CMP as LIB2_CMP, cmp.COD_TPC
+		FROM composante cmp 
+		WHERE 
+			<isPropertyAvailable property="cod_cmp">
+				upper(cmp.COD_CMP) LIKE CONCAT(upper(#cod_cmp#), '%')
+			</isPropertyAvailable>
+			<isNotPropertyAvailable property="cod_cmp">
+				cmp.COD_CMP LIKE '%'
+			</isNotPropertyAvailable>
+			<dynamic prepend="and">
+				<isPropertyAvailable property="cod_tpc">
+					upper(cmp.COD_TPC) LIKE CONCAT(upper(#cod_tpc#), '%')	
+				</isPropertyAvailable>
+			</dynamic>
+			<dynamic prepend="and">
+				<isPropertyAvailable property="title">
+					upper(cmp.INT_1_EDI_DIP_CMP) LIKE '%' || upper(#title#) || '%'
+				</isPropertyAvailable>
+			</dynamic>
+	</select>	
+</sqlMap>
Index: webapp/cms/WEB-INF/param/odf/apogee/programs.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/programs.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/programs.xml	(revision 0)
@@ -0,0 +1,330 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<sqlMap namespace="Programs">
+  	<!--+
+ 		+	Diplôme [Program]
+ 		+-->	
+    <resultMap class="org.ametys.odf.apogee.program.ProgramResultItem" id="programItem">
+  		<result property="dip" column="COD_DIP"/>
+  		<result property="title" column="LIB_DIP"/>
+  		<result property="vdi" column="COD_VRS_VDI"/>
+  		<result property="vdiTitle" column="LIB_WEB_VDI"/>
+  	</resultMap>
+
+  	<resultMap class="org.ametys.odf.apogee.program.ProgramResultItem" id="program">
+  		 <!-- Code diplome -->
+  		<result property="dip" column="COD_DIP"/>
+  		 <!-- Libelle diplome  -->
+  		<result property="title" column="LIB_DIP"/>
+  		 <!-- Code version diplome  -->
+  		<result property="vdi" column="COD_VRS_VDI"/>
+  		 <!-- Libelle version diplome --> 
+  		<result property="vdiTitle" column="LIB_WEB_VDI"/>
+  		 <!-- Nature diplome --> 
+  		<result property="codNdi" column="COD_NDI"/>
+  		 <!-- Caractere version diplome : INT,TER  -->
+  		<result property="codCarVdi" column="COD_CAR_VDI"/>
+  		 <!-- Code cursus LMD  -->
+  		<result property="codCur" column="COD_CUR"/>
+  		 <!-- Code secteur disciplinaire SISE  -->
+  		<result property="codDiscipline" column="COD_SIS_VDI"/>
+  		 <!-- Durée  -->
+  		<result property="duration" column="DUR_ANN_VDI"/>
+  		 <!-- Nombre de credits de la vdi  -->
+  		<result property="credits" column="NBR_CRD_VDI"/>
+  		 <!-- Domaine  -->
+  		<result property="codDomain" column="COD_DFD"/>
+  		<result property="domain" column="LIB_DFD"/>
+  		 <!-- type diplome  -->
+  		<result property="type" column="TYPE_FORMATION_UB2"/>
+  		 <!-- Niveau  -->
+  	    <result property="level" column="COD_NIF"/>
+  	    <!--  Mention  -->
+  		<result property="mention" column="LIB_MEV"/>
+  		 <!-- Spécialité  -->
+  	    <result property="speciality" column="LIB_SVD"/>
+  	</resultMap>
+  	
+    <!--+
+ 		+	Etape 
+ 		+-->
+  	<resultMap class="org.ametys.odf.apogee.program.SubProgramResultItem" id="step">
+  		 <!-- Code etape  -->
+  		<result property="etpCode" column="COD_ETP"/>
+  		<!-- Code version etape  -->
+  		<result property="vetCode" column="COD_VRS_VET"/>
+  		<!-- Titre etape  -->
+  		<result property="etpTitle" column="LIB_ETP"/>
+  		<!-- Titre version d'etape  -->
+  		<result property="vetTitle" column="LIB_WEB_VET"/>
+  		<!-- Credits ects  -->
+  		<result property="ects" column="NBR_CRD_VET"/>
+  		<!-- Code composante  -->
+  		<result property="cmpCode" column="COD_CMP"/>
+  		<!-- Nbr max d'etudiants  -->
+  		<result property="studentsMaxNbr" column="NBR_CPT_ACC_ETU"/>
+  	</resultMap>
+  
+  	<resultMap class="org.ametys.odf.apogee.program.SubProgramResultItem" id="stepItem">
+   		<result property="etpCode" column="COD_ETP"/>
+  		<result property="vetCode" column="COD_VRS_VET"/>
+  		<result property="etpTitle" column="LIB_ETP"/> 	
+  		<result property="vetTitle" column="LIB_WEB_VET"/>
+  	</resultMap>
+
+	<!-- Etape : elp sous les etapes -->
+    <resultMap class="org.ametys.odf.apogee.daos.ElpResultItem" id="stepElement">
+  		<result property="elpCode" column="COD_ELP"/>
+  		<result property="nelCode" column="COD_NEL"/>
+  	</resultMap>
+	
+	<!--+
+ 		+ Cas d'utilisation:
+ 		+   Requête utilisée lors de la recherche de formations dans APOGEE (avant import)
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   #dip# : code diplome
+ 		+   #vdi# : code version diplome
+ 		+   #title# : titre de la formation
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   Aucun
+		+
+		+ Retourne:
+		+     La liste des diplomes valides
+		+
+		+ Complément technique:
+		+   AND vdi.DAA_DEB_VAL_VDI &gt;= #min_year#
+		+   AND vdi.DAA_FIN_VAL_VDI &lt;= #max_year#
+		+ !!!!!!!!!!!!!!!!!!!!!
+		+ !!!!!!!!!!!! ATTENTION min_year et max_year n'existent pas pour le moment
+		+ !!!!!!!!!!!!!! j'ai codé en dur 2010
+		+
+ 		+-->	
+	<select id="searchPrograms" parameterClass="java.util.Map" resultMap="programItem">
+		SELECT dip.COD_DIP, dip.LIB_DIP, vdi.COD_VRS_VDI, vdi.LIB_WEB_VDI, vdi.COD_CAR_VDI, vdi.COD_CUR
+		FROM  diplome dip, version_diplome vdi
+		WHERE vdi.COD_DIP = dip.COD_DIP
+		AND (vdi.COD_CAR_VDI = 'TER' OR vdi.COD_CAR_VDI IS NULL)
+		AND vdi.DAA_FIN_VAL_VDI &gt;= 2011
+		<isPropertyAvailable prepend="and" property="dip">
+			(
+				upper(dip.COD_DIP) LIKE CONCAT(upper(#dip#), '%')
+				<isPropertyAvailable prepend="or" property="vdi">		
+					vdi.COD_VRS_VDI LIKE CONCAT(#vdi#, '%')
+				</isPropertyAvailable>
+				<isPropertyAvailable prepend="or" property="title">		
+					upper(dip.LIB_DIP) LIKE '%' || upper(#title#) || '%'
+				</isPropertyAvailable>
+			)
+		</isPropertyAvailable>
+		<isNotPropertyAvailable property="dip">
+			<isPropertyAvailable prepend="and" property="vdi">	
+			  (	
+				vdi.COD_VRS_VDI LIKE CONCAT(#vdi#, '%')
+				<isPropertyAvailable prepend="or" property="title">		
+					upper(dip.LIB_DIP) LIKE '%' || upper(#title#) || '%'
+				</isPropertyAvailable>
+			  )
+			</isPropertyAvailable>
+			<isNotPropertyAvailable property="vdi">
+				<isPropertyAvailable prepend="and" property="title">	
+				  (	
+					upper(dip.LIB_DIP) LIKE '%' || upper(#title#) || '%'
+				  )
+				</isPropertyAvailable>
+			</isNotPropertyAvailable>	
+						
+		</isNotPropertyAvailable>	
+	</select>
+
+	<!--+
+ 		+ Cas d'utilisation:
+ 		+   Requête utilisée pour remonter une formation (après sélection d'une formation dans les résultats de recherche)
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #dip# : code diplome
+		+   #vdi# : code VDI
+		+ 
+		+ Retourne:
+		+     Les informations concernant une formation
+		+
+		+ A noter (Joelle Bernadou de Bordeaux 2)
+		+ - vdi.COD_SIS_VDI: code sise remplacé par 'IND.1' pour indéfini.
+        + - TYPE_FORMATION_UB2 : correspond au type de diplome à lier au référentiel degrees_conversion.xml
+        + - ub2f.COD_TPD_FORMATION_LIB
+        +     c'est le libellé, mais effectivement il doit être aussi dans le référentiel coté ametys,
+        +     une précision à ajouter pour ce libellé j'ai mis les deux niveaux séparés par un /,
+        +     mais bien sur je ne sais pas comment vous allez le gérer sur le site, pour l'export du PRES
+        +     comme vous avez pu le voir sur le .xsd, il ne faut que le dernier niveau
+        + - typeDip.COD_NIF
+        +     c'est la notion la plus pertinente pour récupérer le bac +N de sortie,
+        +     notion que nous avions dans ksup année postbac de sortie
+		+		
+ 		+-->		
+	<select id="getProgram" parameterClass="java.util.Map" resultMap="program">
+	SELECT dip.COD_DIP, dip.LIB_DIP, dip.COD_DFD, dip.COD_TPD_ETB,'IND.1' as COD_SIS_VDI, dip.COD_SDS, dip.COD_NDI,
+         vdi.COD_VRS_VDI, vdi.LIB_WEB_VDI, vdi.COD_CAR_VDI, vdi.COD_CUR,
+         vdi.DUR_ANN_VDI,vdi.NBR_CRD_VDI, 
+         mention.LIB_MEV, specialite.LIB_SVD, 
+         domaine.LIB_DFD,
+         typeDip.LIB_TPD, decode(ub2.cod_tpd_ametys,null,'INC',
+			decode(ub2.tem_sante,'O',
+			decode(cvd.cod_cmp,'915',ub2.cod_tpd_ametys_sante,'911',ub2.cod_tpd_ametys_sante,ub2.cod_tpd_ametys),
+			ub2.cod_tpd_ametys)) TYPE_FORMATION_UB2,
+		 ub2f.COD_TPD_FORMATION_LIB,
+		 typeDip.COD_NIF
+	FROM  diplome dip, typ_diplome typeDip,
+         version_diplome vdi, mention_vdi mention,
+         domaine_formation_dip domaine, specialite_vdi specialite,
+         ub2_ametys_type_diplome ub2,ub2_ametys_type_formation ub2f,
+    	 cmp_habiliter_vdi cvd ,composante cmp
+    WHERE dip.COD_TPD_ETB=typeDip.COD_TPD_ETB(+)
+    AND vdi.COD_MEV=mention.COD_MEV(+)
+    AND vdi.COD_SVD=specialite.COD_SVD(+)
+    AND dip.COD_DFD=domaine.COD_DFD(+)
+	AND upper(dip.COD_DIP)=upper(#dip#)
+	AND vdi.COD_VRS_VDI=#vdi#
+	AND upper(vdi.COD_DIP)=upper(#dip#)
+	AND vdi.cod_dip=cvd.cod_dip
+    AND vdi.cod_vrs_vdi=cvd.cod_vrs_vdi
+    AND dip.cod_tpd_etb=ub2.cod_tpd_etb(+)
+    AND decode(ub2.cod_tpd_ametys,null,'INC',decode(ub2.tem_sante,'O',decode(cvd.cod_cmp,'915',ub2.cod_tpd_ametys_sante,'911',ub2.cod_tpd_ametys_sante,ub2.cod_tpd_ametys),ub2.cod_tpd_ametys))=ub2f.cod_tpd_formation
+    AND cvd.cod_cmp=cmp.cod_cmp
+    AND cmp.cod_nat_cmp='J'
+	</select>
+	
+	<!--+
+ 		+	REGIME DE LA FORMATION : depends de l'etape et de la version d'etape
+ 		+-->
+	<select id="getEducationModality" parameterClass="java.util.Map" resultClass="java.lang.Integer">
+		SELECT DISTINCT(rgi_vet.COD_RGI)
+		FROM  vdi_fractionner_vet vdi_vet, 
+			  etape etape, 
+			  rgi_autoriser_vet rgi_vet  
+		WHERE vdi_vet.COD_ETP=etape.COD_ETP(+)
+		AND vdi_vet.COD_ETP=rgi_vet.COD_ETP(+)
+		AND upper(vdi_vet.COD_DIP)=upper(#dip#)
+		AND vdi_vet.COD_VRS_VDI=#vdi#	
+	</select>	
+	
+    <!--+
+ 		+ Cas d'utilisation:
+ 		+   Requête utilisée pour rechercher une version d'étape avec le moteur de recherche, pour importer un parcours. Le contributeur
+ 		+   est en train de travailler sur une formation
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   #etp# : code étape
+ 		+   #vet# : code version étape 
+ 		+   #vet-title# : titre étape 
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #year# : Année administrative définie en paramètre dans _admin
+ 		+   #dip# : code diplome de la formation sélectionnée
+ 		+   #vdi# : code VDI (non obligatoire) de la formation sélectionnée
+		+ 
+		+ Retourne:
+		+   une liste de version d'étapes
+		+		
+ 		+-->	
+	<select id="searchSteps" parameterClass="java.util.Map" resultMap="stepItem">
+		SELECT vdi_vet.COD_ETP, etape.LIB_ETP, vet.LIB_WEB_VET, vet.COD_VRS_VET
+		FROM  version_diplome vdi, vdi_fractionner_vet vdi_vet, etape etape, version_etape vet
+		WHERE upper(vdi.COD_DIP)=upper(#dip#)
+		<isPropertyAvailable prepend="and" property="vdi">
+			vdi.COD_VRS_VDI=#vdi#
+		</isPropertyAvailable>
+		<isPropertyAvailable prepend="and" property="vdi-ter">
+			vdi.COD_CAR_VDI = 'TER'
+		</isPropertyAvailable>
+		AND upper(vdi_vet.COD_DIP)=upper(vdi.COD_DIP)
+		AND vdi_vet.COD_VRS_VDI=vdi.COD_VRS_VDI
+		AND vdi_vet.DAA_DEB_VAL_VET &lt;= #year#
+		AND vdi_vet.DAA_FIN_VAL_VET &gt;= #year#
+		<isPropertyAvailable prepend="and" property="etp">
+			upper(vdi_vet.COD_ETP) LIKE CONCAT(upper(#etp#), '%')
+		</isPropertyAvailable>
+		AND etape.COD_ETP(+)=vet.COD_ETP
+		AND vet.COD_ETP=vdi_vet.COD_ETP
+		<isPropertyAvailable prepend="and" property="vet">
+			vet.COD_VRS_VET=#vet#
+		</isPropertyAvailable>
+		<isPropertyAvailable prepend="and" property="vet-title">
+				AND (upper(vet.LIB_WEB_VET) LIKE '%' || upper(#vet-title#) || '%'
+				OR upper(etape.LIB_ETP) LIKE '%' || upper(#vet-title#) || '%')
+		</isPropertyAvailable>
+	</select>
+	
+	<!--+
+ 		+ Cas d'utilisation:
+ 		+   Requête utilisée pour importer une étape. L'utilisateur à rechercher des étapes, à sélectionné une étape et à cliqué sur importer.
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #etp# : Code étape
+ 		+   #vet# : Code vet
+ 		+ 
+		+ Retourne:
+		+   Une étape
+		+		
+ 		+-->
+	<select id="getStep" parameterClass="java.util.Map" resultMap="step">
+		SELECT DISTINCT vet.COD_ETP, vet.COD_VRS_VET, vet.COD_CMP, vet.LIB_WEB_VET,
+						vet.NBR_CRD_VET, etape.LIB_ETP, cge.NBR_CPT_ACC_ETU
+		FROM  version_etape vet, etape etape, etp_gerer_cge cge
+		WHERE upper(vet.COD_ETP)=upper(#etp#)
+		AND vet.COD_VRS_VET=#vet#
+		AND vet.COD_ETP=etape.COD_ETP(+)
+		AND vet.COD_ETP=cge.COD_ETP(+)
+	</select>
+
+	<!--+
+ 		+  PARCOURS : éléments constitutifs du parcour à partir d'un cod_etp et un cod_vrs_vet
+ 		+
+ 		+ Cas d'utilisation:
+ 		+   Requête utilisée pour récupérer les éléments pédagogiques rattachés à une étape/version d'etape,
+ 		+   c'est à dire : ce qu'il y a en dessous du parcours
+ 		+ 
+ 		+ Paramètres utilisateurs (saisie dans l'interface graphique: moteur de recherche) 
+ 		+   Aucun
+ 		+ 
+ 		+ Paramètres (contextuels, lié à une sélection ou autres...) 
+		+   #etp# : Code étape
+ 		+   #vet# : Code vet
+ 		+ 
+		+ Retourne:
+		+   des éléments pédagogiques
+		+ 
+		+ 
+		+  
+		+		
+ 		+-->
+	<select id="getStepElements" parameterClass="java.util.Map" resultMap="stepElement">
+		SELECT lse_elp.COD_ELP, elp.COD_NEL
+		FROM  vet_regroupe_lse vet_lse, lse_regroupe_elp lse_elp, element_pedagogi elp
+		WHERE upper(vet_lse.COD_ETP)=upper(#etp#)
+		AND vet_lse.COD_VRS_VET=#vet#
+		AND vet_lse.COD_LSE=lse_elp.COD_LSE(+)	
+		AND lse_elp.COD_ELP=elp.COD_ELP(+)
+	</select>	
+</sqlMap>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/apogee/teachingTerms_conversion.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/apogee/teachingTerms_conversion.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/apogee/teachingTerms_conversion.xml	(revision 0)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!--+
+	+ Correspondance Apogee - CDM pour les periodes (pour les Courses)
+	+
+	+  table element_pedagogi - colonne COD_PEL
+	+  -> correspondance avec les codes du fichier : constantes_cdmfr/teachingTerms.xml
+	+
+	+ -->
+<teachingTerms>
+	<teachingTerm code="S1">premierSemestre</teachingTerm>
+	<teachingTerm code="S2">secondSemestre</teachingTerm>
+	<teachingTerm code="AN">premierEtSecondSemestre</teachingTerm><!--
+	<teachingTerm code="S">premierOuSecondSemestre</teachingTerm>
+	<teachingTerm code="PN">pluriAnnuel</teachingTerm>
+--></teachingTerms>
Index: webapp/cms/WEB-INF/param/odf/degree.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/degree.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/degree.xml	(revision 0)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application">
+<item code="C2i" cdmValue="certificat" i18n-key="APPLICATION_ODF_DEGREE_C2i"/>
+<item code="D"   cdmValue="doctorat" i18n-key="APPLICATION_ODF_DEGREE_D"/>
+<item code="DES" cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_DES"/>
+<item code="DESC" cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_DESC"/>
+<item code="DU" cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_DU"/>
+<item code="L"  cdmValue="licence" i18n-key="APPLICATION_ODF_DEGREE_L"/>
+<item code="LP"  cdmValue="licencePro" i18n-key="APPLICATION_ODF_DEGREE_LP"/>
+<item code="M"  cdmValue="master" i18n-key="APPLICATION_ODF_DEGREE_M"/>
+<item code="S"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_S"/>
+<item code="SC"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SC"/>
+<item code="SDU"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SDU"/>
+<item code="SETR"  cdmValue="attestation" i18n-key="APPLICATION_ODF_DEGREE_SETR"/>
+<item code="SLM"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SLM"/>
+<item code="SODO"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SODO"/>
+<item code="SP"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SP"/>
+<item code="SPHA"  cdmValue="diplomeUniversitaire" i18n-key="APPLICATION_ODF_DEGREE_SPHA"/>
+<item code="XX"  cdmValue="" i18n-key="APPLICATION_ODF_DEGREE_XX"/>
+<item code="INC"  cdmValue="" i18n-key="APPLICATION_ODF_DEGREE_INC"/>
+
+</items>
+
+   
Index: webapp/cms/WEB-INF/param/odf/distance_learning_modalities.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/distance_learning_modalities.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/distance_learning_modalities.xml	(revision 0)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item type="true" code="distanceLearningModalities_possible" i18n-key="APPLICATION_ODF_DISTANCE_LEARNING_MODALITIES_POSSIBLE"/>
+	<item type="true" code="distanceLearningModalities_mandatory" i18n-key="APPLICATION_ODF_DISTANCE_LEARNING_MODALITIES_MANDATORY"/>
+	<item type="false" code="distanceLearningModalities_no" i18n-key="APPLICATION_ODF_DISTANCE_LEARNING_MODALITIES_NO"/>
+</items>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/domain_disciplines.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/domain_disciplines.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/domain_disciplines.xml	(revision 0)
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+
+	<!-- **************************************  Indéfini -->
+	<item code="IND" i18n-key="APPLICATION_ODF_DOMAIN_IND">
+		<!-- Indéfini -->
+		<subitem code="IND.1" i18n-key="APPLICATION_ODF_DOMAIN_IND1"/>		     
+	</item>
+	
+	<!-- **************************************  Droit, Économie et Gestion -->
+	<item code="DRT" i18n-key="APPLICATION_ODF_DOMAIN_DRT">
+		<!-- Histoire -->
+		<subitem code="DRT.1" i18n-key="APPLICATION_ODF_DOMAIN_DRT1"/>
+		<!--Droit public-->
+		<subitem code="DRT.2" i18n-key="APPLICATION_ODF_DOMAIN_DRT2"/>
+		<!--Science politique-->
+		<subitem code="DRT.3" i18n-key="APPLICATION_ODF_DOMAIN_DRT3"/>
+		 <!--Economie-->
+		<subitem code="DRT.4" i18n-key="APPLICATION_ODF_DOMAIN_DRT4"/>
+		<!--Gestion et management-->
+		<subitem code="DRT.5" i18n-key="APPLICATION_ODF_DOMAIN_DRT5"/>     
+	</item>
+	
+	<!-- ************************************** Lettres et Sciences Humaines -->
+	<item code="LET" i18n-key="APPLICATION_ODF_DOMAIN_LET">
+		<!--Archéologie, ethnologie, préhistoire-->
+		<subitem code="LET.1" i18n-key="APPLICATION_ODF_DOMAIN_LET1"/>
+		<!--Psychologie-->
+		<subitem code="LET.2" i18n-key="APPLICATION_ODF_DOMAIN_LET2"/>
+		<!--Sciences de l'éducation-->
+		<subitem code="LET.3" i18n-key="APPLICATION_ODF_DOMAIN_LET3"/>
+		<!--Social -->
+		<subitem code="LET.4" i18n-key="APPLICATION_ODF_DOMAIN_LET4"/>
+		<!--Sociologie, démographie-->
+		<subitem code="LET.5" i18n-key="APPLICATION_ODF_DOMAIN_LET5"/>
+    <!--Information et communication-->
+		<subitem code="LET.6" i18n-key="APPLICATION_ODF_DOMAIN_LET6"/>  
+	</item>
+	
+	<!-- ************************************** Santé/paramédical  -->
+	<item code="MED" i18n-key="APPLICATION_ODF_DOMAIN_MED">
+		<!--Études médicales, odontologiques et sage femme-->
+		<subitem code="MED.1" i18n-key="APPLICATION_ODF_DOMAIN_MED1"/>
+		<!--Sciences du médicament, pharmacie-->
+		<subitem code="MED.2" i18n-key="APPLICATION_ODF_DOMAIN_MED2"/>
+		<!--Études paramédicales-->
+		<subitem code="MED.3" i18n-key="APPLICATION_ODF_DOMAIN_MED3"/>
+		<!--Santé publique -->
+		<subitem code="MED.4" i18n-key="APPLICATION_ODF_DOMAIN_MED4"/>
+		<!--Thermalisme--> 
+		<subitem code="MED.5" i18n-key="APPLICATION_ODF_DOMAIN_MED5"/>
+		<!--Spécialités médicales pour étrangers -->  
+		<subitem code="MED.6" i18n-key="APPLICATION_ODF_DOMAIN_MED6"/>
+		<!--Spécialités médicales -->
+		<subitem code="MED.7" i18n-key="APPLICATION_ODF_DOMAIN_MED7"/>    		
+	</item>
+	
+	<!-- ************************************** Sciences et Technologies-->
+	<item code="SCT" i18n-key="APPLICATION_ODF_DOMAIN_SCT">	
+		<!-- Mathématiques -->
+		<subitem code="SCT.1" i18n-key="APPLICATION_ODF_DOMAIN_SCT1"/>
+		<!--Chimie-->
+		<subitem code="SCT.2" i18n-key="APPLICATION_ODF_DOMAIN_SCT2"/>
+		<!--Physique-->
+		<subitem code="SCT.3" i18n-key="APPLICATION_ODF_DOMAIN_SCT3"/>
+		<!--Biologie-->
+		<subitem code="SCT.5" i18n-key="APPLICATION_ODF_DOMAIN_SCT5"/>
+		<!--Sciences de l'ingénieur-->
+		<subitem code="SCT.6" i18n-key="APPLICATION_ODF_DOMAIN_SCT6"/>
+		<!--Sciences du sport-->
+		<subitem code="SCT.7" i18n-key="APPLICATION_ODF_DOMAIN_SCT7"/>
+		<!--Informatique-->
+		<subitem code="SCT.10" i18n-key="APPLICATION_ODF_DOMAIN_SCT10"/>
+		<!--Sciences agronomiques-->
+		<subitem code="SCT.11" i18n-key="APPLICATION_ODF_DOMAIN_SCT11"/>
+		<!--Sciences pour l'alimentation -->
+		<subitem code="SCT.12" i18n-key="APPLICATION_ODF_DOMAIN_SCT12"/>
+		<!--Oenologie -->
+		<subitem code="SCT.13" i18n-key="APPLICATION_ODF_DOMAIN_SCT13"/>
+	</item>
+	
+		<!-- ************************************** Education et formation-->
+	<item code="EDU" i18n-key="APPLICATION_ODF_DOMAIN_EDU">	
+		 <!--Education et formation-->
+		<subitem code="EDU.1" i18n-key="APPLICATION_ODF_DOMAIN_EDU1"/>
+  </item>
+  
+</items>
+
+
Index: webapp/cms/WEB-INF/param/odf/form_of_teaching.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/form_of_teaching.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/form_of_teaching.xml	(revision 0)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="FTO1" i18n-key="APPLICATION_ODF_FORM_OF_TEACHING_INDIVIDUAL"/>
+	<item code="FTO2" i18n-key="APPLICATION_ODF_FORM_OF_TEACHING_GROUP"/>
+	<item code="FTO3" i18n-key="APPLICATION_ODF_FORM_OF_TEACHING_LAB"/>
+	<item code="FTO4" i18n-key="APPLICATION_ODF_FORM_OF_TEACHING_STUDY"/>
+	<item code="FTO5" i18n-key="APPLICATION_ODF_FORM_OF_TEACHING_TRAINING"/>
+</items>
+
+
+
Index: webapp/cms/WEB-INF/param/odf/formofteaching_method.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/formofteaching_method.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/formofteaching_method.xml	(revision 0)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="faceAFace" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM1"/>
+	<item code="presentielEnrichi" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM2"/>
+	<item code="presentielAllege" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM3"/>
+	<item code="presentielReduit" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM4"/>
+	<item code="presentielQuasiInexistant" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM5"/>
+	<item code="presentielAmeliore" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM6"/>
+	<item code="aDistance" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM7"/>
+	<item code="parCorrespondance" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM8"/>
+	<item code="paLeWeb" i18n-key="APPLICATION_ODF_FORMOFTEACHING_METHOD_FTM9"/>
+</items>
+
+
Index: webapp/cms/WEB-INF/param/odf/internship.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/internship.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/internship.xml	(revision 0)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="internship_possible" i18n-key="APPLICATION_ODF_INTERNSHIP_POSSIBLE"/>
+	<item code="internship_mandatory" i18n-key="APPLICATION_ODF_INTERNSHIP_MANDATORY"/>
+</items>
Index: webapp/cms/WEB-INF/param/odf/level.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/level.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/level.xml	(revision 0)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="baccalaureat" i18n-key="APPLICATION_ODF_LEVELS_BAC"/>
+    <item code="licence1" i18n-key="APPLICATION_ODF_LEVELS_BACP1"/>
+    <item code="licence2" i18n-key="APPLICATION_ODF_LEVELS_BACP2"/>
+    <item code="licence3" i18n-key="APPLICATION_ODF_LEVELS_BACP3"/>
+    <item code="master1" i18n-key="APPLICATION_ODF_LEVELS_BACP4"/>
+    <item code="master2" i18n-key="APPLICATION_ODF_LEVELS_BACP5"/>
+    <item code="doctorat" i18n-key="APPLICATION_ODF_LEVELS_DOCTORAT"/>
+    <item code="bts" i18n-key="APPLICATION_ODF_LEVELS_BTS"/>
+    <item code="dut" i18n-key="APPLICATION_ODF_LEVELS_DUT"/>
+</items>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/orgunit.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/orgunit.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/orgunit.xml	(revision 0)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application">
+	<item code="FR_RNE_0671712X_OR" i18n-key="APPLICATION_ODF_MAIN_ORGUNIT"/>
+</items>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/place.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/place.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/place.xml	(revision 0)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="33063" i18n-key="APPLICATION_ODF_PLACE_1"/>
+	<item code="33318" i18n-key="APPLICATION_ODF_PLACE_2"/>
+	<item code="33522" i18n-key="APPLICATION_ODF_PLACE_3"/>
+  <item code="40088" i18n-key="APPLICATION_ODF_PLACE_4"/>
+	<item code="64000" i18n-key="APPLICATION_ODF_PLACE_5"/>
+</items>
+
Index: webapp/cms/WEB-INF/param/odf/program_type.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/program_type.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/program_type.xml	(revision 0)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="ET1" i18n-key="APPLICATION_ODF_PROGRAM_TYPE_NATIONAL"/>
+	<item code="ET2" i18n-key="APPLICATION_ODF_PROGRAM_TYPE_UNIVERSITY"/>
+	<item code="ET3" i18n-key="APPLICATION_ODF_PROGRAM_TYPE_EXAMINATIONS"/>
+	<item code="ET4" i18n-key="APPLICATION_ODF_PROGRAM_TYPE_CERTIFICATE"/>
+	<item code="ET5" i18n-key="APPLICATION_ODF_PROGRAM_TYPE_OTHERS"/>
+</items>
+
+
Index: webapp/cms/WEB-INF/param/odf/sectors_activity.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/sectors_activity.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/sectors_activity.xml	(revision 0)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="0001" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_1"/><!-- Arts -->
+	<item code="0002" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_2"/><!-- Banque, finance, assurances -->
+	<item code="0003" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_3"/><!-- BTP -->
+	<item code="0004" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_4"/><!-- Biotechnologie / Biologie -->
+	<item code="0005" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_5"/><!-- Commerce / Marketing -->
+	<item code="0006" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_6"/><!-- Communication / Publicité -->
+	<item code="0007" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_7"/><!-- Comptabilité / Économie / Gestion  -->
+	<item code="0008" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_8"/><!-- Conseil -->
+	<item code="0009" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_9"/><!-- Danse /Théâtre / Musique -->
+	<item code="0010" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_10"/><!-- Documentation -->
+	<item code="0011" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_11"/><!-- Droit / Science politique -->
+	<item code="0012" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_12"/><!-- Édition -->
+	<item code="0013" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_13"/><!-- Enseignement -->
+	<item code="0014" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_14"/><!-- Environnement / Écologie -->
+	<item code="0015" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_15"/><!-- Horticulture / paysage -->
+	<item code="0016" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_16"/><!-- Hôtellerie / Restauration   -->
+	<item code="0017" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_17"/><!-- Immobilier -->
+	<item code="0018" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_18"/><!-- Informatique / Télécom  -->
+	<item code="0019" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_19"/><!-- Infrastructure / Urbanisme -->
+	<item code="0020" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_20"/><!-- Langues -->
+	<item code="0021" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_21"/><!-- Lettres -->
+	<item code="0022" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_22"/><!-- Logistique -->
+	<item code="0023" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_23"/><!-- Management -->
+	<item code="0024" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_24"/><!-- Mathématiques -->
+	<item code="0025" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_25"/><!-- Médecine -->
+	<item code="0026" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_26"/><!-- Mode / Textile -->
+	<item code="0027" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_27"/><!-- Pharmacie / ingénierie de la santé  -->
+	<item code="0028" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_28"/><!-- Physique-Chimie -->
+	<item code="0029" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_29"/><!-- Prévention / Sécurité -->
+	<item code="0030" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_30"/><!-- Sciences humaines -->
+	<item code="0031" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_31"/><!-- Social -->
+	<item code="0032" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_32"/><!-- Sport -->
+	<item code="0033" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_33"/><!-- Technologies / Multimédia  -->
+	<item code="0034" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_34"/><!-- Tourisme -->
+ 	<item code="0035" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_35"/><!-- Vente / Distribution  -->
+ 	<item code="0036" i18n-key="APPLICATION_ODF_SECTOR_ACTIVITY_36"/><!-- Viticulture / Oenologie -->
+</items>
Index: webapp/cms/WEB-INF/param/odf/teaching_activity.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/teaching_activity.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/teaching_activity.xml	(revision 0)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="coursMagistral" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_LECTURE"/>
+	<item code="seminaire" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_SEMINAR"/>
+	<item code="colloque" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_CONFERENCE"/>
+	<item code="travauxDiriges" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_TD"/>
+	<item code="travauxPratiques" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_TP"/>
+	<item code="projetIndividuel" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_INDIVIDUAL"/>
+	<item code="projetEnGroupe" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_GROUP"/>
+	<item code="travauxDeLaboratoire" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_LAB"/>
+	<item code="etudeBibliographique" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_STUDY"/>
+	<item code="exercices" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_EXERCICES"/>
+	<item code="devoir" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_TEST"/>
+	<item code="stage" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_TRAINING"/>
+	<item code="correspondance" i18n-key="APPLICATION_ODF_TEACHING_ACTIVITY_CORRESPONDENCE"/>
+</items>
+
+
+
Index: webapp/cms/WEB-INF/param/odf/teaching_method.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/teaching_method.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/teaching_method.xml	(revision 0)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="FTM1" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM1"/>
+	<item code="FTM2" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM2"/>
+	<item code="FTM3" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM3"/>
+	<item code="FTM4" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM4"/>
+	<item code="FTM5" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM5"/>
+	<item code="FTM6" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM6"/>
+	<item code="FTM5" i18n-key="APPLICATION_ODF_TEACHING_METHOD_FTM7"/>
+</items>
+
+
Index: webapp/cms/WEB-INF/param/odf/teaching_term.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/teaching_term.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/teaching_term.xml	(revision 0)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2010 Anyware Services Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->
+  <items i18n-catalog="application">
+    <item code="S1" i18n-key="APPLICATION_ODF_TEACHING_TERM_S1"/>
+    <item code="S2" i18n-key="APPLICATION_ODF_TEACHING_TERM_S2"/>
+    <item code="AN" i18n-key="APPLICATION_ODF_TEACHING_TERM_AN"/>
+    <item code="S" i18n-key="APPLICATION_ODF_TEACHING_TERM_S"/>
+    <item code="PN" i18n-key="APPLICATION_ODF_TEACHING_TERM_PN"/>
+  </items>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/odf/time_slot.xml
===================================================================
--- webapp/cms/WEB-INF/param/odf/time_slot.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/odf/time_slot.xml	(revision 0)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<items i18n-catalog="application"> 
+	<item code="journee" i18n-key="APPLICATION_ODF_TIME_SLOT_DAY"/>
+    <item code="coursDuSoir" i18n-key="APPLICATION_ODF_TIME_SLOT_EVENING"/>
+</items>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/workflows.xml
===================================================================
--- webapp/cms/WEB-INF/param/workflows.xml	(revision 8892)
+++ webapp/cms/WEB-INF/param/workflows.xml	(working copy)
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2010 Anyware Services
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   -->
-<workflows>
-  <workflow name="content" type="file" location="workflow.xml"/>
-  <workflow name="newsletter" type="file" location="workflow-newsletter.xml"/>
-</workflows>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/workflow-program.xml
===================================================================
--- webapp/cms/WEB-INF/param/workflow-program.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/workflow-program.xml	(revision 0)
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+	<initial-actions>
+		<action id="1" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreateProgramFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+		<action id="11" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreateSubProgramFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="0" />
+			</results>
+			<post-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.ChangeProgramStateFunction</arg>
+				</function>
+			</post-functions>
+		</action>
+		<action id="12" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreateContainerFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="0" />
+			</results>
+			<post-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.ChangeProgramStateFunction</arg>
+				</function>
+			</post-functions>		
+		</action>
+	</initial-actions>
+	
+	<!-- +
+	     | GLOBAL ACTIONS
+	     + -->
+	<global-actions>
+		<action id="999" name="plugin.odf:WORKFLOW_ACTION_DIRECT_VALIDATION">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Program_Validate</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="3" />
+			</results>
+		</action>
+		<action id="5" name="plugin.web:WORKFLOW_ACTION_DELETE" finish="TRUE">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Program_Delete</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.DeleteContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="4" />
+			</results>
+			<post-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.ChangeProgramStateFunction</arg>
+				</function>
+			</post-functions>
+		</action>
+	</global-actions>
+	
+	<!-- +
+	     | COMMON ACTIONS
+	     + -->
+	<common-actions>
+		<action id="2" name="plugin.web:WORKFLOW_ACTION_EDIT">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon">
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Program_Edit</arg>
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.EditProgramFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+		<action id="22" name="plugin.web:WORKFLOW_ACTION_EDIT">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon">
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Program_Edit</arg>
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</common-actions>
+	<steps>
+		<step id="0" name="FINAL_STEP_FOR_CONTAINER">
+			<actions>
+				<!-- Edit Action for container -->
+				<action id="21" name="plugin.web:WORKFLOW_ACTION_EDIT">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Program_Propose</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.odf.workflow.EditODFContentFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="0" />
+					</results>
+					<post-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.odf.workflow.ChangeProgramStateFunction</arg>
+						</function>
+					</post-functions>
+				</action>
+			</actions>
+		</step>
+		<step id="1" name="plugin.web:WORKFLOW_STATE_DRAFT">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<common-action id="22" />
+				<action id="3" name="plugin.web:WORKFLOW_ACTION_PROPOSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Program_Propose</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="2" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="2" name="plugin.web:WORKFLOW_STATE_PROPOSED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<common-action id="22" />
+				<action id="4" name="plugin.web:WORKFLOW_ACTION_VALIDATE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Program_Validate</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="3" />
+					</results>
+				</action>
+				<action id="900" name="plugin.odf:WORKFLOW_ACTION_GLOBAL_VALIDATION">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Program_Validate_Global</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.plugins.odfweb.workflow.GlobalValidateProgramFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="3" />
+					</results>
+				</action>
+				<action id="7" name="plugin.web:WORKFLOW_ACTION_REFUSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Program_Refuse</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="1" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="3" name="plugin.web:WORKFLOW_STATE_VALIDATED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<common-action id="22" />
+			</actions>
+            <post-functions>
+                <function type="avalon">
+                    <arg name="role">org.ametys.web.workflow.ValidationStepFunction</arg>
+                </function>
+            </post-functions>
+		</step>
+	</steps>
+</workflow>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/runtime.xml
===================================================================
--- webapp/cms/WEB-INF/param/runtime.xml	(revision 8892)
+++ webapp/cms/WEB-INF/param/runtime.xml	(working copy)
@@ -95,6 +95,14 @@
     		 default extension is 'org.ametys.web.repository.page.DefaultContentTypesAssignmentHandler' which retrieves the all content types -->
     		 
     	<org.ametys.runtime.plugins.core.administrator.version.VersionsHandler>org.ametys.cms.workspace.version.CMS</org.ametys.runtime.plugins.core.administrator.version.VersionsHandler>
+        
+		<org.ametys.odf.program.synchronization.ProgramsImportManager>org.ametys.odf.apogee.program.ApogeeProgramsImportManager</org.ametys.odf.program.synchronization.ProgramsImportManager>
+        <org.ametys.odf.program.synchronization.ProgramsSynchronizationManager>org.ametys.odf.apogee.program.ApogeeProgramsSynchronizationManager</org.ametys.odf.program.synchronization.ProgramsSynchronizationManager>     
+        <org.ametys.odf.course.synchronization.CoursesImportManager>org.ametys.odf.apogee.course.ApogeeCoursesImportManager</org.ametys.odf.course.synchronization.CoursesImportManager>
+        <org.ametys.odf.course.synchronization.CoursesSynchronizationManager>org.ametys.odf.apogee.course.ApogeeCoursesSynchronizationManager</org.ametys.odf.course.synchronization.CoursesSynchronizationManager>
+        <org.ametys.odf.orgunit.synchronization.OrgUnitsImportManager>org.ametys.odf.apogee.orgunit.ApogeeOrgUnitImportManager</org.ametys.odf.orgunit.synchronization.OrgUnitsImportManager>
+    	<org.ametys.odf.orgunit.synchronization.OrgUnitsSynchronizationManager>org.ametys.odf.apogee.orgunit.ApogeeOrgUnitsSynchronizationManager</org.ametys.odf.orgunit.synchronization.OrgUnitsSynchronizationManager>
+    	<org.ametys.odf.synchronization.GlobalSynchronizationManager>org.ametys.odf.apogee.synchronization.ApogeeGlobalSynchronizationManager</org.ametys.odf.synchronization.GlobalSynchronizationManager>
     </extensions>
 
 </runtime>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/workflow-orgunit.xml
===================================================================
--- webapp/cms/WEB-INF/param/workflow-orgunit.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/workflow-orgunit.xml	(revision 0)
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+	<initial-actions>
+		<action id="1" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreateOrgUnitFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</initial-actions>
+	
+	<!-- +
+	     | GLOBAL ACTIONS
+	     + -->
+	<global-actions>
+		<action id="5" name="plugin.web:WORKFLOW_ACTION_DELETE" finish="TRUE">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_OrgUnit_Delete</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.DeleteContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="4" />
+			</results>
+		</action>
+	</global-actions>
+	
+	<!-- +
+	     | COMMON ACTIONS
+	     + -->
+	<common-actions>
+		<action id="2" name="plugin.web:WORKFLOW_ACTION_EDIT">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_OrgUnit_Edit</arg>
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.EditODFContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</common-actions>
+	<steps>
+		<step id="1" name="plugin.web:WORKFLOW_STATE_DRAFT">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<action id="3" name="plugin.web:WORKFLOW_ACTION_PROPOSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_OrgUnit_Propose</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="2" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="2" name="plugin.web:WORKFLOW_STATE_PROPOSED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<action id="4" name="plugin.web:WORKFLOW_ACTION_VALIDATE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_OrgUnit_Validate</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="3" />
+					</results>
+				</action>
+				<action id="7" name="plugin.web:WORKFLOW_ACTION_REFUSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.ContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_OrgUnit_Refuse</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="1" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="3" name="plugin.web:WORKFLOW_STATE_VALIDATED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+			</actions>
+            <post-functions>
+                <function type="avalon">
+                    <arg name="role">org.ametys.web.workflow.ValidationStepFunction</arg>
+                </function>
+            </post-functions>
+		</step>
+	</steps>
+</workflow>
\ No newline at end of file
Index: webapp/cms/WEB-INF/param/cms-ribbon-default.xml
===================================================================
--- webapp/cms/WEB-INF/param/cms-ribbon-default.xml	(revision 8892)
+++ webapp/cms/WEB-INF/param/cms-ribbon-default.xml	(working copy)
@@ -55,14 +55,20 @@
 						<control id="org.ametys.newsletter.userinterface.Newsletters"/>
                        	<control id="org.ametys.datainclusion.tool.DataSources"/>
    	                   	<control id="org.ametys.web.userinterface.Alias"/>
+                        <control id="org.ametys.mypage.person.Open"/>
+                        <control id="org.ametys.mypage.person.OpenOthers"/>                        
 					</large>
 					<medium>
                         <layout size="small">
 							<control id="org.ametys.newsletter.userinterface.Newsletters"/>
                         	<control id="org.ametys.datainclusion.tool.DataSources"/>
-                        	<control id="org.ametys.web.userinterface.Alias"/>
+                        	<control id="org.ametys.web.userinterface.Alias"/>                            
                         </layout>
-                    </medium> 
+                        <layout size="small">
+                            <control id="org.ametys.mypage.person.Open"/>
+                            <control id="org.ametys.mypage.person.OpenOthers"/>
+                        </layout>                                                 
+                    </medium>                    
                     <small/>
 				</group>
 				<group label="RIBBON_TABS_TAB_HOME_GROUPS_GROUP_ADMIN_TOOL_LABEL" icon="">
@@ -166,9 +172,19 @@
 					</medium>
 					<small/>
 				</group>
+				<group label="RIBBON_TABS_TAB_DEVELOPPER_GROUPS_GROUP_DEVELOPER_LABEL" icon="">
+					<large/>
+					<medium>
+						<control id="org.ametys.cms.userinterface.debug.UI"/>
+					</medium>
+					<small/>
+				</group>
 			</groups>
 		</tab>
-		
+        
+        <!-- ODF -->
+        <import>plugin:odf-web://cms-ribbon.xml</import>		
+        
 		<!-- Rights -->
 		<import>plugin:cms://ribbon/cms-ribbon-rights.xml</import>
 		
Index: webapp/cms/WEB-INF/param/workflow-course.xml
===================================================================
--- webapp/cms/WEB-INF/param/workflow-course.xml	(revision 0)
+++ webapp/cms/WEB-INF/param/workflow-course.xml	(revision 0)
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+	<initial-actions>
+		<action id="1" name="plugin.web:WORKFLOW_ACTION_CREATE">
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.CreateCourseFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</initial-actions>
+	
+	<!-- +
+	     | GLOBAL ACTIONS
+	     + -->
+	<global-actions>
+		<action id="999" name="plugin.odf:WORKFLOW_ACTION_DIRECT_VALIDATION">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Course_Validate</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="3" />
+			</results>
+		</action>
+		<action id="5" name="plugin.web:WORKFLOW_ACTION_DELETE" finish="TRUE">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon"> 
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Course_Delete</arg> 
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.DeleteContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="4" />
+			</results>
+		</action>
+	</global-actions>
+	
+	<!-- +
+	     | COMMON ACTIONS
+	     + -->
+	<common-actions>
+		<action id="2" name="plugin.web:WORKFLOW_ACTION_EDIT">
+			<restrict-to>
+				<conditions type="AND">
+					<condition type="avalon">
+						<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+						<arg name="right">ODF_Rights_Course_Edit</arg>
+					</condition>
+					<condition type="avalon">
+						<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+					</condition>
+				</conditions>
+			</restrict-to>
+			<pre-functions>
+				<function type="avalon">
+					<arg name="role">org.ametys.odf.workflow.EditODFContentFunction</arg>
+				</function>
+			</pre-functions>
+			<results>
+				<unconditional-result old-status=" " status=" " step="1" />
+			</results>
+		</action>
+	</common-actions>
+	<steps>
+		<step id="1" name="plugin.web:WORKFLOW_STATE_DRAFT">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<action id="3" name="plugin.web:WORKFLOW_ACTION_PROPOSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Course_Propose</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="2" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="2" name="plugin.web:WORKFLOW_STATE_PROPOSED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+				<action id="4" name="plugin.web:WORKFLOW_ACTION_VALIDATE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Course_Validate</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<pre-functions>
+						<function type="avalon">
+							<arg name="role">org.ametys.web.workflow.ValidateContentFunction</arg>
+						</function>
+					</pre-functions>
+					<results>
+						<unconditional-result old-status=" " status=" " step="3" />
+					</results>
+				</action>
+				<action id="7" name="plugin.web:WORKFLOW_ACTION_REFUSE">
+					<restrict-to>
+						<conditions type="AND">
+							<condition type="avalon">
+								<arg name="role">org.ametys.odf.workflow.ODFContentCheckRightsCondition</arg>
+								<arg name="right">ODF_Rights_Course_Refuse</arg>
+							</condition>
+							<condition type="avalon">
+								<arg name="role">org.ametys.cms.workflow.LockCondition</arg>
+							</condition>
+						</conditions>
+					</restrict-to>
+					<results>
+						<unconditional-result old-status=" " status=" " step="1" />
+					</results>
+				</action>
+			</actions>
+		</step>
+		<step id="3" name="plugin.web:WORKFLOW_STATE_VALIDATED">
+			<actions>
+				<!-- Edit Action -->
+				<common-action id="2" />
+			</actions>
+            <post-functions>
+                <function type="avalon">
+                    <arg name="role">org.ametys.web.workflow.ValidationStepFunction</arg>
+                </function>
+            </post-functions>
+		</step>
+		<step id="4" name="plugin.web:WORKFLOW_STATE_FINISHED" />
+	</steps>
+</workflow>
\ No newline at end of file
Index: webapp/cms/plugins/newsletter/pages/service/list/list.xsl
===================================================================
--- webapp/cms/plugins/newsletter/pages/service/list/list.xsl	(revision 9137)
+++ webapp/cms/plugins/newsletter/pages/service/list/list.xsl	(working copy)
@@ -18,51 +18,71 @@
 				xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
 				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
+    <xsl:import href="workspace:web://stylesheets/template-default.xsl"/>
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+
+    <!-- TODO -->
 	<xsl:param name="contextPath"/>
-	<xsl:param name="cms-context"/>
+	<!-- TODO -->
+    <xsl:param name="cms-context"/>
+    <!-- TODO -->
 	<xsl:param name="raw-context"/>
+    <!-- TODO -->
     <xsl:param name="skin"/>
+    <!-- TODO -->
 	<xsl:param name="lang"/>
+    <!-- TODO -->
 	<xsl:param name="siteName"/>
+    <!-- TODO -->
 	<xsl:param name="service-title"/>
+    <!-- TODO -->
 	<xsl:param name="length"/>
+    
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">newsletter newsletter-list</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/Newsletters/newsletter)"/>    
 	
+
+    <!-- +
+         | ROOT TEMPLATE
+         + -->      
 	<xsl:template match="/Newsletters">
-		<html>
-			<body>
-				<div id="service-newsletter-list">
-					
-					<!-- Title -->
-					<xsl:choose>
-						<xsl:when test="$service-title != ''">
-							<h1><xsl:value-of select="$service-title"/></h1>
-						</xsl:when>
-						<xsl:otherwise>
-							<h1><i18n:text i18n:key="NEWSLETTERS_SERVICE_LIST_DESCRIPTION"/></h1>
-						</xsl:otherwise>
-					</xsl:choose>
-					
-					<xsl:call-template name="newsletter-list"/>
-				</div>
-			</body>
-		</html>
-	</xsl:template>
+        <xsl:call-template name="common-service"/>
+	</xsl:template>  
 	
-	<xsl:template name="newsletter-list">
-		<xsl:if test="newsletter">
-			<ul>
-				<xsl:for-each select="newsletter">
-					<li>
-						<a href="{$cms-context}/_wrapped-content/{@name}.html" title="{title}"><xsl:value-of select="title"/></a>
-						<xsl:text> - </xsl:text>
-						<i18n:date src-pattern="yyyy-MM-dd'T'hh:mm:ss" pattern="long"><xsl:value-of select="date"/></i18n:date>
-						<xsl:if test="number">
-							<xsl:text>, N°</xsl:text><xsl:value-of select="number"/>
-						</xsl:if>
-					</li>
-				</xsl:for-each>
-			</ul>
-		</xsl:if>
-	</xsl:template>
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$service-title"/>
+            <xsl:with-param name="default-title">plugin.newsletter:NEWSLETTERS_SERVICE_LIST_DESCRIPTION</xsl:with-param>
+        </xsl:call-template>
+        
+        <xsl:call-template name="newsletter-list"/>            
+    </xsl:template>    
+    
+    <!-- TODO -->
+    <xsl:template name="newsletter-list">
+            <ul>
+                <xsl:for-each select="newsletter">
+                    <li>
+                        <xsl:attribute name="class">
+                            <xsl:if test="position() mod 2 = 0"><xsl:text>even </xsl:text></xsl:if>                                
+                            <xsl:if test="position() = 1"><xsl:text>first </xsl:text></xsl:if>
+                            <xsl:if test="position() = last()"><xsl:text>last</xsl:text></xsl:if>
+                        </xsl:attribute>                    
+                        <a href="{$cms-context}/_wrapped-content/{@name}.html" title="{title}"><xsl:value-of select="title"/></a>
+                        <xsl:text> - </xsl:text>
+                        <i18n:date src-pattern="yyyy-MM-dd'T'hh:mm:ss" pattern="long"><xsl:value-of select="date"/></i18n:date>
+                        <xsl:if test="number">
+                            <xsl:text>, N°</xsl:text><xsl:value-of select="number"/>
+                        </xsl:if>
+                    </li>
+                </xsl:for-each>
+            </ul>    
+    </xsl:template>
 	
 </xsl:stylesheet>
Index: webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl
===================================================================
--- webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl	(revision 9137)
+++ webapp/cms/plugins/newsletter/pages/service/subscribe/subscribe.xsl	(working copy)
@@ -21,57 +21,75 @@
                 extension-element-prefixes="math">
 
 	<xsl:import href="plugin:cms://stylesheets/helper/common.xsl"/>
+    <xsl:import href="service:web://pages/services/common.xsl"/>    
 
+    <!-- TODO -->
 	<xsl:param name="contextPath"/>
+    <!-- TODO -->
 	<xsl:param name="cms-context"/>
+    <!-- TODO -->    
 	<xsl:param name="skin"/>
+    <!-- TODO -->    
 	<xsl:param name="lang"/>
+    <!-- TODO -->    
 	<xsl:param name="siteName"/>
+    <!-- TODO -->    
 	<xsl:param name="plugin"/>
+    <!-- TODO -->
 	<xsl:param name="service-title"/>
+    <!-- TODO -->    
 	<xsl:param name="length"/>
 	
     <xsl:variable name="uniqueId" select="substring-after(math:random(), '.')"/>
     
-	<xsl:template match="/NewsletterService">
-		<html>
-            <head>
-                <xsl:call-template name="css"/>
-            </head>
-			<body>
-				<div id="service-newsletter-form-{$uniqueId}" class="newsletter-subscribe">
-					
-					<!-- Title -->
-					<xsl:choose>
-						<xsl:when test="$service-title != ''">
-							<h1><xsl:value-of select="$service-title"/></h1>
-						</xsl:when>
-						<xsl:otherwise>
-							<h1><i18n:text i18n:key="NEWSLETTERS_SERVICE_SUBCRIBE_FORM_TITLE"/></h1>
-						</xsl:otherwise>
-					</xsl:choose>
-					
-					<xsl:choose>
-						<xsl:when test="FormResult/msg = 'success'">
-							<xsl:call-template name="success"/>
-						</xsl:when>
-						<xsl:otherwise>
-							<!-- Form -->
-							<xsl:call-template name="subscribe-form"/>
-						</xsl:otherwise>
-					</xsl:choose>
-					
-					<!-- Legal mentions -->
-					<xsl:call-template name="mentions"/>
-				</div>
-			</body>
-		</html>
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">newsletter newsletter-subscribe</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/NewsletterService)"/>      
+    
+	
+    <!-- +
+         | ROOT TEMPLATE
+         + -->     
+    <xsl:template match="/NewsletterService">
+        <xsl:call-template name="common-service"/>
 	</xsl:template>
     
-    <xsl:template name="css">
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
         <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/{$plugin}/resources/css/newsletter.css"/>
-    </xsl:template>
+    </xsl:template>    
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$service-title"/>
+            <xsl:with-param name="default-title">plugin.<xsl:value-of select="$plugin"/>:NEWSLETTERS_SERVICE_SUBCRIBE_FORM_TITLE</xsl:with-param>            
+        </xsl:call-template>
+
+        <xsl:choose>
+            <xsl:when test="FormResult/msg = 'success'">
+                <xsl:call-template name="success"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <!-- Form -->
+                <xsl:call-template name="subscribe-form"/>
+            </xsl:otherwise>
+        </xsl:choose>
+        
+        <!-- Legal mentions -->
+        <xsl:call-template name="mentions"/>
+        
+    </xsl:template>    
     
+    <!-- TODO -->
 	<xsl:template name="success">
 		<div class="info">
 			<xsl:if test="FormResult/subscribeTo">
@@ -125,6 +143,7 @@
 		</div>
 	</xsl:template>
 	
+    <!-- TODO -->
 	<xsl:template name="subscribe-form">
 		<form method="post">
 			<p>
@@ -133,54 +152,66 @@
 					<i18n:param><xsl:value-of select="Categories/category/title"/></i18n:param>
 				</i18n:translate>
 			</p>
-			<!-- email -->
-			<label for="subscribe-email"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL"/></label><br/>
-			<input type="text" name="email" class="text" id="subscribe-email-{$uniqueId}" value="{FormResult/email}">
-				<xsl:if test="FormResult/msg = 'invalid-email'">
-					<xsl:attribute name="class">invalid</xsl:attribute>
-				</xsl:if>
-			</input>
+
+            <!-- category -->
+            <input type="hidden" name="category" value="{Categories/category/@id}"/>
+                        
+            <!-- email -->
+            <div class="field">
+                <div class="label">
+                    <label for="subscribe-email"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL"/></label>                
+                </div>
+                <div class="input">
+                    <input type="text" name="email" class="text" id="subscribe-email-{$uniqueId}" value="{FormResult/email}">
+                        <xsl:if test="FormResult/msg = 'invalid-email'">
+                            <xsl:attribute name="class">invalid</xsl:attribute>
+                        </xsl:if>
+                    </input>                
+                </div>
+            </div>
 			<xsl:if test="FormResult/msg = 'invalid-email'">
-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL_INVALID"/></div>
+				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_EMAIL_INVALID"/></p>
 			</xsl:if>
 			<xsl:if test="FormResult/msg = 'already-exist'">
-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_EMAIL_ALREADY_EXISTS"/></div>
+				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_EMAIL_ALREADY_EXISTS"/></p>
 			</xsl:if>
-			<br/><br/>
-			
-			<!-- category -->
-			<input type="hidden" name="category" value="{Categories/category/@id}"/>
 			
 			<!-- captcha -->
-			<label for="captcha"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA"/></label><br/>
-
-			<xsl:call-template name="captcha">
-				<xsl:with-param name="key-name" select="'captcha-key'"/>
-	
-				<xsl:with-param name="value-name" select="'captcha'"/>
-				<xsl:with-param name="value-id" select="concat('captcha-', $uniqueId)"/>
-				<xsl:with-param name="value-style">float: left; margin-top: <xsl:value-of select="(@height - 16) div 2"/>px; width: <xsl:value-of select="@width"/>px;</xsl:with-param>
-				<xsl:with-param name="value-class">
-                    <xsl:text>captcha</xsl:text>
-    				<xsl:if test="FormResult/msg = 'invalid-captcha'">
-                        <xsl:text> invalid</xsl:text>
-    				</xsl:if>
-				</xsl:with-param>
-	
-				<xsl:with-param name="image-alt"/>
-				<xsl:with-param name="image-alt-i18n" select="false()"/>
-				<xsl:with-param name="image-class">captcha-image</xsl:with-param>
-				<xsl:with-param name="image-style">float:left; margin: 3px 3px 0 10px</xsl:with-param>
-			</xsl:call-template> 
-
+            <div class="field">
+                <div class="label">
+                    <label for="captcha"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA"/></label>
+                </div>
+                <div class="input">
+                    <xsl:call-template name="captcha">
+                        <xsl:with-param name="key-name" select="'captcha-key'"/>
+            
+                        <xsl:with-param name="value-name" select="'captcha'"/>
+                        <xsl:with-param name="value-id" select="concat('captcha-', $uniqueId)"/>
+                        <xsl:with-param name="value-class">
+                            <xsl:text>captcha</xsl:text>
+                            <xsl:if test="FormResult/msg = 'invalid-captcha'">
+                                <xsl:text> invalid</xsl:text>
+                            </xsl:if>
+                        </xsl:with-param>
+            
+                        <xsl:with-param name="image-alt"/>
+                        <xsl:with-param name="image-alt-i18n" select="false()"/>
+                        <xsl:with-param name="image-class">captcha-image</xsl:with-param>
+                    </xsl:call-template>                
+                </div>
+            </div>
+                        
 			<xsl:if test="FormResult/msg = 'invalid-captcha'">
-				<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA_INVALID"/></div>
+				<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CAPTCHA_INVALID"/></p>
 			</xsl:if>
-			<br class="break"/>
+            <div class="bottom"><xsl:comment>empty</xsl:comment></div>
 			
 			<input type="hidden" name="subscribe"/>
 			<input type="hidden" name="siteName" value="{$siteName}"/>
-			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_INPUT_SUBMIT" i18n:attr="value"/>
+			
+            <xsl:call-template name="common-service-body-input-submit">
+                <xsl:with-param name="value">plugin.<xsl:value-of select="$plugin"/>:NEWSLETTERS_SERVICE_INPUT_SUBMIT</xsl:with-param>
+            </xsl:call-template>
 		</form>
 	</xsl:template>
 	
@@ -198,26 +229,30 @@
 		</xsl:choose>
 		
 		<xsl:if test="FormResult/msg = 'invalid-category'">
-			<div class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CATEGORY_INVALID"/></div>
+			<p class="error"><i18n:text i18n:key="NEWSLETTERS_SERVICE_INPUT_CATEGORY_INVALID"/></p>
 		</xsl:if>
 			
-		<br/><br/>
 	</xsl:template>
 	
 	<xsl:template match="category">
 		<xsl:param name="indent">0</xsl:param>
 		
 		<xsl:variable name="id" select="@id"/>
-		<input type="checkbox" name="category" value="{@id}" id="category_{$uniqueId}_{position()}" style="margin-left: {$indent}px">
-			<xsl:if test="/NewsletterService/FormResult/category[. = $id]">
-				<xsl:attribute name="checked">checked</xsl:attribute>
-			</xsl:if>
-		</input>
-		<label for="category_{$uniqueId}_{position()}"><xsl:value-of select="title"/></label>
-		<xsl:if test="description != ''">
-			<span class="description">(<xsl:value-of select="description"/>)</span>
-		</xsl:if>
-		<br/>
+		<div class="field checkbox">
+            <div class="input">
+                <input type="checkbox" name="category" value="{@id}" id="category_{$uniqueId}_{position()}" style="margin-left: {$indent}px">
+                    <xsl:if test="/NewsletterService/FormResult/category[. = $id]">
+                        <xsl:attribute name="checked">checked</xsl:attribute>
+                    </xsl:if>
+                </input>            
+            </div>
+            <div class="label">
+                <label for="category_{$uniqueId}_{position()}"><xsl:value-of select="title"/></label>
+                <xsl:if test="description != ''">
+                    <span class="description">(<xsl:value-of select="description"/>)</span>
+                </xsl:if>            
+            </div>            
+        </div>
 		
 		<xsl:apply-templates select="category">
 			<xsl:with-param name="indent" select="$indent + 20"/>
@@ -225,6 +260,7 @@
 		
 	</xsl:template>
 	
+    <!-- TODO -->
 	<xsl:template name="mentions">
 		<div class="mentions">
 			<i18n:text i18n:key="NEWSLETTERS_SERVICE_LEGAL_MENTIONS"/>
Index: webapp/cms/plugins/newsletter/pages/unsubscribe.xsl
===================================================================
--- webapp/cms/plugins/newsletter/pages/unsubscribe.xsl	(revision 9137)
+++ webapp/cms/plugins/newsletter/pages/unsubscribe.xsl	(working copy)
@@ -85,8 +85,7 @@
 			<input type="hidden" name="categoryId" value="{categoryId}"/>
 			<input type="hidden" name="email" value="{email}"/>
 			
-			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_UNSUBSCRIBE_CONFIRM_BTN" i18n:attr="value">
-			</input>
+			<input type="submit" class="submit" value="NEWSLETTERS_SERVICE_UNSUBSCRIBE_CONFIRM_BTN" i18n:attr="value"/>
 		</form>
 	</xsl:template>
 	
Index: webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl
===================================================================
--- webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl	(revision 9137)
+++ webapp/cms/plugins/socialnetworking/pages/services/twitter/show-tweets.xsl	(working copy)
@@ -20,91 +20,127 @@
 	xmlns:math="http://exslt.org/math" 
 	exclude-result-prefixes="math">
 	
+    <xsl:import href="service:web://pages/services/common.xsl"/>    
+    
+    <!-- TODO -->
 	<xsl:param name="usersnames" />
+    <!-- TODO -->
 	<xsl:param name="max" />
+    <!-- TODO -->
 	<xsl:param name="displayicon" />
+    <!-- TODO -->
 	<xsl:param name="contextPath" />
+    <!-- TODO -->
 	<xsl:param name="pluginName" />
-	
-	<xsl:template match="/">
-		<xsl:variable name="id" select="concat('show_tweets_', substring-after(math:random(), '.'))"/>
-	
-		<html>
-			<head>
-				<script type="text/javascript" src="{$contextPath}/plugins/{$pluginName}/resources/js/twitter/jquery.jtweetsanywhere-1.2.0.min.js" /> 
-				
-				<link type="text/css" href="{$contextPath}/plugins/{$pluginName}/resources/css/twitter/jquery.jtweetsanywhere-1.2.0.css" rel="stylesheet" />
+    
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">socialnetworking socialnetworking-tweets</xsl:variable>
+    <xsl:variable name="common-service-id-name" select="concat('show_tweets_', substring-after(math:random(), '.'))"/>
+    <xsl:variable name="is-empty" select="false()"/>    
+    
+    
+    <!-- +
+         | HEAD
+         + -->    
 
-				<script type="text/javascript">
-					function <xsl:value-of select="$id"/>_onready() 
-					{
-						var accounts = "<xsl:value-of select="$usersnames" />".split(',');
-						var finalAccounts = [];
-						
-						for (var i = 0; i &lt; accounts.length; i++)
-						{
-							var account = accounts[i];
-							if (account != null &amp;&amp; account.replace(/^\s+|\s+$/g, "") != '')
-							{
-								finalAccounts.push(account.replace(/^\s+|\s+$/g, ""));
-							}
-						}
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link type="text/css" href="{$contextPath}/plugins/{$pluginName}/resources/css/twitter/jquery.jtweetsanywhere-1.2.0.css" rel="stylesheet" />    
+    </xsl:template>    
+    
+    <!-- Used in common.xsl -->
+    <xsl:template name="common-service-head-js">
+        <script type="text/javascript" src="{$contextPath}/plugins/{$pluginName}/resources/js/twitter/jquery.jtweetsanywhere-1.2.0.min.js" />
+        <script type="text/javascript">
+            function <xsl:value-of select="$common-service-id-name"/>_onready() 
+            {
+                var accounts = "<xsl:value-of select="$usersnames" />".split(',');
+                var finalAccounts = [];
+                
+                for (var i = 0; i &lt; accounts.length; i++)
+                {
+                    var account = accounts[i];
+                    if (account != null &amp;&amp; account.replace(/^\s+|\s+$/g, "") != '')
+                    {
+                        finalAccounts.push(account.replace(/^\s+|\s+$/g, ""));
+                    }
+                }
 
-				   		$j('div#<xsl:value-of select="$id"/>').jTweetsAnywhere(
-				   			{
-						        username: finalAccounts,
-						        count: <xsl:value-of select="$max" />,
-						        showTweetFeed: {
-								        showSource: true, // show info about the source of the tweet
-								        showTimestamp: true, // to display a tweet's timestamp
-								        expandHovercards: true, // show Hovercards in expanded mode
-								        showProfileImages : <xsl:value-of select="$displayicon" /> // display a profile image in tweets
-								},
-								includeRetweets: true,
-								showConnectButton: true,
-							    showLoginInfo: true,
-							    tweetSourceDecorator: function(tweet, options)
-								{
-									// if tweet is a native retweet, use the retweet's source
-									var tw = tweet.retweeted_status || tweet;
-							
-									var source = tw.source.replace(/\&amp;lt\;/gi,'&lt;').replace(/\&amp;gt\;/gi,'>').replace(/\&amp;quot\;/gi,'"');
-									var html =
-										'&lt;span class="jta-tweet-source">' +
-										' via ' +
-										'&lt;span class="jta-tweet-source-link">' +
-										source +
-										'&lt;/span>' +
-										'&lt;/span> ' +
-									    '&lt;a class="jta-tweet-retweet" target="_blank" href="http://twitter.com/home?status=' + 'RT+@' + tweet.from_user + ':+' + encodeURIComponent(tweet.text) + '">'
-									    + '<i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_RETWEET"/>'
-									    + '&lt;/a>';
-							
-									return html;
-								}
-							}					        
-					    );
-					}
-					$j(document).ready(<xsl:value-of select="$id"/>_onready);
-				</script>
-			</head>
-			<body>
-				<div id="{$id}" class="show-tweets">
-					<noscript>
-						<p><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_BEGIN"/></p>
-						<ul>
-							<xsl:call-template name="split-usernames">
-								<xsl:with-param name="usersnames" select="$usersnames"/>
-							</xsl:call-template>
-						</ul>
-						<p><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_END"/></p>
-					</noscript>
-				</div>
-			</body>
-		</html>
-	</xsl:template>
+                $j('div#<xsl:value-of select="$common-service-id-name"/>').jTweetsAnywhere(
+                    {
+                        username: finalAccounts,
+                        count: <xsl:value-of select="$max" />,
+                        showTweetFeed: {
+                                showSource: true, // show info about the source of the tweet
+                                showTimestamp: true, // to display a tweet's timestamp
+                                expandHovercards: true, // show Hovercards in expanded mode
+                                showProfileImages : <xsl:value-of select="$displayicon" /> // display a profile image in tweets
+                        },
+                        includeRetweets: true,
+                        showConnectButton: true,
+                        showLoginInfo: true,
+                        tweetSourceDecorator: function(tweet, options)
+                        {
+                            // if tweet is a native retweet, use the retweet's source
+                            var tw = tweet.retweeted_status || tweet;
+                    
+                            var source = tw.source.replace(/\&amp;lt\;/gi,'&lt;').replace(/\&amp;gt\;/gi,'>').replace(/\&amp;quot\;/gi,'"');
+                            var html =
+                                '&lt;span class="jta-tweet-source">' +
+                                ' via ' +
+                                '&lt;span class="jta-tweet-source-link">' +
+                                source +
+                                '&lt;/span>' +
+                                '&lt;/span> ' +
+                                '&lt;a class="jta-tweet-retweet" target="_blank" href="http://twitter.com/home?status=' + 'RT+@' + tweet.from_user + ':+' + encodeURIComponent(tweet.text) + '">'
+                                + '<i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_RETWEET"/>'
+                                + '&lt;/a>';
+                    
+                            return html;
+                        }
+                    }                           
+                );
+            }
+            $j(document).ready(<xsl:value-of select="$common-service-id-name"/>_onready);
+        </script>            
+    </xsl:template>     
+    
+    <!-- +
+         | ROOT TEMPLATE
+         + -->    
+    <xsl:template match="/">
+         <xsl:call-template name="common-service"/> 
+    </xsl:template>
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <!-- TODO add title CMS-2706 -->
+<!--        <xsl:call-template name="common-service-body-nonempty-content-title">-->
+<!--            <xsl:with-param name="title" select="$service-title"/>-->
+<!--            <xsl:with-param name="default-title">plugin.newsletter:NEWSLETTERS_SERVICE_LIST_DESCRIPTION</xsl:with-param>-->
+<!--        </xsl:call-template>-->
+        
+        <xsl:call-template name="socialnetworking-noscript"/>
+    </xsl:template>        
 	
-	<xsl:template name="split-usernames">
+    <xsl:template name="socialnetworking-noscript">
+        <noscript>
+            <p><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_BEGIN"/></p>
+            <ul>
+                <xsl:call-template name="split-usernames">
+                    <xsl:with-param name="usersnames" select="$usersnames"/>
+                </xsl:call-template>
+            </ul>
+            <p><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_END"/></p>
+        </noscript>    
+    </xsl:template>
+    
+    <!-- TODO -->	
+    <xsl:template name="split-usernames">
 		<xsl:param name="usersnames"/>
 		
 		<xsl:variable name="username" select="translate(substring-before($usersnames, ','), ' ', '')"/>
@@ -126,9 +162,16 @@
 		</xsl:choose>
 	</xsl:template>
 	
+    <!-- TODO -->    
 	<xsl:template name="show-tweet">
 		<xsl:param name="username"/>
 		
-		<li><a href="http://twitter.com/{$username}"><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_USER_BEGIN"/><xsl:value-of select="$username"/><i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_USER_END"/></a></li>
+		<li>
+            <a href="http://twitter.com/{$username}">
+               <i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_USER_BEGIN"/>
+	           <xsl:value-of select="$username"/>
+               <i18n:text i18n:key="PLUGINS_SOCIAL_NETWORKING_TWITTER_NOSCRIPT_USER_END"/>
+            </a>
+        </li>
 	</xsl:template>
 </xsl:stylesheet>
Index: webapp/cms/plugins/news/pages/services/calendar/calendar.xsl
===================================================================
--- webapp/cms/plugins/news/pages/services/calendar/calendar.xsl	(revision 9137)
+++ webapp/cms/plugins/news/pages/services/calendar/calendar.xsl	(working copy)
@@ -25,194 +25,257 @@
     xmlns:escaper="org.apache.commons.lang.StringEscapeUtils"
     extension-element-prefixes="resolver exsl math escaper page">
     
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+        
+    <!-- TODO -->    
     <xsl:param name="cms-context"/>
+    <!-- TODO -->
     <xsl:param name="contextPath"/>
+    <!-- TODO -->
     <xsl:param name="prefix"/>
+    <!-- TODO -->
     <xsl:param name="plugin"/>
+    <!-- TODO -->
     <xsl:param name="site"/>
+    <!-- TODO -->
     <xsl:param name="lang"/>
+    <!-- TODO -->
     <xsl:param name="title"/>
+    <!-- TODO -->
     <xsl:param name="months-before">3</xsl:param>
+    <!-- TODO -->
     <xsl:param name="months-after">3</xsl:param>
+    <!-- TODO -->
     <xsl:param name="contents-on-same-page"/>
+    <!-- TODO -->
     <xsl:param name="link"/>
+    <!-- TODO -->
     <xsl:param name="link-title"/>
     
     <xsl:variable name="uniqueId" select="substring-after(math:random(), '.')"/>
     
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">events-calendar</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/events/contents)"/>    
+
+    <xsl:variable name="tags-parameters">
+        <xsl:for-each select="events/tags/tag">
+            <xsl:if test="position() &gt; 1">&amp;</xsl:if>
+            <xsl:text>tag=</xsl:text>
+            <xsl:value-of select="@name"/>
+        </xsl:for-each>
+    </xsl:variable>
+    <xsl:variable name="tags-path">
+        <xsl:for-each select="events/tags/tag">
+            <xsl:if test="position() &gt; 1">%20</xsl:if>
+            <xsl:value-of select="@name"/>
+        </xsl:for-each>
+    </xsl:variable>
+    
+    
+    <!-- +
+         | ROOT TEMPLATE
+         + -->    
     <xsl:template match="/">
-        <xsl:variable name="tags-parameters">
-            <xsl:for-each select="events/tags/tag">
-                <xsl:if test="position() &gt; 1">&amp;</xsl:if>
-                <xsl:text>tag=</xsl:text>
-                <xsl:value-of select="@name"/>
-            </xsl:for-each>
-        </xsl:variable>
-        <xsl:variable name="tags-path">
-            <xsl:for-each select="events/tags/tag">
-                <xsl:if test="position() &gt; 1">%20</xsl:if>
-                <xsl:value-of select="@name"/>
-            </xsl:for-each>
-        </xsl:variable>
-        <html>
-            <head>
-                <script type="text/javascript">
-                var events<xsl:value-of select="$uniqueId"/> = [];
-                var baseUrl = '<xsl:value-of select="concat($contextPath, '/plugins/', $plugin, '/', $site, '/', $lang, '/')"/>';
-                var samePage<xsl:value-of select="$uniqueId"/> = <xsl:value-of select="$contents-on-same-page"/>;
-                
-                <xsl:apply-templates select="events/contents/event[pages/page]" mode="calendar"/>
-                
-                var beforeShowDay<xsl:value-of select="$uniqueId"/> = function(date)
+         <xsl:call-template name="common-service"/> 
+    </xsl:template>
+    
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-js">
+        <script type="text/javascript">
+        var events<xsl:value-of select="$uniqueId"/> = [];
+        var baseUrl = '<xsl:value-of select="concat($contextPath, '/plugins/', $plugin, '/', $site, '/', $lang, '/')"/>';
+        var samePage<xsl:value-of select="$uniqueId"/> = <xsl:value-of select="$contents-on-same-page"/>;
+        
+        <xsl:apply-templates select="events/contents/event[pages/page]" mode="calendar"/>
+        
+        var beforeShowDay<xsl:value-of select="$uniqueId"/> = function(date)
+        {
+            var events = events<xsl:value-of select="$uniqueId"/>;
+            var eventsCount = 0;
+            for (var i = 0; i &lt; events.length; i++)
+            {
+                if (isEvent(date, events[i]))
                 {
-                    var events = events<xsl:value-of select="$uniqueId"/>;
-                    var eventsCount = 0;
-                    for (var i = 0; i &lt; events.length; i++)
-                    {
-                        if (isEvent(date, events[i]))
-                        {
-                            eventsCount++;
-                        }
-                    }
-                    
-                    return [eventsCount &gt; 0, '', '<i18n:text i18n:key="NEWS_SERVICE_CALENDAR_EVENTS_COUNT"/> ' + eventsCount];
+                    eventsCount++;
                 }
+            }
+            
+            return [eventsCount &gt; 0, '', '<i18n:text i18n:key="NEWS_SERVICE_CALENDAR_EVENTS_COUNT"/> ' + eventsCount];
+        }
+        
+        var onSelect<xsl:value-of select="$uniqueId"/> = function(dateText, inst)
+        {
+            var events = events<xsl:value-of select="$uniqueId"/>;
+            
+            var date = $j.datepicker.parseDate('yy-mm-dd', dateText);
+            
+            if (samePage<xsl:value-of select="$uniqueId"/>)
+            {
+                var html = '';
                 
-                var onSelect<xsl:value-of select="$uniqueId"/> = function(dateText, inst)
+                for (var i = 0; i &lt; events.length; i++)
                 {
-                    var events = events<xsl:value-of select="$uniqueId"/>;
-                    
-                    var date = $j.datepicker.parseDate('yy-mm-dd', dateText);
-                    
-                    if (samePage<xsl:value-of select="$uniqueId"/>)
-                    {
-                        var html = '';
-                        
-                        for (var i = 0; i &lt; events.length; i++)
-                        {
-                            if (isEvent(date, events[i]))
-                            {
-                                var id = 'event-<xsl:value-of select="$uniqueId"/>-' + events[i].eventId;
-                                html += $j('#' + id).html();
-                            }
-                        }
-                        
-                        if (html != '')
-                        {
-                            $j("#day-events-<xsl:value-of select="$uniqueId"/> .date").html($j.datepicker.formatDate('d MM yy', date));
-                            $j("#day-events-<xsl:value-of select="$uniqueId"/> .list").html(html);
-                            $j('.events').show();
-                        }
-                        else
-                        {
-                            $j('.events').hide();
-                        }
-                    }
-                    else
+                    if (isEvent(date, events[i]))
                     {
-                        var dateStr = $j.datepicker.formatDate('yy/mm/dd', date);
-                        var eventsUrl = '<xsl:value-of select="concat($cms-context, '/', $lang, '/_plugins/', $plugin, '/page/')"/>' + dateStr + '/' + encodeURIComponent(encodeURIComponent('<xsl:value-of select="/events/@zoneItemId"/>')) + '/events.html';
-                        document.location.href = eventsUrl;
+                        var id = 'event-<xsl:value-of select="$uniqueId"/>-' + events[i].eventId;
+                        html += $j('#' + id).html();
                     }
                 }
                 
-                var isEvent = function(date, event)
+                if (html != '')
                 {
-                    var isEvent = false;
-                    
-                    var start = $j.datepicker.parseDate('yy-mm-dd', event.start);
-                    var end = $j.datepicker.parseDate('yy-mm-dd', event.end);
-                    
-                    if (start == null &amp;&amp; end != null)
-                    {
-                        isEvent = date.getFullYear() == end.getFullYear() &amp;&amp; date.getMonth() == end.getMonth() &amp;&amp; date.getDate() == end.getDate();
-                    }
-                    else if (start != null &amp;&amp; end == null)
-                    {
-                        isEvent = date.getFullYear() == start.getFullYear() &amp;&amp; date.getMonth() == start.getMonth() &amp;&amp; date.getDate() == start.getDate();
-                    }
-                    else if (start != null &amp;&amp; end != null)
-                    {
-                        isEvent = (date.getTime() &gt;= start.getTime() &amp;&amp; date.getTime() &lt;= end.getTime());
-                    }
-                    
-                    return isEvent;
+                    $j("#day-events-<xsl:value-of select="$uniqueId"/> .date").html($j.datepicker.formatDate('d MM yy', date));
+                    $j("#day-events-<xsl:value-of select="$uniqueId"/> .list").html(html);
+                    $j('.events').show();
                 }
-                
-                $j(function() {
-                    $j("#all-events-<xsl:value-of select="$uniqueId"/>").hide();
-                    $j("#calendar-<xsl:value-of select="$uniqueId"/>").datepicker({
-                        <!-- Range -->
-                        minDate: '-<xsl:value-of select="$months-before"/>M',
-                        maxDate: '+<xsl:value-of select="$months-after"/>M',
-                        <!-- Date format -->
-                        dateFormat: 'yy-mm-dd',
-                        <!-- Event handlers. -->
-                        beforeShowDay: beforeShowDay<xsl:value-of select="$uniqueId"/>,
-                        onSelect: onSelect<xsl:value-of select="$uniqueId"/>
-                    });
-                });
-                </script>
-            </head>
+                else
+                {
+                    $j('.events').hide();
+                }
+            }
+            else
+            {
+                var dateStr = $j.datepicker.formatDate('yy/mm/dd', date);
+                var eventsUrl = '<xsl:value-of select="concat($cms-context, '/', $lang, '/_plugins/', $plugin, '/page/')"/>' + dateStr + '/' + encodeURIComponent(encodeURIComponent('<xsl:value-of select="/events/@zoneItemId"/>')) + '/events.html';
+                document.location.href = eventsUrl;
+            }
+        }
+        
+        var isEvent = function(date, event)
+        {
+            var isEvent = false;
+            
+            var start = $j.datepicker.parseDate('yy-mm-dd', event.start);
+            var end = $j.datepicker.parseDate('yy-mm-dd', event.end);
+            
+            if (start == null &amp;&amp; end != null)
+            {
+                isEvent = date.getFullYear() == end.getFullYear() &amp;&amp; date.getMonth() == end.getMonth() &amp;&amp; date.getDate() == end.getDate();
+            }
+            else if (start != null &amp;&amp; end == null)
+            {
+                isEvent = date.getFullYear() == start.getFullYear() &amp;&amp; date.getMonth() == start.getMonth() &amp;&amp; date.getDate() == start.getDate();
+            }
+            else if (start != null &amp;&amp; end != null)
+            {
+                isEvent = (date.getTime() &gt;= start.getTime() &amp;&amp; date.getTime() &lt;= end.getTime());
+            }
             
-            <body id="default">
-                <div class="events-calendar">
-                	<xsl:if test="$title != ''">
-	                    <h1 class="title"><xsl:value-of select="$title"/></h1>
-                	</xsl:if>
-                    <div id="calendar-{$uniqueId}"/>
-                    <div id="day-events-{$uniqueId}" class="events" style="display:none">
-                        <h2>
-                            <span class="date">
-                                <!-- Day placeholder -->
+            return isEvent;
+        }
+        
+        $j(function() {
+            $j("#all-events-<xsl:value-of select="$uniqueId"/>").hide();
+            $j("#calendar-<xsl:value-of select="$uniqueId"/>").datepicker({
+                <!-- Range -->
+                minDate: '-<xsl:value-of select="$months-before"/>M',
+                maxDate: '+<xsl:value-of select="$months-after"/>M',
+                <!-- Date format -->
+                dateFormat: 'yy-mm-dd',
+                <!-- Event handlers. -->
+                beforeShowDay: beforeShowDay<xsl:value-of select="$uniqueId"/>,
+                onSelect: onSelect<xsl:value-of select="$uniqueId"/>
+            });
+        });
+        </script>
+    </xsl:template>
+
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$title"/>
+        </xsl:call-template>
+        
+        <xsl:call-template name="link-top"/>
+        
+        <xsl:call-template name="calendar"/>
+        
+        <xsl:call-template name="all-news"/>        
+        
+        <xsl:call-template name="link-bottom"/>
+
+    </xsl:template>
+        
+    <xsl:template name="link-top"/>
+    
+    <xsl:template name="link-bottom">
+        <xsl:call-template name="link"/>
+    </xsl:template> 
+    
+    <xsl:template name="link">
+        <xsl:if test="starts-with($link, 'page://')">
+            <xsl:variable name="url" select="resolver:resolve('page', $link)"/>
+            <xsl:if test="$url != ''">
+                <div class="link">
+                    <a href="{$url}">
+                        <xsl:choose>
+                            <xsl:when test="$link-title != ''">
+                                <xsl:value-of select="$link-title"/>
+                            </xsl:when>
+                            <xsl:otherwise>
+                                <xsl:value-of select="page:getTitle($link)"/>
+                            </xsl:otherwise>
+                        </xsl:choose>
+                    </a>
+                </div>
+            </xsl:if>
+        </xsl:if>    
+    </xsl:template>
+
+    <xsl:template name="calendar">    
+        <div id="calendar-{$uniqueId}"/>
+        <div id="day-events-{$uniqueId}" class="events" style="display:none">
+            <xsl:call-template name="news-date"/>
+            <xsl:call-template name="news-list"/>
+        </div>        
+    </xsl:template>
+    
+    <xsl:template name="news-date">
+        <h2>
+            <span class="date">
+                <!-- Day placeholder -->
+            </span>
+        </h2>    
+    </xsl:template>
+
+    <xsl:template name="news-list">
+        <div class="list">
+            <!-- Events placeholder -->
+        </div>    
+    </xsl:template>
+    
+    <xsl:template name="all-news">
+        <xsl:if test="events/contents/event">
+        <div id="all-events-{$uniqueId}">
+            <ul>
+                <xsl:for-each select="events/months/month">
+                    <xsl:if test="/events/contents/event[starts-with(content/metadata/start-date, current()/@str)]">
+                        <li class="month {@str}">
+                            <span>
+                                <i18n:date src-pattern="yyyy-MM-dd'T'hh:mm:ss" pattern="MMMM yyyy" value="{@raw}"/>
                             </span>
-                        </h2>
-                        <div class="list">
-                            <!-- Events placeholder -->
-                        </div>
-                    </div>
-                    <xsl:if test="events/contents/event">
-                    <div id="all-events-{$uniqueId}">
-                        <ul>
-                            <xsl:for-each select="events/months/month">
-                                <xsl:if test="/events/contents/event[starts-with(content/metadata/start-date, current()/@str)]">
-                                    <li class="month {@str}">
-                                        <span>
-                                            <i18n:date src-pattern="yyyy-MM-dd'T'hh:mm:ss" pattern="MMMM yyyy" value="{@raw}"/>
-                                        </span>
-                                        <ul>
-                                            <xsl:for-each select="/events/contents/event[starts-with(content/metadata/start-date, current()/@str)]">
-                                                <li id="event-{$uniqueId}-{substring-after(content/@id, '//')}" class="event">
-                                                    <xsl:copy-of select="view/content/html/body/node()"/>
-                                                </li>
-                                            </xsl:for-each>
-                                        </ul>
+                            <ul>
+                                <xsl:for-each select="/events/contents/event[starts-with(content/metadata/start-date, current()/@str)]">
+                                    <li id="event-{$uniqueId}-{substring-after(content/@id, '//')}" class="event">
+                                        <xsl:copy-of select="view/content/html/body/node()"/>
                                     </li>
-                                </xsl:if>
-                            </xsl:for-each>
-                        </ul>
-                    </div>
+                                </xsl:for-each>
+                            </ul>
+                        </li>
                     </xsl:if>
-                    <xsl:if test="starts-with($link, 'page://')">
-                        <xsl:variable name="url" select="resolver:resolve('page', $link)"/>
-                        <xsl:if test="$url != ''">
-                            <div class="link">
-                                <a href="{$url}">
-                                    <xsl:choose>
-                                        <xsl:when test="$link-title != ''">
-                                            <xsl:value-of select="$link-title"/>
-                                        </xsl:when>
-                                        <xsl:otherwise>
-                                        	<xsl:value-of select="page:getTitle($link)"/>
-                                        </xsl:otherwise>
-                                    </xsl:choose>
-                                </a>
-                            </div>
-                        </xsl:if>
-                    </xsl:if>
-                </div>
-            </body>
-        </html>
+                </xsl:for-each>
+            </ul>
+        </div>
+        </xsl:if>
     </xsl:template>
     
     <xsl:template match="event" mode="calendar">
Index: webapp/cms/plugins/cms/stylesheets/helper/common.xsl
===================================================================
--- webapp/cms/plugins/cms/stylesheets/helper/common.xsl	(revision 9137)
+++ webapp/cms/plugins/cms/stylesheets/helper/common.xsl	(working copy)
@@ -122,14 +122,12 @@
 		
 		<xsl:param name="value-name">captcha-value</xsl:param>
 		<xsl:param name="value-id" select="concat('id', substring-after(math:random(), '.'))"/>
-		<xsl:param name="value-style"/>
 		<xsl:param name="value-class"/>
 		
 		<xsl:param name="image-id" select="concat('id', substring-after(math:random(), '.'))"/>
 		<xsl:param name="image-alt"/>
 		<xsl:param name="image-alt-i18n" select="false()"/>
 		<xsl:param name="image-alt-catalogue"/>
-		<xsl:param name="image-style"/>
 		<xsl:param name="image-class"/>
 		
 		<xsl:param name="allow-refresh" select="true()"/>
@@ -141,9 +139,7 @@
 		
 			<input type="hidden" name="{$key-name}" id="{$key-id}" value="{$id}"/>
 			
-			<input type="text" name="{$value-name}" maxlength="6" id="{$value-id}" style="{$value-style}" class="{$value-class}"/>
-			
-			<img style="{$image-style}" class="{$image-class}" src="{$contextPath}/plugins/cms/captcha/{$id}/image.png" id="{$image-id}">
+            <img class="{$image-class}" src="{$contextPath}/plugins/cms/captcha/{$id}/image.png" id="{$image-id}">
                 <xsl:attribute name="alt">
                     <xsl:if test="$image-alt-i18n and $image-alt-catalogue != ''">
                         <xsl:value-of select="$image-alt-catalogue"/>
@@ -151,16 +147,19 @@
                     </xsl:if>
                     <xsl:value-of select="$image-alt"/>
                 </xsl:attribute>
-				<xsl:if test="$image-alt-i18n"><xsl:attribute name="i18n:attr">alt</xsl:attribute></xsl:if>
-			</img>
+                <xsl:if test="$image-alt-i18n"><xsl:attribute name="i18n:attr">alt</xsl:attribute></xsl:if>
+            </img>
+            
+            <div class="image-captcha-help"><i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH_NOSCRIPT" i18n:catalogue="plugin.cms"/></div>
+            			
+            <input type="text" name="{$value-name}" maxlength="6" id="{$value-id}" class="{$value-class}"/>
 			
-			<div class="image-captcha-help"><i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH_NOSCRIPT" i18n:catalogue="plugin.cms"/></div>
 		</noscript>
 		
 		<script type="text/javascript">
 			document.write("&lt;input type=\"hidden\" name=\"<xsl:value-of select='$key-name'/>\" id=\"<xsl:value-of select="$key-id"/>\"/&gt;")
-			document.write("&lt;input type=\"text\" name=\"<xsl:value-of select='$value-name'/>\" id=\"<xsl:value-of select="$value-id"/>\" style=\"<xsl:value-of select="$value-style"/>\" class=\"<xsl:value-of select="$value-class"/>\"/ autocomplete=\"off\"&gt;")
-			document.write("&lt;img style=\"<xsl:value-of select="$image-style"/>\" class=\"<xsl:value-of select="$image-class"/>\" alt=\"<xsl:choose><xsl:when test="$image-alt-i18n"><i18n:text i18n:key="{$image-alt}"><xsl:if test="$image-alt-catalogue != ''"><xsl:attribute name="i18n:catalogue"><xsl:value-of select="$image-alt-catalogue"/></xsl:attribute></xsl:if></i18n:text></xsl:when><xsl:otherwise><xsl:value-of select="$image-alt"/></xsl:otherwise></xsl:choose>\" id=\"<xsl:value-of select="$image-id"/>\" src=\"\"/&gt;");
+            document.write("&lt;img class=\"<xsl:value-of select="$image-class"/>\" alt=\"<xsl:choose><xsl:when test="$image-alt-i18n"><i18n:text i18n:key="{$image-alt}"><xsl:if test="$image-alt-catalogue != ''"><xsl:attribute name="i18n:catalogue"><xsl:value-of select="$image-alt-catalogue"/></xsl:attribute></xsl:if></i18n:text></xsl:when><xsl:otherwise><xsl:value-of select="$image-alt"/></xsl:otherwise></xsl:choose>\" id=\"<xsl:value-of select="$image-id"/>\" src=\"\"/&gt;")
+            document.write("&lt;input type=\"text\" name=\"<xsl:value-of select='$value-name'/>\" id=\"<xsl:value-of select="$value-id"/>\" class=\"<xsl:value-of select="$value-class"/>\"/ autocomplete=\"off\"&gt;");
 			<xsl:if test="$allow-refresh = true()">
 				document.write("&lt;button title=\"<i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH_ALT" i18n:catalogue="plugin.cms"/>\" class=\"captcha-refresh-btn\" onclick=\"<xsl:value-of select="$js-funcname-torefresh"/>(false); return false;\"&gt;&lt;span&gt;<i18n:text i18n:key="PLUGINS_CMS_CONTENT_CAPTCHA_REFRESH" i18n:catalogue="plugin.cms"/>&lt;/span&gt;&lt;/button&gt;");
 			</xsl:if>
Index: webapp/cms/plugins/mypage/pages/services/search.xsl.old
===================================================================
--- webapp/cms/plugins/mypage/pages/services/search.xsl.old	(revision 9137)
+++ webapp/cms/plugins/mypage/pages/services/search.xsl.old	(working copy)
@@ -24,245 +24,263 @@
     extension-element-prefixes="resolver math format">
     
     <xsl:import href="plugin:cms://stylesheets/helper/common.xsl"/>
+    <xsl:import href="service:web://pages/services/common.xsl"/>    
     
+    <!-- TODO -->
     <xsl:param name="cms-context"/>
+    <!-- TODO -->
     <xsl:param name="contextPath"/>
+    <!-- TODO -->
     <xsl:param name="prefix"/>
+    <!-- TODO -->
     <xsl:param name="plugin"/>
+    <!-- TODO -->
     <xsl:param name="siteName"/>
+    <!-- TODO -->
     <xsl:param name="lang"/>
     
     <xsl:variable name="uniqueId" select="substring-after(math:random(), '.')"/>
     
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">mypage search mypage-search</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/search)"/>     
+    
+    <!-- +
+         | ROOT TEMPLATE
+         + -->         
     <xsl:template match="/search">
-        <html>
-            <head>
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/{$plugin}/resources/css/mypage.css"/>
-                
-                <xsl:call-template name="extra-css"/>
-                
-                <xsl:call-template name="extra-scripts"/>
-            </head>
+        <xsl:call-template name="common-service"/>
+    </xsl:template>
             
-            <body id="default">
-                <div class="mypage-search-wrapper">
-                    
-                    <xsl:choose>
-                        <xsl:when test="normalize-space(parameters/header) != ''">
-                            <h1><xsl:value-of select="parameters/header"/></h1>
-                        </xsl:when>
-                        <xsl:otherwise>
-                             <h1><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_SERVICE_TITLE"/></h1>
-                        </xsl:otherwise>
-                    </xsl:choose>
-                    
-                    <xsl:if test="not(persons/person) or parameters/on-same-page = 'true'">
-                        <xsl:call-template name="search-form"/>
-                        
-                        <xsl:if test="parameters/alpha-search = 'true'">
-                            <xsl:call-template name="alpha-search"/>
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="parameters/header"/>
+            <xsl:with-param name="default-title">plugin.<xsl:value-of select="$plugin"/>:PLUGINS_MYPAGE_SEARCH_SERVICE_TITLE</xsl:with-param>            
+        </xsl:call-template>            
+
+        <!-- Btn back to search -->
+        <xsl:if test="@executed = 'true' and not(parameters/on-same-page = 'true')">
+            <xsl:call-template name="common-service-body-back-button">
+                <xsl:with-param name="value"/>
+                <xsl:with-param name="url" select="$cms-context/@url"/>
+            </xsl:call-template>
+            <div class="back">
+                <a href="{$cms-context}/{@url}">
+                    <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BACK_TO_FORM"/>
+                </a>
+            </div>
+        </xsl:if>                    
+        
+        <xsl:if test="not(persons/person) or parameters/on-same-page = 'true'">
+            <xsl:call-template name="search-form"/>
+            
+            <xsl:if test="parameters/alpha-search = 'true'">
+                <xsl:call-template name="alpha-search"/>
+            </xsl:if>
+        </xsl:if>
+        
+        <xsl:if test="@executed = 'true'">
+            <a name="nav"/>
+            
+            <div class="results">
+                <h2><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_TITLE"/></h2>
+                
+                <xsl:choose>
+                    <xsl:when test="persons/person">
+                        <xsl:if test="@has-more = 'true'">
+                            <p class="warning">
+                                <i18n:translate>
+                                    <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_TOO_MANY_RESULTS"/>
+                                    <i18n:param><xsl:value-of select="parameters/page-length"/></i18n:param>
+                                </i18n:translate>
+                            </p>
                         </xsl:if>
-                    </xsl:if>
-                    
-                    <xsl:if test="@executed = 'true'">
-                        <div class="results">
-                            <a name="results"/>
-                        
-                            <h2 class="title"><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_TITLE"/></h2>
-                            
-                            <xsl:choose>
-                                <xsl:when test="persons/person">
-                                    <xsl:if test="@has-more = 'true'">
-                                        <p class="warning">
-                                            <i18n:translate>
-                                                <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_TOO_MANY_RESULTS"/>
-                                                <i18n:param><xsl:value-of select="parameters/page-length"/></i18n:param>
-                                            </i18n:translate>
-                                        </p>
-                                    </xsl:if>
-                                
-                                    <xsl:apply-templates select="persons/person">
-                                        <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[1]/@name]"/>
-                                        <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[2]/@name]"/>
-                                        <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[3]/@name]"/>
-                                    </xsl:apply-templates>
-                                </xsl:when>
-                                <xsl:when test="not(values/value/@value[normalize-space(.) != '']) and normalize-space(@first-letter) = ''">
-                                    <p class="warning">
-                                        <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_EMPTY_FORM"/>
-                                    </p>
-                                </xsl:when>
-                                <xsl:otherwise>
-                                    <p class="no-result">
-                                        <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_NO_RESULT"/>
-                                    </p>
-                                </xsl:otherwise>
-                            </xsl:choose>
-                        </div>
-                    </xsl:if>
                     
-                    <xsl:if test="@executed = 'true' and not(parameters/on-same-page = 'true')">
-                        <a href="{$cms-context}/{@url}">
-                            <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BACK_TO_FORM"/>
-                        </a>
-                    </xsl:if>
-                </div>
-            </body>
-        </html>
+                        <xsl:apply-templates select="persons/person">
+                            <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[1]/@name]"/>
+                            <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[2]/@name]"/>
+                            <xsl:sort select="attributes/attribute[@name = /search/parameters/order-attributes/attribute[3]/@name]"/>
+                        </xsl:apply-templates>
+                    </xsl:when>
+                    <xsl:when test="not(values/value/@value[normalize-space(.) != '']) and normalize-space(@first-letter) = ''">
+                        <p class="warning">
+                            <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_EMPTY_FORM"/>
+                        </p>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <p class="no-result">
+                            <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_NO_RESULT"/>
+                        </p>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </div>
+        </xsl:if>
     </xsl:template>
     
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/{$plugin}/resources/css/mypage.css"/>    
+    </xsl:template>    
+    
     <xsl:template name="search-form">
-        <div class="search-form">
         
-            <form name="search-form" action="{$cms-context}/{@url}#results" method="POST">
-                <input type="hidden" name="execute-search" value="true"/>
-                
-                <xsl:apply-templates select="parameters/search-attributes/attribute" mode="input"/>
-                
-                <div class="button">
-                    <button type="submit" class="search">
-                        <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_SEARCH_ACTION"/>
-                    </button>
-                </div>
-            </form>
+        <form name="search-form" action="{$cms-context}/{@url}#results" method="POST">
+            <input type="hidden" name="execute-search" value="true"/>
             
-        </div>
+            <xsl:apply-templates select="parameters/search-attributes/attribute" mode="input"/>
+            
+            <div class="button">
+                <button type="submit" class="search">
+                    <i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_RESULTS_SEARCH_ACTION"/>
+                </button>
+            </div>
+        </form>
+            
     </xsl:template>
     
     <xsl:template name="alpha-search">
         <xsl:variable name="attribute" select="/search/parameters/search-attributes/attribute[@alpha-search = 'true']/@id"/>
         
-        <div class="alpha-search">
+        <div class="results-sort alpha">
             <h2><i18n:text i18n:key="PLUGINS_MYPAGE_SEARCH_BY_LETTER"/></h2>
             
             <form name="alpha-form" action="{$cms-context}/{@url}#results" method="POST">
-                <ul class="alpha-nav">
-                     <li class="letter">
+                <ul>
+                     <li>
                         <input type="submit" name="firstLetter" value="A">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'A'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                         </input>
                      </li>
-                     <li class="letter">
+                     <li>
                         <input type="submit" name="firstLetter" value="B">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'B'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                         </input>
                      </li>
-                     <li class="letter">
+                     <li>
                         <input type="submit" name="firstLetter" value="C">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'C'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                         </input>
                      </li>
-                     <li class="letter">
+                     <li>
                         <input type="submit" name="firstLetter" value="D">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'D'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                         </input>
                      </li>
-                     <li class="letter">
+                     <li>
                         <input type="submit" name="firstLetter" value="E">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'E'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                         </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="F">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'F'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="G">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'G'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="H">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'H'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="I">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'I'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="J">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'J'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="K">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'K'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="L">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'L'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="M">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'M'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="N">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'N'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="O">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'O'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="P">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'P'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="Q">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Q'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="R">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'R'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="S">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'S'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="T">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'T'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="U">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'U'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="V">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'V'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="W">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'W'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="X">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'X'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="Y">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Y'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
                      </li>
-                     <li class="letter">
+                     <li>
                          <input type="submit" name="firstLetter" value="Z">
                             <xsl:if test="/search/parameters/alpha-search = 'true' and /search/@first-letter = 'Z'"><xsl:attribute name="class">current</xsl:attribute></xsl:if>
                          </input>
@@ -277,7 +295,7 @@
         <xsl:variable name="fieldId" select="concat(@id, '-', $uniqueId)"/>
         <div class="field">
             <div class="label"><label for="{$fieldId}"><xsl:copy-of select="label/i18n:*"/><xsl:text> </xsl:text></label></div>
-            <div>
+            <div class="input">
                 <xsl:choose>
                     <xsl:when test="value">
                         <select id="{$fieldId}" name="{@name}">
@@ -293,7 +311,7 @@
                         </select>
                     </xsl:when>
                     <xsl:otherwise>
-                        <input id="{$fieldId}" type="text" name="{@name}">
+                        <input id="{$fieldId}" type="text" name="{@name}" class="text">
                             <xsl:if test="not(ancestor::search/@first-letter) or ancestor::search/@first-letter = ''">
                                 <xsl:attribute name="value"><xsl:value-of select="ancestor::search/values/value[@attribute = $id]/@value"/></xsl:attribute>
                             </xsl:if>
@@ -505,8 +523,5 @@
             </xsl:otherwise>
         </xsl:choose>
     </xsl:template>
-    
-    <xsl:template name="extra-scripts"></xsl:template>
-    
-    <xsl:template name="extra-css"></xsl:template>
+
 </xsl:stylesheet>

Property changes on: webapp/cms/plugins/mypage/pages/services/search.xsl.old
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Index: webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl
===================================================================
--- webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl	(revision 9137)
+++ webapp/cms/plugins/tagcloud/pages/services/tagcloud/tagcloud.xsl	(working copy)
@@ -19,71 +19,89 @@
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:escaper="org.ametys.runtime.plugins.core.EscapeForJavascript">
                 
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+
+    <!-- TODO -->                    
 	<xsl:param name="contextPath"/>
+    <!-- TODO -->    
 	<xsl:param name="cms-context"/>
+    <!-- TODO -->
 	<xsl:param name="lang"/>
+    <!-- TODO -->
 	<xsl:param name="service-title"/>
+    <!-- TODO -->
 	<xsl:param name="order-by"/>
 	
-	<xsl:template match="tagCloud">
-		<html>
-			<head>
-				<link href="{$contextPath}/plugins/tagcloud/resources/css/tagcloud.css" type="text/css" rel="stylesheet" />
-			</head>
-			
-			<body>
-				<div class="tag-cloud-wrapper">
-				
-					<xsl:if test="$service-title != ''">
-	        			<h1><xsl:value-of select="$service-title" /></h1>
-	        		</xsl:if>
-	        	
-	        		<div class="tag-cloud">
-	        			
-	        			<xsl:choose>
-			        		<xsl:when test="/tagCloud/searchUrl">
-			        			<xsl:choose>
-				        			<xsl:when test="$order-by = 'alphabetical'">
-				        				<xsl:apply-templates select="item" mode="form">
-				        					<xsl:sort select="text()"/>
-				        				</xsl:apply-templates>
-				        			</xsl:when>
-				        			<xsl:otherwise>
-				        				<xsl:apply-templates select="item" mode="form">
-				        					<xsl:sort select="@nb" order="descending"/>
-				        					<xsl:sort select="text()"/>
-				        				</xsl:apply-templates>
-				        			</xsl:otherwise>
-			        			</xsl:choose>
-			        		</xsl:when>
-			        		
-			        		<xsl:otherwise>
-			        			<xsl:choose>
-				        			<xsl:when test="$order-by = 'alphabetical'">
-				        				<ul>
-					        				<xsl:apply-templates select="item">
-					        					<xsl:sort select="text()"/>
-					        				</xsl:apply-templates>
-					        			</ul>
-				        			</xsl:when>
-				        			<xsl:otherwise>
-				        				<ul>
-					        				<xsl:apply-templates select="item">
-					        					<xsl:sort select="@nb" order="descending"/>
-					        					<xsl:sort select="text()"/>
-					        				</xsl:apply-templates>
-					        			</ul>
-				        			</xsl:otherwise>
-			        			</xsl:choose>
-			        		</xsl:otherwise>
-			        	</xsl:choose>
-			        	<div style="clear: left"></div>
-		        	</div>
-				</div>
-			</body>
-		</html>
-	</xsl:template>
-	
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">tags tag-cloud</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/tagCloud)"/>     
+    
+    
+    <!-- +
+         | ROOT TEMPLATE
+         + -->     
+	<xsl:template match="/tagCloud">
+        <xsl:call-template name="common-service"/>    
+    </xsl:template>
+    
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link href="{$contextPath}/plugins/tagcloud/resources/css/tagcloud.css" type="text/css" rel="stylesheet" />    
+    </xsl:template>
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$service-title"/>
+        </xsl:call-template>
+        
+        <xsl:choose>
+            <xsl:when test="/tagCloud/searchUrl">
+                <xsl:choose>
+                    <xsl:when test="$order-by = 'alphabetical'">
+                        <xsl:apply-templates select="item" mode="form">
+                            <xsl:sort select="text()"/>
+                        </xsl:apply-templates>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:apply-templates select="item" mode="form">
+                            <xsl:sort select="@nb" order="descending"/>
+                            <xsl:sort select="text()"/>
+                        </xsl:apply-templates>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:when>
+            
+            <xsl:otherwise>
+                <xsl:choose>
+                    <xsl:when test="$order-by = 'alphabetical'">
+                        <ul>
+                            <xsl:apply-templates select="item">
+                                <xsl:sort select="text()"/>
+                            </xsl:apply-templates>
+                        </ul>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <ul>
+                            <xsl:apply-templates select="item">
+                                <xsl:sort select="@nb" order="descending"/>
+                                <xsl:sort select="text()"/>
+                            </xsl:apply-templates>
+                        </ul>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:otherwise>
+        </xsl:choose>            
+    </xsl:template>
+            
 	<xsl:template match="item" mode="form">
 		<form action="{$cms-context}/{/tagCloud/searchUrl}.html#nav" method="post" style="display:inline">
 			<div>
@@ -106,11 +124,10 @@
 				</xsl:if>
 				
 				<input type="hidden" name="tags-1" value="{@tag}"/>
-					<input type="hidden" name="tags-size" value="1"/>
+				<input type="hidden" name="tags-size" value="1"/>
 				<input type="hidden" name="submit-form"/>
 				
 				<input type="submit" name="submit" value="{text()}" class="tag size{@font-size}" title="{text()} - {frequency}"/>
-			
 			</div>
 	</form>
 	</xsl:template>
Index: webapp/cms/plugins/syndication/pages/feed2xhtml.xsl
===================================================================
--- webapp/cms/plugins/syndication/pages/feed2xhtml.xsl	(revision 9137)
+++ webapp/cms/plugins/syndication/pages/feed2xhtml.xsl	(working copy)
@@ -14,140 +14,215 @@
    See the License for the specific language governing permissions and
    limitations under the License.
    -->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
+<xsl:stylesheet version="1.0" 
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+                xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
 
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+    
+    <!-- TODO -->
 	<xsl:param name="contextPath"/>
+    <!-- TODO -->
     <xsl:param name="skin"/>
+    <!-- TODO -->
 	<xsl:param name="header"/>
+    <!-- TODO -->
 	<xsl:param name="display-image"/>
 
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">syndication</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/feed)"/>
+
+
+    <!-- +
+         | ROOT TEMPLATE
+         + --> 
 	<xsl:template match="/feed">
-		<html>
-			<head>
-				<!-- CSS -->
-				<link href="{$contextPath}/plugins/syndication/resources/css/service-feed.css" rel="stylesheet" type="text/css" />
-			</head>
-			
-			<body>
-				<xsl:if test="$header != ''"><h3><xsl:value-of select="$header"/></h3></xsl:if>
-			
-				<div class="feed-wrapper">
-					
-					<xsl:apply-templates select="image"/>
-					
-					<h1><xsl:value-of select="@title"/></h1>
-					<h2><xsl:value-of select="@description"/></h2>
-					
-					<!-- 
-					<xsl:if test="link">
-						<a class="rss-link" href="{link}" title="{title}"><xsl:value-of select="link"></xsl:value-of></a>
-					</xsl:if>
-					 -->
-					 
-					 <!-- 
-					<xsl:if test="lastBuildDate">
-						<div class="rss-date"><xsl:value-of select="lastBuildDate"/></div>
-					</xsl:if>
-					-->
-					 
-					<div class="feed-entry-list">
-						<xsl:apply-templates select="entry"/>
-					</div>
-					
-				</div>
-			</body>
-			
-		</html>
-	</xsl:template>
-	
-	<xsl:template match="image"> 
-		<div class="feed-image">
-			<a href="{@link}" title="{@title}">
-				<img src="{@url}" alt="{@title}">
-					<xsl:if test="heigth"><xsl:attribute name="height"><xsl:value-of select="height"/></xsl:attribute></xsl:if>
-					<xsl:if test="width"><xsl:attribute name="width"><xsl:value-of select="width"/></xsl:attribute></xsl:if>
-				</img>
-			</a>
-		</div>
-	</xsl:template>
-	
+        <xsl:call-template name="common-service"/>
+    </xsl:template>
+    
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link href="{$contextPath}/plugins/syndication/resources/css/service-feed.css" rel="stylesheet" type="text/css" />    
+    </xsl:template>     
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$header"/>
+        </xsl:call-template>
+
+		<xsl:apply-templates select="image"/>
+		
+        <xsl:call-template name="syndication-title"/>
+        
+        <xsl:call-template name="syndication-description"/>
+        
+        <xsl:call-template name="syndication-list"/>
+        
+        <!-- Comments in the old XSL -->
+		<!-- 
+		<xsl:if test="link">
+			<a class="rss-link" href="{link}" title="{title}"><xsl:value-of select="link"></xsl:value-of></a>
+		</xsl:if>
+		 -->
+		 
+		 <!-- 
+		<xsl:if test="lastBuildDate">
+			<div class="rss-date"><xsl:value-of select="lastBuildDate"/></div>
+		</xsl:if>
+		-->
+    </xsl:template>
+    
+    <!-- TODO -->    
+    <xsl:template name="syndication-title">
+        <h2><xsl:value-of select="@title"/></h2>    
+    </xsl:template>        
+
+    <!-- TODO -->
+    <xsl:template name="syndication-description">
+        <h3><xsl:value-of select="@description"/></h3>    
+    </xsl:template>
+    
+    <!-- TODO -->
+    <xsl:template name="syndication-list">
+        <div class="feed-entry-list">
+            <xsl:apply-templates select="entry"/>
+        </div>    
+    </xsl:template>    
+            
+    <!-- TODO -->    
 	<xsl:template match="entry"> 
-		<div class="feed-entry">
-			
-			<!-- Item title -->
-			<div class="feed-entry-title">
-				<xsl:choose>
-					<xsl:when test="@link">
-						<a href="{@link}" title="{@title}"><xsl:value-of select="@title"/></a>
-					</xsl:when>
-					<xsl:otherwise><xsl:value-of select="@title"/></xsl:otherwise>
-				</xsl:choose>
-			</div>
-			
-			<!-- Item publication date -->
-			<xsl:if test="@date">
-				<div class="feed-entry-date"><i18n:date src-pattern="yyyy-MM-dd'T'HH:mm" pattern="medium"><xsl:value-of select="@date"/></i18n:date><xsl:text> </xsl:text><i18n:time src-pattern="yyyy-MM-dd'T'HH:mm" pattern="short"><xsl:value-of select="@date"/></i18n:time></div>
-			</xsl:if>
-			
+		<div>
+             <xsl:attribute name="class">feed-entry
+                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
+                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
+                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>
+            </xsl:attribute>
+            
+            <xsl:call-template name="item-title"/>
+            
+            <xsl:call-template name="item-date"/>
+            
             <xsl:apply-templates select="image"/>
 			
-			<!-- Item description -->
-			<xsl:if test="description">
-				<div class="feed-entry-description">
+            <xsl:call-template name="item-description"/>
+            
+            <xsl:call-template name="item-attachments"/>
+            
+            <xsl:call-template name="item-author"/>
+
+		</div>
+	</xsl:template>
+
+    <!-- TODO -->
+    <xsl:template name="item-title">
+        <div class="feed-entry-title">
+            <xsl:choose>
+                <xsl:when test="@link">
+                    <a href="{@link}" title="{@title}"><xsl:value-of select="@title"/></a>
+                </xsl:when>
+                <xsl:otherwise><xsl:value-of select="@title"/></xsl:otherwise>
+            </xsl:choose>
+        </div>    
+    </xsl:template>
+    
+    <!-- TODO -->
+    <xsl:template name="item-date">    
+        <xsl:if test="@date">
+            <div class="feed-entry-date">
+                <i18n:date src-pattern="yyyy-MM-dd'T'HH:mm" pattern="medium"><xsl:value-of select="@date"/></i18n:date>
+                <xsl:text> </xsl:text>
+                <i18n:time src-pattern="yyyy-MM-dd'T'HH:mm" pattern="short"><xsl:value-of select="@date"/></i18n:time>
+            </div>
+        </xsl:if>
+    </xsl:template>
+
+    <!-- TODO -->
+    <xsl:template match="image"> 
+        <div class="feed-image">
+            <a href="{@link}" title="{@title}">
+                <img src="{@url}" alt="{@title}">
+                    <xsl:if test="heigth"><xsl:attribute name="height"><xsl:value-of select="height"/></xsl:attribute></xsl:if>
+                    <xsl:if test="width"><xsl:attribute name="width"><xsl:value-of select="width"/></xsl:attribute></xsl:if>
+                </img>
+            </a>
+        </div>
+    </xsl:template>
+
+
+    <!-- TODO -->
+    <xsl:template name="item-description">  
+        <xsl:if test="description">
+            <div class="feed-entry-description">
+                <xsl:choose>
+                    <xsl:when test="'text/html'">
+                        <xsl:value-of select="description" disable-output-escaping="yes"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:value-of select="description"/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </div>
+        </xsl:if>    
+    </xsl:template>    
+    
+    <!-- TODO -->    
+    <xsl:template name="item-attachments">
+        <xsl:if test="enclosure">
+            <div class="feed-entry-enclosures">
+                <xsl:for-each select="enclosure[@url]">
+                    <xsl:if test="@url">
+                        <div class="enclosure">
+                            <xsl:choose>
+                                <xsl:when test="starts-with(@type, 'video')"><xsl:attribute name="class">enclosure video</xsl:attribute></xsl:when>
+                                <xsl:when test="starts-with(@type, 'audio')"><xsl:attribute name="class">enclosure audio</xsl:attribute></xsl:when>
+                                <xsl:when test="starts-with(@type, 'image')"><xsl:attribute name="class">enclosure image</xsl:attribute></xsl:when>
+                            </xsl:choose>
+                            <a href="{@url}">
+                                <xsl:choose>
+                                    <xsl:when test="@name"><xsl:value-of select="@name"/></xsl:when>
+                                    <xsl:otherwise><xsl:value-of select="@url"/></xsl:otherwise>
+                                </xsl:choose>
+                            </a>
+                            <xsl:if test="length">
+                                <span class="length"> (<xsl:value-of select="length"/>)</span>
+                            </xsl:if>
+                        </div>
+                    </xsl:if>
+                </xsl:for-each>
+            </div>
+        </xsl:if>    
+    </xsl:template>    
+    
+    <!-- TODO -->    
+    <xsl:template name="item-author">
+        <!-- Item author(s) -->
+        <xsl:if test="author">
+            <div class="feed-entry-author">
+                <i18n:text i18n:key="FEED_ENTRY_AUTHOR"/>
+                <xsl:for-each select="author">
                     <xsl:choose>
-                        <xsl:when test="'text/html'">
-                            <xsl:value-of select="description" disable-output-escaping="yes"/>
+                        <xsl:when test="@email">
+                            <a href="mailto:{@email}"><xsl:value-of select="."/></a>
                         </xsl:when>
                         <xsl:otherwise>
-                            <xsl:value-of select="description"/>
+                            <xsl:value-of select="."/>
                         </xsl:otherwise>
                     </xsl:choose>
-				</div>
-			</xsl:if>
-            
-            <!-- Item attachments -->
-            <xsl:if test="enclosure">
-            	<div class="feed-entry-enclosures">
-            		<xsl:for-each select="enclosure[@url]">
-	                    <xsl:if test="@url">
-	                    	<div class="enclosure">
-	                    		<xsl:choose>
-	                    			<xsl:when test="starts-with(@type, 'video')"><xsl:attribute name="class">enclosure video</xsl:attribute></xsl:when>
-	                    			<xsl:when test="starts-with(@type, 'audio')"><xsl:attribute name="class">enclosure audio</xsl:attribute></xsl:when>
-	                    			<xsl:when test="starts-with(@type, 'image')"><xsl:attribute name="class">enclosure image</xsl:attribute></xsl:when>
-	                    		</xsl:choose>
-	                        	<a href="{@url}">
-	                        		<xsl:choose>
-	                        			<xsl:when test="@name"><xsl:value-of select="@name"/></xsl:when>
-	                        			<xsl:otherwise><xsl:value-of select="@url"/></xsl:otherwise>
-	                        		</xsl:choose>
-	                        	</a>
-	                        	<xsl:if test="length">
-	                        		<span class="length"> (<xsl:value-of select="length"/>)</span>
-	                        	</xsl:if>
-	                        </div>
-	                    </xsl:if>
-                    </xsl:for-each>
-                </div>
-            </xsl:if>
-            
-            <!-- Item author(s) -->
-			<xsl:if test="author">
-				<div class="feed-entry-author">
-					<i18n:text i18n:key="FEED_ENTRY_AUTHOR"/>
-					<xsl:for-each select="author">
-						<xsl:choose>
-							<xsl:when test="@email">
-								<a href="mailto:{@email}"><xsl:value-of select="."/></a>
-							</xsl:when>
-							<xsl:otherwise>
-								<xsl:value-of select="."/>
-							</xsl:otherwise>
-						</xsl:choose>
-						<xsl:if test="position () != last()">, </xsl:if>
-					</xsl:for-each>
-				</div>
-			</xsl:if>
-		</div>
-	</xsl:template>
+                    <xsl:if test="position () != last()">, </xsl:if>
+                </xsl:for-each>
+            </div>
+        </xsl:if>    
+    </xsl:template>    
+    
+    
 </xsl:stylesheet>
Index: webapp/cms/plugins/web/sitemap.xmap
===================================================================
--- webapp/cms/plugins/web/sitemap.xmap	(revision 9137)
+++ webapp/cms/plugins/web/sitemap.xmap	(working copy)
@@ -794,6 +794,7 @@
 					<map:parameter name="all" value="{parent-context-attr:all}"/>
 				</map:generate>
 				<map:transform type="xslt" src="service://@xslt">
+                    <map:parameter name="contextPath" value="{cmscontext:contextPath}"/>
 					<map:parameter name="cms-context" value="{cmscontext:contextWorkspacePath:{request-attr:site}}"/>
                     <map:parameter name="raw-context" value="{cmscontext:contextWorkspacePath}"/>
 					<map:parameter name="lang" value="{request-attr:sitemapLanguage}"/>
Index: webapp/cms/plugins/web/pages/services/common.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/common.xsl	(revision 0)
+++ webapp/cms/plugins/web/pages/services/common.xsl	(revision 0)
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2010 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<xsl:stylesheet version="1.0"
+    xmlns:xalan="http://xml.apache.org/xalan" 
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+    xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
+    exclude-result-prefixes="xalan">
+    
+    <!-- The CSS classname that will be set on the surrounding DIV element -->
+    <xsl:variable name="common-service-css-class-name" />
+    <!-- The idname that will be set on the surrounding DIV element -->
+    <xsl:variable name="common-service-id-name" />
+    
+    <!-- Is the service's data empty ? -->    
+    <xsl:variable name="is-empty" />    
+    
+
+    <!-- +
+         | STRUCTURE
+         + -->
+
+    <!-- The common template to call to build your service structure -->   
+    <xsl:template name="common-service">
+        <html>
+            <head>
+                <xsl:call-template name="common-service-head"/>
+            </head>
+            <body> 
+                <xsl:call-template name="common-service-body"/>
+            </body>
+        </html>   
+   </xsl:template>
+
+    <!-- +
+         | HEAD
+         + -->
+   
+   <!-- The template called in the HEAD tag. -->
+   <xsl:template name="common-service-head">
+        <xsl:call-template name="common-service-head-other"/>
+        <xsl:call-template name="common-service-head-css"/>
+        <xsl:call-template name="common-service-head-js"/>
+   </xsl:template>
+   
+   <!-- Override this template to add stuff in the head (but JS or CSS) -->
+   <xsl:template name="common-service-head-other"/>
+   <!-- Override this template to add CSS in the head -->
+   <xsl:template name="common-service-head-css"/>
+   <!-- Override this template to add JS in the head -->
+   <xsl:template name="common-service-head-js"/>   
+   
+   <!-- +
+        | BODY
+        + -->
+   
+   <!-- The template called in the BODY tag -->
+   <xsl:template name="common-service-body">
+        <xsl:choose>
+            <xsl:when test="$is-empty">
+                <xsl:call-template name="common-service-body-empty"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:call-template name="common-service-body-nonempty"/>
+            </xsl:otherwise>
+        </xsl:choose>
+   </xsl:template>
+
+   <!-- Override this template to set the appearance when the service is empty -->
+   <xsl:template name="common-service-body-empty"/>
+
+    <!-- The service HTML structure when there is something in the service -->
+    <xsl:template name="common-service-body-nonempty">
+        <div class="ametys-cms-service {$common-service-css-class-name} wrapper">
+            <xsl:if test="$common-service-id-name != ''">
+                <xsl:attribute name="id"><xsl:value-of select="$common-service-id-name"/></xsl:attribute>
+            </xsl:if>
+            <xsl:call-template name="common-service-body-nonempty-content"/>
+        </div>
+    </xsl:template>
+   
+    <!-- Override this template to set the appearance when the service has content -->
+    <xsl:template name="common-service-body-nonempty-content"/>
+   
+   <!-- +
+        | BODY ELEMENTS
+        + -->
+
+   <!-- Template used by services for title rendering -->
+   <xsl:template name="common-service-body-nonempty-content-title">
+       <!-- The title to use -->
+        <xsl:param name="title"/>
+       <!-- The default title to use if title is empty (can also be empty) -->
+        <xsl:param name="default-title"/>
+   
+        <xsl:choose>
+            <xsl:when test="$title != ''">
+               <xsl:call-template name="common-service-body-nonempty-content-title-content">
+                    <xsl:with-param name="title" select="$title"/>
+                </xsl:call-template>
+            </xsl:when>
+            <xsl:when test="$default-title != ''">
+<!--               <xsl:call-template name="common-service-body-nonempty-content-title-content">-->
+<!--                        <xsl:with-param name="title">-->                    
+                    <h1>
+                        <i18n:text>
+                            <xsl:attribute name="i18n:catalogue"><xsl:value-of select="substring-before($default-title,':')" /></xsl:attribute>
+                            <xsl:attribute name="i18n:key"><xsl:value-of select="substring-after($default-title,':')" /></xsl:attribute>                    
+                        </i18n:text>         
+                    </h1>
+<!--                        </xsl:with-param>-->                    
+<!--                </xsl:call-template>-->
+            </xsl:when>
+            <xsl:otherwise>
+               <xsl:call-template name="common-service-body-nonempty-content-title-nocontent"/>
+            </xsl:otherwise>
+        </xsl:choose>
+   </xsl:template>
+   
+   <!-- Override this template to change main service title rendering -->
+   <xsl:template name="common-service-body-nonempty-content-title-content">
+        <xsl:param name="title"/>
+   
+        <h1><xsl:value-of select="$title"/></h1>
+   </xsl:template>
+
+   <!-- Override this template to change behavior when a service has no title -->
+   <xsl:template name="common-service-body-nonempty-content-title-nocontent"/>
+   
+   <!-- Template used by submit button -->
+   <xsl:template name="common-service-body-input-submit">
+        <xsl:param name="value"/>
+        
+        <div class="button">
+            <input type="submit" class="submit">
+                <xsl:attribute name="i18n:attr">value</xsl:attribute>
+                <xsl:attribute name="value"><xsl:value-of select="$value" /></xsl:attribute>
+            </input>
+	   </div>              
+   </xsl:template>
+   
+   <!-- Template used by back button -->
+   <xsl:template name="common-service-body-back-button">
+        <xsl:param name="value"/>
+        <xsl:param name="url"/>
+        
+    </xsl:template>      
+   
+   
+</xsl:stylesheet>
\ No newline at end of file
Index: webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/search-criteria/search-criteria.xsl	(working copy)
@@ -45,7 +45,7 @@
 		
 			<body id="default">
 				
-				<div id="service-search-wrapper">
+				<div class="service service-search service-search-default">
 					
 					<xsl:choose>
 						<xsl:when test="$header != ''"><h1><xsl:value-of select="$header"/></h1></xsl:when>
@@ -81,11 +81,10 @@
 			<!-- Textfield -->
 			<div class="field">
 				<div class="label"><label for="search-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_KEYWORDS"/></label></div>
-				<div>
-					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}"/>
-					<br/>
+				<div class="input">
+					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}" class="text"/>
 					<xsl:if test="/search/illegal-textfield">
-						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
+						<p class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></p>
 					</xsl:if>
 				</div>
 			</div>
@@ -94,8 +93,8 @@
 			<xsl:if test="/search/form/fields/all-words">
 				<div class="field">
 					<div class="label"><label for="search-all-words-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_ALL_WORDS"/></label></div>
-					<div>
-						<input id="search-all-words-{$uniqueId}" type="text" name="all-words" value="{/search/form/values/all-words}"/>
+					<div class="input">
+						<input id="search-all-words-{$uniqueId}" type="text" name="all-words" value="{/search/form/values/all-words}" class="text"/>
 					</div>
 				</div>
 			</xsl:if>
@@ -103,8 +102,8 @@
 			<xsl:if test="/search/form/fields/exact-wording">
 				<div class="field">
 					<div class="label"><label for="search-exact-wording-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_EXACT_PHRASE"/></label></div>
-					<div>
-						<input id="search-exact-wording-{$uniqueId}" type="text" name="exact-wording" value="{/search/form/values/exact-wording}"/>
+					<div class="input">
+						<input id="search-exact-wording-{$uniqueId}" type="text" name="exact-wording" value="{/search/form/values/exact-wording}" class="text"/>
 					</div>
 				</div>
 			</xsl:if>
@@ -112,8 +111,8 @@
 			<xsl:if test="/search/form/fields/no-words">
 				<div class="field">
 					<div class="label"><label for="search-no-words-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_ANY_WORDS"/></label></div>
-					<div>
-						<input id="search-no-words-{$uniqueId}" type="text" name="no-words" value="{/search/form/values/no-words}"/>
+					<div class="input">
+						<input id="search-no-words-{$uniqueId}" type="text" name="no-words" value="{/search/form/values/no-words}" class="text"/>
 					</div>
 				</div>
 			</xsl:if>
@@ -122,7 +121,7 @@
 				<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
 					<div class="field">
 						<div class="label"><label for="page-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_PAGES"/></label></div>
-						<div>
+						<div class="input">
 							<select name="pages" id="page-input">
 								<option>
 									<xsl:attribute name="value">
@@ -140,57 +139,53 @@
 									</option>
 								</xsl:for-each>
 							</select>
-							<br/>
 						</div>
 					</div>
 				</xsl:when>
 				<xsl:when test="count(/search/form/fields/pages/page) = 1">
-					<div><input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/></div>
+					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
 				</xsl:when>
 			</xsl:choose>
 			
 			<xsl:choose>
-					<xsl:when test="/search/form/fields/content-types-choice = 'list' and count(/search/form/fields/content-types/type) &gt; 1">
-						<div class="field">
-						<div class="label"><label for="ctype-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE"/></label></div>
-						<div>
-							<select name="content-types" id="ctype-input">
-								<option>
-									<xsl:attribute name="value">
-										<xsl:for-each select="/search/form/fields/content-types/type"><xsl:value-of select="@id"/><xsl:if test="position() != last()">,</xsl:if></xsl:for-each>
-									</xsl:attribute>
-									<i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE_ALL_OPTION"/>
-								</option>
-								<xsl:for-each select="/search/form/fields/content-types/type">
-									<xsl:variable name="id" select="@id"/>
-									<option value="{$id}">
-										<xsl:if test="/search/form/values/content-type[$id = .]">
-											<xsl:attribute name="selected">selected</xsl:attribute>
-										</xsl:if>
-										<xsl:copy-of select="."/>
-									</option>
-								</xsl:for-each>
-							</select>
-							<br/>
-						</div>
-					</div>
-					</xsl:when>
-					<xsl:when test="count(/search/form/fields/content-types/type) = 1">
-						<div><input type="hidden" name="content-types" value="{/search/form/fields/content-types/type/@id}"/></div>
-					</xsl:when>
-					<xsl:when test="/search/form/fields/content-types-choice = 'none' or /search/form/fields/content-types-choice = 'filter'">
-						<div>
-							<xsl:for-each select="/search/form/fields/content-types/type">
-								<input type="hidden" name="content-types" value="{@id}"/>
-							</xsl:for-each>
-						</div>
-					</xsl:when>
+				<xsl:when test="/search/form/fields/content-types-choice = 'list' and count(/search/form/fields/content-types/type) &gt; 1">
+					<div class="field">
+					   <div class="label"><label for="ctype-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE"/></label></div>
+    					<div class="input">
+    						<select name="content-types" id="ctype-input">
+    							<option>
+    								<xsl:attribute name="value">
+    									<xsl:for-each select="/search/form/fields/content-types/type"><xsl:value-of select="@id"/><xsl:if test="position() != last()">,</xsl:if></xsl:for-each>
+    								</xsl:attribute>
+    								<i18n:text i18n:key="FRONT_MODULE_SEARCH_CONTENTTYPE_ALL_OPTION"/>
+    							</option>
+    							<xsl:for-each select="/search/form/fields/content-types/type">
+    								<xsl:variable name="id" select="@id"/>
+    								<option value="{$id}">
+    									<xsl:if test="/search/form/values/content-type[$id = .]">
+    										<xsl:attribute name="selected">selected</xsl:attribute>
+    									</xsl:if>
+    									<xsl:copy-of select="."/>
+    								</option>
+    							</xsl:for-each>
+    						</select>
+    					</div>
+				</div>
+				</xsl:when>
+				<xsl:when test="count(/search/form/fields/content-types/type) = 1">
+					<input type="hidden" name="content-types" value="{/search/form/fields/content-types/type/@id}"/>
+				</xsl:when>
+				<xsl:when test="/search/form/fields/content-types-choice = 'none' or /search/form/fields/content-types-choice = 'filter'">
+					<xsl:for-each select="/search/form/fields/content-types/type">
+						<input type="hidden" name="content-types" value="{@id}"/>
+					</xsl:for-each>
+				</xsl:when>
 			</xsl:choose>
 			
 			<xsl:for-each select="/search/form/fields/tags/category">
 				<div class="field">
 					<div class="label"><label for="tag-input-{position()}"><xsl:value-of select="title"/></label></div>
-					<div>
+					<div class="input">
 						<select name="tags-{position()}" id="tag-input-{position()}">
 							<option>
 								<xsl:attribute name="value">
@@ -208,12 +203,11 @@
 								</option>
 							</xsl:for-each>
 						</select>
-						<br/>
 					</div>
 				</div>
 			</xsl:for-each>
 			<xsl:if test="/search/form/fields/tags/category">
-				<div><input type="hidden" name="tags-size" value="{count(/search/form/fields/tags/category)}"/></div>
+				<input type="hidden" name="tags-size" value="{count(/search/form/fields/tags/category)}"/>
 			</xsl:if>
 			
 			<xsl:if test="/search/form/fields/multisite"> 
@@ -221,7 +215,7 @@
 			
 				<div class="field">
 					<div class="label"><label for="sites-input"><i18n:text i18n:key="FRONT_MODULE_SEARCH_MULTISITE_CHOICE"/></label></div>
-					<div>
+					<div class="input">
 						<xsl:variable name="select-size">
 							<xsl:choose>
 								<xsl:when test="count(/search/form/fields/sites/site) &gt; 5">5</xsl:when>
Index: webapp/cms/plugins/web/pages/services/resources/search.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/resources/search.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/resources/search.xsl	(working copy)
@@ -44,12 +44,20 @@
 		
 			<body id="default">
 				
-				<div id="service-search-wrapper">
+				<div class="service service-search">
 					
 					<xsl:if test="$header != ''">
 						<h1><xsl:value-of select="$header"/></h1>
 					</xsl:if>
 					
+                    <xsl:if test="hits/hit and $on-same-page != 'true'">
+                        <div class="back">
+                            <a href="{$cms-context}/{url}" title="FRONT_MODULE_SEARCH_BACK_TO_SEARCH_TITLE" i18n:attr="title">
+                                <i18n:text i18n:key="FRONT_MODULE_SEARCH_BACK_TO_SEARCH"/>
+                            </a>
+                        </div>
+                    </xsl:if>                    
+                    
 					<form action="{$cms-context}/{/search/url}#nav" method="post" class="search">
 						<xsl:choose>
 							<xsl:when test="$on-same-page = 'true' or count(hits/hit) = 0">
@@ -59,9 +67,6 @@
 								<xsl:call-template name="form-search-hidden"/>
 							</xsl:otherwise>
 						</xsl:choose>
-						<xsl:if test="hits/hit and $on-same-page != 'true'">
-							<div class="back"><a href="{$cms-context}/{url}" title="FRONT_MODULE_SEARCH_BACK_TO_SEARCH_TITLE" i18n:attr="title"><i18n:text i18n:key="FRONT_MODULE_SEARCH_BACK_TO_SEARCH"/></a></div>
-						</xsl:if>
 							
 						<a name="nav"/>
 						
@@ -71,14 +76,12 @@
 					</form>	
 					
 					<xsl:choose>
-					
 						<xsl:when test="hits/hit">
 							<xsl:call-template name="hits"/>
-							
 							<xsl:call-template name="pagination"/>
 						</xsl:when>
 						<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
-							<div class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></div>
+							<p class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></p>
 						</xsl:when>
 					</xsl:choose>
 					
@@ -92,27 +95,34 @@
 		 | Template for results
 		 + -->
 	<xsl:template name="hits">
-		
-		<dl class="search-hits">
-							
-			<xsl:for-each select="/search/hits/hit">
-				<dt class="hit resource">
-					<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
-					<img class="icon" src="{$contextPath}/{icon}" alt=""/>
-					<a href="{$cms-context}/{uri}" title="{title}"><xsl:value-of select="title"/></a>
-					<span class="size"> <xsl:value-of select="size"/></span>
-				</dt>
-				<dd class="hit resource">	
-					<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
-					<xsl:value-of select="excerpt"/>
-					<xsl:if test="/search/form/values/multisite">
-						<br/>
-						<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
-					</xsl:if>
-				</dd>
-			</xsl:for-each>
-			
-		</dl>
+		<div class="results">
+            <ul>
+                <xsl:for-each select="/search/hits/hit">
+                    <li>
+                        <xsl:attribute name="class">resource
+                            <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
+                            <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
+                            <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                           
+                        </xsl:attribute>
+                        <div class="service-search-item">
+                            <img class="icon" src="{$contextPath}/{icon}" alt=""/>
+                            <a href="{$cms-context}/{uri}" title="{title}"><xsl:value-of select="title"/></a>
+                            <span class="size"> <xsl:value-of select="size"/></span>
+                        </div>
+                        <xsl:if test="excerpt">
+                            <div class="service-search-excerpt">
+                                <xsl:value-of select="excerpt"/>
+                            </div> 
+                        </xsl:if>
+                        <xsl:if test="/search/form/values/multisite">
+                            <div class="service-search-site">
+                                <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
+                            </div>
+                        </xsl:if>                                                 
+                    </li>
+                </xsl:for-each>
+            </ul>
+        </div>
 	</xsl:template>	
 	
 	<!-- +
@@ -120,7 +130,7 @@
 		 + -->
 	<xsl:template name="results-sort">
 		<div class="results-sort">
-			<ul class="sort">
+			<ul>
 				<li><span><i18n:text i18n:key="FRONT_MODULE_SEARCH_SORT_BY"/></span></li>
 				<li>
 					<xsl:choose>
@@ -152,70 +162,68 @@
 		 + -->
 	<xsl:template name="pagination">
 		<form id="reload" method="post" action="{$cms-context}/{/search/url}#nav" accept-charset="UTF-8">
-			<div>
-                <input type="hidden" name="submit-form">
-                    <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
-                        <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
-                    </xsl:if>
-                </input>
-                <xsl:if test="/search/zone-item/@id">
-                    <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
+            <input type="hidden" name="submit-form">
+                <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
+                    <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
                 </xsl:if>
-                
-				<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
-				<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
-				<input type="hidden" name="start" value="{/search/form/values/start}"/>
-				
-				<!-- Creator -->
-				<xsl:for-each select="/search/form/values/creator">
-					<input type="hidden" name="dc_creator" value="{.}"/>
-				</xsl:for-each>
-		
-				<!-- Format -->
-				<xsl:for-each select="/search/form/values/format">
-					<input type="hidden" name="dc_format" value="{.}"/>
-				</xsl:for-each>
-						
-				<!-- Publisher -->
-				<xsl:for-each select="/search/form/values/publisher">
-					<input type="hidden" name="dc_publisher" value="{.}"/>
-				</xsl:for-each>
-				
-				<!-- Rights -->
-				<xsl:for-each select="/search/form/values/rights">
-					<input type="hidden" name="dc_rights" value="{.}"/>
-				</xsl:for-each>
-		
-				<!-- Page(s) -->
-				<xsl:choose>
-					<xsl:when test="count(/search/form/fields/pages/page) &gt;= 1">
-						<xsl:for-each select="/search/form/values/page">
-							<input type="hidden" name="pages" value="{.}"/>
-						</xsl:for-each>
-					</xsl:when>
-					<xsl:when test="count(/search/form/fields/pages/page) = 1">
-						<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
-					</xsl:when>
-				</xsl:choose>
-		
-				<xsl:if test="/search/form/values/multisite">
-					<input type="hidden" name="multisite" value="true"/>
-					<xsl:for-each select="/search/form/values/site">
-						<input type="hidden" name="sites" value="{.}"/>
+            </input>
+            <xsl:if test="/search/zone-item/@id">
+                <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
+            </xsl:if>
+            
+			<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
+			<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
+			<input type="hidden" name="start" value="{/search/form/values/start}"/>
+			
+			<!-- Creator -->
+			<xsl:for-each select="/search/form/values/creator">
+				<input type="hidden" name="dc_creator" value="{.}"/>
+			</xsl:for-each>
+	
+			<!-- Format -->
+			<xsl:for-each select="/search/form/values/format">
+				<input type="hidden" name="dc_format" value="{.}"/>
+			</xsl:for-each>
+					
+			<!-- Publisher -->
+			<xsl:for-each select="/search/form/values/publisher">
+				<input type="hidden" name="dc_publisher" value="{.}"/>
+			</xsl:for-each>
+			
+			<!-- Rights -->
+			<xsl:for-each select="/search/form/values/rights">
+				<input type="hidden" name="dc_rights" value="{.}"/>
+			</xsl:for-each>
+	
+			<!-- Page(s) -->
+			<xsl:choose>
+				<xsl:when test="count(/search/form/fields/pages/page) &gt;= 1">
+					<xsl:for-each select="/search/form/values/page">
+						<input type="hidden" name="pages" value="{.}"/>
 					</xsl:for-each>
-				</xsl:if>
-				
-				<xsl:choose>
-					<xsl:when test="/search/sort-by-title-for-sorting">
-						<input type="hidden" name="sort-by-title-for-sorting"/>
-					</xsl:when>
-					<xsl:when test="/search/sort-by-date">
-						<input type="hidden" name="sort-by-date"/>
-					</xsl:when>
-					<xsl:otherwise>
-					</xsl:otherwise>
-				</xsl:choose>
-			</div>
+				</xsl:when>
+				<xsl:when test="count(/search/form/fields/pages/page) = 1">
+					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+				</xsl:when>
+			</xsl:choose>
+	
+			<xsl:if test="/search/form/values/multisite">
+				<input type="hidden" name="multisite" value="true"/>
+				<xsl:for-each select="/search/form/values/site">
+					<input type="hidden" name="sites" value="{.}"/>
+				</xsl:for-each>
+			</xsl:if>
+			
+			<xsl:choose>
+				<xsl:when test="/search/sort-by-title-for-sorting">
+					<input type="hidden" name="sort-by-title-for-sorting"/>
+				</xsl:when>
+				<xsl:when test="/search/sort-by-date">
+					<input type="hidden" name="sort-by-date"/>
+				</xsl:when>
+				<xsl:otherwise>
+				</xsl:otherwise>
+			</xsl:choose>
 			
 			<div class="pagination">
 				
@@ -358,7 +366,6 @@
 				<div class="label"><label for="search-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_KEYWORDS"/></label></div>
 				<div>
 					<input id="search-input-{$uniqueId}" type="text" name="textfield" value="{/search/form/values/textfield}"/>
-					<br/>
 					<xsl:if test="/search/illegal-textfield">
 						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
 					</xsl:if>
@@ -388,12 +395,11 @@
 									</option>
 								</xsl:for-each>
 							</select>
-							<br/>
 						</div>
 					</div>
 				</xsl:when>
 				<xsl:when test="count(/search/form/fields/pages/page) = 1">
-					<div><input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/></div>
+					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
 				</xsl:when>
 			</xsl:choose>
 			
@@ -403,7 +409,6 @@
 				<div class="label"><label for="creator-input-{$uniqueId}"><i18n:text i18n:key="FRONT_MODULE_SEARCH_CREATOR"/></label></div>
 				<div>
 					<input id="creator-input-{$uniqueId}" type="text" name="dc_creator" value="{/search/form/values/creator}"/>
-					<br/>
 					<xsl:if test="/search/illegal-textfield">
 						<span class="error"><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FRONT_SEARCH_INVALID_TEXTFIELD"/></span>
 					</xsl:if>
@@ -428,7 +433,6 @@
 								</option>
 							</xsl:for-each>
 						</select>
-						<br/>
 					</div>
 				</div>
 			</xsl:if>
@@ -472,7 +476,6 @@
 								</option>
 							</xsl:for-each>
 						</select>
-						<br/>
 					</div>
 				</div>
 			</xsl:if>
Index: webapp/cms/plugins/web/pages/services/filtered-contents/list.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/filtered-contents/list.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/filtered-contents/list.xsl	(working copy)
@@ -21,135 +21,122 @@
                 xmlns:math="http://exslt.org/math"
                 exclude-result-prefixes="resolver math">
 
-	<xsl:import href="workspace:web://stylesheets/helper/html-hierarchy.xsl"/>
+    <xsl:import href="workspace:web://stylesheets/helper/html-hierarchy.xsl"/>
+    <xsl:import href="service:web://pages/services/common.xsl"/>
 
+    <!-- TODO -->
 	<xsl:param name="view"/>
+    <!-- TODO -->
 	<xsl:param name="service-title"/>
+    <!-- TODO -->
 	<xsl:param name="cms-context"/>
+    <!-- TODO -->
 	<xsl:param name="raw-context"/>
+    <!-- TODO -->
 	<xsl:param name="contextPath"/>
+    <!-- TODO -->
     <xsl:param name="skin"/>
+    <!-- TODO -->
 	<xsl:param name="link"/>
+    <!-- TODO -->
 	<xsl:param name="link-title"/>
+    <!-- TODO -->
 	<xsl:param name="pagination"/>
-	
-	<xsl:template match="/contents">
-		<xsl:variable name="contentsPerPage">
-			<xsl:choose>
-				<xsl:when test="$pagination = '' or $pagination = 0"><xsl:value-of select="count(content)"/></xsl:when>
-				<xsl:otherwise><xsl:value-of select="$pagination"/></xsl:otherwise>
-			</xsl:choose>
-		</xsl:variable>
-		<xsl:variable name="prefix">fc_<xsl:value-of select="substring-after(math:random(), '.')"/></xsl:variable>
+    
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">filtered-contents filtered-contents-<xsl:value-of select="$view"/></xsl:variable>
+    <xsl:variable name="is-empty" select="not(/contents/content)"/>
+    
+    <!-- TODO -->
+    <xsl:variable name="prefix">fc_<xsl:value-of select="substring-after(math:random(), '.')"/></xsl:variable>
 
-		<html>
-			<head>
-				<link href="{$contextPath}/plugins/web/resources/css/service/filtered-contents.css" type="text/css" rel="stylesheet" />
-			</head>
-			<body>
-				<xsl:if test="content">
-					<div class="content-list-wrapper {$view}">
-						
-						<xsl:if test="RSSFeedURL != ''">
-							<div class="rss">
-								<a href="{$raw-context}/{RSSFeedURL}"><img alt="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_RSS_FEED_ALT"  title="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_RSS_FEED" i18n:attr="title alt" src="{$contextPath}/plugins/web/resources/img/rss/feed.png"/></a>
-							</div>
-						</xsl:if>
-						
-						<xsl:if test="$service-title != ''">
-							<h1><xsl:value-of select="$service-title"/></h1>
-						</xsl:if>
+    <!-- TODO -->
+    <xsl:variable name="contentsPerPage">
+        <xsl:choose>
+            <xsl:when test="$pagination = '' or $pagination = 0"><xsl:value-of select="count(content)"/></xsl:when>
+            <xsl:otherwise><xsl:value-of select="$pagination"/></xsl:otherwise>
+        </xsl:choose>
+    </xsl:variable>
 
-						<script type="text/javascript">
-							<xsl:comment>
-								var pagination_<xsl:value-of select="$prefix"/> = [];
-							</xsl:comment>
-						</script>
-						
-						<xsl:call-template name="contents">
-							<xsl:with-param name="from" select="0"/>
-							<xsl:with-param name="by" select="$contentsPerPage"/>
-							<xsl:with-param name="prefix" select="$prefix"/>
-							<xsl:with-param name="count" select="1"/>
-						</xsl:call-template>						
 
-						<script type="text/javascript">
-								pagination_<xsl:value-of select="$prefix"/>_current = 0;	
-								if (pagination_<xsl:value-of select="$prefix"/>.length &gt; 1)
-								{
-									document.write("<![CDATA[<div class='pagination'><ul class='nav'><li>]]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES"/><![CDATA[</li><li id='content_filter_prev_]]><xsl:value-of select="$prefix"/><![CDATA[' style='display: none;' class='precede'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(\"prev\"); } catch(e) {} return false;' value=']]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES_PRECEDE"/><![CDATA['/></li>]]>");
-									for (var i = 0; i &lt; pagination_<xsl:value-of select="$prefix"/>.length; i++)
-									{
-										document.write("<![CDATA[<li id='content_filter_]]><xsl:value-of select="$prefix"/>" + i + "<![CDATA[_button' style='display: " + (i == 0 ? 'none' : '') + "' class='page'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(" + i + "); } catch(e) {} return false;' value='" + (i + 1) + "'/></li>]]>");
-										document.write("<![CDATA[<li id='content_filter_]]><xsl:value-of select="$prefix"/>" + i + "<![CDATA[' style='display: " + (i != 0 ? 'none' : '') + "' class='page'>" + (i + 1) + "</li>]]>");
-									}
-									document.write("<![CDATA[<li id='content_filter_next_]]><xsl:value-of select="$prefix"/><![CDATA[' class='next'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(\"next\"); } catch(e) {} return false;' value=']]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES_NEXT"/><![CDATA['/></li></ul></div><div style='clear: both;'></div>]]>");
-									
-									function show_<xsl:value-of select="$prefix"/>(count)
-									{
-										if (count == 'next')
-										{
-											count = pagination_<xsl:value-of select="$prefix"/>_current + 1;
-										}
-										else if (count == 'prev')
-										{
-											count = pagination_<xsl:value-of select="$prefix"/>_current - 1;
-										}
-									
-										for (var i = 0; i &lt; pagination_<xsl:value-of select="$prefix"/>.length; i++)
-										{
-											if (i == count)
-											{
-												document.getElementById('<xsl:value-of select="$prefix"/>-part-' + pagination_<xsl:value-of select="$prefix"/>[i]).style.display = "";
-												document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i + '_button').style.display = "none";
-												document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i).style.display = "";
-											}
-											else
-											{
-												document.getElementById('<xsl:value-of select="$prefix"/>-part-' + pagination_<xsl:value-of select="$prefix"/>[i]).style.display = "none";
-												document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i + '_button').style.display = "";
-												document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i).style.display = "none";
-											}
-										}
-										pagination_<xsl:value-of select="$prefix"/>_current = count;
+    <!-- +
+         | ROOT TEMPLATE
+         + -->    
+    <xsl:template match="/contents">
+         <xsl:call-template name="common-service"/> 
+    </xsl:template>
 
-										document.getElementById("content_filter_prev_<xsl:value-of select="$prefix"/>").style.display = (pagination_<xsl:value-of select="$prefix"/>_current == "0" ? 'none' : '');
-										document.getElementById("content_filter_next_<xsl:value-of select="$prefix"/>").style.display = (pagination_<xsl:value-of select="$prefix"/>_current == (pagination_<xsl:value-of select="$prefix"/>.length - 1) ? 'none' : '');
-									}
-								}
-						</script>
-						
-	                    <xsl:if test="starts-with($link, 'page://')">
-	                        <div class="link">
-	                            <a href="{resolver:resolve('page', $link)}">
-	                                <xsl:choose>
-	                                    <xsl:when test="normalize-space($link-title) != ''">
-	                                        <xsl:value-of select="$link-title"/>
-	                                    </xsl:when>
-	                                    <xsl:otherwise><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_LINK_TITLE_DEFAULT"/></xsl:otherwise>
-	                                </xsl:choose>
-	                            </a>
-	                        </div>
-	                    </xsl:if>
-					</div>
-				</xsl:if>
-			</body>
-		</html>
-	</xsl:template>
-	
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl -->	
+    <xsl:template name="common-service-head-css">
+        <link href="{$contextPath}/plugins/web/resources/css/service/filtered-contents.css" type="text/css" rel="stylesheet" />
+    </xsl:template>
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="rss"/>
+        
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$service-title"/>
+        </xsl:call-template>
+
+        <xsl:call-template name="link-top"/>
+        
+        <xsl:call-template name="js-pagination-part"/>
+        
+        <xsl:call-template name="js-pagination-top"/>
+        
+        <xsl:call-template name="contents"/>
+
+        <xsl:call-template name="js-pagination-bottom"/>
+        
+        <xsl:call-template name="link-bottom"/>    
+    </xsl:template>    
+    
+    <xsl:template name="rss">
+        <xsl:if test="RSSFeedURL != ''">
+            <div class="rss">
+                <a href="{$raw-context}/{RSSFeedURL}">
+                    <img alt="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_RSS_FEED_ALT"  title="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_RSS_FEED" i18n:attr="title alt">
+                        <xsl:attribute name="src">
+                            <xsl:choose>
+                                <!-- TODO when helper to test resources in the skin -->
+<!--                                <xsl:when test="$skin/.."></xsl:when>-->
+                                <xsl:otherwise><xsl:value-of select="$contextPath"/>/plugins/web/resources/img/rss/feed.png</xsl:otherwise>
+                            </xsl:choose>
+                        </xsl:attribute>
+                    </img>
+                </a>
+            </div>
+        </xsl:if>    
+    </xsl:template>   
+            
+    <!-- TODO -->
 	<xsl:template match="content">
-		<div class="article">
-			<xsl:apply-templates select="html/body/node()" mode="move-hierarchy">
-				<xsl:with-param name="level" select="2"/>
-			</xsl:apply-templates>
+		<div>
+            <xsl:attribute name="class">article 
+                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
+                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
+                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>
+            </xsl:attribute>
+            <xsl:apply-templates select="html/body/node()" mode="move-hierarchy">
+                <xsl:with-param name="level" select="2"/>
+            </xsl:apply-templates>                           
 		</div>
 	</xsl:template>
 	
+    <!-- TODO -->
 	<xsl:template name="contents">
-		<xsl:param name="from"/>
-		<xsl:param name="by"/>
-		<xsl:param name="count"/>
-		<xsl:param name="prefix"/>
+		<xsl:param name="from" select="0"/>
+		<xsl:param name="by" select="$contentsPerPage"/>
+		<xsl:param name="count" select="1"/>
 	
 		<div id="{$prefix}-part-{$count}">
 			<script type="text/javascript">
@@ -169,10 +156,102 @@
 			<xsl:call-template name="contents">
 				<xsl:with-param name="from" select="$from + $by"/>
 				<xsl:with-param name="by" select="$by"/>
-				<xsl:with-param name="prefix" select="$prefix"/>
 				<xsl:with-param name="count" select="$count + 1"/>
 			</xsl:call-template>						
 		</xsl:if>
 	</xsl:template>
-	
+
+    <!-- TODO -->
+    <xsl:template name="js-pagination-part">
+        <script type="text/javascript">
+            <xsl:comment>
+                var pagination_<xsl:value-of select="$prefix"/> = [];
+            </xsl:comment>
+        </script>    
+    </xsl:template>
+    
+    <!-- TODO -->
+    <xsl:template name="js-pagination-top">
+        <xsl:comment>empty</xsl:comment>
+    </xsl:template>    
+
+    <!-- TODO -->
+    <xsl:template name="js-pagination-bottom">
+        <xsl:call-template name="js-pagination"/>
+    </xsl:template>
+    
+    <!-- TODO -->
+    <xsl:template name="js-pagination">
+        <script type="text/javascript">
+            pagination_<xsl:value-of select="$prefix"/>_current = 0;    
+            if (pagination_<xsl:value-of select="$prefix"/>.length &gt; 1)
+            {
+                document.write("<![CDATA[<div class='pagination'><ul class='nav'><li>]]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES"/><![CDATA[</li><li id='content_filter_prev_]]><xsl:value-of select="$prefix"/><![CDATA[' style='display: none;' class='precede'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(\"prev\"); } catch(e) {} return false;' value=']]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES_PRECEDE"/><![CDATA['/></li>]]>");
+                for (var i = 0; i &lt; pagination_<xsl:value-of select="$prefix"/>.length; i++)
+                {
+                    document.write("<![CDATA[<li id='content_filter_]]><xsl:value-of select="$prefix"/>" + i + "<![CDATA[_button' style='display: " + (i == 0 ? 'none' : '') + "' class='page'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(" + i + "); } catch(e) {} return false;' value='" + (i + 1) + "'/></li>]]>");
+                    document.write("<![CDATA[<li id='content_filter_]]><xsl:value-of select="$prefix"/>" + i + "<![CDATA[' style='display: " + (i != 0 ? 'none' : '') + "' class='page'>" + (i + 1) + "</li>]]>");
+                }
+                document.write("<![CDATA[<li id='content_filter_next_]]><xsl:value-of select="$prefix"/><![CDATA[' class='next'><input type='submit' onclick='try { show_]]><xsl:value-of select="$prefix"/><![CDATA[(\"next\"); } catch(e) {} return false;' value=']]><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_FRONT_PAGES_NEXT"/><![CDATA['/></li></ul></div><div style='clear: both;'></div>]]>");
+                
+                function show_<xsl:value-of select="$prefix"/>(count)
+                {
+                    if (count == 'next')
+                    {
+                        count = pagination_<xsl:value-of select="$prefix"/>_current + 1;
+                    }
+                    else if (count == 'prev')
+                    {
+                        count = pagination_<xsl:value-of select="$prefix"/>_current - 1;
+                    }
+                
+                    for (var i = 0; i &lt; pagination_<xsl:value-of select="$prefix"/>.length; i++)
+                    {
+                        if (i == count)
+                        {
+                            document.getElementById('<xsl:value-of select="$prefix"/>-part-' + pagination_<xsl:value-of select="$prefix"/>[i]).style.display = "";
+                            document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i + '_button').style.display = "none";
+                            document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i).style.display = "";
+                        }
+                        else
+                        {
+                            document.getElementById('<xsl:value-of select="$prefix"/>-part-' + pagination_<xsl:value-of select="$prefix"/>[i]).style.display = "none";
+                            document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i + '_button').style.display = "";
+                            document.getElementById('content_filter_<xsl:value-of select="$prefix"/>' + i).style.display = "none";
+                        }
+                    }
+                    pagination_<xsl:value-of select="$prefix"/>_current = count;
+
+                    document.getElementById("content_filter_prev_<xsl:value-of select="$prefix"/>").style.display = (pagination_<xsl:value-of select="$prefix"/>_current == "0" ? 'none' : '');
+                    document.getElementById("content_filter_next_<xsl:value-of select="$prefix"/>").style.display = (pagination_<xsl:value-of select="$prefix"/>_current == (pagination_<xsl:value-of select="$prefix"/>.length - 1) ? 'none' : '');
+                }
+            }
+        </script>      
+    </xsl:template>    
+  
+    <!-- TODO -->
+    <xsl:template name="link-top">
+        <xsl:comment>empty</xsl:comment>
+    </xsl:template>
+
+    <!-- TODO -->
+    <xsl:template name="link-bottom">
+        <xsl:call-template name="link"/>
+    </xsl:template>
+    
+    <!-- TODO -->
+	<xsl:template name="link">
+        <xsl:if test="starts-with($link, 'page://')">
+            <div class="link">
+                <a href="{resolver:resolve('page', $link)}">
+                    <xsl:choose>
+                        <xsl:when test="normalize-space($link-title) != ''">
+                            <xsl:value-of select="$link-title"/>
+                        </xsl:when>
+                        <xsl:otherwise><i18n:text i18n:key="PLUGINS_WEB_SERVICE_FILTERED_CONTENTS_LINK_TITLE_DEFAULT"/></xsl:otherwise>
+                    </xsl:choose>
+                </a>
+            </div>
+        </xsl:if>    
+    </xsl:template>
 </xsl:stylesheet>
Index: webapp/cms/plugins/web/pages/services/search/search.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/search/search.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/search/search.xsl	(working copy)
@@ -56,7 +56,7 @@
 				<xsl:call-template name="pagination"/>
 			</xsl:when>
 			<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
-				<div class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></div>
+				<p class="no-result"><i18n:text i18n:key="FRONT_MODULE_SEARCH_NO_RESULT"/></p>
 			</xsl:when>
 		</xsl:choose>
 	</xsl:template>
@@ -90,30 +90,42 @@
 		 + -->
 	<xsl:template name="hits">
 		
-		<dl class="search-hits">
+		<ul>
 							
 			<xsl:for-each select="/search/hits/hit|/search/content-types/*[@current = 'true']/hits/hit">
 			
 				<xsl:choose>
 					<xsl:when test="type = 'resource'"> 
-						<dt class="hit resource">
-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
-							<img class="icon" src="{$contextPath}/{icon}" alt=""/>
-							<a href="{$cms-context}/{uri}.html" title="{title}"><xsl:value-of select="title"/></a>
-							<span class="size"> (<xsl:value-of select="size"/>)</span>
-						</dt>
-						<dd class="hit resource">	
-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit resource even</xsl:attribute></xsl:if>
-							<xsl:value-of select="excerpt"/>
-							<xsl:if test="/search/form/values/multisite">
-								<br/>
-								<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
-							</xsl:if>
-						</dd>
+						<li>
+                            <xsl:attribute name="class">hit resource
+                                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
+                                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
+                                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                           
+                            </xsl:attribute>                        
+							<div class="service-search-item">
+                                <img class="icon" src="{$contextPath}/{icon}" alt=""/>
+    							<a href="{$cms-context}/{uri}.html" title="{title}"><xsl:value-of select="title"/></a>
+    							<span class="size"> (<xsl:value-of select="size"/>)</span>
+                            </div>
+                            <xsl:if test="excerpt">
+                                <div class="service-search-excerpt">
+                                    <xsl:value-of select="excerpt"/>
+                                </div> 
+                            </xsl:if>                            
+                            <xsl:if test="/search/form/values/multisite">
+                                <div class="service-search-site">
+                                    <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
+                                </div>
+                            </xsl:if>
+						</li>
 					</xsl:when>
 					<xsl:otherwise>
-						<dt class="hit page">
-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit page even</xsl:attribute></xsl:if>
+						<li>
+                            <xsl:attribute name="class">hit page
+                                <xsl:if test="position() mod 2 = 0"><xsl:text> even</xsl:text></xsl:if>                                
+                                <xsl:if test="position() = 1"><xsl:text> first</xsl:text></xsl:if>
+                                <xsl:if test="position() = last()"><xsl:text> last</xsl:text></xsl:if>                        
+                            </xsl:attribute>
 							<a title="{title}">
                                 <xsl:attribute name="href">
                                     <xsl:value-of select="$cms-context"/>
@@ -142,22 +154,23 @@
                                 </xsl:attribute>
                                 <xsl:value-of select="title"/>
                             </a>
-						</dt>
-						<dd class="hit page">	
-							<xsl:if test="position() mod 2 = 0"><xsl:attribute name="class">hit page even</xsl:attribute></xsl:if>
-							<xsl:value-of select="excerpt"/>
-							
-							<xsl:if test="/search/form/values/multisite">
-								<br/>
-								<span class="site"><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></span>
-							</xsl:if>
-						</dd>
+                            <xsl:if test="excerpt">
+                                <div class="service-search-excerpt">
+                                    <xsl:value-of select="excerpt"/>
+                                </div> 
+                            </xsl:if>
+                            <xsl:if test="/search/form/values/multisite">
+                                <div class="service-search-site">
+                                    <p><xsl:value-of select="siteTitle"/><xsl:text> - </xsl:text><a href="{siteUrl}" target="_blank" title="{siteTitle}"><xsl:value-of select="siteUrl"/></a></p>
+                                </div>
+                            </xsl:if>
+						</li>
 					</xsl:otherwise>
 				</xsl:choose>
 				
 			</xsl:for-each>
 			
-		</dl>
+		</ul>
 	</xsl:template>	
 	
 	<!-- +
@@ -165,7 +178,7 @@
 		 + -->
 	<xsl:template name="results-sort">
 		<div class="results-sort">
-			<ul class="sort">
+			<ul>
 				<li><span><i18n:text i18n:key="FRONT_MODULE_SEARCH_SORT_BY"/></span></li>
 				<li>
 					<xsl:choose>
@@ -197,7 +210,6 @@
 						</xsl:otherwise>
 					</xsl:choose>
 				</li>
-				
 			</ul>
 		</div>
 	</xsl:template>
@@ -208,75 +220,73 @@
 		 + -->
 	<xsl:template name="pagination">
 		<form id="reload" method="post" action="{$cms-context}/{/search/url}#nav" accept-charset="UTF-8">
-			<div>
-                <input type="hidden" name="submit-form">
-                    <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
-                        <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
-                    </xsl:if>
-                </input>
-                <xsl:if test="/search/zone-item/@id">
-                    <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
+            <input type="hidden" name="submit-form">
+                <xsl:if test="/search/group-id and normalize-space(/search/group-id) != ''">
+                    <xsl:attribute name="value"><xsl:value-of select="/search/group-id"/></xsl:attribute>
                 </xsl:if>
-                
-				<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
-				
-				<!-- All words -->
-				<xsl:if test="/search/form/fields/all-words">
-					<input type="hidden" name="all-words" value="{/search/form/values/all-words}"/>
-				</xsl:if>
-				
-				<!-- Exact wording or phrase -->
-				<xsl:if test="/search/form/fields/exact-wording">
-					<input type="hidden" name="exact-wording" value="{/search/form/values/exact-wording}"/>
-				</xsl:if>
-				
-				<!-- No words -->
-				<xsl:if test="/search/form/fields/no-words">
-					<input type="hidden" name="no-words" value="{/search/form/values/no-words}"/>
-				</xsl:if>
+            </input>
+            <xsl:if test="/search/zone-item/@id">
+                <input type="hidden" name="zone-item-id" value="{/search/zone-item/@id}"/>
+            </xsl:if>
+            
+			<input type="hidden" name="textfield" value="{/search/form/values/textfield}"/>
 			
-				<!-- Page(s) -->
-				<xsl:choose>
-					<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
-						<xsl:for-each select="/search/form/values/page">
-							<input type="hidden" name="pages" value="{.}"/>
-						</xsl:for-each>
-					</xsl:when>
-					<xsl:when test="count(/search/form/fields/pages/page) = 1">
-						<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
-					</xsl:when>
-				</xsl:choose>
+			<!-- All words -->
+			<xsl:if test="/search/form/fields/all-words">
+				<input type="hidden" name="all-words" value="{/search/form/values/all-words}"/>
+			</xsl:if>
+			
+			<!-- Exact wording or phrase -->
+			<xsl:if test="/search/form/fields/exact-wording">
+				<input type="hidden" name="exact-wording" value="{/search/form/values/exact-wording}"/>
+			</xsl:if>
+			
+			<!-- No words -->
+			<xsl:if test="/search/form/fields/no-words">
+				<input type="hidden" name="no-words" value="{/search/form/values/no-words}"/>
+			</xsl:if>
 		
-				<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
-				<input type="hidden" name="start" value="{/search/form/values/start}"/>
-				<xsl:for-each select="/search/form/values/content-type">
-					<input type="hidden" name="content-types" value="{.}"/>
-				</xsl:for-each>
-				<xsl:for-each select="/search/form/values/tag">
-					<input type="hidden" name="tags" value="{.}"/>
-				</xsl:for-each>
-				<xsl:if test="/search/form/values/multisite">
-					<input type="hidden" name="multisite" value="true"/>
-					<xsl:for-each select="/search/form/values/site">
-						<input type="hidden" name="sites" value="{.}"/>
+			<!-- Page(s) -->
+			<xsl:choose>
+				<xsl:when test="count(/search/form/fields/pages/page) &gt; 1">
+					<xsl:for-each select="/search/form/values/page">
+						<input type="hidden" name="pages" value="{.}"/>
 					</xsl:for-each>
-				</xsl:if>
-				
-				<xsl:for-each select="/search/content-types/*[@current = 'true']">
-					<input type="hidden" name="current-ctype-filter" value="{local-name()}"/>
+				</xsl:when>
+				<xsl:when test="count(/search/form/fields/pages/page) = 1">
+					<input type="hidden" name="pages" value="{/search/form/fields/pages/page/@path}"/>
+				</xsl:when>
+			</xsl:choose>
+	
+			<input type="hidden" name="offset" value="{/search/form/values/offset}"/>
+			<input type="hidden" name="start" value="{/search/form/values/start}"/>
+			<xsl:for-each select="/search/form/values/content-type">
+				<input type="hidden" name="content-types" value="{.}"/>
+			</xsl:for-each>
+			<xsl:for-each select="/search/form/values/tag">
+				<input type="hidden" name="tags" value="{.}"/>
+			</xsl:for-each>
+			<xsl:if test="/search/form/values/multisite">
+				<input type="hidden" name="multisite" value="true"/>
+				<xsl:for-each select="/search/form/values/site">
+					<input type="hidden" name="sites" value="{.}"/>
 				</xsl:for-each>
-				
-				<xsl:choose>
-					<xsl:when test="/search//sort-by-title-for-sorting">
-						<input type="hidden" name="sort-by-title-for-sorting"/>
-					</xsl:when>
-					<xsl:when test="/search//sort-by-last-validation">
-						<input type="hidden" name="sort-by-last-validation"/>
-					</xsl:when>
-					<xsl:otherwise>
-					</xsl:otherwise>
-				</xsl:choose>
-			</div>
+			</xsl:if>
+			
+			<xsl:for-each select="/search/content-types/*[@current = 'true']">
+				<input type="hidden" name="current-ctype-filter" value="{local-name()}"/>
+			</xsl:for-each>
+			
+			<xsl:choose>
+				<xsl:when test="/search//sort-by-title-for-sorting">
+					<input type="hidden" name="sort-by-title-for-sorting"/>
+				</xsl:when>
+				<xsl:when test="/search//sort-by-last-validation">
+					<input type="hidden" name="sort-by-last-validation"/>
+				</xsl:when>
+				<xsl:otherwise>
+				</xsl:otherwise>
+			</xsl:choose>
 			
 			<div class="pagination">
 				
Index: webapp/cms/plugins/web/pages/services/attach/attachments.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/attach/attachments.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/attach/attachments.xsl	(working copy)
@@ -17,43 +17,71 @@
 <xsl:stylesheet version="1.0" 
 				xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
 				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
+    
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+        
+    <!-- TODO -->
 	<xsl:param name="cms-context"/>
+    <!-- TODO -->
 	<xsl:param name="contextPath"/>
+    <!-- TODO -->
 	<xsl:param name="skin"/>
+    <!-- TODO -->
 	<xsl:param name="header"/>
+    
+    <xsl:variable name="attachmentUrlPrefix" select="concat($cms-context, '/', page/@lang, '/', page/@path, '/_attachments')"></xsl:variable>
+    
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">attachments</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/Attachments)"/>    
 	
+    <!-- +
+         | ROOT TEMPLATE
+         + -->    
 	<xsl:template match="/Attachments">
-		<html>
-			<head>
-				<link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/web/resources/css/service/attach.css" />
-			</head>
-			<body>
-				<xsl:variable name="attachmentUrlPrefix" select="concat($cms-context, '/', page/@lang, '/', page/@path, '/_attachments')"></xsl:variable>
-				<div class="attachments-wrapper">
-				
-					<xsl:if test="$header != ''">
-						<h1><xsl:value-of select="$header"/></h1>
-					</xsl:if>
-					
-					<div class="attachment-list">
-						<xsl:apply-templates select="Folder">
-							<xsl:with-param name="indent" select="0"/>
-							<xsl:with-param name="urlPrefix" select="$attachmentUrlPrefix"/>
-							<xsl:sort select="@name"/>
-						</xsl:apply-templates>
-						
-						<xsl:apply-templates select="File">
-							<xsl:with-param name="indent" select="0"/>
-							<xsl:with-param name="urlPrefix" select="$attachmentUrlPrefix"/>
-							<xsl:sort select="@name"/>
-						</xsl:apply-templates>
-					</div>
-				</div>
-			</body>
-		</html>
-	</xsl:template>
-	
+        <xsl:call-template name="common-service"/>
+    </xsl:template>
+    
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/web/resources/css/service/attach.css" />    
+    </xsl:template>
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$header"/>
+        </xsl:call-template>
+        
+        <xsl:call-template name="attachment-list"/>
+    
+    </xsl:template>
+
+    <xsl:template name="attachment-list">
+        <div class="attachment-list">
+            <xsl:apply-templates select="Folder">
+                <xsl:with-param name="indent" select="0"/>
+                <xsl:with-param name="urlPrefix" select="$attachmentUrlPrefix"/>
+                <xsl:sort select="@name"/>
+            </xsl:apply-templates>
+            
+            <xsl:apply-templates select="File">
+                <xsl:with-param name="indent" select="0"/>
+                <xsl:with-param name="urlPrefix" select="$attachmentUrlPrefix"/>
+                <xsl:sort select="@name"/>
+            </xsl:apply-templates>
+        </div>
+    </xsl:template>	
+    
+    
 	<xsl:template match="Folder">
 		<xsl:param name="indent">0</xsl:param>
 		<xsl:param name="urlPrefix"/>
@@ -62,6 +90,7 @@
 			<xsl:choose>
 				<xsl:when test="Folder|File">
 					<img class="icon" src="{$contextPath}/plugins/web/resources/img/service/folder_32.png" style="vertical-align: middle" alt=""/>
+                    <!-- TODO add helper to test existing ressource in the skin -->
 				</xsl:when>
 				<xsl:otherwise>
 					<img class="icon" src="{$contextPath}/plugins/web/resources/img/service/folder_empty_32.png" style="vertical-align: middle" alt=""/>
Index: webapp/cms/plugins/web/pages/services/sitemap/sitemap.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/sitemap/sitemap.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/sitemap/sitemap.xsl	(working copy)
@@ -18,29 +18,86 @@
 				xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
 				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
-	<xsl:param name="cms-context"/>
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+
+    <!-- TODO -->
+	<xsl:param name="contextPath"/>
+    <!-- TODO -->    
+    <xsl:param name="cms-context"/>
+    <!-- TODO -->
     <xsl:param name="skin"/>
+    <!-- TODO -->
 	<xsl:param name="lang"/>
+    <!-- TODO -->
 	<xsl:param name="header"/>
 	
+    <!-- Used in common.xsl -->
+    <xsl:variable name="common-service-css-class-name">sitemap</xsl:variable>
+    <xsl:variable name="is-empty" select="not(/sitemap)"/>      
+    
+    
+    <!-- +
+         | ROOT TEMPLATE
+         + -->         
 	<xsl:template match="/sitemap">
-		<html>
-			<body>
-				<div class="sitemap-wrapper">
-					<xsl:if test="$header != ''"><h1><xsl:value-of select="$header"/></h1></xsl:if>
-	
-					<xsl:if test="page">
-						<ul>
-							<xsl:apply-templates select="page" mode="first"/>
-						</ul>
-					</xsl:if>
-				</div>
-			</body>
-		</html>
+        <xsl:call-template name="common-service"/>    
 	</xsl:template>
+    
+    <!-- +
+         | HEAD
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-css">
+        <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/web/resources/css/jquery.treeview.css"/>
+    </xsl:template>
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-head-js">
+        <script type="text/javascript" src="{$contextPath}/plugins/web/resources/js/jquery.treeview.min.js"></script>
+        
+        <script type="text/javascript">
+            $j(document).ready(function(){
+                if ($j('div.sitemap').length != 0) 
+                {
+                    $j('.filetree').treeview({
+                        persist:   "location",
+                        collapsed: true,
+                        animated:  "fast"
+                    });
+                }
+            });
+        </script>
+    </xsl:template>    
+    
+    <!-- +
+         | BODY
+         + -->    
+
+    <!-- Used in common.xsl --> 
+    <xsl:template name="common-service-body-nonempty-content">
+        <xsl:call-template name="common-service-body-nonempty-content-title">
+            <xsl:with-param name="title" select="$header"/>
+        </xsl:call-template>
+        
+        <xsl:call-template name="page-list"/>
+            
+    </xsl:template>            
 	
+    <xsl:template name="page-list">
+        <xsl:if test="page">
+            <ul class="filetree">
+                <xsl:apply-templates select="page" mode="first"/>
+            </ul>
+        </xsl:if>    
+    </xsl:template>
+    
 	<xsl:template match="page" mode="first">
 		<li class="first">
+            <xsl:attribute name="class">
+                <xsl:if test="position() = last()">last </xsl:if>            
+            </xsl:attribute>
+            
 			<a href="{$cms-context}/{$lang}/{@path}.html" title="{@title}"><xsl:value-of select="@title"/></a>
 			<xsl:if test="page">
 				<ul>
@@ -60,5 +117,5 @@
 			</xsl:if>
 		</li>
 	</xsl:template>
-
+    
 </xsl:stylesheet>
Index: webapp/cms/plugins/web/pages/services/iframe/iframe.xsl
===================================================================
--- webapp/cms/plugins/web/pages/services/iframe/iframe.xsl	(revision 9137)
+++ webapp/cms/plugins/web/pages/services/iframe/iframe.xsl	(working copy)
@@ -18,14 +18,27 @@
 				xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
 				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
+    <xsl:import href="service:web://pages/services/common.xsl"/>
+    
+    <!-- TODO -->
 	<xsl:param name="header"/>
+    <!-- TODO -->
 	<xsl:param name="url"/>
+    <!-- TODO -->
 	<xsl:param name="height"/>
+    <!-- TODO -->
 	<xsl:param name="border"/>
+    <!-- TODO -->
 	<xsl:param name="transparancy"/>
+    <!-- TODO -->
 	<xsl:param name="cms-context"/>
+    <!-- TODO -->
 	<xsl:param name="skin"/>
+
 	
+    <!-- +
+         | ROOT TEMPLATE
+         + -->      
 	<xsl:template match="/">
 		<html>
 			<body>
@@ -38,8 +51,11 @@
 					</xsl:choose>
 				</xsl:variable>
 				
-				<xsl:call-template name="iframe-title"/>
-				
+                <!-- TODO -->
+                <xsl:call-template name="common-service-body-nonempty-content-title">
+                    <xsl:with-param name="title" select="$header"/>
+                </xsl:call-template>                
+                
 				<iframe src="{$url}" style="{$style}">
 					<xsl:attribute name="frameborder"><xsl:choose><xsl:when test="$border = 'true'">1</xsl:when><xsl:otherwise>0</xsl:otherwise></xsl:choose></xsl:attribute>
 					<xsl:if test="$transparancy = 'true'"><xsl:attribute name="allowtransparency">true</xsl:attribute></xsl:if>
@@ -50,10 +66,4 @@
 		</html>
 	</xsl:template>
 	
-	<xsl:template name="iframe-title">
-		<xsl:if test="$header != ''">
-			<h1><xsl:value-of select="$header"/></h1>
-		</xsl:if>
-	</xsl:template>
-	
 </xsl:stylesheet>
Index: webapp/cms/plugins/web/resources/css/jquery.treeview.css
===================================================================
--- webapp/cms/plugins/web/resources/css/jquery.treeview.css	(revision 0)
+++ webapp/cms/plugins/web/resources/css/jquery.treeview.css	(revision 0)
@@ -0,0 +1,74 @@
+.treeview, .treeview ul { 
+	padding: 0;
+	margin: 0;
+	list-style: none;
+}
+
+.treeview ul {
+	background-color: white;
+	margin-top: 4px;
+}
+
+.treeview .hitarea {
+	background: url(../img/service/tree/treeview-default.gif) -64px -25px no-repeat;
+	height: 16px;
+	width: 16px;
+	margin-left: -16px;
+	float: left;
+	cursor: pointer;
+}
+/* fix for IE6 */
+* html .hitarea {
+	display: inline;
+	float:none;
+}
+
+.treeview li { 
+	margin: 0;
+	padding: 3px 0pt 3px 16px;
+}
+
+.treeview a.selected {
+	background-color: #eee;
+}
+
+#treecontrol { margin: 1em 0; display: none; }
+
+.treeview .hover { color: red; cursor: pointer; }
+
+.treeview li { background: url(../img/service/tree/treeview-default-line.gif) 0 0 no-repeat; }
+.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
+
+.treeview .expandable-hitarea { background-position: -80px -3px; }
+
+.treeview li.last { background-position: 0 -1766px }
+.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(../img/service/tree/treeview-default.gif); }  
+.treeview li.lastCollapsable { background-position: 0 -111px }
+.treeview li.lastExpandable { background-position: -32px -67px }
+
+.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
+
+.treeview-red li { background-image: url(../img/service/tree/treeview-red-line.gif); }
+.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(../img/service/tree/treeview-red.gif); } 
+
+.treeview-black li { background-image: url(../img/service/tree/treeview-black-line.gif); }
+.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(../img/service/tree/treeview-black.gif); }  
+
+.treeview-gray li { background-image: url(../img/service/tree/treeview-gray-line.gif); }
+.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(../img/service/tree/treeview-gray.gif); } 
+
+.treeview-famfamfam li { background-image: url(../img/service/tree/treeview-famfamfam-line.gif); }
+.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(../img/service/tree/treeview-famfamfam.gif); } 
+
+.treeview .placeholder {
+	background: url(../img/service/tree/ajax-loader.gif) 0 0 no-repeat;
+	height: 16px;
+	width: 16px;
+	display: block;
+}
+
+.filetree li { padding: 3px 0 2px 16px; }
+.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
+.filetree span.folder { background: url(../img/service/tree/folder.gif) 0 0 no-repeat; }
+.filetree li.expandable span.folder { background: url(../img/service/tree/folder-closed.gif) 0 0 no-repeat; }
+.filetree span.file { background: url(../img/service/tree/file.gif) 0 0 no-repeat; }
Index: webapp/cms/plugins/odf-web/pages/services/search/search.xsl
===================================================================
--- webapp/cms/plugins/odf-web/pages/services/search/search.xsl	(revision 9137)
+++ webapp/cms/plugins/odf-web/pages/services/search/search.xsl	(working copy)
@@ -47,12 +47,10 @@
 		<xsl:choose>
 			<xsl:when test="hits/hit">
 				<xsl:call-template name="hits"/>
-				
 				<xsl:call-template name="pagination"/>
 			</xsl:when>
-			
 			<xsl:when test="/search/form/values and not(/search/illegal-textfield)">
-				<div class="no-result"><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_NO_RESULT"/></div>
+				<p class="no-result"><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_NO_RESULT"/></p>
 			</xsl:when>
 		</xsl:choose>
 	</xsl:template>
@@ -83,7 +81,7 @@
 		 + -->
 	<xsl:template name="results-sort">
 		<div class="results-sort">
-			<ul class="sort">
+			<ul>
 				<li><span><i18n:text i18n:key="PLUGINS_ODFWEB_SERVICE_SEARCH_SORT_BY"/></span></li>
 				<li>
 					<xsl:choose>
Index: webapp/cms/skins/demo/templates/mypage/filters/default.xml
===================================================================
--- webapp/cms/skins/demo/templates/mypage/filters/default.xml	(revision 8889)
+++ webapp/cms/skins/demo/templates/mypage/filters/default.xml	(working copy)
@@ -15,28 +15,5 @@
    limitations under the License.
    -->
 <filters>
-
-	<filter id="acces-directs" target="page">
-		<context type="current-site" lang="current"/>
-		<tags>
-			<tag key="ACCES_DIRECTS"/>
-		</tags>
-        <max-result>8</max-result>
-        <sort-information>
-        	<sort metadataId="title" ascending="true"/>
-        </sort-information>
-	</filter>
-	
-	<filter id="focus" target="content">
-		<content-types>
-			<type id="org.ametys.web.default.Content.article"/>
-		</content-types>
-		<tags>
-			<tag key="FOCUS"/>
-		</tags>
-		<context type="child-pages"/>
-		<max-result>10</max-result>
-		<view>link</view>
-	</filter>
 	
 </filters>
\ No newline at end of file
Index: webapp/cms/skins/demo/templates/mypage/stylesheets/template.xsl
===================================================================
--- webapp/cms/skins/demo/templates/mypage/stylesheets/template.xsl	(revision 8889)
+++ webapp/cms/skins/demo/templates/mypage/stylesheets/template.xsl	(working copy)
@@ -21,74 +21,7 @@
 		xmlns:xalan="http://xml.apache.org/xalan"
 		xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date"
 		exclude-result-prefixes="sitemap">
-		
-	<xsl:import href="skin://stylesheets/commons.xsl" />
-	
-	<xsl:param name="document"/>
-	
-	<!--  ************************  -->
-	<!--  * Css supplémentaires  *  -->
-	<!--  ************************  -->
-	<xsl:template name="additionnal-css">
-		<link type="text/css" href="{$contextPath}/plugins/socialnetworking/resources/css/facebook/facebook.css" rel="stylesheet" media="screen" />
-	</xsl:template>
 
-	<!--  ***************************************************************  -->
-	<!--  *  Il n'y a pas de colonne de droite sur le gabari d'article  *  -->
-	<!--  ***************************************************************  -->
-	<xsl:template name="body-template">	
-		<div id="jsn-content">
-			<div id="jsn-content_inner1" class="article">
-				<div id="jsn-content_inner2"> 
-					<xsl:call-template name="left-content"/>
-					<xsl:call-template name="main-content"/>
-				</div>	
-			</div>
-		</div>	
-	</xsl:template>	
-	
-	<!--  ***********************************  -->
-	<!--  *  Contenu de la Partie centrale  *  -->
-	<!--  ***********************************  -->	
-	<xsl:template name="main-content">
-	
-		<div id="jsn-maincontent-article" class="jsn-column">
-			<div id="jsn-maincontent_inner">
-				<xsl:call-template name="breadcrumb"/>
-				
-				<xsl:call-template name="sharethis"/>
-				
-				<xsl:call-template name="translations"/>
-				
-				<div id="jsn-mainbody">
-					<xsl:call-template name="zone-content-free"/>
-				</div>
-				
-				<xsl:call-template name="facebook-like"/>
-			</div>	
-		</div>	
-	</xsl:template>	
-		
-	<!--  ********************* -->
-	<!--  *  Zone centrale    * -->
-	<!--  ********************* -->
-	<xsl:template name="zone-content-free">
-		<zone name="default" level="3"/>
-	</xsl:template>	
-	
-	<xsl:template name="content"/>
-
-	<xsl:template name="facebook-like">
-		<xsl:if test="$document != ''">
-			<br style="clear:both"/>
-			<div id="facebook-like">
-				<xsl:call-template name="FB_like">
-				    <xsl:with-param name="absoluteUrl"><xsl:value-of select="concat($absolute-raw-context, '/', $lang, '/', $document, '.html')"/></xsl:with-param>
-				    <xsl:with-param name="back-office"><xsl:value-of select="$back-office"/></xsl:with-param>
-				    <xsl:with-param name="layout">standard</xsl:with-param>
-				</xsl:call-template>
-			</div>
-		</xsl:if>
-	</xsl:template>
-	
+	<xsl:import href="skin://templates/page/stylesheets/template.xsl" />
+    
 </xsl:stylesheet>
\ No newline at end of file
Index: .settings/org.eclipse.jdt.core.prefs
===================================================================
--- .settings/org.eclipse.jdt.core.prefs	(revision 0)
+++ .settings/org.eclipse.jdt.core.prefs	(revision 0)
@@ -0,0 +1,12 @@
+#Thu Sep 16 13:55:06 CEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
