<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

#macro ( link $href $name )
  #if ( ( $href.toLowerCase().startsWith("http") || $href.toLowerCase().startsWith("https") ) )
    <a href="$href" class="externalLink">$name</a>
  #else
    <a href="$href">$name</a>
  #end
#end

#macro ( banner $banner $id )
  #if ( $banner )
    #if( $banner.href )
      <a href="$banner.href" id="$id" #if( $banner.alt ) title="$banner.alt" #end >
    #else
        <div id="$id">
    #end

    #if( $banner.src )
        #set ( $src = $banner.src )
        #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
            #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
            #set ( $src = $src.replaceAll( "\\", "/" ) )
        #end
        #if ( $banner.alt )
            #set ( $alt = $banner.alt )
        #else
            #set ( $alt = $banner.name )
        #end
        <img src="$src" alt="$alt" />
    #else
        $banner.name
    #end

    #if( $banner.href )
        </a>
    #else
        </div>
    #end
  #end
#end

#macro ( links $links )
  #set ( $counter = 0 )
  #foreach( $item in $links )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
    #link( $currentItemHref $item.name )
    #if ( $links.size() > $counter )
      |
    #end
  #end
#end

#macro ( breadcrumbs $breadcrumbs )
  #set ( $counter = 0 )
  #foreach( $item in $breadcrumbs )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )

    #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
      $item.name
    #else
      #link( $currentItemHref $item.name )
    #end
    #if ( $breadcrumbs.size() > $counter )
      &gt;
    #end
  #end
#end

#macro ( displayTree $display $item )
  #if ( $item && $item.items && $item.items.size() > 0 )
    #foreach( $subitem in $item.items )
      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
      #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
      #if ( $alignedFileName == $subitemHref )
        #set ( $display = true )
      #end

      #displayTree( $display $subitem )
    #end
  #end
#end

#macro ( menuItem $item )
  #set ( $collapse = "none" )
  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
  #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )

  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $item.collapse == false )
      #set ( $collapse = "expanded" )
    #else
      ## By default collapsed
      #set ( $collapse = "collapsed" )
    #end

    #set ( $display = false )
    #displayTree( $display $item )

    #if ( $alignedFileName == $currentItemHref || $display )
      #set ( $collapse = "expanded" )
    #end
  #end
  <li class="$collapse">
    #if ( $item.img )
      #if ( ! ( $item.img.toLowerCase().startsWith("http") || $item.img.toLowerCase().startsWith("https") ) )
        #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
        #set ( $src = $src.replaceAll( "\\", "/" ) )
        <img src="$src"/>
      #else
        <img src="$item.img" align="absbottom" style="border-width: 0"/>
      #end
    #end
    #if ( $alignedFileName == $currentItemHref )
      <strong>$item.name</strong>
    #else
      #link( $currentItemHref $item.name )
    #end
  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $collapse == "expanded" )
      <ul>
        #foreach( $subitem in $item.items )
          #menuItem( $subitem )
        #end
      </ul>
    #end
  #end
  </li>
#end

#macro ( mainMenu $menus )
  #foreach( $menu in $menus )
    #if ( $menu.name )
    <h5>$menu.name</h5>
    #end
    #if ( $menu.items && $menu.items.size() > 0 )
    <ul>
      #foreach( $item in $menu.items )
        #menuItem( $item )
      #end
    </ul>
    #end
  #end
#end

#macro ( copyright )
  #if ( $project )
    #if ( ${project.organization} && ${project.organization.name} ) 
      #set ( $period = "" )
    #else 
      #set ( $period = "." )
   #end

   #set ( $currentYear = ${currentDate.year} + 1900 )

    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
      ${project.inceptionYear}-${currentYear}${period}
    #else
      ${currentYear}${period}
    #end

    #if ( ${project.organization} )
      #if ( ${project.organization.name} && ${project.organization.url} )
          <a href="$project.organization.url">${project.organization.name}</a>.
      #elseif ( ${project.organization.name} )
        ${project.organization.name}.
      #end
    #end
  #end
#end

