<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<!-- Content Stylesheet for Site -->

    ## Defined variables
    #set ($bodybg = "#ffffff")
    #set ($bodyfg = "#000000")
    #set ($bodylink = "#525D76")
    #set ($bannerbg = "#525D76")
    #set ($bannerfg = "#ffffff")
    #set ($subbannerbg = "#828DA6")
    #set ($subbannerfg = "#ffffff")
    #set ($tablethbg = "#039acc")
    #set ($tabletdbg = "#a0ddf0")
    
<!-- start the processing -->
#document()
<!-- end the processing -->

## This is where the common page macro's live

#macro ( subsection $subsection)
  <table border="0" cellspacing="0" cellpadding="2" width="100%">
    <tr><td bgcolor="$subbannerbg">
      <font color="$subbannerfg" face="arial,helvetica,sanserif">
        <a name="$subsection.getAttributeValue("name")"><strong>$subsection.getAttributeValue("name")</strong></a>
      </font>
    </td></tr>
    <tr><td>
      <blockquote>
      #foreach ( $items in $subsection.getChildren() )
        #if ($items.getName().equals("img"))
          #image ($items)
        #elseif ($items.getName().equals("source"))
          #source ($items)
        #elseif ($items.getName().equals("table"))
          #table ($items)
        #else
          $xmlout.outputString($items)
        #end
      #end
      </blockquote>
    </td></tr>
  </table>
#end

#macro ( section $section)
  <table border="0" cellspacing="0" cellpadding="2" width="100%">
    <tr><td bgcolor="$bannerbg">
      <font color="$bannerfg" face="arial,helvetica,sanserif">
        <a name="$section.getAttributeValue("name")"><strong>$section.getAttributeValue("name")</strong></a>
      </font>
    </td></tr>
    <tr><td>
      <blockquote>
      #foreach ( $items in $section.getChildren() )
        #if ($items.getName().equals("img"))
          #image ($items)
        #elseif ($items.getName().equals("source"))
          #source ($items)
        #elseif ($items.getName().equals("table"))
          #table ($items)
        #elseif ($items.getName().equals("subsection"))
          #subsection ($items)
        #else
          $xmlout.outputString($items)
        #end
      #end
      </blockquote>
    </td></tr>
  </table>
#end

#macro (document)
  #header()
  #set ($allSections = $root.getChild("body").getChildren("section"))
  #foreach ( $section in $allSections )
    #section ($section)
  #end
  #footer()
#end
