<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
		xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
		xmlns:dc="http://purl.org/dc/elements/1.1/"
		xmlns:enc="http://purl.oclc.org/net/rss_2.0/enc#"
   		xmlns="http://purl.org/rss/1.0/"
		exclude-result-prefixes="xhtml"
                version="1.0">

<xsl:strip-space elements="*"/>

<xsl:output method="xml" 
		   indent="yes" 
		   encoding="UTF-8" 
		   media-type="application/xml"/>

<!-- hAudio 2 RSS RDF/GRDDL Profile *Stable* by Martin McEvoy $version 4.0 updated Saturday, April 19 2008 $contact info@weborganics.co.uk-->

<!-- base of the current HTML doc set by Processor-->
<xsl:param name="base-uri" select="''"/>

<xsl:param name="start" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' haudio ') and descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' item ')]]"/>

<xsl:param name="index">
<xsl:choose>
     	<xsl:when test="$start">
		<xsl:value-of select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' title ')]/xhtml:a/@href" />
	</xsl:when>
    	<xsl:otherwise>
		<xsl:value-of select="$base-uri" />
    	</xsl:otherwise>
</xsl:choose>
</xsl:param>

<xsl:param name="items" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' item ') and descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' title ')]]"/>

<xsl:param name="audio" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' haudio ') and descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' title ')]]"/>

<xsl:template match="/">
<rdf:RDF>
    <xsl:apply-templates/>
<xsl:choose>
     	<xsl:when test="$items">
		<xsl:call-template name="item"/>
	</xsl:when>
    	<xsl:otherwise>
   		<xsl:call-template name="haudio"/>
    	</xsl:otherwise>
</xsl:choose>
</rdf:RDF>
</xsl:template>

<!-- ==============================================Temaplates===============================================-->

<xsl:template match="xhtml:html">
<xsl:param name="description" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' description ')]"/>
<xsl:param name="published" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' published ')]"/>
<xsl:param name="title" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' title ')]"/>
<xsl:param name="photo" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' logo ')]|descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' photo ')]"/>
<channel>
	<xsl:attribute name='rdf:about'>
		<xsl:value-of select="$index"/>
	</xsl:attribute>
<xsl:choose>
     <xsl:when test="$start">
		<title><xsl:value-of select="$title"/></title>
	</xsl:when>
    	<xsl:otherwise>
		<title><xsl:value-of select="//xhtml:*[name() = 'title']"/></title>
    	</xsl:otherwise>
</xsl:choose>

<link><xsl:value-of select="$index"/></link>

<xsl:if test="$photo">
	<image rdf:resource="{$photo/@src}"/>
</xsl:if>

<xsl:if test="$published">
	<dc:date><xsl:value-of select="$published" /></dc:date>
</xsl:if>

<xsl:if test="$description">
	<description>
		<xsl:value-of select="$description" />
	</description>
</xsl:if>

<items>     
	<rdf:Seq>
		<xsl:choose>
     			<xsl:when test="$items">
				<xsl:call-template name="items"/>
			</xsl:when>
    			<xsl:otherwise>
				<xsl:call-template name="haudios"/>
    			</xsl:otherwise>
		</xsl:choose>
	</rdf:Seq>
</items>
</channel>
</xsl:template>

<xsl:template name="items">
	<xsl:for-each select="$items">
        	<rdf:li rdf:resource="{descendant::xhtml:*[name() = 'a']/@href}"/>
	</xsl:for-each>
</xsl:template>

<xsl:template name="haudios">
	<xsl:for-each select="$audio">
        	<rdf:li rdf:resource="{descendant::xhtml:*[name() = 'a']/@href}"/>
	</xsl:for-each>
</xsl:template>

