﻿<?xml version='1.0'?>
<xsl:stylesheet
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:x="http://www.w3.org/2001/XMLSchema" 
	xmlns:d="http://schemas.microsoft.com/sharepoint/dsp"
	version="1.0"
	exclude-result-prefixes="xsl msxsl ddwrt"
	xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
	xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
	xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:SharePoint="Microsoft.SharePoint.WebControls"
	xmlns:ddwrt2="urn:frontpage:internal">


	<!-- Date Templates Version 1.01 -->
	<!-- Change History -->
	<!-- Version 1.01: Fixed bug in getDateFromDays; method of calculating the year output was wrong -->
	<!-- Version 1.0: First version (no version information in that iteration) -->
	
	<!-- BEGIN EXTERNALLY-CALLED TEMPLATES -->


	<!-- getDateFromDays: Outputs the date that is $Delta days from $BaseDate -->
	<!-- CAUTION: NOT LEAP-YEAR ACCURATE! -->
	<xsl:template name="getDateFromDays">
		<xsl:param name="paramBaseDate"/> <!-- date in ISO (YYYY-MM-DD'T'HH:MM:SS'Z') or YYYY-MM-DD format -->
		<xsl:param name="paramDelta"/> <!-- number of days before (negative value) or after (positive value) $paramBaseDate -->
		<xsl:param name="paramBoolDebug"/> <!-- debug switch -->
		
		<!-- get total number of days in base date -->
		<xsl:variable name="baseTotalDays">
			<xsl:call-template name="countDaysInDate">
				<xsl:with-param name="paramDate" select="$paramBaseDate"/>
			</xsl:call-template>
		</xsl:variable> 
		<!-- BEGIN DEBUG -->
		<xsl:if test="$paramBoolDebug = 1">
			<br/>
			baseTotalDays: <xsl:value-of select="$baseTotalDays"/>
		</xsl:if>
		<!-- END DEBUG -->
		
		<!-- get total number of days in output date -->
		<xsl:variable name="newDateTotalDays" select="$baseTotalDays + $paramDelta"/>
		<!-- BEGIN DEBUG -->
		<xsl:if test="$paramBoolDebug = 1">
			newDateTotalDays: <xsl:value-of select="$newDateTotalDays"/>
			<br/>
		</xsl:if>
		<!-- END DEBUG -->
		
		<!-- calculate output year -->
		<xsl:variable name="newDateYear" select="floor($newDateTotalDays div 365)"/>
		
		<!-- calculate output month-->
		<xsl:variable name="newDateYearRemainder" select="$newDateTotalDays - ($newDateYear * 365)"/>
		<xsl:variable name="newDateMonth">
			<xsl:call-template name="ConvertDaysToMonth">
				<xsl:with-param name="paramDays" select="$newDateYearRemainder"/>
			</xsl:call-template>
		</xsl:variable>
		
		<!-- calculate output day -->
		<xsl:variable name="newDateMonthDays">
			<xsl:call-template name="ConvertMonthToTotalDays">
				<xsl:with-param name="paramMonth" select="$newDateMonth"/>
			</xsl:call-template>
		</xsl:variable>
		<xsl:variable name="newDateDay" select="format-number($newDateYearRemainder - $newDateMonthDays,'00.')"/>
				
		<xsl:value-of select="concat($newDateYear,'-',$newDateMonth,'-',$newDateDay)"/>
	</xsl:template>
	<!-- END getDateFromDays -->


	<!-- convertCalcDateValue: Formats a calculated date field value in ISO format -->
	<!-- This template handles values from "Date Only" and "Date & Time" calculated fields. -->
	<!-- It also has a bit of tolerance for some variations. For example, values that have extra -->
	<!-- white space, values with seconds included, and values that have only an hour value but no minutes. -->
	<xsl:template name="convertCalcDateValue">
		<xsl:param name="paramDate"/> <!-- date format of "MM/DD/YYYY" or "MM/DD/YYYY HH:MM [AM|PM]" -->
		<xsl:param name="paramBoolDebug"/> <!-- debug switch -->
		
		<!-- trim extra spaces from input -->
		<xsl:variable name="paramDateTrimmed" select="normalize-space($paramDate)"/>
		
		<!-- find the date part of the string -->
		<xsl:variable name="date">
			<xsl:choose>
				<xsl:when test="contains($paramDateTrimmed,' ')">
					<xsl:value-of select="substring-before($paramDateTrimmed,' ')"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="$paramDateTrimmed"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<!-- BEGIN DEBUG -->
		<xsl:if test="$paramBoolDebug = 1">
			paramDateTrimmed: <xsl:value-of select="$paramDateTrimmed"/>
			<br/>
			Date: <xsl:value-of select="$date"/>
			<br/>
		</xsl:if>
		<!-- END DEBUG -->
		
		<!-- get date component values -->
		<xsl:variable name="month" select="format-number(substring-before($date,'/'),'00.')" />
		<xsl:variable name="day" select="format-number(substring-before(substring-after($date,'/'),'/'),'00.')"/>
		<xsl:variable name="year" select="format-number(substring(substring-after(substring-after($date,'/'),'/'),1,4),'00.')"/>
		
		<!--	if we find a space char and either an "AM" or "PM",
				then we assume there is a time value included; otherwise not -->
		<xsl:variable name="timeString">
			<xsl:choose>
				<xsl:when test="contains($paramDateTrimmed,' ') and (contains($paramDateTrimmed,'AM') or contains($paramDateTrimmed,'PM'))">
					<xsl:value-of select="substring-after($paramDateTrimmed,' ')"/>
				</xsl:when>
				<xsl:otherwise></xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<!-- BEGINDEBUG -->
		<xsl:if test="$paramBoolDebug = 1">
			timeString: <xsl:value-of select="$timeString"/>
			<br/>
		</xsl:if>
		<!-- END DEBUG -->
		
		<!-- get hour value -->
		<xsl:variable name="hourString">
			<xsl:choose>
				<xsl:when test="$timeString = ''"></xsl:when>
				<xsl:when test="not(contains($timeString,':'))">
					<xsl:value-of select="substring($timeString,1,2)"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="substring-before($timeString,':')"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>		
		<xsl:variable name="hour">
			<xsl:choose>
				<xsl:when test="$hourString = ''">
					<xsl:value-of select="format-number('0','00.')"/>
				</xsl:when>
				<xsl:when test="contains($timeString,'PM') and $hourString != '12'">
					<xsl:value-of select="format-number($hourString,'00.') + 12"/>
				</xsl:when>
				<xsl:when test="contains($timeString,'AM') and $hourString = '12'">
					<xsl:value-of select="format-number('0','00.')"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="format-number($hourString,'00.')"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		
		<!-- get minute value -->
		<xsl:variable name="min">
			<xsl:choose>
				<xsl:when test="substring(substring-after($timeString,':'),1,2) = ''">
					<xsl:value-of select="format-number('0','00.')"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="format-number(substring(substring-after($timeString,':'),1,2),'00.')"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		
		<!-- get second value -->
		<xsl:variable name="sec">
			<xsl:choose>
				<xsl:when test="substring(substring-after(substring-after($timeString,':'),':'),1,2) = ''">
					<xsl:value-of select="format-number('0','00.')"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="format-number(substring(substring-after(substring-after($timeString,':'),':'),1,2),'00.')"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		
		<xsl:value-of select="concat($year,'-',$month,'-',$day,'T',$hour,':',$min, ':', $sec, 'Z')"/>
	</xsl:template>	
	<!-- END convertCalcDateValue -->
	
	
	<!-- getDayDelta: returns the difference in days between paramDateA and paramDateB -->
	<xsl:template name="getDayDelta">
		<xsl:param name="paramDateA"/> <!-- acceptable formats: YYYY-MM-DD or YYYY-MM-DD'T'HH:MM:SS'Z'-->
		<xsl:param name="paramDateB"/> <!-- acceptable formats: YYYY-MM-DD or YYYY-MM-DD'T'HH:MM:SS'Z'-->
		
		<xsl:variable name="dateADays">
			<xsl:call-template name="countDaysInDateWithLeapYearDays">
				<xsl:with-param name="paramDate" select="$paramDateA"/>
			</xsl:call-template>		
		</xsl:variable>
		
		<xsl:variable name="dateBDays">
			<xsl:call-template name="countDaysInDateWithLeapYearDays">
				<xsl:with-param name="paramDate" select="$paramDateB"/>
			</xsl:call-template>		
		</xsl:variable>
			
		<xsl:value-of select="number($dateADays) - number($dateBDays)"/>		
	</xsl:template>
	<!-- END getDayDelta -->


	<!-- getDateRange: from a base date it is given, returns START OR END date for MONTH OR QUARTER (LAST, THIS, or NEXT) -->
	<xsl:template name="getDateRange">
		<xsl:param name="paramBaseDate"/> <!-- acceptable formats: YYYY-MM-DD or YYYY-MM-DD'T'HH:MM:SS'Z'-->
		<xsl:param name="paramRangeType"/> <!-- valid rangeType values: MONTH, QUARTER -->
		<xsl:param name="paramRangeBoundary"/> <!-- valid rangeBoundary values: START, END -->
		<xsl:param name="paramRangePeriod"/> <!-- valid rangePeriod values: LAST, NEXT -->


		<xsl:variable name="baseYear" select="substring-before($paramBaseDate,'-')"/>
		<xsl:variable name="baseMonth" select="substring(substring-after($paramBaseDate,'-'),1,2)"/>
		<xsl:variable name="baseDay" select="substring(substring-after(substring-after($paramBaseDate,'-'),'-'),1,2)"/>

		<!-- calculate year -->
		<xsl:variable name="returnYear">
			<xsl:choose>
				<!-- range type is MONTH -->
				<xsl:when test="$paramRangeType = 'MONTH'">
					<xsl:choose>
						<xsl:when test="$paramRangePeriod = 'LAST'">
							<xsl:choose>
								<xsl:when test="number($baseMonth) != 1">
									<xsl:value-of select="$baseYear"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:value-of select="format-number(number($baseYear) - 1,'0000.')"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'THIS'">
							<xsl:value-of select="$baseYear"/>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'NEXT'">
							<xsl:choose>
								<xsl:when test="number($baseMonth) != 12"><xsl:value-of select="$baseYear"/></xsl:when>
								<xsl:otherwise>
									<xsl:value-of select="format-number(number($baseYear) + 1,'0000.')"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
					</xsl:choose>	
				</xsl:when>
				<!-- END range type is MONTH -->

				<!-- range type is QUARTER-->
				<xsl:when test="$paramRangeType = 'QUARTER'">
					<xsl:choose>
						<xsl:when test="$paramRangePeriod = 'LAST'">
							<xsl:choose>
								<xsl:when test="$baseMonth = 1 or $baseMonth = 2 or $baseMonth = 3">
									<xsl:value-of select="format-number(number($baseYear) - 1,'0000.')"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:value-of select="$baseYear"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'THIS'">
							<xsl:value-of select="$baseYear"/>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'NEXT'">
							<xsl:choose>
								<xsl:when test="$baseMonth = 10 or $baseMonth = 11 or $baseMonth = 12">
									<xsl:value-of select="format-number(number($baseYear) + 1,'0000.')"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:value-of select="$baseYear"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
					</xsl:choose>	
				</xsl:when>
				<!-- range type is MONTH -->
			</xsl:choose>
		</xsl:variable>

		<!-- calculate month -->
		<xsl:variable name="returnMonth">
			<xsl:choose>
				<!-- range type is MONTH -->
				<xsl:when test="$paramRangeType = 'MONTH'">
					<xsl:choose>
						<xsl:when test="$paramRangePeriod = 'LAST'">
							<xsl:choose>
								<xsl:when test="number($baseMonth) != 1">
									<xsl:value-of select="format-number(number($baseMonth) - 1,'00.')"/>
								</xsl:when>
								<xsl:otherwise>12</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'THIS'">
							<xsl:value-of select="number($baseMonth)"/>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'NEXT'">
							<xsl:choose>
								<xsl:when test="number($baseMonth) != 12">
									<xsl:value-of select="format-number(number($baseMonth) + 1,'00.')"/>
								</xsl:when>
								<xsl:otherwise>
									01
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
					</xsl:choose>									
				</xsl:when>
				<!-- END range type is MONTH -->

				<!-- range type is QUARTER-->
				<xsl:when test="$paramRangeType = 'QUARTER'">
					<xsl:choose>
						<xsl:when test="$paramRangePeriod = 'LAST'">
							<xsl:choose>
								<xsl:when test="$baseMonth = 1 or $baseMonth = 2 or $baseMonth = 3">
									<xsl:call-template name="getQuarterMonthBoundary">
										<xsl:with-param name="paramMonth" select="$baseMonth + 9"/>
										<xsl:with-param name="paramBoundary" select="$paramRangeBoundary"/>
									</xsl:call-template>
								</xsl:when>
								<xsl:otherwise>
									<xsl:call-template name="getQuarterMonthBoundary">
										<xsl:with-param name="paramMonth" select="$baseMonth - 3"/>
										<xsl:with-param name="paramBoundary" select="$paramRangeBoundary"/>
									</xsl:call-template>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'THIS'">
							<xsl:call-template name="getQuarterMonthBoundary">
								<xsl:with-param name="paramMonth" select="$baseMonth"/>
								<xsl:with-param name="paramBoundary" select="$paramRangeBoundary"/>
							</xsl:call-template>
						</xsl:when>
						<xsl:when test="$paramRangePeriod = 'NEXT'">
							<xsl:choose>
								<xsl:when test="$baseMonth = 10 or $baseMonth = 11 or $baseMonth = 12">
									<xsl:call-template name="getQuarterMonthBoundary">
										<xsl:with-param name="paramMonth" select="$baseMonth - 9"/>
										<xsl:with-param name="paramBoundary" select="$paramRangeBoundary"/>
									</xsl:call-template>
								</xsl:when>
								<xsl:otherwise>
									<xsl:call-template name="getQuarterMonthBoundary">
										<xsl:with-param name="paramMonth" select="$baseMonth + 3"/>
										<xsl:with-param name="paramBoundary" select="$paramRangeBoundary"/>
									</xsl:call-template>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:when>
					</xsl:choose>									
				</xsl:when>
				<!-- END range type is QUARTER -->
			</xsl:choose>
		</xsl:variable>

		<!-- calculate day -->
		<xsl:variable name="returnDay">
			<!--
			<xsl:choose>
				<xsl:when test="$paramRangeType = 'MONTH'">
			-->
					<xsl:choose>
						<xsl:when test="$paramRangeBoundary = 'START'">01</xsl:when>
						<xsl:when test="$paramRangeBoundary = 'END'">
							<xsl:call-template name="ConvertMonthToDays">
								<xsl:with-param name="paramMonth" select="$returnMonth"/>
								<xsl:with-param name="paramYear" select="$returnYear"/>
							</xsl:call-template>
						</xsl:when>
					</xsl:choose>
			<!--
				</xsl:when>
			</xsl:choose>
			-->
		</xsl:variable>

		<xsl:value-of select="concat($returnYear,'-',$returnMonth,'-',$returnDay)"/>		
	</xsl:template>
	<!-- END getDateRange -->


	<!-- END EXTERNALLY-CALLED TEMPLATES -->
	

	<!-- BEGIN UTILITY TEMPLATES -->


	<!-- isLeapYear: is this paramYear a leap year? -->
	<xsl:template name="isLeapYear">
		<xsl:param name="paramYear"/> <!-- year to be evaluated -->
		<xsl:choose>
			<xsl:when test="$paramYear mod 4 = 0 and ($paramYear mod 100 != 0) or ($paramYear mod 400 = 0)">1</xsl:when>
			<xsl:otherwise>0</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<!-- END isLeapYear -->


	<!-- getQuarterMonthBoundary: return START or END date for the quarter inside which paramMonth exists-->
	<xsl:template name="getQuarterMonthBoundary">
		<xsl:param name="paramMonth"/>
		<xsl:param name="paramBoundary"/>

		<xsl:choose>
			<xsl:when test="$paramBoundary = 'START'">
				<xsl:choose>
					<xsl:when test="$paramMonth=01 or $paramMonth=02 or $paramMonth=03">01</xsl:when>
					<xsl:when test="$paramMonth=04 or $paramMonth=05 or $paramMonth=06">04</xsl:when>
					<xsl:when test="$paramMonth=07 or $paramMonth=08 or $paramMonth=09">07</xsl:when>
					<xsl:when test="$paramMonth=10 or $paramMonth=11 or $paramMonth=12">10</xsl:when>
				</xsl:choose>
			</xsl:when>	
			<xsl:when test="$paramBoundary = 'END'">
				<xsl:choose>
					<xsl:when test="$paramMonth=01 or $paramMonth=02 or $paramMonth=03">03</xsl:when>
					<xsl:when test="$paramMonth=04 or $paramMonth=05 or $paramMonth=06">06</xsl:when>
					<xsl:when test="$paramMonth=07 or $paramMonth=08 or $paramMonth=09">09</xsl:when>
					<xsl:when test="$paramMonth=10 or $paramMonth=11 or $paramMonth=12">12</xsl:when>
				</xsl:choose>
			</xsl:when>
		</xsl:choose>
	</xsl:template>
	<!-- END getQuarterMonthBoundary -->	
	
	
	<!-- countDaysInDate: How many days are there between 0 and paramDate (NOT INCLUDING leap-year days)? -->
	<!-- tested only against A.D. dates -->
	<xsl:template name="countDaysInDate">
		<xsl:param name="paramDate"/> <!-- acceptable formats: YYYY-MM-DD or YYYY-MM-DD'T'HH:MM:SS'Z'-->

		<xsl:variable name="year" select="substring-before($paramDate,'-')"/>
		<xsl:variable name="month" select="substring(substring-after($paramDate,'-'),1,2)"/>
		<xsl:variable name="day" select="substring(substring-after(substring-after($paramDate,'-'),'-'),1,2)"/>
		
		<xsl:variable name="yearDays" select="number($year) * 365"/>
		
		<xsl:variable name="monthDays">
			<xsl:call-template name="ConvertMonthToTotalDays">
				<xsl:with-param name="paramMonth" select="$month"/>
			</xsl:call-template>
		</xsl:variable>
				
		<xsl:value-of select="$yearDays + number($monthDays) + number($day)"/>
	</xsl:template>
	<!-- END countDaysInDate -->
	
	
	<!-- countDaysInDateWithLeapYearDays: How many days are there between 0 and paramDate (INCLUDING leap-year days) ? -->
	<!-- tested only against A.D. dates -->
	<!-- IS leap-year accurate -->
	<xsl:template name="countDaysInDateWithLeapYearDays">
		<xsl:param name="paramDate"/> <!-- acceptable formats: YYYY-MM-DD or YYYY-MM-DD'T'HH:MM:SS'Z'-->

		<xsl:variable name="year" select="substring-before($paramDate,'-')"/>
		<xsl:variable name="month" select="substring(substring-after($paramDate,'-'),1,2)"/>
		<xsl:variable name="day" select="substring(substring-after(substring-after($paramDate,'-'),'-'),1,2)"/>
		
		<xsl:variable name="rawYearDays" select="number($year) * 365"/>
		
		<xsl:variable name="rawLeapYears" select="floor($year div 4)"/>
		<xsl:variable name="centurySpan" select="floor($year div 100)"/>
		<xsl:variable name="fourCenturySpan" select="floor($year div 400)"/>
		
		<xsl:variable name="boolYearLeap">
			<xsl:call-template name="isLeapYear">
				<xsl:with-param name="paramYear" select="$year"/>
			</xsl:call-template>
		</xsl:variable>
		
		<!-- if end date is a leap year and is 2/28 or earlier within that year, then we need to subtract 1 from total leap years -->
		<xsl:variable name="yearLeapAdjust"><xsl:choose>
			<xsl:when test="$boolYearLeap = 1 and (($month = 1) or ($month = 2 and $day != 29))">-1</xsl:when>
			<xsl:otherwise>0</xsl:otherwise>			
			</xsl:choose>
		</xsl:variable>
		
		<xsl:variable name="yearDays" select="$rawYearDays + $rawLeapYears - $centurySpan + $fourCenturySpan + $yearLeapAdjust "/>

		<xsl:variable name="monthDays">
			<xsl:call-template name="ConvertMonthToTotalDays">
				<xsl:with-param name="paramMonth" select="$month"/>
			</xsl:call-template>
		</xsl:variable>
		
		<xsl:variable name="totalDays" select="$yearDays + number($monthDays) + number($day)"/>
		
		<xsl:value-of select="$totalDays"/>
	</xsl:template>
	<!-- END countDaysInDateWithLeapYearDays -->


	<!-- ConvertMonthToDays: how many days are in paramMonth (including leap-year day if paramYear is supplied)? -->
	<xsl:template name="ConvertMonthToDays">
		<xsl:param name="paramMonth"/>
		<xsl:param name="paramYear"/>
			<xsl:choose>
				<xsl:when test="$paramMonth=01">31</xsl:when>
				<xsl:when test="$paramMonth=02">
					<xsl:variable name="boolLeapYear">
						<xsl:call-template name="isLeapYear">
							<xsl:with-param name="paramYear" select="$paramYear"/>
						</xsl:call-template>
					</xsl:variable>
					<xsl:choose>
						<xsl:when test="$boolLeapYear = 1">29</xsl:when>
						<xsl:otherwise>28</xsl:otherwise>
					</xsl:choose>
				</xsl:when>
				<xsl:when test="$paramMonth=03">31</xsl:when>
				<xsl:when test="$paramMonth=04">30</xsl:when>
				<xsl:when test="$paramMonth=05">31</xsl:when>
				<xsl:when test="$paramMonth=06">30</xsl:when>
				<xsl:when test="$paramMonth=07">31</xsl:when>
				<xsl:when test="$paramMonth=08">31</xsl:when>
				<xsl:when test="$paramMonth=09">30</xsl:when>
				<xsl:when test="$paramMonth=10">31</xsl:when>
				<xsl:when test="$paramMonth=11">30</xsl:when>
				<xsl:when test="$paramMonth=12">31</xsl:when>
			</xsl:choose>		
	</xsl:template>
	<!-- END ConvertMonthToDays -->


	<!-- ConvertMonthToTotalDays: how many days are there from beginning of year through paramMonth 
		 (including leap-year day if paramYear is supplied)? -->
	<!-- IS NOT leap-year accurate -->
	<xsl:template name="ConvertMonthToTotalDays">
		<xsl:param name="paramMonth"/>
			<xsl:choose>
				<xsl:when test="$paramMonth=01">0</xsl:when>
				<xsl:when test="$paramMonth=02">31</xsl:when>
				<xsl:when test="$paramMonth=03">59</xsl:when>
				<xsl:when test="$paramMonth=04">90</xsl:when>
				<xsl:when test="$paramMonth=05">120</xsl:when>
				<xsl:when test="$paramMonth=06">151</xsl:when>
				<xsl:when test="$paramMonth=07">181</xsl:when>
				<xsl:when test="$paramMonth=08">212</xsl:when>
				<xsl:when test="$paramMonth=09">243</xsl:when>
				<xsl:when test="$paramMonth=10">273</xsl:when>
				<xsl:when test="$paramMonth=11">304</xsl:when>
				<xsl:when test="$paramMonth=12">334</xsl:when>
			</xsl:choose>		
	</xsl:template>
	<!-- END ConvertMonthToTotalDays -->


	<!-- ConvertDaysToMonth: what is the month when paramDays have passed since beginning of year? -->
	<!-- IS NOT leap-year accurate -->
	<xsl:template name="ConvertDaysToMonth">
		<xsl:param name="paramDays"/>
			<xsl:choose>
				<xsl:when test="$paramDays &gt; 334">12</xsl:when>
				<xsl:when test="$paramDays &gt; 304">11</xsl:when>
				<xsl:when test="$paramDays &gt; 273">10</xsl:when>
				<xsl:when test="$paramDays &gt; 243">09</xsl:when>
				<xsl:when test="$paramDays &gt; 212">08</xsl:when>
				<xsl:when test="$paramDays &gt; 181">07</xsl:when>
				<xsl:when test="$paramDays &gt; 151">06</xsl:when>
				<xsl:when test="$paramDays &gt; 120">05</xsl:when>
				<xsl:when test="$paramDays &gt; 90">04</xsl:when>
				<xsl:when test="$paramDays &gt; 59">03</xsl:when>
				<xsl:when test="$paramDays &gt; 31">02</xsl:when>
				<xsl:when test="$paramDays &gt; 0">01</xsl:when>
			</xsl:choose>
	</xsl:template>
	<!-- END ConvertDaysToMonth -->


	<!-- END UTILITY TEMPLATES -->
</xsl:stylesheet>