<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  exclude-result-prefixes="msxsl">

	<xsl:import href="CRMOpportunityDataColumnWidget.xslt"/>
	<xsl:output method="xml" indent="no" omit-xml-declaration="yes"/>
	<xsl:key name="distinctRep" match="CRMOpportunity" use="./SalesUser"></xsl:key>

	<xsl:template match="/">
		<xsl:variable name="CRMOpportunitiesXML" select="AjaxRequest/CRMOpportunities/."></xsl:variable>
		<xsl:variable name="CRMOpportunityHeader" select="AjaxRequest/CRMOpportunities/CRMOpportunityHeader/."></xsl:variable>
		<xsl:variable name="TemplateURL" select="AjaxRequest/TemplateURL"></xsl:variable>
		<xsl:variable name="HostName" select="AjaxRequest/HostName"></xsl:variable>
		<xsl:variable name="PortalItemID" select="AjaxRequest/Params/PortalItemID"></xsl:variable>
		<xsl:variable name="UDFXML">
			<xsl:copy-of select="AjaxRequest/UDFDefinitions/UDFDefinition[Table_Name = 'lsCRMOpportunity' and IsActive = 1]"/>
		</xsl:variable>
		<xsl:variable name="Employees">
			<xsl:copy-of select="AjaxRequest/UDFDefinitions/Employees/Employee[PortalItemID = $PortalItemID]"/>
		</xsl:variable>
		<xsl:variable name="UDFSettings" select="AjaxRequest/UDFDefinitions/UDFSettings/."/>
		<xsl:variable name="ParentUDFSettings" select="AjaxRequest/UDFDefinitions/ParentUDFSettings/."/>
		<xsl:variable name="UDFMasterValues" select="AjaxRequest/UDFDefinitions/UDFMasterValues/."/>
		<xsl:variable name="IsCommissionPercent" select="AjaxRequest/CRMOpportunities/PortalItems/PortalItem[ItemID = $PortalItemID]/IsCommissionPercent"></xsl:variable>
		<xsl:variable name="IsMultiPayment" select="AjaxRequest/CRMOpportunities/PortalItems/PortalItem[ItemID = $PortalItemID]/IsMultiPayment"></xsl:variable>
		<xsl:variable name="SortColName" select="AjaxRequest/Params/SortColName"></xsl:variable>
		<xsl:variable name="CurrentOrder" select="AjaxRequest/Params/SortOrder"></xsl:variable>
		<xsl:variable name="EmployeeID" select="AjaxRequest/Params/EmployeeID"></xsl:variable>
		<xsl:variable name="SkipRecords" select="AjaxRequest/Params/SkipRecords"></xsl:variable>
		<xsl:variable name="PageSize" select="AjaxRequest/Params/PageSize"></xsl:variable>
		<xsl:variable name="PageNumber" select="AjaxRequest/Params/PageNumber"></xsl:variable>

		<xsl:call-template name="TemplateOpportunitiesForPortal_CSV">
			<xsl:with-param name="CRMOpportunitiesXML" select="$CRMOpportunitiesXML"></xsl:with-param>
			<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
			<xsl:with-param name="HostName" select="$HostName"></xsl:with-param>
			<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
			<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
			<xsl:with-param name="Employees" select="msxsl:node-set($Employees)"></xsl:with-param>
			<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
			<xsl:with-param name="IsCommissionPercent" select="$IsCommissionPercent"></xsl:with-param>
			<xsl:with-param name="IsMultiPayment" select="$IsMultiPayment"></xsl:with-param>
			<xsl:with-param name="SortColName" select="$SortColName"></xsl:with-param>
			<xsl:with-param name="CurrentOrder" select="$CurrentOrder"></xsl:with-param>
			<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
			<xsl:with-param name="CRMOpportunityHeader" select="$CRMOpportunityHeader"></xsl:with-param>
			<xsl:with-param name="PageSize" select="$PageSize"></xsl:with-param>
			<xsl:with-param name="PageNumber" select="$PageNumber"></xsl:with-param>
		</xsl:call-template>

	</xsl:template>

	<xsl:template name="TemplateOpportunitiesForPortal_CSV">
		<xsl:param name="CRMOpportunitiesXML" select="'N/A'"></xsl:param>
		<xsl:param name="TemplateURL" select="'N/A'"></xsl:param>
		<xsl:param name="HostName" select="'N/A'"></xsl:param>
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="Employees" select="'N/A'"></xsl:param>
		<xsl:param name="UDFMasterValues" select="'N/A'"></xsl:param>
		<xsl:param name="IsCommissionPercent" select="'N/A'"></xsl:param>
		<xsl:param name="IsMultiPayment" select="'N/A'"></xsl:param>
		<xsl:param name="SortColName" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentOrder" select="'N/A'"></xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunityHeader" select="'N/A'"></xsl:param>
		<xsl:param name="PageSize" select="'N/A'"></xsl:param>
		<xsl:param name="PageNumber" select="'N/A'"></xsl:param>

		<xsl:variable name="CRMOpportunitiesHeaderXML">
			<xsl:choose>
				<xsl:when test="$IsCommissionPercent = 0">
					<xsl:copy-of select="$CRMOpportunityHeader
                                 /child::node()[name(.) != 'CustomTransSize' and  name(.) != 'TransCommissionRate' and name(.) != 'SalesUser']"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:copy-of select="$CRMOpportunityHeader/child::node()[name(.) != 'SalesUser']"/>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>

		<xsl:variable name="maxCols">
			<xsl:choose>
				<xsl:when test="$IsMultiPayment = 1">
					<xsl:choose>
						<xsl:when test="$IsCommissionPercent = 1">
							<xsl:number value="13"/>
						</xsl:when>
						<xsl:otherwise>
							<xsl:number value="11"/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:when>
				<xsl:otherwise>
					<xsl:choose>
						<xsl:when test="$IsCommissionPercent = 1">
							<xsl:number value="8"/>
						</xsl:when>
						<xsl:otherwise>
							<xsl:number value="6"/>
						</xsl:otherwise>
					</xsl:choose>
				</xsl:otherwise>
			</xsl:choose>

		</xsl:variable>

		<div>
			<xsl:call-template name="TemplateOppHeader_CSV">
				<xsl:with-param name="CRMOpportunitiesXML" select="$CRMOpportunitiesXML"></xsl:with-param>
				<xsl:with-param name="maxCols" select="$maxCols"></xsl:with-param>
				<xsl:with-param name="IsCommissionPercent" select="$IsCommissionPercent"></xsl:with-param>
				<xsl:with-param name="IsMultiPayment" select="$IsMultiPayment"></xsl:with-param>
				<xsl:with-param name="UDFXML" select="msxsl:node-set($UDFXML)"></xsl:with-param>
				<xsl:with-param name="CRMOpportunitiesHeaderXML" select="msxsl:node-set($CRMOpportunitiesHeaderXML)"></xsl:with-param>
				<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
				<xsl:with-param name="CurrentOrder" select="$CurrentOrder"></xsl:with-param>
				<xsl:with-param name="SortColName" select="$SortColName"></xsl:with-param>
				<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
				<xsl:with-param name="PageSize" select="$PageSize"></xsl:with-param>
				<xsl:with-param name="PageNumber" select="$PageNumber"></xsl:with-param>
				<xsl:with-param name="HostName" select="$HostName"></xsl:with-param>
				<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
			</xsl:call-template>
			<xsl:text>&#xa;</xsl:text>
			<xsl:call-template name="TemplateOpportunity_CSV">
				<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
				<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
				<xsl:with-param name="maxCols" select="$maxCols"></xsl:with-param>
				<xsl:with-param name="IsCommissionPercent" select="$IsCommissionPercent"></xsl:with-param>
				<xsl:with-param name="IsMultiPayment" select="$IsMultiPayment"></xsl:with-param>
				<xsl:with-param name="CRMOpportunitiesXML" select="$CRMOpportunitiesXML"></xsl:with-param>
				<xsl:with-param name="UDFXML" select="msxsl:node-set($UDFXML)"></xsl:with-param>
				<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
				<xsl:with-param name="Employees" select="$Employees"></xsl:with-param>
				<xsl:with-param name="CRMOpportunitiesHeaderXML" select="msxsl:node-set($CRMOpportunitiesHeaderXML)"></xsl:with-param>
				<xsl:with-param name="SortColName" select="$SortColName"></xsl:with-param>
				<xsl:with-param name="CurrentOrder" select="$CurrentOrder"></xsl:with-param>
				<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
				<xsl:with-param name="PageSize" select="$PageSize"></xsl:with-param>
				<xsl:with-param name="PageNumber" select="$PageNumber"></xsl:with-param>
				<xsl:with-param name="HostName" select="$HostName"></xsl:with-param>
			</xsl:call-template>
		</div>
	</xsl:template>

	<xsl:template name="TemplateOppHeader_CSV">
		<xsl:param name="CRMOpportunitiesXML" select="'N/A'"></xsl:param>
		<xsl:param name="maxCols" select="'N/A'"></xsl:param>
		<xsl:param name="IsCommissionPercent" select="'N/A'"></xsl:param>
		<xsl:param name="IsMultiPayment" select="'N/A'"></xsl:param>
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunitiesHeaderXML" select="'N/A'"></xsl:param>
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentOrder">
			<xsl:text></xsl:text>
		</xsl:param>
		<xsl:param name="SortColName" select="'N/A'"></xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>
		<xsl:param name="EditSourceID" select="'N/A'"></xsl:param>
		<xsl:param name="PageSize" select="'N/A'"></xsl:param>
		<xsl:param name="PageNumber" select="'N/A'"></xsl:param>
		<xsl:param name="HostName" select="'N/A'"></xsl:param>
		<xsl:param name="TemplateURL" select="'N/A'"></xsl:param>

		<xsl:for-each select="$CRMOpportunitiesHeaderXML/child::node()[position() &lt;= $maxCols]">
			<xsl:variable name="CurrentHeaderCol" select="."></xsl:variable>
			<xsl:variable name="CurrentCol" select="name(.)"></xsl:variable>

			<xsl:if test="($CurrentCol != 'CustomTransSize' and  $CurrentCol != 'TransCommissionRate')
                  or (($CurrentCol = 'CustomTransSize' or  $CurrentCol = 'TransCommissionRate') and $IsCommissionPercent = 1)">

				<xsl:text>"</xsl:text>
				<xsl:call-template name="TemplateHeaderColumn_CSV">
					<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
					<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
					<xsl:with-param name="CurrentHeaderCol" select="$CurrentHeaderCol"></xsl:with-param>
					<xsl:with-param name="ColumnFormat" select="$CurrentHeaderCol/child::node()[name(.) = 'ColumnFormat']"></xsl:with-param>
					<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
					<xsl:with-param name="CurrentOrder" select="$CurrentOrder"></xsl:with-param>
					<xsl:with-param name="SortColName" select="$SortColName"></xsl:with-param>
					<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
					<xsl:with-param name="PageSize" select="$PageSize"></xsl:with-param>
					<xsl:with-param name="PageNumber" select="$PageNumber"></xsl:with-param>
				</xsl:call-template>
				<xsl:text>",</xsl:text>
			</xsl:if>
		</xsl:for-each>

		<xsl:call-template name="TemplateEditColHeader_CSV">
			<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
		</xsl:call-template>

	</xsl:template>

	<xsl:template name="TemplateEditColHeader_CSV">
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>

		<xsl:variable name="UDFXMLAdditional">
			<xsl:copy-of select="$UDFXML/UDFDefinition
                            [Column_Name != 'CustomStatus' and Column_Name != 'CustomTransSize' 
                              and Column_Name != 'ClientCompany' and Column_Name != 'OpportunityName' 
                              and Column_Name != 'TransCommissionRate' and Column_Name != 'FeeEst' 
                              and Column_Name != 'TargetCloseDate' and Column_Name != 'Probability']"/>
		</xsl:variable>

		<xsl:for-each select="msxsl:node-set($UDFXMLAdditional)/UDFDefinition">

			<xsl:variable name="CurrentCol" select="Column_Name"></xsl:variable>

			<xsl:if test="(position() mod 3) = 1">

				<xsl:text>"</xsl:text>
				<xsl:value-of select="ColumnHeader"/>
				<xsl:text>",</xsl:text>

				<xsl:if test="following-sibling::UDFDefinition[1]">
					<xsl:text>"</xsl:text>
					<xsl:value-of select="following-sibling::UDFDefinition[1]/ColumnHeader"/>
					<xsl:text>",</xsl:text>
				</xsl:if>

				<xsl:if test="following-sibling::UDFDefinition[2]">
					<xsl:text>"</xsl:text>
					<xsl:value-of select="following-sibling::UDFDefinition[2]/ColumnHeader"/>
					<xsl:text>",</xsl:text>
				</xsl:if>
			</xsl:if>
		</xsl:for-each>

	</xsl:template>

	<xsl:template name="TemplateEditWidget">
		<xsl:param name="CurrentCol" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentColValue" select="'N/A'"></xsl:param>
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="UDFMasterValues" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunityID" select="'N/A'"></xsl:param>
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="LastElement">
			<xsl:number value="0"/>
		</xsl:param>
		<xsl:param name="ColumnFormatID" select="'N/A'"></xsl:param>
		<xsl:param name="ColumnFormat" select="'N/A'"></xsl:param>
		<xsl:param name="TemplateURL" select="'N/A'"></xsl:param>
		<xsl:param name="ColumnHeader">
			<xsl:text></xsl:text>
		</xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>

		<xsl:variable name="CRMUDFDefID" select="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/CRMUDFDefID"/>

		<xsl:variable name="ColPostFix">
			<xsl:choose>
				<xsl:when test="$ColumnFormat = 'Percent'">
					<xsl:text>%</xsl:text>
				</xsl:when>
			</xsl:choose>
		</xsl:variable>

		<xsl:choose>
			<xsl:when test="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/IsDropdown = 1">
				<xsl:value-of select="$UDFMasterValues/UDFMasterValue[CRMUDFDefID = $CRMUDFDefID and StoreValue = $CurrentColValue]/DisplayValue"></xsl:value-of>
				<xsl:value-of select="$ColPostFix"/>
			</xsl:when>
			<xsl:when test="$ColumnFormatID = 4 or $ColumnFormat = 'Date'">
				<xsl:value-of select="$CurrentColValue"/>
			</xsl:when>
			<xsl:when test="$ColumnFormatID = 2 or $ColumnFormatID = 3 or $ColumnFormat = 'Percent' or $ColumnFormat = 'Money' or $ColumnFormat = 'Number'">
				<xsl:value-of select="$CurrentColValue"/>
				<xsl:value-of select="$ColPostFix"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$CurrentColValue"/>
				<xsl:value-of select="$ColPostFix"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

	<xsl:template name="TemplateOpportunity_CSV">
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="TemplateURL" select="'N/A'"></xsl:param>
		<xsl:param name="HostName" select="'N/A'"></xsl:param>
		<xsl:param name="maxCols" select="'N/A'"></xsl:param>
		<xsl:param name="IsCommissionPercent" select="'N/A'"></xsl:param>
		<xsl:param name="IsMultiPayment" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunitiesXML" select="'N/A'"></xsl:param>
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="UDFMasterValues" select="'N/A'"></xsl:param>
		<xsl:param name="Employees" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunitiesHeaderXML" select="'N/A'"></xsl:param>
		<xsl:param name="SortColName" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentOrder">
			<xsl:text>descending</xsl:text>
		</xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>
		<xsl:param name="PageSize" select="'N/A'"></xsl:param>
		<xsl:param name="PageNumber" select="'N/A'"></xsl:param>

		<xsl:for-each select="$CRMOpportunitiesXML/CRMOpportunity[generate-id() = generate-id(key('distinctRep', ./SalesUser))]">

			<xsl:variable name="CurrentSalesUser" select="SalesUser"></xsl:variable>

			<xsl:text>"</xsl:text>
			<xsl:value-of select="$Employees/Employee[UserID = $CurrentSalesUser]/DisplayName"/>
			<xsl:text>"</xsl:text>
			<xsl:text>&#xa;</xsl:text>

			<xsl:variable name="SortColDataType">
				<xsl:choose>
					<xsl:when test="$CRMOpportunitiesHeaderXML/child::node()[name(.) = $SortColName]/ColumnFormat = 'Money'
                              or $CRMOpportunitiesHeaderXML/child::node()[name(.) = $SortColName]/ColumnFormat = 'Number'
                              or $CRMOpportunitiesHeaderXML/child::node()[name(.) = $SortColName]/ColumnFormat = 'Percent'
                              or $CRMOpportunitiesHeaderXML/child::node()[name(.) = $SortColName]/ColumnFormat = 'Date'">
						<xsl:text>number</xsl:text>
					</xsl:when>
					<xsl:otherwise>
						<xsl:text>text</xsl:text>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:variable>

			<xsl:variable name="SpecializedSortColName">
				<xsl:choose>
					<xsl:when test="$CRMOpportunitiesHeaderXML/child::node()[name(.) = $SortColName]/ColumnFormat = 'Date'">
						<xsl:value-of select="$SortColName"/>
						<xsl:text>Numbered</xsl:text>
					</xsl:when>
					<xsl:otherwise>
						<xsl:value-of select="$SortColName"/>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:variable>

			<xsl:variable name="SpecializedOrder">
				<xsl:choose>
					<xsl:when test="$CurrentOrder and $CurrentOrder != ''">
						<xsl:value-of select="$CurrentOrder"/>
					</xsl:when>
					<xsl:otherwise>
						<xsl:text>descending</xsl:text>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:variable>

			<xsl:for-each select="$CRMOpportunitiesXML/CRMOpportunity[SalesUser = $CurrentSalesUser]">
				<xsl:sort data-type="{$SortColDataType}" order="{$SpecializedOrder}" select="*[name() = $SpecializedSortColName]"/>

				<xsl:variable name="CurrntOpp" select="."></xsl:variable>
				<xsl:variable name="CurrentCRMOpportunityID" select="CRMOpportunityID"></xsl:variable>

				<xsl:for-each select="$CRMOpportunitiesHeaderXML/child::node()[position() &lt;= $maxCols]">

					<xsl:variable name="CurrentCol" select="name(.)"></xsl:variable>
					<xsl:variable name="CurrentHeaderCol" select="."></xsl:variable>

					<xsl:text>"</xsl:text>
					<xsl:call-template name="TemplateDataColumn_CSV">
						<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
						<xsl:with-param name="CurrentColValue" select="$CurrntOpp/child::node()[name(.) = $CurrentCol]"></xsl:with-param>
						<xsl:with-param name="IsCommissionPercent" select="$IsCommissionPercent"></xsl:with-param>
						<xsl:with-param name="IsMultiPayment" select="$IsMultiPayment"></xsl:with-param>
						<xsl:with-param name="CurrntOpp" select="$CurrntOpp"></xsl:with-param>
						<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
						<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
						<xsl:with-param name="Employees" select="$Employees"></xsl:with-param>
						<xsl:with-param name="CRMOpportunityID" select="$CurrentCRMOpportunityID"></xsl:with-param>
						<xsl:with-param name="ColumnFormat" select="$CurrentHeaderCol/child::node()[name(.) = 'ColumnFormat']"></xsl:with-param>
					</xsl:call-template>
					<xsl:text>",</xsl:text>
				</xsl:for-each>

				<xsl:call-template name="TemplateEditColAdditional">
					<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
					<xsl:with-param name="maxCols" select="$maxCols"></xsl:with-param>
					<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
					<xsl:with-param name="CurrentCRMOpportunityID" select="$CurrentCRMOpportunityID"></xsl:with-param>
					<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
					<xsl:with-param name="CurrntOpp" select="$CurrntOpp"></xsl:with-param>
					<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
					<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
				</xsl:call-template>

				<xsl:text>&#xa;</xsl:text>
			</xsl:for-each>
		</xsl:for-each>
	</xsl:template>

	<xsl:template name="TemplateEditColAdditional">
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="maxCols" select="'N/A'"></xsl:param>
		<xsl:param name="UDFMasterValues" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentCRMOpportunityID" select="'N/A'"></xsl:param>
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="CurrntOpp" select="'N/A'"></xsl:param>
		<xsl:param name="TemplateURL" select="'N/A'"></xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>

		<xsl:variable name="UDFXMLAdditional">
			<xsl:copy-of select="$UDFXML/UDFDefinition
                                    [Column_Name != 'CustomStatus' and Column_Name != 'CustomTransSize' 
                                      and Column_Name != 'ClientCompany' and Column_Name != 'OpportunityName' 
                                      and Column_Name != 'TransCommissionRate' and Column_Name != 'FeeEst' 
                                      and Column_Name != 'TargetCloseDate' and Column_Name != 'Probability']"/>
		</xsl:variable>

		<xsl:for-each select="msxsl:node-set($UDFXMLAdditional)/UDFDefinition">

			<xsl:variable name="CurrentCol" select="Column_Name"></xsl:variable>

			<xsl:if test="(position() mod 3) = 1">
				<xsl:text>"</xsl:text>
				<xsl:call-template name="TemplateEditWidget">
					<xsl:with-param name="CurrentCol" select="Column_Name"></xsl:with-param>
					<xsl:with-param name="CurrentColValue"
									select="$CurrntOpp/child::node()[name(.) = $CurrentCol]"></xsl:with-param>
					<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
					<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
					<xsl:with-param name="CRMOpportunityID" select="$CurrentCRMOpportunityID"></xsl:with-param>
					<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
					<xsl:with-param name="LastElement">
						<xsl:choose>
							<xsl:when test="position() = last()">
								<xsl:number value="1"/>
							</xsl:when>
							<xsl:otherwise>
								<xsl:number value="0"/>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:with-param>
					<xsl:with-param name="ColumnFormatID" select="ColumnFormatID"></xsl:with-param>
					<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
					<xsl:with-param name="ColumnHeader" select="ColumnHeader"></xsl:with-param>
					<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
				</xsl:call-template>
				<xsl:text>","</xsl:text>
				<xsl:if test="following-sibling::UDFDefinition[1]">
					<xsl:variable name="CurrentCol_1" select="following-sibling::UDFDefinition[1]/Column_Name"></xsl:variable>

					<xsl:call-template name="TemplateEditWidget">
						<xsl:with-param name="CurrentCol" select="following-sibling::UDFDefinition[1]/Column_Name"></xsl:with-param>
						<xsl:with-param name="CurrentColValue"
										select="$CurrntOpp/child::node()[name(.) = $CurrentCol_1]"></xsl:with-param>
						<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
						<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
						<xsl:with-param name="CRMOpportunityID" select="$CurrentCRMOpportunityID"></xsl:with-param>
						<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
						<xsl:with-param name="LastElement">
							<xsl:choose>
								<xsl:when test="position()+1 = last()">
									<xsl:number value="1"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:number value="0"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:with-param>
						<xsl:with-param name="ColumnFormatID" select="following-sibling::UDFDefinition[1]/ColumnFormatID"></xsl:with-param>
						<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
						<xsl:with-param name="ColumnHeader" select="following-sibling::UDFDefinition[1]/ColumnHeader"></xsl:with-param>
						<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
					</xsl:call-template>

				</xsl:if>
				<xsl:text>","</xsl:text>
				<xsl:if test="following-sibling::UDFDefinition[2]">
					<xsl:variable name="CurrentCol_2" select="following-sibling::UDFDefinition[2]/Column_Name"></xsl:variable>

					<xsl:call-template name="TemplateEditWidget">
						<xsl:with-param name="CurrentCol" select="following-sibling::UDFDefinition[2]/Column_Name"></xsl:with-param>
						<xsl:with-param name="CurrentColValue"
										select="$CurrntOpp/child::node()[name(.) = $CurrentCol_2]"></xsl:with-param>
						<xsl:with-param name="UDFXML" select="$UDFXML"></xsl:with-param>
						<xsl:with-param name="UDFMasterValues" select="$UDFMasterValues"></xsl:with-param>
						<xsl:with-param name="CRMOpportunityID" select="$CurrentCRMOpportunityID"></xsl:with-param>
						<xsl:with-param name="PortalItemID" select="$PortalItemID"></xsl:with-param>
						<xsl:with-param name="LastElement">
							<xsl:choose>
								<xsl:when test="position()+2 = last()">
									<xsl:number value="1"/>
								</xsl:when>
								<xsl:otherwise>
									<xsl:number value="0"/>
								</xsl:otherwise>
							</xsl:choose>
						</xsl:with-param>
						<xsl:with-param name="ColumnFormatID" select="following-sibling::UDFDefinition[2]/ColumnFormatID"></xsl:with-param>
						<xsl:with-param name="TemplateURL" select="$TemplateURL"></xsl:with-param>
						<xsl:with-param name="ColumnHeader" select="following-sibling::UDFDefinition[2]/ColumnHeader"></xsl:with-param>
						<xsl:with-param name="EmployeeID" select="$EmployeeID"></xsl:with-param>
					</xsl:call-template>

				</xsl:if>
				<xsl:text>",</xsl:text>

			</xsl:if>
		</xsl:for-each>
	</xsl:template>

	<xsl:template name="TemplateHeaderColumn_CSV">
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentCol" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentHeaderCol" select="'N/A'"></xsl:param>
		<xsl:param name="ColumnFormat" select="'N/A'"></xsl:param>
		<xsl:param name="PortalItemID" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentOrder">
			<xsl:text></xsl:text>
		</xsl:param>
		<xsl:param name="SortColName" select="'N/A'"></xsl:param>
		<xsl:param name="EmployeeID" select="'N/A'"></xsl:param>
		<xsl:param name="PageSize" select="'N/A'"></xsl:param>
		<xsl:param name="PageNumber" select="'N/A'"></xsl:param>

		<xsl:variable name="SpecializeSortOrder">
			<xsl:choose>
				<xsl:when test="$CurrentCol = $SortColName">
					<xsl:value-of select="$CurrentOrder"/>
				</xsl:when>
				<xsl:otherwise>
					<xsl:text></xsl:text>
				</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>

		<xsl:choose>
			<xsl:when test="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/ColumnHeader">
				<xsl:value-of select="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/ColumnHeader"/>
			</xsl:when>
			<xsl:when test="$CurrentHeaderCol/child::node()[name(.) = 'ColDisplayName']">
				<xsl:value-of select="$CurrentHeaderCol/child::node()[name(.) = 'ColDisplayName']"/>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$CurrentCol"/>
			</xsl:otherwise>
		</xsl:choose>

	</xsl:template>

	<xsl:template name="TemplateDataColumn_CSV">
		<xsl:param name="CurrentCol" select="'N/A'"></xsl:param>
		<xsl:param name="CurrentColValue" select="'N/A'"></xsl:param>
		<xsl:param name="IsCommissionPercent" select="'N/A'"></xsl:param>
		<xsl:param name="IsMultiPayment" select="'N/A'"></xsl:param> 
		<xsl:param name="CurrntOpp" select="'N/A'"></xsl:param>
		<xsl:param name="UDFXML" select="'N/A'"></xsl:param>
		<xsl:param name="UDFMasterValues" select="'N/A'"></xsl:param>
		<xsl:param name="Employees" select="'N/A'"></xsl:param>
		<xsl:param name="CRMOpportunityID" select="'N/A'"></xsl:param>
		<xsl:param name="ColumnFormat" select="'N/A'"></xsl:param>

		<xsl:variable name="CRMUDFDefID" select="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/CRMUDFDefID"/>

		<xsl:choose>
			<xsl:when test="$CurrentCol = 'CustomTransSize' or  $CurrentCol = 'TransCommissionRate'">
				<xsl:if test="$IsCommissionPercent = 1">
					<xsl:call-template name="TemplateDataColumnWidget_CSV">
						<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
						<xsl:with-param name="CurrentColValue" select="$CurrentColValue"></xsl:with-param>
						<xsl:with-param name="ColumnFormat" select="$ColumnFormat"></xsl:with-param>
						<xsl:with-param name="CRMOpportunityID" select="$CRMOpportunityID"></xsl:with-param>
					</xsl:call-template>
				</xsl:if>
			</xsl:when>
			<xsl:when test="$CurrentCol = 'FeeEst' and $IsCommissionPercent = 1">

				<xsl:variable name="FeeEst" select="(($CurrntOpp/child::node()[name(.) = 'CustomTransSize']) 
                                                          * ($CurrntOpp/child::node()[name(.) = 'TransCommissionRate'])) div 100"></xsl:variable>

				<xsl:choose>
					<xsl:when test="string(number($CurrentColValue)) != 'NaN'">
						<xsl:call-template name="TemplateDataColumnWidget_CSV">
							<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
							<xsl:with-param name="CurrentColValue" select="$CurrentColValue"></xsl:with-param>
							<xsl:with-param name="ColumnFormat" select="$ColumnFormat"></xsl:with-param>
							<xsl:with-param name="CRMOpportunityID" select="$CRMOpportunityID"></xsl:with-param>
						</xsl:call-template>
					</xsl:when>
					<xsl:otherwise>
						<xsl:call-template name="TemplateDataColumnWidget_CSV">
							<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
							<xsl:with-param name="CurrentColValue">
								<xsl:if test="string(number($FeeEst)) != 'NaN'">
									<xsl:text>$</xsl:text>
									<xsl:value-of select="format-number($FeeEst, '#,###')"/>
								</xsl:if>
							</xsl:with-param>
							<xsl:with-param name="ColumnFormat" select="$ColumnFormat"></xsl:with-param>
							<xsl:with-param name="CRMOpportunityID" select="$CRMOpportunityID"></xsl:with-param>
						</xsl:call-template>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:when test="$CurrentCol = 'SalesUser'">
				<xsl:call-template name="TemplateDataColumnWidget_CSV">
					<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
					<xsl:with-param name="CurrentColValue" select="$Employees/Employee[UserID = $CurrentColValue]/DisplayName"></xsl:with-param>
					<xsl:with-param name="ColumnFormat" select="$ColumnFormat"></xsl:with-param>
					<xsl:with-param name="CRMOpportunityID" select="$CRMOpportunityID"></xsl:with-param>
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<xsl:call-template name="TemplateDataColumnWidget_CSV">
					<xsl:with-param name="CurrentCol" select="$CurrentCol"></xsl:with-param>
					<xsl:with-param name="CurrentColValue">
						<xsl:choose>
							<xsl:when test="$UDFXML/UDFDefinition[Column_Name = $CurrentCol]/IsDropdown = 1">
								<xsl:value-of select="$UDFMasterValues/UDFMasterValue
                                              [CRMUDFDefID = $CRMUDFDefID and StoreValue = $CurrentColValue]/DisplayValue"/>
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="$CurrentColValue"/>
							</xsl:otherwise>
						</xsl:choose>
					</xsl:with-param>
					<xsl:with-param name="ColumnFormat" select="$ColumnFormat"></xsl:with-param>
					<xsl:with-param name="CRMOpportunityID" select="$CRMOpportunityID"></xsl:with-param>
				</xsl:call-template>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
</xsl:stylesheet>
