<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at $dateFormat.format( $currentDate ) -->
#macro ( link $href $name $target $img $position $alt $border $width $height )
	#set ( $linkTitle = ' title="' + $name + '"' )
	#if( $target )
		#set ( $linkTarget = ' target="' + $target + '"' )
	#else
		#set ( $linkTarget = "" )
	#end
	#if ( $href.toLowerCase().startsWith("http:/") || $href.toLowerCase().startsWith("https:/") ||
		$href.toLowerCase().startsWith("ftp:/") || $href.toLowerCase().startsWith("mailto:/") ||
		$href.toLowerCase().startsWith("file:/") || ($href.toLowerCase().indexOf("://") != -1) )
		#set ( $linkClass = ' class="external" target="_blank"' )
		
		#if ( $linkTarget )
		#else
			#set ( $linkTarget = "_blank" )
		#end
		
	#else
		#set ( $linkClass = "" )
	#end
	#if ( $img )
		#if ( $position == "left" )
			<a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height)$name</a>
		#else
			<a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height)</a>
		#end
	#else
		<a href="$href"$linkClass$linkTarget$linkTitle>$name</a>
	#end
#end
##
#macro ( image $img $alt $border $width $height )
	#if( $img )
		#if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
						$img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
						$img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
			#set ( $imgSrc = $PathTool.calculateLink( $img, $relativePath ) )
			#set ( $imgSrc = $imgSrc.replaceAll( '\\', '/' ) )
			#set ( $imgSrc = ' src="' + $imgSrc + '"' )
		#else
			#set ( $imgSrc = ' src="' + $img + '"' )
		#end
		#if( $alt )
			#set ( $imgAlt = ' alt="' + $alt + '"' )
		#else
			#set ( $imgAlt = ' alt=""' )
		#end
		#if( $border )
			#set ( $imgBorder = ' border="' + $border + '"' )
		#else
			#set ( $imgBorder = "" )
		#end
		#if( $width )
			#set ( $imgWidth = ' width="' + $width + '"' )
		#else
			#set ( $imgWidth = "" )
		#end
		#if( $height )
			#set ( $imgHeight = ' height="' + $height + '"' )
		#else
			#set ( $imgHeight = "" )
		#end
		<img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight/>
	#end
#end
#macro ( banner $banner $id )
	#if ( $banner )
		#if( $banner.href )
			#set ( $hrf = $banner.href )
			#if ( ! ( $hrf.toLowerCase().startsWith("http:/") || $hrf.toLowerCase().startsWith("https:/") ||
				$hrf.toLowerCase().startsWith("ftp:/") || $hrf.toLowerCase().startsWith("mailto:/") ||
				$hrf.toLowerCase().startsWith("file:/") || ($hrf.toLowerCase().indexOf("://") != -1) ) )
				#set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) )
				#set ( $hrf = $hrf.replaceAll( '\\', '/' ) )
				#if ( ( $hrf == '' ) )
					#set ( $hrf = './' )
				#end
			#end
			<a href="$hrf" 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:/") ||
								$src.toLowerCase().startsWith("ftp:/") || $src.toLowerCase().startsWith("mailto:/") ||
								$src.toLowerCase().startsWith("file:/") || ($src.toLowerCase().indexOf("://") != -1) ) )
						#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 )
	<ul class="nav">
	#set ( $counter = 0 )
	#foreach( $item in $links )
		#set ( $counter = $counter + 1 )
		#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
		#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
		#set ( $activeClass = "" )
		#if ( $alignedFileName == $currentItemHref) 
			#set ( $activeClass = ' class="active"' )
		#end
		<li$activeClass>
		#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
		</li>
	#end
	</ul>
#end
##
#macro ( breadcrumbs $breadcrumbs )
	#foreach( $item in $breadcrumbs )
		#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
		#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) )
		#if ( ( $currentItemHref == '' ) )
			#set ( $currentItemHref = './' )
		#end
##
			#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
			<span class="divider">&gt;</span>
	#end
	$title
