<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<!--
  @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
-->
<project name="${project.name}">
  <bannerLeft>
    <src>images/server-icon_128x128.png</src>
    <href>http://directory.apache.org/</href>
    <name>${project.name}</name>
  </bannerLeft>
  <skin>
    <groupId>org.apache.directory.skins</groupId>
    <artifactId>directory-skin</artifactId>
    <version>${skin.version}</version>
  </skin>
  <publishDate position="navigation-bottom" format="dd-MM-yyyy HH:mm"/>
  <version position="right"/>
  <body>
    <breadcrumbs>
      <item name="Apache Directory Shared" href="http://vm094.oxylos.org/projects/shared/" />
    </breadcrumbs>
    <links>
       <!--
         Need to encode a part of the url due to Issue
         http://jira.codehaus.org/browse/MSITE-159
         and as of https://bugzilla.mozilla.org/show_bug.cgi?id=43659
         this workaround doesn't works in FF 3.x ...
        -->
       <item name="Apache Directory" href="http://directory.apache%2eorg/"/>
       <item name="Apache" href="http://www.apache%2eorg/"/>
       <item name="Maven" href="http://maven.apache%2eorg/"/>
    </links>
    <menu ref="reports"/>
    <menu ref="modules"/>
  </body>
</project>
