<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:idea="http://www.ideadistributors.com/idea/xsl"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:op="http://www.w3.org/2006/xpath-functions"
    version="2.0">
    <xsl:function name="idea:padFrontOfString">
        <xsl:param name="padCharacter"/>
        <xsl:param name="paddedLength"/>
        <xsl:param name="stringToPad"/>
        <xsl:variable name="returnString">
            <xsl:if test="string-length(xs:string($stringToPad)) &lt; $paddedLength">
                <xsl:value-of select="concat ($padCharacter, $stringToPad)"/>
            </xsl:if>
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="string-length(xs:string($stringToPad)) = $paddedLength">
                <xsl:value-of select="$stringToPad"/>
            </xsl:when>
            <xsl:when test="string-length(xs:string($returnString)) &lt; $paddedLength">
                <xsl:value-of select="idea:padFrontOfString($padCharacter, $paddedLength,
                    $returnString)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$returnString"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:padBackOfString" as="xs:string">
        <xsl:param name="padCharacter"/>
        <xsl:param name="paddedLength"/>
        <xsl:param name="stringToPad"/>
        <xsl:variable name="returnString">
            <xsl:if test="string-length(xs:string($stringToPad)) &lt; $paddedLength">
                <xsl:value-of select="concat ($stringToPad, $padCharacter)"/>
            </xsl:if>
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="string-length(xs:string($returnString)) &lt; $paddedLength">
                <xsl:value-of select="idea:padBackOfString($padCharacter, $paddedLength,
                    $returnString)"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$returnString"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:createSortName" as="xs:string">
        <xsl:param name="name"/>
        <xsl:choose>
            <xsl:when test="starts-with(upper-case($name), 'A ')">
                <xsl:value-of select="concat(substring($name, 3), ', ', substring($name, 1, 1))"/>
            </xsl:when>
            <xsl:when test="starts-with(upper-case($name), 'THE ')">
                <xsl:value-of select="concat(substring($name, 5), ', ', substring($name, 1, 3))"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$name"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:createFriendlyMinutesAndSeconds" as="xs:string">
        <xsl:param name="xmlTime"/>
        <xsl:value-of select="concat(idea:idea-minutes-from-duration($xmlTime), ':',
            idea:padFrontOfString('0', 2,
            round(seconds-from-duration($xmlTime))))"/>
    </xsl:function>
    <xsl:function name="idea:idea-minutes-from-duration">
        <xsl:param name="xmlTime"/>
        <xsl:choose>
        	<xsl:when test="contains($xmlTime, 'H')">
        		<xsl:value-of select="number(substring-before(substring-after(upper-case($xmlTime), 'T'), 'H')) * 60 + number(substring-before(substring-after(upper-case($xmlTime), 'H'), 'M'))"/>
        	</xsl:when>
        	<xsl:otherwise>
		        <xsl:value-of select="substring-before(substring-after(upper-case($xmlTime), 'T'), 'M')"/>
        	</xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:createFriendlyDate" as="xs:string">
        <xsl:param name="xmlDate"/>
        <xsl:choose>
            <xsl:when test="day-from-date($xmlDate) = 0">
                <xsl:value-of select="concat(month-from-date($xmlDate), '/',
                    year-from-date($xmlDate))"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(day-from-date($xmlDate), '/',
                    month-from-date($xmlDate), '/', year-from-date($xmlDate))"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:createFriendlyDateMonthDayYear" as="xs:string">
        <xsl:param name="xmlDate"/>
        <xsl:choose>
            <xsl:when test="day-from-date($xmlDate) = 0">
                <xsl:value-of select="concat(month-from-date($xmlDate), '/',
                    year-from-date($xmlDate))"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(month-from-date($xmlDate), '/',
                    day-from-date($xmlDate), '/', year-from-date($xmlDate))"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:createFriendlyDateFromDuration" as="xs:string">
        <xsl:param name="xmlDate"/>
        <xsl:choose>
            <xsl:when test="days-from-duration($xmlDate) = 0">
                <xsl:value-of select="concat(months-from-duration($xmlDate), '/',
                    years-from-duration($xmlDate))"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(days-from-duration($xmlDate), '/',
                    months-from-duration($xmlDate), '/', years-from-duration($xmlDate))"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:fullNowAsString">
        <xsl:variable name="prefix">
            <xsl:value-of select="idea:dayNowAsString()"/>
        </xsl:variable>
        <xsl:variable name="now">
            <xsl:value-of select="current-dateTime()"/>
        </xsl:variable>
        <xsl:variable name="minutes">
            <xsl:choose>
                <xsl:when test="minutes-from-dateTime($now) &lt; 10">
                    <xsl:value-of select="concat('0', minutes-from-dateTime($now))"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="minutes-from-dateTime($now)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="seconds">
            <xsl:choose>
                <xsl:when test="round(seconds-from-dateTime($now)) &lt; 10">
                    <xsl:value-of select="concat('0', round(seconds-from-dateTime($now)))"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="round(seconds-from-dateTime($now))"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:value-of select="concat($prefix, $minutes, $seconds)"/>
    </xsl:function>
    <xsl:function name="idea:dayNowAsString">
        <xsl:variable name="now">
            <xsl:value-of select="current-dateTime()"/>
        </xsl:variable>
        <xsl:variable name="year">
            <xsl:value-of select="year-from-dateTime($now)"/>
        </xsl:variable>
        <xsl:variable name="month">
            <xsl:choose>
                <xsl:when test="month-from-dateTime($now) &lt; 10">
                    <xsl:value-of select="concat('0', month-from-dateTime($now))"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="month-from-dateTime($now)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="day">
            <xsl:choose>
                <xsl:when test="day-from-dateTime($now) &lt; 10">
                    <xsl:value-of select="concat('0', day-from-dateTime($now))"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="day-from-dateTime($now)"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:value-of select="concat($year, $month, $day)"/>
    </xsl:function>
    <xsl:function name="idea:createDirectoriesFromCPID" as="xs:string">
        <xsl:param name="_cpid"/>
        <xsl:param name="_over99tracks"/>
        <xsl:choose>
            <xsl:when test="compare($_over99tracks, '1') = 0">
                <xsl:value-of select="concat(substring($_cpid, 1, 3), '/', substring($_cpid, 4, 3), '/',
                    substring($_cpid, 7, 3), '/', substring($_cpid, 10, 3), '/', substring($_cpid, 13, 3),
                    '/', substring($_cpid, 16, 3), '/', substring($_cpid, 19, 3), '/', $_cpid, '.xml')"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="concat(substring($_cpid, 1, 3), '/', substring($_cpid, 4, 3), '/',
                    substring($_cpid, 7, 3), '/', substring($_cpid, 10, 3), '/', substring($_cpid, 13, 3),
                    '/', substring($_cpid, 16, 3), '/', substring($_cpid, 19, 2), '/', $_cpid, '.xml')"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:function>
    <xsl:function name="idea:convert-to-seconds">
        <xsl:param name="to-convert"/>
        <xsl:variable name="minutes" select="minutes-from-duration($to-convert)"/>
        <xsl:variable name="seconds" select="seconds-from-duration($to-convert)"/>
        <xsl:value-of select="(60*$minutes + round($seconds))"/>
    </xsl:function>
    <xsl:function name="idea:create-int-from-time">
        <xsl:param name="xmlTime"/>
        <xsl:value-of select="(minutes-from-duration($xmlTime) * 60) +
            round(seconds-from-duration($xmlTime))"/>
    </xsl:function>
    <xsl:function name="idea:create-time-from-int">
        <xsl:param name="intSecondsIn"/>
        <xsl:variable name="intSeconds"><xsl:value-of select="$intSecondsIn"/></xsl:variable>
        <xsl:variable name="minutes" select="floor($intSeconds div 60)"/>
        <xsl:variable name="seconds" select="floor($intSeconds - ($minutes * 60))"/>
        <xsl:value-of select="concat('PT', $minutes, 'M', $seconds, 'S' )"/>
    </xsl:function>
    
    <xsl:function name="idea:excluded">
        <xsl:param name="elemToCheck"/>
        <xsl:param name="deniedList"/>
        <xsl:for-each select="$deniedList/denied">
            <xsl:if test="compare(node(), $elemToCheck)=0">
                <xsl:value-of select="1"/>
            </xsl:if>
        </xsl:for-each>
    </xsl:function>   
    
    <xsl:function name="idea:spliceISRC" as="xs:string">
    	<xsl:param name="isrc"/>
    	<xsl:value-of select="concat(substring($isrc,1,2),'-', substring($isrc,3,3),'-', substring($isrc,6,2),
    		'-', substring($isrc,8,5))"/>
    </xsl:function>
    	


</xsl:stylesheet>
