<!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 $isComponentDocumentation )
	#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
	#set ( $thisProjectDir = "../${project.artifactId}" )
	#if ($thisProjectDir == $PathTool.getDirectoryComponent( $item.href ))
	#set ($active = " active")
	#end
	#if (${project.artifactId} != "log4j" && $isComponentDocumentation && 
				($item.href == "team-list.html" || $item.href == "mail-lists.html" 
				|| $item.href == "issue-tracking.html" || $item.href == "license.html" 
				|| $item.href == "source-repository.html"))
	<!-- Removing overall project item $item.name from component-specific menu -->
	#else
		#set ($thisItemName = $item.name)
		#if (${project.artifactId} != "log4j" && $isComponentDocumentation )
		#set ($thisItemName = $item.name.replace("Project Information", "Component Project"))
		#set ($thisItemName = $item.name.replace("Project", "Component"))
		#end
		<li class="$collapse$active">
		#link($currentItemHref $thisItemName $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 $isComponentDocumentation )
					#end
				</ul>
			#end
		#end
		</li>
 	#end
#end
##
#macro ( mainMenu $menus )
	#foreach( $menu in $menus )
		<ul class="nav nav-list">
		#set ($isComponentDocumentation = false)
 		#if ( $menu.name )
			#set ( $menuName = $menu.name )
			#if ( $menuName == "Project Documentation" )
			#set ( $menuName = "Component Documentation" )
			#set ($isComponentDocumentation = true)
			#end
			#if ( $menu.img )
			 <li class="nav-header"><i class="$menu.img"></i>$menuName</li>
			#else
			 <li class="nav-header">$menuName</li>
			#end
		#end
		#if ( $menu.items && $menu.items.size() > 0 )
			#foreach( $item in $menu.items )
				#menuItem( $item $isComponentDocumentation )
			#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/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/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/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">
		<img class="logo-left" src="$relativePath/images/ls-logo.jpg" alt="Apache logging services logo" />
		<img class="logo-right" src="$relativePath/images/logo.jpg" alt="Apache log4j logo" />
		<div class="clear"></div>

		<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 )
				</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">
			#set ( $currentYear = ${currentDate.year} + 1900 )
				<p>Copyright &copy; ${project.inceptionYear}-${currentYear} <a class="external" href="$project.organization.url">${project.organization.name}</a>. All Rights Reserved.</p>
				<p>Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project 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>
		</div>
	</body>
</html>