<xsl:template name="haudio">
  	<xsl:for-each select="$audio">
	<xsl:element name='item'>
  		<xsl:attribute name='rdf:about'>
			<xsl:value-of select="descendant::xhtml:*[name() = 'a']/@href"/>
		</xsl:attribute>
		<xsl:call-template name="title"/>
			<xsl:call-template name="link"/>
			<xsl:call-template name="pubDate"/>
			<xsl:call-template name="author"/>
			<xsl:call-template name="itemDescription"/>
			<xsl:call-template name="enclosure"/>
	</xsl:element>
	</xsl:for-each>
</xsl:template>

<xsl:template name="item">
  	<xsl:for-each select="$items">
	<xsl:element name='item'>
  		<xsl:attribute name='rdf:about'>
			<xsl:value-of select="descendant::xhtml:*[name() = 'a']/@href"/>
		</xsl:attribute>
		<xsl:call-template name="title"/>
			<xsl:call-template name="link"/>
			<xsl:call-template name="pubDate"/>
			<xsl:call-template name="author"/>
			<xsl:call-template name="itemDescription"/>
			<xsl:call-template name="enclosure"/>
	</xsl:element>
	</xsl:for-each>
</xsl:template>

<xsl:template name="title">
<xsl:param name="title" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' title ')]"/>
	<xsl:if test="$title">
		<xsl:element name='title'>
			<xsl:value-of select="$title"/>
		</xsl:element>
	</xsl:if>
</xsl:template>

<xsl:template name="link">
<xsl:param name="href" select="descendant::xhtml:*[name() = 'a']/@href"/>
	<xsl:if test="$href">
		<xsl:element name='link'>
			<xsl:value-of select="$href"/>
		</xsl:element>
	</xsl:if>
</xsl:template>

<xsl:template name="pubDate">
<xsl:param name="date" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' published ')]"/>
	<xsl:if test="$date">
		<xsl:element name='dc:date'>
			<xsl:value-of select="$date"/>
		</xsl:element>
	</xsl:if>
</xsl:template>

<xsl:template name="author">
<xsl:param name="name" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' contributor ')]"/>
<xsl:param name="fallback" select="/*//xhtml:*[contains(concat(' ',normalize-space(@class),' '),' contributor ')][1]"/>
<xsl:choose>
     <xsl:when test="$name">
		<xsl:element name='dc:creator'>
			<xsl:value-of select="$name"/>
		</xsl:element>
	</xsl:when>
    	<xsl:otherwise>
	<xsl:if test="$fallback">
		<xsl:element name='dc:creator'>
			<xsl:value-of select="$fallback"/>
		</xsl:element>
	</xsl:if>
    	</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="itemDescription">
<xsl:param name="itemDesc" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' description ')]"/>
	<xsl:if test="$itemDesc">
		<xsl:element name='description'>
  			<xsl:attribute name='rdf:datatype'>
		     		<xsl:text>http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral</xsl:text>
			</xsl:attribute>
		     <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
			<xsl:copy-of select="$itemDesc"/>
		     <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
		</xsl:element>
	</xsl:if>
</xsl:template>

<xsl:template name="enclosure">
<xsl:param name="enc" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@rel),' '),' enclosure ')]"/>
<xsl:param name="length" select="descendant::xhtml:*[contains(concat(' ',normalize-space(@class),' '),' length ')]"/>
<xsl:if test="$enc">
	<xsl:element name='enc:enclosure'>
		<xsl:element name='rdf:Description'>
  			<xsl:attribute name='rdf:about'>
				<xsl:value-of select="$enc/@href"/>
			</xsl:attribute>
  			<xsl:element name='enc:url'>
				<xsl:value-of select="$enc/@href"/>
			</xsl:element>
  			<xsl:element name='enc:type'>
				<xsl:value-of select="$enc/@type"/>
			</xsl:element>
			<xsl:if test="$length">
  				<xsl:element name='enc:length'>
					<xsl:value-of select="$length/@title"/>
				</xsl:element>
			</xsl:if>
		</xsl:element>
	</xsl:element>
</xsl:if>
</xsl:template>

<!-- strip text -->
<xsl:template match="text()"></xsl:template>
</xsl:stylesheet>
