<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE xsl:stylesheet SYSTEM "../../include/htmlentity.txt">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- output -->
  <xsl:output method="html" indent="no" omit-xml-declaration="yes" />

  <!-- include -->
  <xsl:include href="../../include/i_format.xslt" />
  <xsl:include href="../../include/i_forms.xslt" />
  <xsl:include href="../../include/i_datepicker.xslt" />

  <!-- parametri in ingresso per comando tasti -->
  <xsl:param name="isCommonXslt_chNuovaRicerca" />
  <xsl:param name="isCommonXslt_chSchedaPersonale" />
  <xsl:param name="isCommonXslt_chSchedaPersonaleArchivio" />
  <xsl:param name="isCommonXslt_canaliVisibili" />
  <xsl:param name="modUso" />
  <xsl:param name="url_base" />

  <!-- parametri in ingresso - altri -->
  <xsl:param name="ch" />
  <xsl:param name="ko" />
  <xsl:param name="ut" />
  <xsl:param name="language" />
  <xsl:param name="idMe" />
  <xsl:param name="idAzi" />
  <xsl:param name="rsAzi" />

  <xsl:param name="perArchivio" />
  <xsl:param name="tastoInserisciRisorsaUmana" />
  <xsl:param name="rimaniNelModuloHR" />
  <xsl:param name="ricercaEstesa" />

  <!-- variable -->
  <xsl:variable name="tmpUser" select="/contentPage/tmpData/UserLog/UtentiAppDS/anagra" />
  <xsl:variable name="filtriChResult" select="/contentPage/filtriChResult" />
  <xsl:variable name="vTipoVisita" select="/contentPage/TipoVisList" />
  <xsl:variable name="vMotivoVisita" select="/contentPage/MotList" />

  <!-- ================================================================
       ENTRY POINT
       ================================================================ -->
  <xsl:template match="/contentPage">

    <!-- DHTMLX Suite 9 -->
    <link rel="stylesheet" href="dhtmlx9/codebase/dhtmlx.css" />
    <script type="text/javascript" src="dhtmlx9/codebase/dhtmlx.js"></script>

    <!-- Stili dinamici per colorazione celle grid -->
    <style>
      .sk-blue-bold   { color: blue  !important; font-weight: bold !important; }
      .sk-green-bold  { color: green !important; font-weight: bold !important; }
      .sk-red-bold    { color: red   !important; font-weight: bold !important; }
    </style>

    <script language="javascript" src="script/jsk_popup.js"></script>
    <script language="javascript" src="script/jsk_functions.js"></script>
    <script type="text/javascript" src="script/moment.min.js"></script>

    <div class="div_MainInternoRidotto">
      <xsl:call-template name="BodyGrid" />

      <!-- ============================================================
           TOOLBAR PRINCIPALE (toolbar_tasti) - DHTMLX Suite 9
           ============================================================ -->
      <script>
        var language = '<xsl:value-of select="$language" />';
        var vTastoInserisciRisorsaUmana = '<xsl:value-of select="$tastoInserisciRisorsaUmana" />';

        /* -- Creazione toolbar principale -- */
        var SKtoolbar_tasti = new dhx.Toolbar("toolbar_tasti", {
            css: "dhx_widget--bordered",
            data: [
                { id: "search",       value: "Cerca",              icon: "fas fa-search" },
                { id: "reset",        value: "Reset",              icon: "fas fa-redo" },
                { id: "exportexcel",  value: "Esporta Excel",      icon: "fas fa-file-excel",   hidden: true },
                { id: "dett",         value: "Dettaglio",          icon: "fas fa-eye" },
                { id: "risorsaUmana_add",                    value: "Nuova risorsa",         icon: "fas fa-user-plus",      hidden: true },
                { id: "risorsaUmana_creaVisita",             value: "Crea visita",           icon: "fas fa-calendar-plus",  hidden: true },
                { id: "risorsaUmana_richiestaVisita",        value: "Richiesta visita",      icon: "fas fa-calendar-check", hidden: true },
                { id: "risorsaUmana_verificaRisorsa",        value: "Verifica risorsa",      icon: "fas fa-user-check",     hidden: true },
                { id: "risorsaUmana_exportexcel_conVisite",  value: "Export con visite",     icon: "fas fa-file-export",    hidden: true },
                { id: "risorsaUmana_correzioneDuplicati",    value: "Correzione duplicati",  icon: "fas fa-clone",          hidden: true },
                { id: "print",        value: "Stampa",             icon: "fas fa-print",        hidden: true }
            ]
        });

        /* -- Dispatch click toolbar -> funzioni globali TOOLBAR_* -- */
        SKtoolbar_tasti.events.on("click", function(id) {
            switch(id) {
                case "search":                              TOOLBAR_search("toolbar_tasti"); break;
                case "reset":                               TOOLBAR_reset("toolbar_tasti"); break;
                case "exportexcel":                         TOOLBAR_Esporta_Excel("toolbar_tasti"); break;
                case "dett":                                TOOLBAR_Dettaglio("toolbar_tasti"); break;
                case "risorsaUmana_add":                    TOOLBAR_InserisciRisorsaUmana("toolbar_tasti"); break;
                case "risorsaUmana_creaVisita":             TOOLBAR_CreaVisita("toolbar_tasti"); break;
                case "risorsaUmana_richiestaVisita":        TOOLBAR_RichiestaVisita("toolbar_tasti"); break;
                case "risorsaUmana_verificaRisorsa":        TOOLBAR_VerificaRisorsa("toolbar_tasti"); break;
                case "risorsaUmana_exportexcel_conVisite":  TOOLBAR_EsportaRisorsaUmanaConVisite_Excel("toolbar_tasti"); break;
                case "risorsaUmana_correzioneDuplicati":    TOOLBAR_CorrezioneEspostiDuplicati("toolbar_tasti"); break;
                case "print":                               TOOLBAR_Stampa("toolbar_tasti"); break;
            }
        });


        /* -- Helper: ottieni ID riga selezionata -- */
        function SKgetSelectedRowId() {
            var cell = SKgrid.selection.getCell();
            return (cell &amp;&amp; cell.row) ? String(cell.row.id) : null;
        }

        /* -- Helper: ottieni valore campo per riga -- */
        function SKgetCellValue(rowId, fieldName) {
            var item = SKgrid.data.getItem(rowId);
            return (item &amp;&amp; item[fieldName] != null) ? String(item[fieldName]) : "";
        }

        /* -- Helper: imposta valore campo per riga -- */
        function SKsetCellValue(rowId, fieldName, value) {
            var upd = {};
            upd[fieldName] = value;
            SKgrid.data.update(rowId, upd);
        }


        /* ============================================================
           FUNZIONI TOOLBAR (invariate nella logica)
           ============================================================ */

        function TOOLBAR_search(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                location.href='home.aspx?ch=' + '<xsl:value-of select="$isCommonXslt_chNuovaRicerca" />';
            }
        }

        function TOOLBAR_reset(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                location.href='home.aspx?ch=' + '<xsl:value-of select="$isCommonXslt_chNuovaRicerca" />' + '&amp;nw=yes';
            }
        }

        function TOOLBAR_Esporta_Excel(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                var frm = document.getElementById('Ricerca');
                frm._hdnExpRpt.value=1;
                frm._hdnRpt.value='0';
                frm._hdnCosaExp.value=1;
                frm._hdnTipoExp.value=3;
                frm.submit();
            }
        }

        function TOOLBAR_EsportaRisorsaUmanaConVisite_Excel(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                var frm = document.getElementById('Ricerca');
                frm._hdnExpRpt.value=1;
                frm._hdnRpt.value='0';
                frm._hdnCosaExp.value=3;
                frm._hdnTipoExp.value=3;
                frm.submit();
            }
        }

        function TOOLBAR_CorrezioneEspostiDuplicati(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                var Id = SKgetSelectedRowId();
                if (Id == null || Id == '') {
                    alert(dhtmlx_grid_sk_alert_dettaglio);
                } else {
                    var mat = SKgetCellValue(Id, "id");
                    popupCorrezioneDuplicatiEsposti(mat);
                }
            }
        }

        function TOOLBAR_Stampa(divToolbar) {
            if (divToolbar == 'toolbar_tasti') {
                var frm = document.getElementById('Ricerca');
                frm._hdnExpRpt.value=1;
                frm._hdnRpt.value='1';
                frm._hdnCosaExp.value=3;
                frm._hdnTipoExp.value=1;
                frm.submit();
            }
        }

        function TOOLBAR_Dettaglio(divToolbar) {
            var Id = SKgetSelectedRowId();

            if (Id == null || Id == '') {
                alert(dhtmlx_grid_sk_alert_dettaglio);
            } else {
                var valoreCessato = SKgetCellValue(Id, "Cessato");

                if (valoreCessato == null || valoreCessato == '') {
                    alert('Manca informazione di risorsa attiva o cessata');
                }
                else {
                    var sUrl='';
                    if (valoreCessato == 'Y'){
                        sUrl='home.aspx?ch=' + '<xsl:value-of select="$isCommonXslt_chSchedaPersonaleArchivio"/>' + '&amp;esp=' + Id;
                    }
                    if (valoreCessato == 'N'){
                        sUrl='home.aspx?ch=' + '<xsl:value-of select="$isCommonXslt_chSchedaPersonale"/>' + '&amp;esp=' + Id;
                    }
                    if (sUrl!='') {
                        openNewTab(sUrl);
                    }
                }
            }
        }
      </script>

      <!-- -- Visibilita condizionale pulsanti -- -->
      <xsl:if test="$tastoInserisciRisorsaUmana=1">
        <script>SKtoolbar_tasti.show("risorsaUmana_add");</script>
      </xsl:if>

      <xsl:if test="$perArchivio=0">
        <xsl:if test="$ricercaEstesa=1">
          <xsl:if test="$modUso=3">
            <script>
              SKtoolbar_tasti.show("risorsaUmana_exportexcel_conVisite");
              SKtoolbar_tasti.show("print");
            </script>
          </xsl:if>
        </xsl:if>
      </xsl:if>

      <xsl:if test="contains($isCommonXslt_canaliVisibili,'tasto_esportaRisorsaUmana') or ($ut=-999)">
        <script>SKtoolbar_tasti.show("exportexcel");</script>
      </xsl:if>

      <xsl:if test="$ch='3.1.2'">
        <xsl:if test="contains($isCommonXslt_canaliVisibili,'tasto_creaVisita') or ($ut=-999)">
          <script>SKtoolbar_tasti.show("risorsaUmana_creaVisita");</script>
        </xsl:if>
      </xsl:if>

      <xsl:if test="$ch='hr.3.1.2'">
        <xsl:if test="contains($isCommonXslt_canaliVisibili,'tasto_correggiDuplicati') or ($ut=-999)">
          <script>SKtoolbar_tasti.show("risorsaUmana_correzioneDuplicati");</script>
        </xsl:if>
      </xsl:if>

      <xsl:if test="$ch='hr.3.1.2'">
        <xsl:if test="contains($isCommonXslt_canaliVisibili,'tasto_richiestaVisita') or ($ut=-999)">
          <script>SKtoolbar_tasti.show("risorsaUmana_richiestaVisita");</script>
        </xsl:if>
      </xsl:if>

      <xsl:if test="$ch='hr.3.1.2'">
        <xsl:if test="contains($isCommonXslt_canaliVisibili,'tasto_verificaRisorsa') or ($ut=-999)">
          <script>SKtoolbar_tasti.show("risorsaUmana_verificaRisorsa");</script>
        </xsl:if>
      </xsl:if>

      <!-- ============================================================
           MODALE CREA VISITA
           ============================================================ -->
      <div id="overlayModal" style="height:700px !important">
        <div id="modalContainer">
          <div id="toolbarCreaVisita"></div>
          <div id="modalContent">
            <br/>
            <form id="formCreaVisita" name="formCreaVisita" method="POST">
              <table border="0" width="98%" cellpadding="0" cellspacing="0" align="center">
                <tr>
                  <td>
                    <table border="0" width="100%" cellpadding="0" cellspacing="0" align="center">
                      <tr>
                        <td height="25" align="left" valign="top" class="title2">Nuova visita</td>
                      </tr>
                    </table>
                    <br/>
                    <table width="100%" border="0" align="center" cellspacing="0" cellpadding="0">
                      <tr><td width="100%" class="lbl">Tipologia</td></tr>
                      <tr>
                        <td>
                          <select class="input" id="tipoVisita" name="tipoVisita">
                            <option value="-1">Seleziona</option>
                            <xsl:apply-templates select="$vTipoVisita/Tipologia" mode="all">
                              <xsl:with-param name="ref" select="-1" />
                            </xsl:apply-templates>
                          </select>
                        </td>
                      </tr>
                    </table>
                    <br/>
                    <table width="100%" border="0" align="center" cellspacing="0" cellpadding="0">
                      <tr><td width="100%" class="lbl">Motivo visita</td></tr>
                      <tr>
                        <td>
                          <select class="select_300" id="MotivoVisita" name="MotivoVisita">
                            <option value="-1">Seleziona</option>
                            <xsl:apply-templates select="$vMotivoVisita/motivazioni">
                              <xsl:with-param name="ref" select="-1" />
                            </xsl:apply-templates>
                          </select>
                        </td>
                      </tr>
                    </table>
                    <br/>
                    <table width="100%" border="0" align="center" cellspacing="0" cellpadding="0">
                      <tr><td width="100%" class="lbl">Data visita</td></tr>
                      <tr>
                        <td>
                          <input type="text" id="date_dataVisita" name="date_dataVisita" class="datepicker" size="10" value="" onBlur="testValideDate_In_DatepickerJQuery(this)" />
                          <script language="javascript">
                            function testValideDate_In_DatepickerJQuery(vObj){
                              if(vObj.value != ''){
                                if(isDateITA(vObj.value) == false){
                                  alert('\'' + vObj.value + '\' e\' una data non valida');
                                  vObj.value = '';
                                }
                              }
                            }
                          </script>
                        </td>
                      </tr>
                    </table>
                    <br/>
                    <table width="100%" border="0" align="center" cellspacing="0" cellpadding="0">
                      <tr><td width="100%" class="lbl">Orario</td></tr>
                      <tr>
                        <td>
                          <input type="text" id="ora" name="ora" maxlength="2" size="2" value="08"/>
                          :
                          <input type="text" id="minuti" name="minuti" maxlength="2" size="2" value="00"/>
                        </td>
                      </tr>
                    </table>
                    <br/>
                  </td>
                </tr>
              </table>
            </form>
            <br/>
          </div>
        </div>
      </div>

      <!-- ============================================================
           TOOLBAR MODALE + FUNZIONI BUSINESS
           ============================================================ -->
      <script>
        var TIMEFORMAT = 'HH:mm';
        var DATEFORMAT = 'DD/MM/YYYY';
        var DATETIMEFORMAT = 'DD/MM/YYYY HH:mm';

        function resetDataOraInFormCreaVisita(){
            var start = moment();
            $('#date_dataVisita').val(start.format(DATEFORMAT));
            var currentdate = new Date();
            document.formCreaVisita.ora.value = currentdate.getHours();
            document.formCreaVisita.minuti.value = currentdate.getMinutes();
        }

        <![CDATA[
        $(document).ready(function () {
            resetDataOraInFormCreaVisita();
        });
        ]]>

        /* -- Toolbar modale Crea Visita - Suite 9 -- */
        var SKtoolbarCreaVisita = new dhx.Toolbar("toolbarCreaVisita", {
            css: "dhx_widget--bordered",
            data: [
                { id: "save", value: "Salva",   icon: "fas fa-save" },
                { id: "del",  value: "Annulla",  icon: "fas fa-times" }
            ]
        });

        SKtoolbarCreaVisita.events.on("click", function(id) {
            switch(id) {
                case "save": TOOLBAR_Salva("toolbarCreaVisita"); break;
                case "del":  TOOLBAR_Cancella("toolbarCreaVisita"); break;
            }
        });


        /* -- showModalCreaVisita -- */
        function showModalCreaVisita(matr) {
            overlay("overlayModal");
            setSelectValue(document.formCreaVisita.tipoVisita,-1);
            var jsMotivoIDdefault = '<xsl:value-of select="$vMotivoVisita/motivazioni[IsDefaultInteger=1]/idTab" />';
            setSelectValue(document.formCreaVisita.MotivoVisita,jsMotivoIDdefault);
            setSelectValue(document.formCreaVisita.tipoVisita,'N');
            resetDataOraInFormCreaVisita();
            document.Ricerca._hdnTipoVisita.value = '';
            document.Ricerca._hdnMotivoVisita.value = '';
            document.Ricerca._hdnDate_dataVisita.value = '';
            document.Ricerca._hdnOra.value = '';
            document.Ricerca._hdnMinuti.value = '';
            document.Ricerca._hdnMatricolaCV.value = matr;
        }

        /* -- ControlliCreaVisita -- */
        function ControlliCreaVisita(matr) {
            spinnerStart();
            $.ajax({
                type: "POST",
                url: "jsonStream.aspx?ch=json.ricercarisorseverificaesposto",
                data: '{m:"' + matr + '"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json", async: true, cache: false,
                success: onSuccessControlliCreaVisita,
                fail: onFailControlliCreaVisita
            });
            return true;
        }
        function onSuccessControlliCreaVisita(response) {
            spinnerStop();
            if (response.Cessato == true){
                alert('La risorsa umana e\' in archivio. Per creare una visita e\' necessario ripristinare la risorsa umana.');
                return false;
            }
            if (response.VisitaAperta == true){
                alert('Non e\' possibile crare una visita, la risorsa umana ha visite aperte, verificare lo storico visite.');
                return false;
            }
            showModalCreaVisita(response.Matricola);
        }
        function onFailControlliCreaVisita(response) {
            spinnerStop();
            alert('Problema nel rilevamento della situazione della risorsa umana');
        }

        /* -- InserimentoVisita -- */
        function InserimentoVisita() {
            var frmRicerca = document.Ricerca;
            var frmCreaVisita = document.formCreaVisita;

            frmRicerca._hdnTipoVisita.value = getSelectValue(document.formCreaVisita.tipoVisita);
            if (frmRicerca._hdnTipoVisita.value == '-1' || frmRicerca._hdnTipoVisita.value == '0' || frmRicerca._hdnTipoVisita.value == '') {
                alert('Selezionare la tipologia');
                return false;
            }

            frmRicerca._hdnMotivoVisita.value = getSelectValue(document.formCreaVisita.MotivoVisita);
            frmRicerca._hdnDate_dataVisita.value = frmCreaVisita.date_dataVisita.value;

            if (isEmpty(frmRicerca._hdnDate_dataVisita.value) == true) {
                alert('Selezionare la data visita');
                return false;
            }

            <![CDATA[
            frmRicerca._hdnOra.value = frmCreaVisita.ora.value;
            if (frmRicerca._hdnOra.value.length == 0 || frmRicerca._hdnOra.value.length > 2) {
                alert('Ora non valida'); return false;
            } else {
                if (isNaN(frmRicerca._hdnOra.value)) {
                    alert('Ora non valida. Inserire valore numerico'); return false;
                } else {
                    if (frmRicerca._hdnOra.value < 0 || frmRicerca._hdnOra.value > 23) {
                        alert('Ora non valida. Inserire valore compreso tra 0 e 23'); return false;
                    }
                }
            }

            frmRicerca._hdnMinuti.value = frmCreaVisita.minuti.value;
            if (frmRicerca._hdnMinuti.value.length == 0 || frmRicerca._hdnMinuti.value.length > 2) {
                alert('Minuti non validi'); return false;
            } else {
                if (isNaN(frmRicerca._hdnMinuti.value)) {
                    alert('Minuti non validi. Inserire valore numerico'); return false;
                } else {
                    if (frmRicerca._hdnMinuti.value < 0 || frmRicerca._hdnMinuti.value > 59) {
                        alert('Minuti non validi. Inserire valore compreso tra 0 e 59'); return false;
                    }
                }
            }
            ]]>

            if (confirm('Procedere con l\'inserimento?')) {
                frmRicerca._hdnAct.value = 'CreaVisita';
                frmRicerca.submit();
                spinnerStart();
            }
        }

        /* -- Handler toolbar modale -- */
        function TOOLBAR_Salva(divToolbar) {
            <![CDATA[
            if (divToolbar=='toolbarCreaVisita') { InserimentoVisita(); }
            ]]>
        }
        function TOOLBAR_Cancella(divToolbar) {
            if (divToolbar=='toolbarCreaVisita') { overlay("overlayModal"); }
        }

        /* -- Handler toolbar principale (azioni su riga selezionata) -- */
        function TOOLBAR_CreaVisita(divToolbar) {
            <![CDATA[
            if (divToolbar == 'toolbar_tasti') {
                var Id = SKgetSelectedRowId();
                if (Id == null || Id == '') {
                    alert("Evidenziare una voce in elenco");
                } else {
                    ControlliCreaVisita(Id);
                }
            }
            ]]>
        }

        function TOOLBAR_RichiestaVisita(divToolbar) {
            <![CDATA[
            if (divToolbar == 'toolbar_tasti') {
                var Id = SKgetSelectedRowId();
                if (Id == null || Id == '') {
                    alert("Evidenziare una voce in elenco");
                } else {
                    if (confirm('Procedere con la richiesta visita?')) {
                        document.Ricerca._hdnMatricolaRV.value = Id;
                        document.Ricerca._hdnAct.value = 'RichiestaVisita';
                        document.Ricerca.submit();
                        spinnerStart();
                    }
                }
            }
            ]]>
        }

        function TOOLBAR_VerificaRisorsa(divToolbar) {
            <![CDATA[
            if (divToolbar == 'toolbar_tasti') {
                var Id = SKgetSelectedRowId();
                if (Id == null || Id == '') {
                    alert("Evidenziare una voce in elenco");
                } else {
                    var url = 'home.aspx?ch=hr.8.56&esp=' + Id;
                    var win = window.open(url, '_blank');
                    win.focus();
                }
            }
            ]]>
        }
      </script>
    </div>
  </xsl:template>


  <!-- ================================================================
       TEMPLATE BodyGrid
       ================================================================ -->
  <xsl:template name="BodyGrid">

    <xsl:if test="$tastoInserisciRisorsaUmana=1">
      <xsl:call-template name="form_goTo_ModuleHR" />
    </xsl:if>

    <div style="width:100%;">
      <div id="recordInfoNoPaging"></div>
      <div id="toolbar_tasti"></div>

      <xsl:call-template name="tasti_RisorseUmane_NuovaRisorsaUmana">
        <xsl:with-param name="rimaniNelModuloHR" select="$rimaniNelModuloHR"/>
        <xsl:with-param name="motivoPresenza" select="1"/>
        <xsl:with-param name="hrefForReturn">home.aspx?ch=<xsl:value-of select="$isCommonXslt_chSchedaPersonale" />&amp;esp=</xsl:with-param>
        <xsl:with-param name="appendIDurlReturn" select="1"/>
      </xsl:call-template>
    </div>

    <br/>
    <div class="spinner"></div>

    <div id="gridbox" style="width:100%;height:calc(100vh - 180px);"></div>
    <div id="pagingArea"></div>

    <!-- Form nascosti -->
    <form id="Ricerca" name="Ricerca" method="POST">
      <input type="hidden" name="_hdnSkPostBack" value="true" />
      <input type="hidden" name="_hdnAct" />
      <input type="hidden" name="_hdnId" />
      <input type="hidden" name="_hdnVisibilita" />
      <input type="hidden" name="_hdnCosaExp" value="{$filtriChResult/CosaEsportare}" />
      <input type="hidden" name="_hdnTipoExp" value="{$filtriChResult/TipoEsportazione}" />
      <input type="hidden" name="_hdnRpt" value="" />
      <input type="hidden" name="_hdnExpRpt" value="" />
      <input type="hidden" id="_hdnTipoVisita" name="_hdnTipoVisita" value=""/>
      <input type="hidden" id="_hdnMotivoVisita" name="_hdnMotivoVisita" value=""/>
      <input type="hidden" id="_hdnDate_dataVisita" name="_hdnDate_dataVisita" value=""/>
      <input type="hidden" id="_hdnOra" name="_hdnOra" value=""/>
      <input type="hidden" id="_hdnMinuti" name="_hdnMinuti" value=""/>
      <input type="hidden" id="_hdnMatricolaCV" name="_hdnMatricolaCV" value=""/>
      <input type="hidden" id="_hdnMatricolaRV" name="_hdnMatricolaRV" value=""/>
    </form>
    <form name="FrmRisultatiVisiteRpt" id="FrmRisultatiVisiteRpt" action="pageRpt.aspx" METHOD="POST">
      <input type="hidden" name="rpt" value="RisultatiVisite" />
    </form>

    <!-- ============================================================
         GRID - DHTMLX Suite 9
         ============================================================ -->
    <script>
      var language = '<xsl:value-of select="$language" />';

      /* ==============================================================
         DEFINIZIONE COLONNE
         ============================================================== */

      var gridColumns = [

        /* -- Colonne nascoste (dati di servizio) -- */
        { id:"Cessato",             header:[{text:"Archiviato"},{content:"inputFilter"}],  hidden:true },
        { id:"SOSA",                header:[{text:"SOSA"},{content:"inputFilter"}],        hidden:true },

        /* -- Risorsa umana -- */
        { id:"CessatoDescrizione",  header:[{text:"Arc."},   {content:"selectFilter"}], width:60  },
        { id:"SOSAdescrizione",     header:[{text:"SoSa"},   {content:"selectFilter"}], width:60  },
        { id:"id",                  header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Matricola']/WordValue" />"},{content:"inputFilter"}], width:100 },
        { id:"Matricola_Libera",    header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Matricola libera']/WordValue" />"},{content:"inputFilter"}], width:100 },
        { id:"Cognome",             header:[{text:"Cognome"},{content:"inputFilter"}], width:200 },
        { id:"Nome",                header:[{text:"Nome"},   {content:"inputFilter"}], width:200 },
        { id:"Codice_Fiscale",      header:[{text:"Codice fiscale"},{content:"inputFilter"}], width:150 },
        { id:"Data_Nascita",        header:[{text:"Data nascita"},{content:"inputFilter"}], width:80  },
        { id:"Sesso",               header:[{text:"Sesso"},  {content:"inputFilter"}], width:60  },

        /* -- Attivita -- */
        { id:"Numero_Cartella",     header:[{text:"Cartella"},{content:"inputFilter"}], width:80 },
        { id:"Data_Assunzione",     header:[{text:"Data assunzione"},{content:"inputFilter"}], width:80  },
        { id:"Data_Cessazione",     header:[{text:"Data cessazione"},{content:"inputFilter"}], width:80  },
        { id:"DatoreLavoro",        header:[{text:"Datore di lavoro"},{content:"inputFilter"}], width:150 },
        { id:"Collocazione_InRisorsaUmana", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Collocazione']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"CollocazioneFuoriPerimetroDescrizione", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Collocazione']/WordValue" /> fuori perimetro"},{content:"selectFilter"}], width:100 },
        { id:"Codice_MacroStruttura", header:[{text:"Codice <xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Macro struttura']/WordValue" />"},{content:"inputFilter"}], width:100 },
        { id:"Descrizione_Macrostruttura", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Macro struttura']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"Codice_Struttura",    header:[{text:"Codice <xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Struttura']/WordValue" />"},{content:"inputFilter"}], width:100 },
        { id:"Struttura_InRisorsaUmana", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Struttura']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"Codice_Sede",         header:[{text:"Codice <xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Sede']/WordValue" />"},{content:"inputFilter"}], width:100 },
        { id:"Descrizione_Sede",    header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Sede']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"Mansione_InRisorsaUmana", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Mansione']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"descrizione_qualificaGiuridica", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Qualifica giuridica']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"descrizione_mansioneGiuridica", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Mansione giuridica']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"Ruolo",               header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Ruolo']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"TipoContrattoDescrizione", header:[{text:"Tipo contratto"},{content:"inputFilter"}], width:200 },
        { id:"TurnoLavoro",         header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='TurnoLavoro']/WordValue" />"},{content:"inputFilter"}], width:200 },

        /* -- Altri dati -- */
        { id:"Email",               header:[{text:"Email"},{content:"inputFilter"}], width:200 },
        { id:"ComuneNascita",       header:[{text:"Comune nascita"},{content:"inputFilter"}], width:200 },
        { id:"Cittadinanza",        header:[{text:"Cittadinanza"},{content:"inputFilter"}], width:200 },
        { id:"Telefono",            header:[{text:"Telefono"},{content:"inputFilter"}], width:200 },
        { id:"Cellulare",           header:[{text:"Cellulare"},{content:"inputFilter"}], width:200 },
        { id:"Fax",                 header:[{text:"Fax"},{content:"inputFilter"}], width:200 },
        { id:"Libretto",            header:[{text:"Libretto"},{content:"inputFilter"}], width:200 },
        { id:"PosizioneInail",      header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='PosInail']/WordValue"/>"},{content:"inputFilter"}], width:200 },
        { id:"PosizioneAssicurativa", header:[{text:"Posizione Assicurativa"},{content:"inputFilter"}], width:200 },
        { id:"StatoResidenza",      header:[{text:"Stato residenza"},{content:"inputFilter"}], width:150 },
        { id:"RegioneResidenza",    header:[{text:"Regione residenza"},{content:"inputFilter"}], width:150 },
        { id:"ProvinciaResidenza",  header:[{text:"Provincia residenza"},{content:"inputFilter"}], width:150 },
        { id:"CodiceComuneResidenza", header:[{text:"Codice comune residenza"},{content:"inputFilter"}], width:80 },
        { id:"ComuneCodiceIstat",   header:[{text:"Comune codice Istat"},{content:"inputFilter"}], width:70 },
        { id:"Comune",              header:[{text:"Comune"},{content:"inputFilter"}], width:200 },
        { id:"Cap",                 header:[{text:"Cap"},{content:"inputFilter"}], width:50  },
        { id:"AslComuneCodiceIstatDescrizione", header:[{text:"Asl comune codice Istat descrizione"},{content:"inputFilter"}], width:200 },
        { id:"AslCodiceDescrizione", header:[{text:"Asl descrizione"},{content:"inputFilter"}], width:200 },
        { id:"Indirizzo",           header:[{text:"Indirizzo"},{content:"inputFilter"}], width:200 },
        { id:"Distaccato",          header:[{text:"Distaccato"},{content:"inputFilter"}], width:80, align:"center" },
        { id:"ResponsabileEsposto", header:[{text:"Responsabile"},{content:"inputFilter"}], width:200 },
        { id:"ResponsabileEspostoCodiceFiscale", header:[{text:"Codice fiscale responsabile"},{content:"inputFilter"}], width:150 },
        { id:"ResponsabileEspostoEmail", header:[{text:"Email responsabile"},{content:"inputFilter"}], width:200 },
        { id:"ResponsabileAttivita", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='RisorsaUmanaResponsabileAttivita']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"ResponsabileAttivitaCodiceFiscale", header:[{text:"Codice fiscale <xsl:value-of select="/contentPage/Dizionario/Word[WordKey='RisorsaUmanaResponsabileAttivita']/WordValue" />"},{content:"inputFilter"}], width:150 },
        { id:"ResponsabileAttivitaEmail", header:[{text:"Email <xsl:value-of select="/contentPage/Dizionario/Word[WordKey='RisorsaUmanaResponsabileAttivita']/WordValue" />"},{content:"inputFilter"}], width:200 },
        { id:"Locazione",           header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='Locazione']/WordValue" />"},{content:"inputFilter"}], width:150 },
        { id:"MedicoSchedaMedicaNominativo", header:[{text:"Medico in scheda medica"},{content:"inputFilter"}], width:200 },
        { id:"SedeVisitaSchedaMedicaNome", header:[{text:"Sede di visita medica"},{content:"inputFilter"}], width:200 },
        { id:"GruppiOmogenei",      header:[{text:"Gruppi Omogenei"},{content:"inputFilter"}], width:200, htmlEnable:true },
        { id:"JobDescription_conBR", header:[{text:"<xsl:value-of select="/contentPage/Dizionario/Word[WordKey='JobDescription']/WordValue" />"},{content:"inputFilter"}], width:200, htmlEnable:true },
        { id:"TurnoNotteQuantita",  header:[{text:"Turno Notte"},{content:"inputFilter"}], width:80, type:"number" }
      ];


      /* ==============================================================
         CREAZIONE GRID - Suite 9
         ============================================================== */
      var SKgrid = new dhx.Grid("gridbox", {
          columns:    gridColumns,
          autoWidth:  false,
          selection:  "row",
          resizable:  true,
          sortable:   true,
          editable:   false,
          htmlEnable: true,
          multiselection: false
      });

      /* -- Double-click -> Dettaglio -- */
      SKgrid.events.on("cellDblClick", function(row, column, e) {
          TOOLBAR_Dettaglio('');
      });


      /* ==============================================================
         transformV4Data - converte QUALSIASI formato server in array
         di oggetti con campi nominati per dhx.Grid v9.

         Gestisce:
           A) v4 "js":      [{id:"X", data:["a","b","c"]}, ...]
           B) v4 "json":    {rows:[{id:"X", data:["a","b","c"]}, ...]}
           C) wrapper data:  {data:[...]}
           D) wrapper d:     {d:[...]}  oppure  {d:"stringa JSON"} (ASP.NET)
           E) v9 nativo:    [{id:"X", Cognome:"Rossi", ...}]  -> passthrough
           F) qualsiasi wrapper con prima proprieta array
         ============================================================== */
      function transformV4Data(v4Data) {
          var fieldNames = gridColumns.map(function(c){ return c.id; });

          console.log("[SK Grid] Dati ricevuti dal server:", v4Data);
          console.log("[SK Grid] Tipo:", Array.isArray(v4Data) ? "Array" : typeof v4Data);

          /* Se e un oggetto (non array), stampa le chiavi per debug */
          if (v4Data &amp;&amp; typeof v4Data === "object" &amp;&amp; !Array.isArray(v4Data)) {
              console.log("[SK Grid] Chiavi oggetto:", Object.keys(v4Data));
          }

          if (Array.isArray(v4Data) &amp;&amp; v4Data.length > 0) {
              console.log("[SK Grid] Primo elemento:", JSON.stringify(v4Data[0]).substring(0, 300));
              console.log("[SK Grid] Ha proprieta 'data'?", v4Data[0].hasOwnProperty("data"));
          }

          /* Funzione interna per convertire una singola riga v4 */
          function convertRow(row) {
              var obj = { id: row.id };
              if (row.data &amp;&amp; Array.isArray(row.data)) {
                  for (var i = 0; i &lt; row.data.length &amp;&amp; i &lt; fieldNames.length; i++) {
                      obj[fieldNames[i]] = row.data[i];
                  }
              }
              return obj;
          }

          /* -- Estrai l'array di righe dall'oggetto wrapper -- */
          var rowsArray = null;

          /* Gia un array */
          if (Array.isArray(v4Data)) {
              rowsArray = v4Data;
          }
          /* Formato: { rows: [...] } */
          else if (v4Data &amp;&amp; v4Data.rows &amp;&amp; Array.isArray(v4Data.rows)) {
              console.log("[SK Grid] Rilevato wrapper con 'rows'. Righe:", v4Data.rows.length);
              rowsArray = v4Data.rows;
          }
          /* Formato: { data: [...] } */
          else if (v4Data &amp;&amp; v4Data.data &amp;&amp; Array.isArray(v4Data.data)) {
              console.log("[SK Grid] Rilevato wrapper con 'data'. Righe:", v4Data.data.length);
              rowsArray = v4Data.data;
          }
          /* Formato: { d: [...] } (ASP.NET WebMethod wrapping) */
          else if (v4Data &amp;&amp; v4Data.d &amp;&amp; Array.isArray(v4Data.d)) {
              console.log("[SK Grid] Rilevato wrapper ASP.NET 'd'. Righe:", v4Data.d.length);
              rowsArray = v4Data.d;
          }
          /* Formato: { d: "stringa JSON" } (ASP.NET WebMethod doppia serializzazione) */
          else if (v4Data &amp;&amp; v4Data.d &amp;&amp; typeof v4Data.d === "string") {
              console.log("[SK Grid] Rilevato wrapper ASP.NET 'd' (stringa). Parsing...");
              try {
                  var parsed = JSON.parse(v4Data.d);
                  return transformV4Data(parsed);
              } catch(e) {
                  console.error("[SK Grid] Errore parsing v4Data.d:", e);
                  return [];
              }
          }
          /* Ultimo tentativo: cerca la PRIMA proprieta che sia un array */
          else if (v4Data &amp;&amp; typeof v4Data === "object") {
              var keys = Object.keys(v4Data);
              for (var k = 0; k &lt; keys.length; k++) {
                  if (Array.isArray(v4Data[keys[k]])) {
                      console.log("[SK Grid] Trovato array nella proprieta '" + keys[k] + "'. Righe:", v4Data[keys[k]].length);
                      rowsArray = v4Data[keys[k]];
                      break;
                  }
              }
          }

          if (!rowsArray) {
              console.warn("[SK Grid] Formato dati non riconosciuto! Oggetto ricevuto:", JSON.stringify(v4Data).substring(0, 500));
              return [];
          }

          /* Se l'array e vuoto */
          if (rowsArray.length === 0) {
              console.log("[SK Grid] Array vuoto, nessun record.");
              return [];
          }

          /* Controlla se le righe sono formato v4 (con .data[]) o v9 (campi nominati) */
          if (rowsArray[0].data &amp;&amp; Array.isArray(rowsArray[0].data)) {
              console.log("[SK Grid] Righe in formato v4 (data[]). Trasformo...");
              var result = rowsArray.map(convertRow);
              console.log("[SK Grid] Primo record trasformato:", JSON.stringify(result[0]).substring(0, 300));
              return result;
          } else {
              console.log("[SK Grid] Righe in formato v9 nativo (campi nominati).");
              return rowsArray;
          }
      }


      /* -- Post-processing: colorazione celle + trasformazione dati -- */
      function applyGridStyling() {
          SKgrid.data.forEach(function(item) {
              var rId = item.id;

              /* Cessato -> colora cella CessatoDescrizione */
              if (item.Cessato === 'Y') { SKgrid.addCellCss(rId, "CessatoDescrizione", "sk-blue-bold"); }
              if (item.Cessato === 'N') { SKgrid.addCellCss(rId, "CessatoDescrizione", "sk-green-bold"); }

              /* SOSA -> colora cella SOSAdescrizione */
              if (item.SOSA === 'Y') { SKgrid.addCellCss(rId, "SOSAdescrizione", "sk-green-bold"); }
              if (item.SOSA === 'N') { SKgrid.addCellCss(rId, "SOSAdescrizione", "sk-red-bold"); }

              /* Distaccato: 0->No, 1->Si */
              if (item.Distaccato === '0' || item.Distaccato === 0) {
                  SKgrid.data.update(rId, { Distaccato: "No" });
              }
              if (item.Distaccato === '1' || item.Distaccato === 1) {
                  SKgrid.data.update(rId, { Distaccato: "Si" });
              }

              /* CollocazioneFuoriPerimetro */
              if (item.CollocazioneFuoriPerimetroDescrizione === 'Si') {
                  SKgrid.addCellCss(rId, "CollocazioneFuoriPerimetroDescrizione", "sk-blue-bold");
              }
              if (item.CollocazioneFuoriPerimetroDescrizione === 'No') {
                  SKgrid.addCellCss(rId, "CollocazioneFuoriPerimetroDescrizione", "sk-green-bold");
              }
          });
      }


      /* -- Avvio caricamento -- */
      spinnerStart();

      fetch("jsonStream.aspx?ch=json.dhtmlx.risorseUmane.risultatoRicerca")
          .then(function(response) {
              console.log("[SK Grid] HTTP status:", response.status);
              return response.json();
          })
          .then(function(rawData) {

              /* Trasforma formato v4 -> v9 */
              rawData = transformV4Data(rawData);

              console.log("[SK Grid] Record da caricare:", rawData.length);
              if (rawData.length === 0) {
                  console.warn("[SK Grid] Nessun record da caricare!");
              }

              SKgrid.data.parse(rawData);

              console.log("[SK Grid] Record nella grid:", SKgrid.data.getLength());

              /* Ordinamento per Cognome ascendente */
              SKgrid.data.sort({ by: "Cognome", dir: "asc" });

              /* Colorazione e trasformazioni celle */
              applyGridStyling();

              /* Conteggio record */
              var infoEl = document.getElementById("recordInfoNoPaging");
              if (infoEl) { infoEl.innerHTML = "Record: " + SKgrid.data.getLength(); }

              /* Apertura report se richiesto */
              var vFrmRisultatiVisiteRpt_runReport = '<xsl:value-of select="$filtriChResult/FrmRisultatiVisiteRpt_runReport" />';
              if (vFrmRisultatiVisiteRpt_runReport == '1'){
                  openReport(document.forms['FrmRisultatiVisiteRpt']);
              }

              spinnerStop();
          })
          .catch(function(err) {
              console.error("Errore caricamento grid:", err);
              spinnerStop();
          });
    </script>
  </xsl:template>

</xsl:stylesheet>