<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:idea="http://www.ideadistributors.com/idea/xsl" exclude-result-prefixes="#all">
    <xsl:include href="idea-functions.xsl"/>
    <xsl:variable name="countriesList">
	<CountryCodes>
	<Code>AF</Code>
	<Code>AL</Code>
	<Code>DZ</Code>
	<Code>AS</Code>
	<Code>AD</Code>
	<Code>AO</Code>
	<Code>AI</Code>
	<Code>AQ</Code>
	<Code>AG</Code>
	<Code>AR</Code>
	<Code>AM</Code>
	<Code>AW</Code>
	<Code>AU</Code>
	<Code>AT</Code>
	<Code>AZ</Code>
	<Code>BS</Code>
	<Code>BH</Code>
	<Code>BD</Code>
	<Code>BB</Code>
	<Code>BY</Code>
	<Code>BE</Code>
	<Code>BZ</Code>
	<Code>BJ</Code>
	<Code>BM</Code>
	<Code>BT</Code>
	<Code>BO</Code>
	<Code>BA</Code>
	<Code>BW</Code>
	<Code>BV</Code>
	<Code>BR</Code>
	<Code>IO</Code>
	<Code>BN</Code>
	<Code>BG</Code>
	<Code>BF</Code>
	<Code>BI</Code>
	<Code>KH</Code>
	<Code>CM</Code>
	<Code>CA</Code>
	<Code>CV</Code>
	<Code>KY</Code>
	<Code>CF</Code>
	<Code>TD</Code>
	<Code>CL</Code>
	<Code>CN</Code>
	<Code>CX</Code>
	<Code>CC</Code>
	<Code>CO</Code>
	<Code>KM</Code>
	<Code>CG</Code>
	<Code>CD</Code>
	<Code>CK</Code>
	<Code>CR</Code>
	<Code>CI</Code>
	<Code>HR</Code>
	<Code>CU</Code>
	<Code>CY</Code>
	<Code>CZ</Code>
	<Code>DK</Code>
	<Code>DJ</Code>
	<Code>DM</Code>
	<Code>DO</Code>
	<Code>EC</Code>
	<Code>EG</Code>
	<Code>SV</Code>
	<Code>GQ</Code>
	<Code>ER</Code>
	<Code>EE</Code>
	<Code>ET</Code>
	<Code>FK</Code>
	<Code>FO</Code>
	<Code>FJ</Code>
	<Code>FI</Code>
	<Code>FR</Code>
	<Code>GF</Code>
	<Code>PF</Code>
	<Code>TF</Code>
	<Code>GA</Code>
	<Code>GM</Code>
	<Code>GE</Code>
	<Code>DE</Code>
	<Code>GH</Code>
	<Code>GI</Code>
	<Code>GR</Code>
	<Code>GL</Code>
	<Code>GD</Code>
	<Code>GP</Code>
	<Code>GU</Code>
	<Code>GT</Code>
	<Code>GN</Code>
	<Code>GW</Code>
	<Code>GY</Code>
	<Code>HT</Code>
	<Code>VA</Code>
	<Code>HN</Code>
	<Code>HK</Code>
	<Code>HU</Code>
	<Code>IS</Code>
	<Code>IN</Code>
	<Code>ID</Code>
	<Code>IR</Code>
	<Code>IQ</Code>
	<Code>IE</Code>
	<Code>IL</Code>
	<Code>IT</Code>
	<Code>JM</Code>
	<Code>JP</Code>
	<Code>JO</Code>
	<Code>KZ</Code>
	<Code>KE</Code>
	<Code>KI</Code>
	<Code>KP</Code>
	<Code>KR</Code>
	<Code>KW</Code>
	<Code>KG</Code>
	<Code>LA</Code>
	<Code>LV</Code>
	<Code>LB</Code>
	<Code>LS</Code>
	<Code>LR</Code>
	<Code>LY</Code>
	<Code>LI</Code>
	<Code>LT</Code>
	<Code>LU</Code>
	<Code>MO</Code>
	<Code>MK</Code>
	<Code>MG</Code>
	<Code>MW</Code>
	<Code>MY</Code>
	<Code>MV</Code>
	<Code>ML</Code>
	<Code>MT</Code>
	<Code>MH</Code>
	<Code>MQ</Code>
	<Code>MR</Code>
	<Code>MU</Code>
	<Code>YT</Code>
	<Code>MX</Code>
	<Code>FM</Code>
	<Code>MD</Code>
	<Code>MC</Code>
	<Code>MN</Code>
	<Code>MS</Code>
	<Code>MA</Code>
	<Code>MZ</Code>
	<Code>MM</Code>
	<Code>NA</Code>
	<Code>NR</Code>
	<Code>NP</Code>
	<Code>NL</Code>
	<Code>AN</Code>
	<Code>NC</Code>
	<Code>NZ</Code>
	<Code>NI</Code>
	<Code>NE</Code>
	<Code>NG</Code>
	<Code>NU</Code>
	<Code>NF</Code>
	<Code>MP</Code>
	<Code>NO</Code>
	<Code>OM</Code>
	<Code>PK</Code>
	<Code>PW</Code>
	<Code>PA</Code>
	<Code>PG</Code>
	<Code>PY</Code>
	<Code>PE</Code>
	<Code>PH</Code>
	<Code>PL</Code>
	<Code>PT</Code>
	<Code>PR</Code>
	<Code>QA</Code>
	<Code>RE</Code>
	<Code>RO</Code>
	<Code>RU</Code>
	<Code>RW</Code>
	<Code>KN</Code>
	<Code>LC</Code>
	<Code>VC</Code>
	<Code>WS</Code>
	<Code>SM</Code>
	<Code>ST</Code>
	<Code>SA</Code>
	<Code>SN</Code>
	<Code>SC</Code>
	<Code>SL</Code>
	<Code>SG</Code>
	<Code>SK</Code>
	<Code>SI</Code>
	<Code>SB</Code>
	<Code>SO</Code>
	<Code>ZA</Code>
	<Code>ES</Code>
	<Code>LK</Code>
	<Code>SD</Code>
	<Code>SR</Code>
	<Code>SZ</Code>
	<Code>SE</Code>
	<Code>CH</Code>
	<Code>SY</Code>
	<Code>TW</Code>
	<Code>TJ</Code>
	<Code>TZ</Code>
	<Code>TH</Code>
	<Code>TG</Code>
	<Code>TK</Code>
	<Code>TO</Code>
	<Code>TT</Code>
	<Code>TN</Code>
	<Code>TR</Code>
	<Code>TM</Code>
	<Code>TC</Code>
	<Code>TV</Code>
	<Code>UG</Code>
	<Code>UA</Code>
	<Code>AE</Code>
	<Code>UK</Code>
	<Code>US</Code>
	<Code>UY</Code>
	<Code>UZ</Code>
	<Code>VU</Code>
	<Code>VE</Code>
	<Code>VN</Code>
	<Code>VG</Code>
	<Code>VI</Code>
	<Code>EH</Code>
	<Code>YE</Code>
	<Code>ZM</Code>
	<Code>ZW</Code>
	</CountryCodes>
    </xsl:variable>
    <xsl:variable name="thisDocument" select="/"/>
