<?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="Apache MyFaces Extensions Validator">
  <bannerLeft>
    <name>Apache MyFaces ExtVal</name>
    <src>images/extval_logo.png</src>
    <href>http://myfaces.apache.org/extensions/validator/index.html</href>
  </bannerLeft>

  <bannerRight>
    <name>Apache MyFaces</name>
    <src>img/banners/MyFaces_logo.jpg</src>
    <href>http://myfaces.apache.org/index.html</href>
  </bannerRight>

  <publishDate format="dd MMM yyyy"/>

  <skin>
    <groupId>org.apache.myfaces.maven</groupId>
    <artifactId>myfaces-site-skin</artifactId>
    <version>1-SNAPSHOT</version>
  </skin>

  <body>
    <links>
      <item name="Apache" href="http://www.apache.org"/>
      <item name="MyFaces" href="http://myfaces.apache.org/index.html"/>
      <item name="Download Myfaces ExtVal" href="http://myfaces.apache.org/extensions/validator/download.html"/>
    </links>

    <menu name="Apache MyFaces" inherit="top">
      <item name="Overview"       href="http://myfaces.apache.org/index.html"/>
      <item name="Download"       href="http://myfaces.apache.org/download.html"/>
    </menu>

    <menu name="Contents" inherit="top">
        <item name="Main Site"         href="http://myfaces.apache.org/extensions/validator/index.html"/>
        <item name="ExtVal for JSF 1.1"       href="http://myfaces.apache.org/extensions/validator11/index.html" collapse="true">
            <item name="dummy"        href="dummy"/>
        </item>
        <item name="ExtVal for JSF 1.2"   href="http://myfaces.apache.org/extensions/validator12/index.html">
              <item name="Core Module"           href="http://myfaces.apache.org/extensions/validator12/myfaces-extval-core/index.html"/>
              <item name="Property Validation"   href="http://myfaces.apache.org/extensions/validator12/validation-modules-project/myfaces-extval-property-validation/index.html"/>
              <item name="Trinidad Support"      href="http://myfaces.apache.org/extensions/validator12/component-support-modules-project/myfaces-extval-trinidad-support/index.html"/>
              <item name="Generic Support"       href="http://myfaces.apache.org/extensions/validator12/component-support-modules-project/myfaces-extval-generic-support/index.html"/>
        </item>
    </menu>
	
    <menu name="Documentation">
      <item name="Wiki"         href="http://wiki.apache.org/myfaces/Extensions/Validator/"/>
      <item name="Javadoc"      href="http://myfaces.apache.org/extensions/validator12/javadoc.html"/>
    </menu>

    <menu ref="reports"/>

    <menu name="Foundation" inherit="bottom">
      <item name="ASF"            href="http://www.apache.org/" />
      <item name="Sponsorship"    href="http://www.apache.org/foundation/sponsorship.html" />
      <item name="Thanks"         href="http://www.apache.org/foundation/thanks.html" />
    </menu>
  </body>
</project>
