<?xml version="1.0" encoding="UTF-8"?>



<!-- Google Sitmaps Stylesheets (GSStylesheets)

     Project Home: http://sourceforge.net/projects/gstoolbox

     Copyright (c) 2005 Baccou Bonneville SARL (http://www.baccoubonneville.com)

     License http://www.gnu.org/copyleft/lesser.html GNU/LGPL

     

     Created by Serge Baccou

     1.0 / 20 Aug 2005

       

     Changes by Johannes Müller (http://GSiteCrawler.com)

     1.1 / 20 Aug 2005 - sorting by clicking on column headers

                       - open urls in new window/tab 

                       - some stylesheet/CSS cleanup 

     1.5a/ 31 Aug 2005 - added version number in footer

                       - removed images (don't allow tracking on other servers)

     

     Changes by Tobias Kluge (http://enarion.net)

     1.2 / 22 Aug 2005 - moved sitemap file and sitemap index file into one file gss.xsl

	 1.5 / 27 Aug 2005 - added js and css into xslt stylesheet; only gss.xsl is needed now

     

     Changes by Serge Baccou

     1.3 / 23 Aug 2005 - some XSLT cleanup

     1.4 / 24 Aug 2005 - sourceForge and LGPL links and logos

                       - sorting is working for siteindex (see gss.js) -->



<xsl:stylesheet version="2.0" 

                xmlns:html="http://www.w3.org/TR/REC-html40"

                xmlns:sitemap="http://www.google.com/schemas/sitemap/0.84"

                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  

  <xsl:output method="html" version="1.0" encoding="iso-8859-1" indent="yes"/>

  

  <!-- Root template -->    

  <xsl:template match="/">

    <html>     

      <head>  

        <title>Google Sitemap File</title>

        <link href="http://www.google.com/webmasters/sitemaps/docs/sitemaps.css" type="text/css" rel="stylesheet"/>

		<style type="text/css">

		  <![CDATA[

			<!--

			h1 { 

				font-weight:bold;

				font-size:1.5em;

				margin-bottom:0;

				margin-top:1px; }

			

			h2 { 

				font-weight:bold;

				font-size:1.2em;

				margin-bottom:0; 

				color:#707070;

				margin-top:1px; }

			

			#gssTitle {

			  background: url(http://www.baccoubonneville.com/gss.jpg) no-repeat;   	

			  line-height: 70px;

			  text-indent: 70px; }

			

			p.sml { 

				font-size:0.8em;

				margin-top:0; }

			

			.sortup {

				background-position: right center;

				background-image: url(http://www.google.com/webmasters/sitemaps/images/sortup.gif);

				background-repeat: no-repeat;

				font-style:italic;

				white-space:pre; }

				

			.sortdown {

				background-position: right center;

				background-image: url(http://www.google.com/webmasters/sitemaps/images/sortdown.gif);

				background-repeat: no-repeat;

				font-style:italic;

				white-space:pre; }

			

			table.copyright {

				width:100%;

				border-top:1px solid #ddad08;

				margin-top:1em;

				text-align:center;

				padding-top:1em;

				vertical-align:top; }

			-->

		  ]]>

		</style>

        <link href="gss.css" type="text/css" rel="stylesheet"/>

        <script language="JavaScript">

		  <![CDATA[

			var selectedColor = "blue";

			var defaultColor = "black";

			var hdrRows = 1;

			var numeric = '..';

			var desc = '..';

			var html = '..';

			var freq = '..';

			

			function initXsl(tabName,fileType) {

				hdrRows = 1;

			

			  if(fileType=="sitemap") {

			  	numeric = ".3.";

			  	desc = ".1.";

			  	html = ".0.";

			  	freq = ".2.";

			  	initTable(tabName);

				  setSort(tabName, 3, 1);

			  }

			  else {

			  	desc = ".1.";

			  	html = ".0.";

			  	initTable(tabName);

				  setSort(tabName, 1, 1);

			  }

			

				var theURL = document.getElementById("head1");

				theURL.innerHTML += ' ' + location;

				document.title += ': ' + location;

			}

			

			function initTable(tabName) {

			  var theTab = document.getElementById(tabName);

			  for(r=0;r<hdrRows;r++)

			   for(c=0;c<theTab.rows[r].cells.length;c++)

			     if((r+theTab.rows[r].cells[c].rowSpan)>hdrRows)

			       hdrRows=r+theTab.rows[r].cells[c].rowSpan;

			  for(r=0;r<hdrRows; r++){

			    colNum = 0;

			    for(c=0;c<theTab.rows[r].cells.length;c++, colNum++){

			      if(theTab.rows[r].cells[c].colSpan<2){

			        theCell = theTab.rows[r].cells[c];

			        rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;/g,'');

			        if(rTitle>""){

			          theCell.title = "Change sort order for " + rTitle;

			          theCell.onmouseover = function(){setCursor(this, "selected")};

			          theCell.onmouseout = function(){setCursor(this, "default")};

			          var sortParams = 15; // bitmapped: numeric|desc|html|freq

			          if(numeric.indexOf("."+colNum+".")>-1) sortParams -= 1;

			          if(desc.indexOf("."+colNum+".")>-1) sortParams -= 2;

			          if(html.indexOf("."+colNum+".")>-1) sortParams -= 4;

			          if(freq.indexOf("."+colNum+".")>-1) sortParams -= 8;

			          theCell.onclick = new Function("sortTable(this,"+(colNum+r)+","+hdrRows+","+sortParams+")");

			        }

			      } else {

			        colNum = colNum+theTab.rows[r].cells[c].colSpan-1;

			      }

			    }

			  }

			}

			

			function setSort(tabName, colNum, sortDir) {

				var theTab = document.getElementById(tabName);

				theTab.rows[0].sCol = colNum;

				theTab.rows[0].sDir = sortDir;

				if (sortDir) 

					theTab.rows[0].cells[colNum].className='sortdown'

				else

					theTab.rows[0].cells[colNum].className='sortup';

			}

			

			function setCursor(theCell, mode){

			  rTitle = theCell.innerHTML.replace(/<[^>]+>|&nbsp;|W/g,'');

			  if(mode=="selected"){

			    if(theCell.style.color!=selectedColor) 

			      defaultColor = theCell.style.color;

			    theCell.style.color = selectedColor;

			    theCell.style.cursor = "hand";

			    window.status = "Click to sort by '"+rTitle+"'";

			  } else {

			    theCell.style.color = defaultColor;

			    theCell.style.cursor = "";

			    window.status = "";

			  }

			}

			

			function sortTable(theCell, colNum, hdrRows, sortParams){

			  var typnum = !(sortParams & 1);

			  sDir = !(sortParams & 2);

			  var typhtml = !(sortParams & 4);

			  var typfreq = !(sortParams & 8);

			  var tBody = theCell.parentNode;

			  while(tBody.nodeName!="TBODY"){

			    tBody = tBody.parentNode;

			  }

			  var tabOrd = new Array();

			  if(tBody.rows[0].sCol==colNum) sDir = !tBody.rows[0].sDir;

			  if (tBody.rows[0].sCol>=0)

			    tBody.rows[0].cells[tBody.rows[0].sCol].className='';

			  tBody.rows[0].sCol = colNum;

			  tBody.rows[0].sDir = sDir;

			  if (sDir) 

			  	 tBody.rows[0].cells[colNum].className='sortdown'

			  else 

			     tBody.rows[0].cells[colNum].className='sortup';

			  for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){

			    colCont = tBody.rows[r].cells[colNum].innerHTML;

			    if(typhtml) colCont = colCont.replace(/<[^>]+>/g,'');

			    if(typnum) {

			      colCont*=1;

			      if(isNaN(colCont)) colCont = 0;

			    }

			    if(typfreq) {

					switch(colCont.toLowerCase()) {

						case "always":  { colCont=0; break; }

						case "hourly":  { colCont=1; break; }

						case "daily":   { colCont=2; break; }

						case "weekly":  { colCont=3; break; }

						case "monthly": { colCont=4; break; }

						case "yearly":  { colCont=5; break; }

						case "never":   { colCont=6; break; }

					}

				}

			    tabOrd[i] = [r, tBody.rows[r], colCont];

			  }

			  tabOrd.sort(compRows);

			  for(i=0,r=hdrRows;r<tBody.rows.length;i++,r++){

			    tBody.insertBefore(tabOrd[i][1],tBody.rows[r]);

			  } 

			  window.status = ""; 

			}

			

			function compRows(a, b){

			  if(sDir){

			    if(a[2]>b[2]) return -1;

			    if(a[2]<b[2]) return 1;

			  } else {

			    if(a[2]>b[2]) return 1;

			    if(a[2]<b[2]) return -1;

			  }

			  return 0;

			}



		  ]]>

		</script>

        

      </head>



      <!-- Store in $fileType if we are in a sitemap or in a siteindex -->

      <xsl:variable name="fileType">

        <xsl:choose>

		  <xsl:when test="//sitemap:url">sitemap</xsl:when>

		  <xsl:otherwise>siteindex</xsl:otherwise>

        </xsl:choose>      

      </xsl:variable>            



      <!-- Body -->

      <body onLoad="initXsl('table0','{$fileType}');">  

            

        <!-- Text and table -->

        <h1 id="head1">Google Sitemap</h1>        

        <xsl:choose>

	      <xsl:when test="$fileType='sitemap'"><xsl:call-template name="sitemapTable"/></xsl:when>

	      <xsl:otherwise><xsl:call-template name="siteindexTable"/></xsl:otherwise>

  		</xsl:choose>

          

        <!-- Copyright notice

             &#x0020; means significant space character -->          

        <br/>

        <table class="copyright" id="table_copyright">

          <tr>

            <td>

              <p>Google Sitemaps: © 2005 <a href="http://www.google.com">Google</a> - <a href="https://www.google.com/webmasters/sitemaps/stats">My Sitemaps</a> - <a href="http://www.google.com/webmasters/sitemaps/docs/en/about.html">About</a> - <a href="http://www.google.com/webmasters/sitemaps/docs/en/faq.html">FAQ</a> - <a href="http://groups-beta.google.com/group/google-sitemaps">Discussion</a> - <a href="http://sitemaps.blogspot.com/">Blog</a></p>

              Google Sitemaps Stylesheets v1.5a: © 2005 <a href="http://www.baccoubonneville.com">Baccou Bonneville</a> - <a href="http://sourceforge.net/projects/gstoolbox">Project</a> - <a href="http://www.baccoubonneville.com/blogs/index.php/webdesign/2005/08/20/google-sitemaps-stylesheets">Blog</a><br/>

              Contributions: Johannes Müller, SOFTplus <a href="http://gsitecrawler.com">GSiteCrawler</a> - Tobias Kluge, enarion.net <a href="http://enarion.net/google/phpsitemapng">phpSitemapNG</a>

            </td>

          </tr>

        </table>

      </body>

    </html>

  </xsl:template>     



  <!-- siteindexTable template -->

  <xsl:template name="siteindexTable">

    <h2>Number of sitemaps in this Google sitemap index: <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"></xsl:value-of></h2>          

    <p class="sml">Click on the table headers to change sorting.</p>

    <table border="1" width="100%" class="data" id="table0">

      <tr class="header">

        <td>Sitemap URL</td>

        <td>Last modification date</td>

      </tr>

      <xsl:apply-templates select="sitemap:sitemapindex/sitemap:sitemap">

        <xsl:sort select="sitemap:lastmod" order="descending"/>              

      </xsl:apply-templates>  

    </table>            

  </xsl:template>  

  

  <!-- sitemapTable template -->  

  <xsl:template name="sitemapTable">

    <h2>Number of URLs in this Google Sitemap: <xsl:value-of select="count(sitemap:urlset/sitemap:url)"></xsl:value-of></h2>          

    <p class="sml">Click on the table headers to change sorting.</p>

    <table border="1" width="100%" class="data" id="table0">

	  <tr class="header">

	    <td>Sitemap URL</td>

		<td>Last modification date</td>

		<td>Change freq.</td>

		<td>Priority</td>

	  </tr>

	  <xsl:apply-templates select="sitemap:urlset/sitemap:url">

	    <xsl:sort select="sitemap:priority" order="descending"/>              

	  </xsl:apply-templates>

	</table>  

  </xsl:template>    

  

  <!-- sitemap:url template -->  

  <xsl:template match="sitemap:url">

    <tr>  

      <td>

        <xsl:variable name="sitemapURL"><xsl:value-of select="sitemap:loc"/></xsl:variable>  

        <a href="{$sitemapURL}" target="_blank" ref="nofollow"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>

      </td>

      <td><xsl:value-of select="sitemap:lastmod"/></td>

      <td><xsl:value-of select="sitemap:changefreq"/></td>

      <td><xsl:value-of select="sitemap:priority"/></td>

    </tr>  

  </xsl:template>

  

  <!-- sitemap:sitemap template -->

  <xsl:template match="sitemap:sitemap">

    <tr>  

      <td>        

        <xsl:variable name="sitemapURL"><xsl:value-of select="sitemap:loc"/></xsl:variable>  

        <a href="{$sitemapURL}"><xsl:value-of select="$sitemapURL"></xsl:value-of></a>

      </td>

      <td><xsl:value-of select="sitemap:lastmod"/></td>

    </tr>  

  </xsl:template>  

  

</xsl:stylesheet>

