<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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 name="Hama">
  <bannerLeft>
    <name>Hama</name>
    <src>/images/headerlogo.png</src>
    <href>/index.html</href>
  </bannerLeft>

  <publishDate position="right"/>
  <version position="right"/>

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

  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>

  <body>
    <links position="left">
      <item name="Wiki" href="http://wiki.apache.org/hama" />
      <item name="JIRA" href="http://issues.apache.org/jira/browse/HAMA" />
      <item name="Hama Twitter" href="http://twitter.com/apachehama" />
    </links>

    <breadcrumbs position="left">
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Hama" href="http://hama.apache.org/"/>
    </breadcrumbs>

    <menu name="Information">
      <item name="Overview" href="index.html"/>
      <item name="Downloads" href="downloads.html"/>
      <item name="Who We Are" href="team-list.html" />
      <item name="Privacy Policy" href="privacy_policy.html" />
    </menu>

    <menu name="Resources">
      <item name="Developers" href="developers.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
      <item name="IRC channel" href="irc-channel.html" />
    </menu>

    <menu name="Documentation">
      <item name="Getting Started" href="getting_started_with_hama.html" />
      <item name="Hama on Clouds" href="hama_on_clouds.html" />
      <item name="Run Examples" href="run_examples.html" />
      <item name="BSP tutorial" href="hama_bsp_tutorial.html" />
      <item name="Graph tutorial" href="hama_graph_tutorial.html" />
      <item name="Benchmarks" href="http://wiki.apache.org/hama/Benchmarks" />
      <item name="Presentations" href="http://wiki.apache.org/hama/Presentations" />
      <item name="Research Papers" href="http://wiki.apache.org/hama/Articles" />
      <item name="Books" href="http://wiki.apache.org/hama/Books" />
    </menu>

    <menu name="Related Projects">
      <item name="Hadoop" href="http://hadoop.apache.org/" />
      <item name="Whirr" href="http://whirr.apache.org/" />
      <item name="Bigtop" href="http://incubator.apache.org/bigtop/" />
      <item name="Mahout" href="http://mahout.apache.org/" />
    </menu>
    
    <menu name="Art works">
      <item name="Artwork and Clothing" href="artwork.html" />
    </menu>

    <menu name="ASF">
      <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 span16">Apache Hama, Apache, the Apache feather logo, and
          the Apache Hama project logos are trademarks of The Apache Software
          Foundation. All other marks mentioned may be trademarks or registered
          trademarks of their respective owners.</div>
    </footer>
  </body>
</project>
