<!--                                                                  -->
<!--  Copyright (C) 2011 RoyaltyShare, Inc.   All Rights Reserved     -->
<!--                                                                  -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:dyn="http://exslt.org/dynamic"
                extension-element-prefixes="dyn">
    <xsl:output method="html" indent="no" doctype-system="" encoding="utf-8" />

    <xsl:include href="/app/tools/rps/templates/global.xsl"/>
    <xsl:include href="/app/tools/rps/templates/report/dynamic/common.xsl"/>
    <xsl:include href="/app/tools/rps/templates/report/dynamic/options/default.xsl"/>
    <xsl:include href="/app/tools/rps/templates/report/dynamic/criteria/default.xsl"/>
    <xsl:include href="/app/tools/rps/templates/report/dynamic/criteria/sales.xsl"/>

    <xsl:template name="pickLayout">
        <div class="MainBaseSection">
            <div id="reportShow" class="Report-generation-page">
                <form name="reportForm" method="post" action="/rps/report/show">
                    <xsl:if
                        test="Form/Report = 'RPS::Report::Dynamic::Sales::DigitalAndPhysical' or Form/Report = 'RPS::Report::Dynamic::Sales::Digital' or Form/Report = 'RPS::Report::Dynamic::Sales::Physical'">
                        <xsl:attribute name="id">salesReport</xsl:attribute>
                    </xsl:if>

                    <input type="hidden" name="FormSubmit" value="1"/>
                    <input type="hidden" name="ReportID" value="{/Root/Params/ReportID}"/>
                    <input type="hidden" name="Group" value="{/Root/Params/Group}"/>
                    <input type="hidden" name="Type" value="{/Root/Params/Type}"/>

                    <xsl:call-template name="errorMessageGeneral"/>

                    <xsl:if test="Form/Parameters/OptionalData/*">
                        <div class="Report-fields-section">
                            <h2>Options</h2>
                            <fieldset class="Form-fieldset">
                                <xsl:call-template name="showOptions"/>
                            </fieldset>
                        </div>
                    </xsl:if>

                    <xsl:if test="Form/Parameters/Criteria/*">
                        <div class="Report-fields-section">
                            <h2>Report Criteria</h2>
                            <xsl:choose>
                                <xsl:when test="Params/Group='Sales'">
                                    <fieldset class="Form-fieldset">
                                        <xsl:call-template name="showCriteriaSales"/>
                                    </fieldset>
                                </xsl:when>
                            </xsl:choose>
                            <fieldset class="Form-fieldset">
                                <xsl:if test="Params/Group='Sales'">
                                    <xsl:attribute name="class">Form-fieldset Form-fieldset-line-top</xsl:attribute>
                                </xsl:if>
                                <xsl:choose>
                                    <xsl:when test="Params/Group='Sales'">
                                        <xsl:call-template name="showCriteria"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <div class="Form-group Form-group-horizontal">
                                            <xsl:call-template name="showCriteria"/>
                                        </div>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </fieldset>
                        </div>
                    </xsl:if>
                    <div class="Report-fields-section">
                        <div class="Report-notification-item">
                            <xsl:call-template name="notifyCheckbox" />
                        </div>
                    </div>
                    <xsl:call-template name="buttons" />
                </form>
            </div>
            <xsl:if test="Form/Parameters/Criteria/* and Params/Group='Sales'">
                <xsl:call-template name="criteriaSalesTemplates"/>
            </xsl:if>
            <xsl:call-template name="formSupport"/>
        </div>
    </xsl:template>

    <xsl:template name="submitButton">
        <xsl:variable name="submitName">
            <xsl:choose>
            <xsl:when test="/Root/Form/Report/ReportID">Regenerate Report</xsl:when>
            <xsl:otherwise>Generate Report</xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:call-template name="uiButton">
            <xsl:with-param name="id" select="'submitButton'" />
            <xsl:with-param name="name" select="'submit'" />
            <xsl:with-param name="type" select="'primary'" />
            <xsl:with-param name="className" select="'Form-button'" />
            <xsl:with-param name="elemType" select="'submit'" />
            <xsl:with-param name="content">
                <xsl:value-of select="$submitName"/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="cancelButton">
        <xsl:call-template name="uiButton">
            <xsl:with-param name="name" select="'Cancel'" />
            <xsl:with-param name="className" select="'Form-button'" />
            <xsl:with-param name="elemType" select="'button'" />
            <xsl:with-param name="content" select="'Cancel'" />
            <xsl:with-param name="url" select="'/rps/report/list'" />
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="notifyCheckbox">
        <xsl:call-template name="uiCheckbox">
            <xsl:with-param name="name" select="'Notify'" />
            <xsl:with-param name="caption" select="'Send me an email when my report is ready'"/>
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="formSupport">
        <script type="text/javascript">
            // The idea is to add in the event handlers here based on the xml.
            // This should allow us to do some customization without muddying the waters up above.

            window.addEventListener('load', function () {
                <xsl:if test="Form/Parameters/Criteria/DateType and Form/Parameters/Criteria/StartDate and Form/Parameters/Criteria/EndDate">
                    <xsl:call-template name="dateTypeSupport"/>
                </xsl:if>

                <xsl:if test="Form/Parameters/OptionalData/ReportType and Form/Parameters/OptionalData/ShowProcessedExpenses and Form/Parameters/OptionalData/ShowUnprocessedExpenses">
                    <xsl:call-template name="reportTypeSupport"/>
                </xsl:if>

                <xsl:if test="Form/Parameters/Criteria/RunType and Form/Parameters/Criteria/Payor and Form/Parameters/Criteria/RunName">
                    <xsl:call-template name="runTypeSupport"/>
                </xsl:if>

                <xsl:if test="Form/Parameters/Criteria/ShowByType and Form/Parameters/Criteria/StartDate and Form/Parameters/Criteria/EndDate and Form/Parameters/Criteria/RunType and Form/Parameters/Criteria/Payor and Form/Parameters/Criteria/RunName">
                    <xsl:call-template name="showByTypeSupport"/>
                </xsl:if>

                <xsl:if test="Params/Group='Sales'">
                    <xsl:call-template name="reportNameSupport"/>
                </xsl:if>

                <xsl:if test="Form/Parameters/Criteria/StartPeriod and Form/Parameters/Criteria/EndPeriod">
                    <xsl:call-template name="salesPeriodSupport"/>
                </xsl:if>
            });
        </script>
    </xsl:template>

    <xsl:template name="dateTypeSupport">
        // Enable/disable start and end date fields based on date type selection
        var dateType = document.getElementById("Parameters_DateType");
        dateType.addEventListener('change', ReportPage.checkDateType);
        ReportPage.checkDateType();
    </xsl:template>

    <xsl:template name="reportTypeSupport">
        var rads = document.getElementsByName("Parameters_ReportType");
        for (var i = 0; i &lt; rads.length; i++) {
            rads[i].addEventListener('click' ReportPage.checkReportType);
        }
        ReportPage.checkReportType();
    </xsl:template>

    <xsl:template name="showByTypeSupport">
        // Enable/disable date and run fields based on show by type selection
        var showByType = document.getElementById("Parameters_ShowByType");
        showByType.addEventListener('change', ReportPage.checkShowByType);

        // Enable/disable payee detail fields when run type is selected
        var runType = document.getElementById("Parameters_RunType");
        runType.addEventListener('change', ReportPage.checkShowByType);

        // Enable/disable payee detail fields when payor is selected
        var payor = document.getElementById("Parameters_Payor");
        payor.addEventListener('change', ReportPage.checkShowByType);

        // Enable/disable payee detail fields when run name is selected
        var runName = document.getElementById("Parameters_RunName");
        runName.addEventListener('change', ReportPage.checkShowByType);

        // Enable/disable payee name field when payee detail is selected
        var payeeDetail = document.getElementById("Parameters_PayeeDetail");
        payeeDetail.addEventListener('change', ReportPage.checkShowByType);

        ReportPage.checkShowByType();
    </xsl:template>

    <xsl:template name="runTypeSupport">
        // Populate payor list based on run type
        <xsl:call-template name="payorList"/>
        var runType = document.getElementById("Parameters_RunType");
        var payors = document.getElementById("Parameters_Payor");

        runType.onchange = function() {
            window.updateSubSelect(runType, payors, ReportPage.payorList);
            payors.dispatchEvent(new Event('change'));
        };
        payors.addEventListener('change', ReportPage.updateRunByPayorAndType);

        window.updateSubSelect(runType, payors, ReportPage.payorList);
        ReportPage.updateRunByPayorAndType();
    </xsl:template>

    <xsl:template name="reportNameSupport">
        <xsl:if test="Params/Group='Sales'">
            document.getElementById("Parameters_ReportName").value = "Sales <xsl:value-of select="Params/Type"/>";
        </xsl:if>
    </xsl:template>

    <xsl:template name="payorList">
        // setting up an array of payors for each royalty run type
        ReportPage.payorList = {};
        ReportPage.runs = { 'Choose...': {} };

        <xsl:for-each select="/Root/Form/Parameters/RunData/*">

            <xsl:variable name="runType" select="name(.)"/>
            <xsl:variable name="runTypeValue">
                <xsl:if test="$runType = 'ArtistRoyalty'">Artist/Producer</xsl:if>
                <xsl:if test="$runType = 'LabelRoyalty'">Label</xsl:if>
                <xsl:if test="$runType = 'CAMechanicals'">CA Mechanicals</xsl:if>
                <xsl:if test="$runType = 'USMechanicals'">US Mechanicals</xsl:if>
                <xsl:if test="$runType = 'UKMechanicals'">UK Mechanicals</xsl:if>
            </xsl:variable>

            ReportPage.runs["<xsl:value-of select="$runTypeValue"/>"] = { '': {} };
            ReportPage.payor<xsl:value-of select="$runType"/> = {};

            <xsl:for-each select="Payor">
                <xsl:sort select="Name"/>

                ReportPage.runs['<xsl:value-of select="$runTypeValue"/>']['<xsl:value-of select="PayorID"/>'] = {};

                ReportPage.payor<xsl:value-of select="$runType"/>['<xsl:value-of select="PayorID"/>'] = '<xsl:call-template name="escapeJavascript"><xsl:with-param name="string" select="Name"/></xsl:call-template>';

                <xsl:for-each select="Run">
                    <xsl:sort select="substring(RunID,5)" data-type="number" order="descending"/>
                    ReportPage.runs['<xsl:value-of select="$runTypeValue"/>']['<xsl:value-of select="../PayorID"/>']['<xsl:value-of select="RunID"/>'] = '<xsl:call-template name="escapeJavascript"><xsl:with-param name="string" select="Label"/></xsl:call-template>';
                </xsl:for-each>
            </xsl:for-each>

            ReportPage.payorList['<xsl:value-of select="$runTypeValue"/>'] = ReportPage.payor<xsl:value-of select="$runType"/>;
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="salesPeriodSupport">
        // Populate sales period list using Map
        ReportPage.salesPeriodList = new Map();

        // Setting up initial values
        ReportPage.salesPeriodList.set('', 'Choose...');
        <xsl:text>ReportPage.salesPeriodList.set('0', '</xsl:text>
        <xsl:call-template name="escape-single-quotes">
            <xsl:with-param name="text" select="/Root/Form/Parameters/SalesPeriods/Period[PeriodID = 0]/Name"/>
        </xsl:call-template>
        <xsl:text>');</xsl:text>

        <xsl:for-each select="/Root/Form/Parameters/SalesPeriods/Period">
            <xsl:sort select="PeriodID" data-type="number" order="descending"/>
            <xsl:if test="PeriodID != 0">
                <xsl:text>ReportPage.salesPeriodList.set('</xsl:text>
                <xsl:value-of select="PeriodID"/>
                <xsl:text>', '</xsl:text>
                <xsl:call-template name="escape-single-quotes">
                    <xsl:with-param name="text" select="Name"/>
                </xsl:call-template>
                <xsl:text> (</xsl:text>
                <xsl:value-of select="PeriodID"/>
                <xsl:text>)');</xsl:text>
            </xsl:if>
        </xsl:for-each>

        ReportPage.updateSalesPeriodLists();
    </xsl:template>

    <xsl:template name="escape-single-quotes">
        <xsl:param name="text"/>
        <xsl:choose>
            <xsl:when test="contains($text, &quot;'&quot;)">
                <xsl:value-of select="substring-before($text, &quot;'&quot;)"/>
                <xsl:text>\'</xsl:text>
                <xsl:call-template name="escape-single-quotes">
                    <xsl:with-param name="text" select="substring-after($text, &quot;'&quot;)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>
