<?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.
  -->

<project>
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.1</version>
  </skin>



  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
      <copyrightStyle>pull-right</copyrightStyle>
      <skipGenerationDate>true</skipGenerationDate>
      <googleSearch>
        <sitesearch>${project.url}</sitesearch>
      </googleSearch>
      <!-- break exec /www/www.apache.org/dyn/mirrors/mirrors.cgi -->
      <!--twitter>
        <user>archiva</user>
        <showUser>true</showUser>
        <showFollowers>false</showFollowers>
      </twitter-->
      <ohloh>
        <projectId>6670</projectId>
        <widget>stats</widget>
      </ohloh>
      <!--gitHub>
        <projectId>apache/archiva</projectId>
        <ribbonOrientation>right</ribbonOrientation>
        <ribbonColor>orange</ribbonColor>
      </gitHub-->
    </fluidoSkin>

  </custom>
  <body>
    <head>
      <script type="text/javascript">
        var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
        document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
      </script>
      <script type="text/javascript">
        var pageTracker = _gat._getTracker("UA-140879-5");
        pageTracker._initData();
        pageTracker._trackPageview();
      </script>
    </head>
    <menu name="Introduction">
      <item name="About"                href="/index.html" />
      <item name="Downloads"            href="/download.html" />
      <item name="Versions"             href="/versions.html"/>
      <item name="Mailing Lists"        href="/mail-lists.html"/>
      <item name="Security"             href="/security.html"/>
      <item name="Documentation" href="">
        <item name="Release ${archivaReleaseVersion}" href="http://archiva.apache.org/docs/${archivaReleaseVersion}/"/>
        <item name="Preview ${archivaLastSerieVersion}" href="http://archiva.apache.org/docs/${archivaLastSerieVersion}/"/>
        <item name="Dev ${archivaCurrentDevVersion}" href="http://archiva.apache.org/docs/${archivaCurrentDevVersion}/"/>
      </item>
    </menu>

    <menu name="Development">
      <item name="Build Apache Archiva" href="developers/building.html"/>
      <item name="Get involved"         href="/get-involved.html"/>
      <item name="How we do things"     href="developers/how-we-do-things.html"/>
      <item name="Redback"              href="redback"/>
      <item name="Redback Components"   href="redback/components"/>
      <item name="Javascript application Architecture" href="/jsui/index.html">
        <item name="Rest service"          href="/jsui/rest.html"/>
        <item name="JS Template loading"   href="/jsui/template-loading.html"/>
        <item name="i18n"                  href="/jsui/i18n.html"/>
        <item name="Knockout Binding"      href="/jsui/knockout-binding.html"/>
        <item name="Generic Javascipts"    href="/jsui/generics-js.html"/>
      </item>
      <item name="Releasing"            href="developers/releasing.html"/>
      <item name="Site Publish"         href="developers/publishing-site.html"/>
    </menu>

    <menu name="ASF" inherit="bottom">
      <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>

    <footer>
      <div class="row pull-left">Apache ${project.name}, ${project.name}, Apache, the Apache feather logo, and the Apache ${project.name} project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row pull-left">
        <a href="${project.url}privacy-policy.html">Privacy Policy</a>
      </div>
    </footer>
  </body>
</project>
