<?xml version="1.0" ?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no" encoding="utf-8" indent="yes" doctype-system="http://www.w3.org/TR/xhtml1/DTD/strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" /> 
<xsl:template match="/">
<html>
<xsl:comment>Generated by XSLT created by Paul Millard</xsl:comment> 
<head>
<title>XML-Generated Address Book</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="author" content="P. Millard" />
<link rel="stylesheet" href="addressbook.css" type="text/css" />
</head>

<body>
 <table>
  <tr><td><a name="top" /></td></tr>
  <tr><td colspan="2"><h1>Paul Millard's Contacts</h1></td></tr>
  <tr><td>
   <table class="toc">
    <tr><td><br />
     <ol>
      <xsl:apply-templates select="address_book/record/name_contact/last_name" mode="toc">
        <xsl:sort select="." /> 
      </xsl:apply-templates>
     </ol>
    </td></tr>
   </table>
 </td></tr>
 <tr><td>
 <xsl:apply-templates select="address_book/record/name_contact/last_name" mode="body" />
  <table class="addressbook">
   <xsl:for-each select="address_book/record">
    <xsl:sort select="name_contact/last_name" />
     <tr><td class="leftcol" rowspan="3">Contact</td> 
      <td class="category">First Name:</td> 
      <td class="data"><xsl:value-of select="name_contact/first_name" /></td>
     </tr>
 <tr class="data">
  <td class="category">Middle Name:</td> 
  <td class="data"><xsl:value-of select="name_contact/middle_name" /></td>
 </tr>
 <tr>
  <td class="category">Last Name:</td> 
  <td class="data"><xsl:value-of select="name_contact/last_name" /></td>
 </tr>
 <tr>
  <td class="leftcol" rowspan="5">Address</td> 
  <td class="category">Street:</td> 
  <td class="data"><xsl:value-of select="address_contact/street1" /> 
  </td>
  </tr>
 <tr>
  <td class="category">Apt. or suite:</td> 
  <td class="data"><xsl:value-of select="address_contact/street2" /></td>
 </tr>
 <tr>
  <td class="category">City:</td> 
  <td class="data"><xsl:value-of select="address_contact/city" /></td>
 </tr>
 <tr>
  <td class="category">State:</td> 
  <td class="data"><xsl:value-of select="address_contact/state" /></td>
 </tr>
 <tr>
  <td class="category">Zip Code:</td> 
  <td class="data"><xsl:value-of select="address_contact/zip_code" /></td>
 </tr>
 <tr>
  <td class="leftcol" rowspan="5">Phone</td> 
  <td class="category">Home Number:</td> 
  <td class="data"><xsl:value-of select="phone_contact/home_number" /></td>
 </tr>
 <tr>
  <td class="category">Work Number:</td> 
  <td class="data"><xsl:value-of select="phone_contact/work_number" /></td>
 </tr>
 <tr>
  <td class="category">Fax Number:</td> 
  <td class="data"><xsl:value-of select="phone_contact/fax_number" /></td>
 </tr>
 <tr>
  <td class="category">Cell Number:</td> 
  <td class="data"><xsl:value-of select="phone_contact/cellular" /></td>
 </tr>
 <tr>
  <td class="category">Pager:</td> 
  <td class="data"><xsl:value-of select="phone_contact/pager" /></td>
 </tr>
 <tr>
  <td class="leftcol" rowspan="2">Internet</td> 
  <td class="category">E-mail:</td> 
  <td class="data"><xsl:value-of select="internet_contact/e_mail" /></td>
 </tr>
 <tr>
  <td class="category">Web:</td> 
  <td class="data"><xsl:value-of select="internet_contact/website" /></td>
 </tr>
 <tr>
  <td class="leftcol" rowspan="2">Dates</td> 
  <td class="category">Birthdate:</td> 
  <td class="data"><xsl:value-of select="other_dates/birthdate" /></td>
 </tr>
 <tr>
  <td class="category">Anniversary:</td> 
  <td class="data"><xsl:value-of select="other_dates/anniversary" /></td>
 </tr>
 <tr>
  <td class="leftcol">Comment</td> 
  <td class="data" colspan="2"><xsl:value-of select="other_info/comment" /></td>
 </tr>
</xsl:for-each>
</table>
<br />
</td></tr>
<tr><td><p><a href="#top">top</a></p></td></tr>
 
<tr><td>
<div><a href="http://validator.w3.org/check/referer"><img src="http://www.w3.org/Icons/valid-xhtml10"
 alt="Valid XHTML 1.0!" id="w3c" height="31" width="88" /></a>
 </div>
</td></tr>
</table>
</body>
</html>
</xsl:template>
<!-- template for toc mode creates attribute name for href -->
<xsl:template match="address_book/record/name_contact/last_name" mode="toc">
 <xsl:for-each select="address_book/record">
   <xsl:sort select=".//last_name" /> 
   <xsl:variable name="concat_name" select="concat(.//first_name, ' ', .//middle_name, ' ', .//last_name)" /> 
   <li>
   <a href="{concat('#concat_name', position())}">
    <xsl:value-of select="$concat_name" /> 
   </a>
  </li>
  </xsl:for-each>
</xsl:template> 
<!-- template for body mode creates ref name for link target -->
<xsl:template match="address_book/record/name_contact/last_name" mode="body">
  <xsl:for-each select="address_book/record">
   <xsl:sort select=".//last_name" /> 
   <xsl:variable name="concat_name" select="concat(.//first_name, ' ', .//middle_name, ' ', .//last_name)" /> 
   <li>
   <a name="{concat('concat_name', position())}">
    <xsl:value-of select="$concat_name" /> 
   </a>
   </li>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>