<xsl:template name="total-durations">
	<xsl:param name="durations"/>
	<xsl:choose>
	    <xsl:when test="$durations[2]">
		<xsl:variable name="first" select="$durations[1]"/>
		<xsl:variable name="rest">
		    <xsl:call-template name="total-durations">
			<xsl:with-param name="durations" select="$durations[position()!=1]"/>
		    </xsl:call-template>
		</xsl:variable>
		<xsl:value-of select="idea:create-time-from-int(idea:create-int-from-time($first) +
		    idea:create-int-from-time($rest))"/>
	    </xsl:when>
	    <xsl:when test="$durations">
		<xsl:value-of select="$durations[1]"/>
	    </xsl:when>
	    <xsl:otherwise>0</xsl:otherwise>
	</xsl:choose>
</xsl:template>

    <xsl:template match="album">
    	<batch>
    	<product>
		<action>insert</action>
		<product_id><xsl:value-of select="upc"/></product_id>
		<upc><xsl:value-of select="upc"/></upc>
		<title><xsl:value-of select="title"/></title>
		<version_title><xsl:value-of select="title"/></version_title>
		<label><xsl:value-of select="label"/></label>
		<copyright><xsl:value-of select="cline"/></copyright>
		<recording_copyright><xsl:value-of select="pline"/></recording_copyright>
		<release_date><xsl:value-of select="release-date"/></release_date>
		<digital_publish_date><xsl:value-of select="release-date"/></digital_publish_date>
		<flags>
			<explicit_lyrics>
				<xsl:choose>
				    <xsl:when test="compare(@is-explicit, 'explicit') = 0">
					true
				    </xsl:when>
				    <xsl:when test="compare(@is-explicit, 'clean') = 0">
					true
				    </xsl:when>
				    <xsl:otherwise>
					false
				    </xsl:otherwise>
				</xsl:choose>
			</explicit_lyrics>
		</flags>
		<genre><xsl:value-of select="/album/genre[1]"/></genre>
                <xsl:if test="count(/album/genre[position()>1]) > 0">
			<subgenre><xsl:value-of select="/album/genre[2]"/></subgenre>
		</xsl:if>
		<set><xsl:value-of select="count(/album/volume)"/></set>
		<duration>
                    <xsl:variable name="total-duration">
                        <xsl:call-template name="total-durations">
                            <xsl:with-param name="durations" select="//length"/>
                        </xsl:call-template>
                    </xsl:variable>
                    <xsl:value-of
                        select="$total-duration"
                    />
		</duration>
		<contributors>
			<artist><xsl:value-of select="display-artist"/></artist>
		</contributors>
		<artwork>
			<path><xsl:value-of select="image-filename"/></path>
			<height>300</height>
			<width>300</width>
		</artwork>
		<claims>
		    <xsl:choose>
			<xsl:when test="/album/territories/allowed">
			    <xsl:for-each select="/album/territories/allowed">
                          		  <territory>
						<xsl:value-of select="node()"/>
                           		 </territory>
			    </xsl:for-each>
			</xsl:when>
			<xsl:when test="/album/territories/denied">
				<xsl:for-each select="$countriesList/CountryCodes/Code">
					<!--must loop through each denied to find a match, if found, don't display -->
					<xsl:if test="not(idea:excluded(node(),$thisDocument/album/territories)=1)">
                          		  <territory>
						<xsl:value-of select="node()"/>
                           		 </territory>
					</xsl:if>
				</xsl:for-each>
			</xsl:when>
			<xsl:otherwise>
				<territory>WW</territory>
			</xsl:otherwise>
		    </xsl:choose>
                </claims>
		<xsl:for-each select="//track">
			<xsl:sort select="../@id" data-type="number" order="ascending"/>
			<xsl:sort select="sequence" data-type="number" order="ascending"/>
		<product_track>
			<action>insert</action>
			<track_id><xsl:value-of select="isrc"/></track_id>
			<isrc><xsl:value-of select="isrc"/></isrc>
			<title><xsl:value-of select="title"/></title>
			<version_title><xsl:value-of select="title"/></version_title>
			<label><xsl:value-of select="label"/></label>
			<copyright><xsl:value-of select="cline"/></copyright>
			<recording_copyright><xsl:value-of select="pline"/></recording_copyright>
			<flags>
				<explicit_lyrics>
				<xsl:choose>
				    <xsl:when test="compare(@is-explicit, 'explicit') = 0">
					true
				    </xsl:when>
				    <xsl:when test="compare(@is-explicit, 'clean') = 0">
					true
				    </xsl:when>
				    <xsl:otherwise>
					false
				    </xsl:otherwise>
				</xsl:choose>
				</explicit_lyrics>
			</flags>
			<volume><xsl:value-of select="../@id"/></volume>
			<number><xsl:value-of select="sequence"/></number>
			<duration><xsl:value-of select="length"/></duration>
			<contributors>
				<artist><xsl:value-of select="display-artist"/></artist>
			</contributors>
			<file>
				<action>insert</action>
				<name><xsl:value-of select="audio-filename"/></name>
				<format>mp3</format>
			</file>
				<claims>
				    <xsl:choose>
					<xsl:when test="/album/territories/allowed">
					    <xsl:for-each select="/album/territories/allowed">
                          		  <territory>
									<xsl:value-of select="node()"/>
                           		 </territory>
					    </xsl:for-each>
					</xsl:when>
					<xsl:when test="/album/territories/denied">
						<xsl:for-each select="$countriesList/CountryCodes/Code">
							<!--must loop through each denied to find a match, if found, don't display -->
							<xsl:if test="not(idea:excluded(node(),$thisDocument/album/territories)=1)">
							  <territory>
								<xsl:value-of select="node()"/>
							 </territory>
							</xsl:if>
						</xsl:for-each>
					</xsl:when>
			<xsl:otherwise>
				<territory>WW</territory>
			</xsl:otherwise>
				    </xsl:choose>
				</claims>
			<for_track_sale>
				<xsl:choose>
				    <xsl:when test="compare(@sell-unbundled, 'yes') = 0">
					true
				    </xsl:when>
				    <xsl:otherwise>
					false
				    </xsl:otherwise>
				</xsl:choose>
			</for_track_sale>
			<for_album_sale>
				<xsl:choose>
				    <xsl:when test="compare(//@sell-bundled, 'yes') = 0">
					true
				    </xsl:when>
				    <xsl:otherwise>
					false
				    </xsl:otherwise>
				</xsl:choose>
			</for_album_sale>
		</product_track>
		</xsl:for-each>
    	</product>
    	</batch>
    </xsl:template>

    <xsl:function name="idea:output-snocap-contributors">
        <xsl:param name="contributors"/>

        <xsl:variable name="contributors-output">
            <contributors>
                <xsl:for-each select="$contributors">
                    <xsl:variable name="contributor-name" select="name"/>
                    <xsl:choose>
                        <xsl:when test="count(role) > 0">
                            <xsl:for-each select="role">
                                <xsl:choose>
                                    <xsl:when test="compare(node(), 'artist')">
                                        <artist>
                                            <xsl:value-of select="$contributor-name"/>
                                        </artist>
                                    </xsl:when>
                                    <xsl:when
                                        test="compare(node(),
                            'featured_artist')">
                                        <featured_artist>
                                            <xsl:value-of select="$contributor-name"/>
                                        </featured_artist>
                                    </xsl:when>
                                    <xsl:when test="compare(node(), 'orchestra')">
                                        <orchestra>
                                            <xsl:value-of select="$contributor-name"/>
                                        </orchestra>
                                    </xsl:when>
                                    <xsl:when test="compare(node(), 'conductor')">
                                        <conductor>
                                            <xsl:value-of select="$contributor-name"/>
                                        </conductor>
                                    </xsl:when>
                                    <xsl:when test="compare(node(), 'composer') = 0">
                                        <composer>
                                            <xsl:value-of select="$contributor-name"/>
                                        </composer>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <contributor>
                                            <xsl:value-of select="$contributor-name"/>
                                        </contributor>
                                        <xsl:attribute name="role" select="node()"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:for-each>
                        </xsl:when>
                        <xsl:otherwise>
                            <artist>
                                <xsl:value-of select="$contributor-name"/>
                            </artist>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:for-each>
            </contributors>
        </xsl:variable>
        <xsl:copy-of select="$contributors-output"/>
    </xsl:function>
</xsl:stylesheet>