#macro ( publishDate $position $publishDate $version )
  #if ( $publishDate && $publishDate.format )
    #set ( $format = $publishDate.format )
  #else
    #set ( $format = "yyyy-MM-dd" )
  #end

  $dateFormat.applyPattern( $format )

  #set ( $dateToday = $dateFormat.format( $currentDate ) )

  #if ( $publishDate && $publishDate.position )
    #set ( $datePosition = $publishDate.position )
  #else
    #set ( $datePosition = "left" )
  #end

  #if ( $version )
    #if ( $version.position )
      #set ( $versionPosition = $version.position )
    #else
      #set ( $versionPosition = "left" )
    #end
  #else
    #set ( $version = "" )
    #set ( $versionPosition = "left" )
  #end

  #set ( $breadcrumbs = $decoration.body.breadcrumbs )
  #set ( $links = $decoration.body.links )

  #if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 )
    #set ( $prefix = "&nbsp;|" )
  #else
    #set ( $prefix = "" )
  #end

  #if ( $datePosition.equalsIgnoreCase( $position ) )
    #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
      #if ( $versionPosition.equalsIgnoreCase( $position ) )
        &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
      #end
    #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #end
      </div>
    #elseif ( $datePosition.equalsIgnoreCase("left") )
      <div class="xleft">
        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #end
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
    #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
    #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
      </div>
    #elseif ( $versionPosition.equalsIgnoreCase("left") )
      <div class="xleft">
        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $position.equalsIgnoreCase( "left" ) )
    #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
      <div class="xleft">
        #breadcrumbs( $breadcrumbs )
      </div>
    #end
  #end
#end

#macro ( poweredByLogo $poweredBy )
    #if( $poweredBy )
        #foreach ($item in $poweredBy)
            #if( $item.href )
                #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
                #set ( $href = $href.replaceAll( "\\", "/" ) )
            #else
                #set ( $href="http://maven.apache.org/" )
            #end

            #if( $item.name )
                #set ( $name = $item.name )
            #else
                #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )  )
                #set ( $name = "${name} Maven"  )
            #end

            #if( $item.img )
                #set ( $img = $item.img )
            #else
                #set ( $img = "images/logos/maven-feather.png" )
            #end

            <a href="$href" title="$name" class="poweredBy">
              #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
              #set ( $img = $img.replaceAll( "\\", "/" ) )
              <img  class="poweredBy"  
                    alt="$name" 
                    src="$img" 
                    width="90"
                    height="30"
              />
            </a>
        #end
        #if( $poweredBy.isEmpty() )
          <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
            <img class="poweredBy" 
                 alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" 
                 src="$relativePath/images/logos/maven-feather.png" 
                 width="90"
                 height="30"
                 border="1" />
          </a>
        #end
    #else
        <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
          <img class="poweredBy" 
               alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" 
               src="$relativePath/images/logos/maven-feather.png" 
               width="90"
               height="30"
               border="1"
               />
        </a>
    #end
#end

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
    <title>$title</title>
    <style type="text/css" media="all">
      @import url("$relativePath/css/maven-base.css");
      @import url("$relativePath/css/maven-theme.css");
      @import url("$relativePath/css/site.css");
    </style>
    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
    #foreach( $author in $authors )
      <meta name="author" content="$author" />
    #end
    #if ( $decoration.body.head )
      #foreach( $item in $decoration.body.head.getChildren() )
        ## Workaround for DOXIA-150 due to a non-desired behaviour in p-u
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toString()
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toUnescapedString()
        #set ( $documentHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
        #set ( $documentHeader = $documentHeader.replaceAll( "\\", "" ) )
        #if ( $item.name == "script" )
          $StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" )
        #else
          $StringUtils.replace( $item.toString(), $documentHeader, "" )
        #end
      #end
    #end
    $headContent
  </head>
  <body class="composite">
    <div id="banner">
      #banner( $decoration.bannerLeft "bannerLeft" )
      #banner( $decoration.bannerRight "bannerRight" )
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
      #publishDate( "left" $decoration.publishDate $decoration.version )
      <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
       #publishDate( "navigation-top" $decoration.publishDate $decoration.version )
       #mainMenu( $decoration.body.menus )
       #poweredByLogo( $decoration.poweredBy )
       #publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        $bodyContent
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;#copyright()All Rights Reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
