<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
   $HeadURL$
   $Revision$
   $Date$

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

   This software consists of voluntary contributions made by many
   individuals on behalf of the Apache Software Foundation.  For more
   information on the Apache Software Foundation, please see
   <http://www.apache.org/>.
 -->

<project name="Apache HttpComponents">

<!-- N.B. all non-body elements are automatically inherited -->

  <skin>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>maven-site-skin</artifactId>
    <version>1.1</version>
  </skin>

  <bannerLeft>
    <name>Apache</name>
    <src>http://www.apache.org/images/asf_logo_wide.gif</src>
    <href>http://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <name>HttpComponents</name>
    <src>http://hc.apache.org/images/logos/httpcomponents.png</src>
    <href>http://hc.apache.org/</href>
  </bannerRight>

  <body>
    <!-- N.B. body links are automatically inherited -->
    <links>
      <item name="Apache" href="http://www.apache.org/"/>
      <item name="HttpComponents" href="http://hc.apache.org/index.html"/>
    </links>
    
    <!-- add standard menu links for all sub-sites -->
    <menu name="HttpComponents" inherit="top">
      <item name="Home" href="index.html"/>
      <item name="License" href="http://www.apache.org/licenses/"/>
      <item name="Download" href="downloads.cgi"/>
      <item name="Mailing Lists" href="mail.html"/>
      <item name="Developer documents" href="dev-docs.html"/>
      <item name="Wiki (external)" href="http://wiki.apache.org/HttpComponents/"/>
      <item name="Security" href="http://www.apache.org/security/"/>
    </menu>
    
    <!-- sections for top-level site only -->
    <menu name="Overview">
      <item name="About" href="index.html"/>
      <item name="News" href="news.html"/>
      <item name="Powered by" href="poweredby.html"/>
      <item name="Get Involved" href="get-involved.html"/>
    </menu>
    <menu name="Components">
      <item name="HttpClient 5.0 beta" collapse="true" href="httpcomponents-client-5.0.x/index.html">
        <item name="Quick Start" href="httpcomponents-client-5.0.x/quickstart.html"/>
        <item name="Examples (Classic)" href="httpcomponents-client-5.0.x/examples.html"/>
        <item name="Examples (Async)" href="httpcomponents-client-5.0.x/examples-async.html"/>
        <item name="Logging Guide" href="httpcomponents-client-5.0.x/logging.html"/>
        <item name="Download" href="httpcomponents-client-5.0.x/download.html"/>
        <item name="Project Info" href="httpcomponents-client-5.0.x/project-info.html"/>
      </item>
      <item name="HttpClient 4.5" collapse="true" href="httpcomponents-client-4.5.x/index.html">
        <item name="Quick Start" href="httpcomponents-client-4.5.x/quickstart.html"/>
        <item name="Tutorial" href="httpcomponents-client-4.5.x/tutorial/html/index.html"/>
        <item name="Examples" href="httpcomponents-client-4.5.x/examples.html"/>
        <item name="Android Port" href="httpcomponents-client-4.5.x/android-port.html"/>
        <item name="Programming Primer" href="httpcomponents-client-4.5.x/primer.html"/>
        <item name="NTLM Guide" href="httpcomponents-client-4.5.x/ntlm.html"/>
        <item name="Logging Guide" href="httpcomponents-client-4.5.x/logging.html"/>
        <item name="Download" href="httpcomponents-client-4.5.x/download.html"/>
        <item name="Project Info" href="httpcomponents-client-4.5.x/project-info.html"/>
      </item>
      <item name="HttpCore 5.0 beta" collapse="true" href="httpcomponents-core-5.0.x/index.html">
        <item name="Examples" href="httpcomponents-core-5.0.x/examples.html"/>
        <item name="Download" href="httpcomponents-core-5.0.x/download.html"/>
        <item name="Project Info" href="httpcomponents-core-5.0.x/project-info.html"/>
      </item>
      <item name="HttpCore 4.4" collapse="true" href="httpcomponents-core-4.4.x/index.html">
        <item name="Tutorial" href="httpcomponents-core-4.4.x/tutorial/html/index.html"/>
        <item name="Examples" href="httpcomponents-core-4.4.x/examples.html"/>
        <item name="Download" href="httpcomponents-core-4.4.x/download.html"/>
        <item name="Project Info" href="httpcomponents-core-4.4.x/project-info.html"/>
      </item>
      <item name="HttpAsyncClient 4.1" collapse="true" href="httpcomponents-asyncclient-4.1.x/index.html">
        <item name="Quick Start" href="httpcomponents-asyncclient-4.1.x/quickstart.html"/>
        <item name="Examples" href="httpcomponents-asyncclient-4.1.x/examples.html"/>
        <item name="Download" href="httpcomponents-asyncclient-4.1.x/download.html"/>
        <item name="Project Info" href="httpcomponents-asyncclient-4.1.x/project-info.html"/>
      </item>
    </menu>
    <menu name="Legacy">
      <item name="Commons HttpClient" href="httpclient-legacy/index.html"/>
    </menu>
    <menu name="Project">
      <item name="Status" href="status.html"/>
      <item name="Charter" href="charter.html"/>
    </menu>

    <!-- inherited -->
    <menu ref="reports" inherit="bottom"/>

    <menu name="ASF" inherit="bottom">
      <item name="ASF Home Page" href="http://www.apache.org"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsor Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>
  </body>
  
  <!-- inherited -->
  <poweredBy>
    <!-- Add ApacheCon logo -->
    <logo name="ApacheCon" href="http://www.apache.org/events/current-event.html"
          img="http://www.apache.org/events/current-event-125x125.png"/>
    <!-- Keep the default logo as well -->
    <logo name="Maven" href="http://maven.apache.org/"
          img="http://maven.apache.org/images/logos/maven-feather.png"/>
  </poweredBy>

  <!-- inherited -->
  <custom>
    <footer>
      <div class="xleft">Apache HttpComponents, Commons HttpClient, Apache, the Apache feather logo, and the Apache HttpComponents project logo are trademarks of The Apache Software Foundation.</div>
      <br/>
      <div class="xleft">All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
    </footer>
  </custom>
</project>