#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
	#set ( $active = "" )
	#if ( $alignedFileName == $currentItemHref )
	#set ($active = " active")
	#end
	<li class="$collapse$active">
	#link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
	#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 )
		<ul class="nav nav-list">
		#if ( $menu.name )
			#if ( $menu.img )
			 <li class="nav-header"><i class="$menu.img"></i>$menu.name</li>
			#else
			 <li class="nav-header">$menu.name</li>
			#end
		#end
		#if ( $menu.items && $menu.items.size() > 0 )
			#foreach( $item in $menu.items )
				#menuItem( $item )
			#end
		#end
		</ul>
	#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( $position ) )
		#if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
			<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
			#if ( $versionPosition.equalsIgnoreCase( $position ) )
				<span class="divider">|</span> <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 ) )
					<span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#end
			</div>
		#elseif ( $datePosition.equalsIgnoreCase("left") )
			<div class="pull-left">
				<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
				#if ( $versionPosition.equalsIgnoreCase( $position ) )
					<span class="divider">|</span> <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#end
				#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
					<span class="divider">|</span> #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="pull-left">
				<span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
				#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
					<span class="divider">|</span> #breadcrumbs( $breadcrumbs )
				#end
			</div>
		#end
	#elseif ( $position.equalsIgnoreCase( "left" ) )
		#if ( $breadcrumbs && $breadcrumbs.size() > 0 )
			<div class="pull-left">
				#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
##
			#if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") ||
						$img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:/") ||
						$img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) )
				#set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
				#set ( $img = $img.replaceAll( '\\', '/' ) )
			#end
##
			#if( $item.alt )
				#set ( $alt = ' alt="' + $item.alt + '"' )
			#else
				#set ( $alt = ' alt="' + $name + '"' )
			#end
##
			#if( $item.border )
				#set ( $border = ' border="' + $item.border + '"' )
			#else
				#set ( $border = "" )
			#end
##
			#if( $item.width )
				#set ( $width = ' width="' + $item.width + '"' )
			#else
				#set ( $width = "" )
			#end
			#if( $item.height )
				#set ( $height = ' height="' + $item.height + '"' )
			#else
				#set ( $height = "" )
			#end
##
			<a href="$href" title="$name" class="poweredBy">
				<img class="poweredBy" $alt src="$img" $border $width $height />
			</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" />
			</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" />
		</a>
	#end
#end
##
#macro ( googleAnalytics $accountId )
	#if( $accountId && $accountId != "" )
		<!-- Google Analytics -->
		<script type="text/javascript">
		
			var _gaq = _gaq || [];
			_gaq.push(['_setAccount', '$accountId']);
			_gaq.push (['_gat._anonymizeIp']);
			_gaq.push(['_trackPageview']);

			(function() {
				var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
				var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
			})();

		</script>
	#end
#end
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
		<title>$title - $project.name</title>
		<link rel="stylesheet" href="$relativePath/css/bootstrap.min.css" type="text/css" />
		<link rel="stylesheet" href="$relativePath/css/site.css" type="text/css" />
		<script type="text/javascript" src="$relativePath/js/jquery.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/bootstrap.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/prettify.min.js"></script>
		<script type="text/javascript" src="$relativePath/js/site.js"></script>
#foreach( $author in $authors )
			<meta name="author" content="$author" />
#end
#if ( $dateCreation )
		<meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
#end
#if ( $dateRevision )
		<meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
#end
#if ( $locale )
		<meta http-equiv="Content-Language" content="$locale.language" />
#end
		$headContent
		#googleAnalytics( $decoration.googleAnalyticsAccountId )
	</head>
	<body class="composite">
 
		<div class="navbar">
			<div class="navbar-inner">
				<div class="container-fluid">
					<a class="brand" href="$project.url">$project.name &trade;</a>
					#links( $decoration.body.links )

					<!-- Twitter link -->
					<ul class="nav pull-right">
						<li><a href="http://twitter.com/log4php/" class="external">Follow <strong>@log4php</strong></a></li>
					</ul>
					
					<!-- Google CSE Search Box -->
					<form class="navbar-search pull-right" id="cref" action="http://www.google.com/cse">
						<input type="hidden" name="cref" value="$project.url/cse.xml" />
						<input class="search-query pull-left" type="text" name="q" size="40" placeholder="Search" />
					</form>
				</div>
			</div>
		</div>

		<div class="container-fluid">
			<table class="layout-table">
				<tr>
					<td class="sidebar">
						<div class="well sidebar-nav">
							#mainMenu( $decoration.body.menus )
						</div>
						<div id="poweredBy">
							#poweredByLogo( $decoration.poweredBy )
						</div>
					</td>
					<td class="content">
						$bodyContent
					</td>
				</tr>
			</table>
		</div>
			
		<div class="footer">
			<p>Copyright &#169;#copyright()All Rights Reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )
			Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License, Version 2.0</a>. 
			Please read the <a href="$relativePath/privacy.html">Privacy policy</a></p>
			<p>Apache log4php, Apache, log4php, the Apache feather logo, the Apache Logging Services project logo and the Built by 
			Maven logo are trademarks of The Apache Software Foundation.</p>
			<p>Site powered by <a class="external" href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a>. Icons from 
			<a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p>
		</div>
	</body>
</html>
