(142,'core/marco_abajo.php','2023-05-16 23:45:00','rafael',941,52300,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n	?>\n\n	<?php\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n	?>\n\n	<?php\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n	?>\n\n	<?php\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAM=\'false\';\n                $PCO_SolicitudMIC=\'false\';\n                if ($PWA_AutorizacionCAM==1) $PCO_SolicitudCAM=\'true\';\n                if ($PWA_AutorizacionMIC==1) $PCO_SolicitudMIC=\'true\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  var video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n	?>\n\n    <?php\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        var tiempo_final_javascript = (new Date()).getTime();\n        var tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A');
INSERT INTO `core_pcoder_historial` VALUES (143,'core/marco_abajo.php','2023-05-16 23:45:00','rafael',941,52300,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n	?>\n\n	<?php\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n	?>\n\n	<?php\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n	?>\n\n	<?php\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAM=\'false\';\n                $PCO_SolicitudMIC=\'false\';\n                if ($PWA_AutorizacionCAM==1) $PCO_SolicitudCAM=\'true\';\n                if ($PWA_AutorizacionMIC==1) $PCO_SolicitudMIC=\'true\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  var video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n	?>\n\n    <?php\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(144,'core/marco_abajo.php','2023-05-16 23:45:00','rafael',939,52290,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n	?>\n\n	<?php\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n	?>\n\n	<?php\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n	?>\n\n	<?php\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAM=\'false\';\n                $PCO_SolicitudMIC=\'false\';\n                if ($PWA_AutorizacionCAM==1) $PCO_SolicitudCAM=\'true\';\n                if ($PWA_AutorizacionMIC==1) $PCO_SolicitudMIC=\'true\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  var video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(145,'core/marco_abajo.php','2023-05-16 23:48:00','rafael',937,52226,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n	?>\n\n	<?php\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n	?>\n\n	<?php\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n	?>\n\n	<?php\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(146,'core/marco_abajo.php','2023-05-16 23:48:00','rafael',933,52204,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n	?>\n\n	<?php\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(147,'core/marco_abajo.php','2023-05-16 23:49:00','rafael',931,52193,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (var ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(148,'core/marco_abajo.php','2023-05-16 23:49:00','rafael',931,52189,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n    ?>\n\n    <?php\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        var textarea = $(this);\n\n                        var mode = textarea.data(\'editor\');\n\n                        var editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        var editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(149,'core/marco_abajo.php','2023-05-16 23:50:00','rafael',929,52180,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon;\n            });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon;\n            });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon;\n            });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n            $(\'#lib_octicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon;\n            });\n            $(\'#lib_typicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon;\n            });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', function(e) {\n                document.PCO_FormItemMenu.imagen.value=e.icon;\n            });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        const textarea = $(this);\n\n                        const mode = textarea.data(\'editor\');\n\n                        const editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        const editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),(150,'core/marco_abajo.php','2023-05-16 23:50:00','rafael',913,51934,'<?php\n/*\n	 _\n	|_) _ _  _ _|_. _ _					  	Copyright (C) 2012-2022\n	|  | (_|(_  | |(_(_) 				  	John F. Arroyave Gutiérrez\n	  www.practico.org					  	unix4you2@gmail.com\n                                            All rights reserved.\n    \n	 This program is free software: you can redistribute it and/or modify\n	 it under the terms of the GNU General Public License as published by\n	 the Free Software Foundation, either version 3 of the License, or\n	 (at your option) any later version.\n\n	 This program is distributed in the hope that it will be useful,\n	 but WITHOUT ANY WARRANTY; without even the implied warranty of\n	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n	 GNU General Public License for more details.\n\n	 You should have received a copy of the GNU General Public License\n	 along with this program.  If not, see <http://www.gnu.org/licenses/>\n	 \n	            --- TRADUCCION NO OFICIAL DE LA LICENCIA ---\n\n     Esta es una traducción no oficial de la Licencia Pública General de\n     GNU al español. No ha sido publicada por la Free Software Foundation\n     y no establece los términos jurídicos de distribución del software \n     publicado bajo la GPL 3 de GNU, solo la GPL de GNU original en inglés\n     lo hace. De todos modos, esperamos que esta traducción ayude a los\n     hispanohablantes a comprender mejor la GPL de GNU:\n	 \n     Este programa es software libre: puede redistribuirlo y/o modificarlo\n     bajo los términos de la Licencia General Pública de GNU publicada por\n     la Free Software Foundation, ya sea la versión 3 de la Licencia, o \n     (a su elección) cualquier versión posterior.\n\n     Este programa se distribuye con la esperanza de que sea útil pero SIN\n     NINGUNA GARANTÍA; incluso sin la garantía implícita de MERCANTIBILIDAD\n     o CALIFICADA PARA UN PROPÓSITO EN PARTICULAR. Vea la Licencia General\n     Pública de GNU para más detalles.\n\n     Usted ha debido de recibir una copia de la Licencia General Pública de\n     GNU junto con este programa. Si no, vea <http://www.gnu.org/licenses/>\n*/\n\n	/*\n		Title: Seccion inferior\n		Ubicacion *[/core/marco_abajo.php]*.  Archivo dedicado a la diagramacion de contenidos en el pie de pagina de la aplicacion, incluye valores de accion y tiempos para el usuario administrador.\n\n	Variables de entrada:\n\n		PCOSESS_LoginUsuario - Nombre de usuario que se encuentra logueado en el sistema\n		accion - Accion llamada actualmente en Practico (identificador unico de funcion interna o personalizada)\n		tiempo_inicio_script - Hora en microtime marcada para el incio del script\n\n		(start code)\n			if(PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $PCO_Accion!=\"\")\n				{\n					$tiempo_final_script = PCO_ObtenerMicrotime();\n					$tiempo_total_script = $tiempo_final_script - $tiempo_inicio_script;\n				}\n		(end)\n\n	Salida:\n		Pie de pagina de aplicacion e informacion asociada a la accion y tiempos de ejecucion en caso de ser el usuario administrador\n\n	Ver tambien:\n		<Seccion superior> | <Articulador>\n	*/\n?>\n \n\n\n\n						<div id=\"PCODIV_AbajoEscritorio\"></div>\n\n                    </div>\n                    <!-- /.col-lg-12 -->\n                </div>\n                <!-- /.row -->\n            </div>\n            <!-- /.container-fluid -->\n        </div>\n        <!-- /#page-wrapper -->\n\n\n\n		<!-- Modal para mensajes generales -->\n		<div id=\"PCO_Modal_Mensaje\" class=\"modal fade oculto_impresion\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<p id=\"PCO_Modal_MensajeCuerpo\"></p>\n					</div>\n					<div class=\"modal-footer\">\n						<div id=\"PCO_Modal_MensajeBotones\"><button type=\"button\" class=\"btn btn-outline btn-info\" data-dismiss=\"modal\">Cerrar</button></div>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargando\" class=\"modal fade oculto_impresion\"  data-backdrop=\"static\" data-keyboard=\"false\">\n			<div class=\"modal-dialog\">\n				<div class=\"modal-content\">\n					<div class=\"modal-header\">\n						<button id=\"PCO_Modal_MensajeCargandoBotonCerrar\" type=\"button\" class=\"close\" data-dismiss=\"modal\"><span aria-hidden=\"true\">&times;</span><span class=\"sr-only\">Cerrar</span></button>\n						<h4 id=\"PCO_Modal_MensajeCargandoTitulo\" class=\"modal-title\"></h4>\n					</div>\n					<div class=\"modal-body\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 45%\"></div>\n						</div>\n						<p id=\"PCO_Modal_MensajeCargandoCuerpo\"></p>\n						<div align=\"right\"><i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i></div>\n						\n						<a href=\"javascript:PCOJS_OcultarMensajeCargando();\"><?php echo $MULTILANG_Cerrar; ?></a>\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n		<!-- Modal para mensajes de carga -->\n		<div id=\"PCO_Modal_MensajeCargandoSimple\" class=\"modal oculto_impresion\" data-backdrop=\"false\">\n			<div class=\"modal-dialog modal-sm\">\n				<div class=\"modal-content\">\n					<div class=\"modal-body\" align=\"center\">\n						<div class=\"progress\" id=\"PCO_Modal_MensajeCargandoBarra\">\n							<div id=\"PCO_Modal_MensajeCargandoPorcentaje\" class=\"progress-bar progress-bar-striped active\" role=\"progressbar\" aria-valuenow=\"100\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n						</div>\n						<i class=\"fa fa-circle-o-notch fa-fw fa-spin fa-1x\"></i> <?php echo $MULTILANG_Cargando; ?>...\n						\n					</div>\n				</div><!-- /.modal-content -->\n			</div><!-- /.modal-dialog -->\n		</div><!-- /.modal -->\n\n\n    </div>\n    <!-- /#wrapper inicial -->\n\n<!--</div>--> <!-- FINALIZA MARCO DE CHAT -->\n\n\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/moment/moment-with-locales.min.js\"></script>\n\n    <!-- Plugins JavaScript adicionales -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/transition.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/collapse.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/slider/bootstrap-slider.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/metisMenu/metisMenu.min.js\"></script>\n    <!-- Bootstrap-Iconpicker Fuentes de iconos -->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-fontawesome-4.2.0.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-glyphicon.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-ionicon-1.5.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-octicon-2.1.2.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-typicon-2.0.6.min.js\"></script>\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-weathericon-1.2.0.min.js\"></script>\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-elusiveicon-2.0.0.min.js\"></script>-->\n    <!--<script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/iconset/iconset-mapicon-2.1.0.min.js\"></script>-->\n    <script type=\"text/javascript\" src=\"inc/bootstrap/js/plugins/iconpicker/bootstrap-iconpicker.min.js\"></script>\n\n    <!-- Plugins JavaScript requeridos por DateTimePicker -->\n    <script src=\"inc/bootstrap/js/plugins/datepicker/bootstrap-datetimepicker.min.js\"></script>\n\n    <!-- Morris Charts JavaScript -->\n    <?php\n        //Carga solo Morris cuando es pagina principal por ahora para evitar conflictos con DatePicker\n        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\")\n        // Incluye archivo con las consultas y datos para ser diagramados por Morris\n            include_once(\"core/marco_admin_morris.php\");\n    ?>\n    \n    <!-- Gantt -->\n    <script src=\"inc/jquery/plugins/gantt-master/js/jquery.fn.gantt.js\"></script>\n\n    <!-- DataTables JavaScript -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/jquery.dataTables.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.buttons.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.html5.min.js\"></script><!--N-->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/buttons.colVis.min.js\"></script><!--N-->\n\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.bootstrap.min.js\"></script>\n    \n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.select.min.js\"></script>\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.searchPanes.min.js\"></script>\n\n    <!-- DataTables Responsive -->\n    <script src=\"inc/bootstrap/js/plugins/dataTables/dataTables.responsive.min.js\"></script><!--N-->\n\n	<!-- Canvas -->\n    <script type=\"text/javascript\" src=\"inc/jquery/plugins/sketch.js\"></script>\n    \n    <!-- SummerNote -->\n    <script src=\"inc/summernote/summernote.min.js\"></script>\n    <script src=\"inc/summernote/lang/summernote-<?php echo $IdiomaPredeterminado; ?>-<?php echo strtoupper($IdiomaPredeterminado); ?>.min.js\"></script>\n\n    <!-- JavaScript Personalizado del tema -->\n    <script src=\"inc/bootstrap/js/sb-admin-2.js\"></script>\n    <script src=\"inc/bootstrap/js/practico.min.js?<?php echo filemtime(\'inc/bootstrap/js/practico.min.js\'); ?>\"></script>\n    \n    <?php\n    	//Carga marco de chat solamente si esta habilitado\n    	if (isset($Activar_ModuloChat) && $Activar_ModuloChat>0 && @$_SESSION[\'username\']!=\"\")\n        	{\n	?>\n                <!-- Chat -->\n                <script type=\"text/javascript\" src=\"inc/chat/js/chat.js\"></script>\n    <?php\n    	    }\n    ?>\n\n\n    <?php\n        //Si el usuario es admin por defecto presenta la barra lateral activa\n        // DEPRECATED: (PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && @$PCOSESS_SesionAbierta && @$PCO_Accion==\"PCO_VerMenu\") || \n        if ((@$PCOSESS_LoginUsuario!=\"\" && @$PCOSESS_SesionAbierta && @$VerNavegacionIzquierdaResponsive==1))\n            echo \'<script language=\"JavaScript\">\n                    ver_navegacion_izquierda_responsive();\n                </script>\';\n    ?>\n\n    <?php\n        // Habilita el popup activo\n        if (@$popup_activo==\"FormularioCampos\")	\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalElementoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioBotones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalBotonFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioDiseno\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoFormulario\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"FormularioAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalDisenoBotones\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeAcciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalEditaAccionesInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCampos\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCamposInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeTablas\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalTablaInforme\").modal(\"show\"); }); </script>\';\n        if (@$popup_activo==\"InformeCondiciones\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\"#myModalCondicionesInforme\").modal(\"show\"); }); </script>\';\n        //Habilita pesatanas activas en el popup activo\n        if (@$pestana_activa_editor==\"eventos_objeto-tab\")\n            echo \'<script type=\"text/javascript\"> $(window).load(function(){ $(\\\'.nav-tabs a[href=\"#eventos_objeto-tab\"]\\\').tab(\\\'show\\\'); }); </script>\';\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza tamano del marco principal para garantizar siempre un tamano adecuado de fondo\n        //TODO: Verificar consistencia en paginas grades como la administrativa\n        $( function() {\n            var PCOJSVAR_HayScroll=false;\n            //Verifica si hay scroll  METODO 1\n            if (document.getElementById(\"page-wrapper\").scrollHeight==$(document).height())\n                PCOJSVAR_HayScroll=true;\n            //Si hay scroll el alto debe tener !important para que se estire hasta abajo en la página.  Si no hay scroll solo 100%\n            if( PCOJSVAR_HayScroll )\n                {\n                    //$(\"#page-wrapper\").css({ \'height\': \"100% !important\" }); //SI Hay scroll  \n                    //console.log(\"Scroll detectado\");\n                }\n            else\n                {\n                    $(\"#page-wrapper\").css({ \'height\': \"100%\" }); // NO Hay scroll  \n                    //console.log(\"Scroll NO detectado\");\n                }\n        });\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los tooltips programados en la hoja.  Por defecto todos los elementos con data-toggle=tootip\n        $(function () {\n          $(\'[data-toggle=\"tooltip\"]\').tooltip({\'container\':\'body\'});\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga los popovers programados en la hoja.  Por defecto todos los elementos con data-toggle=popover\n        $(function () {\n          $(\'[data-toggle=\"popover\"]\').popover()\n        })\n    </script>\n\n    <script language=\"JavaScript\">\n        //Carga las tablas en formato DataTable\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles tablas con formato DataTable y las convierte\n                $TablasDataTable=@explode(\"|\",$PCO_InformesDataTable);\n                $TablasDataTablePaginaciones=@explode(\"|\",$PCO_InformesDataTablePaginaciones);\n                $TablasDataTableTotales=@explode(\"|\",$PCO_InformesDataTableTotales);\n                $TablasDataTableFormatosTotales=@explode(\"|\",$PCO_InformesDataTableFormatoTotales);\n                $TablasDataTableExportaCLP=@explode(\"|\",$PCO_InformesDataTableExrpotaCLP);\n                $TablasDataTableExportaCSV=@explode(\"|\",$PCO_InformesDataTableExrpotaCSV);\n                $TablasDataTableExportaXLS=@explode(\"|\",$PCO_InformesDataTableExrpotaXLS);\n                $TablasDataTableExportaPDF=@explode(\"|\",$PCO_InformesDataTableExrpotaPDF);\n                $TablasDataTableDefineCOLS=@explode(\"|\",$PCO_InformesDataTableDefineCOLS);\n                $TablasDataTableIdCache=@explode(\"|\",$PCO_InformesIdCache);\n                $TablasDataTableRecuperacionAJAX=@explode(\"|\",$PCO_InformesRecuperacionAJAX);\n                $TablasDataTableColumnas=@explode(\"|\",$PCO_InformesListaColumnasDT);\n                $TablasDataTable_pane_activado=@explode(\"|\",$PCO_InformesDataTable_pane_activado);\n                $TablasDataTable_pane_cascada=@explode(\"|\",$PCO_InformesDataTable_pane_cascada);\n                $TablasDataTable_pane_colapsado=@explode(\"|\",$PCO_InformesDataTable_pane_colapsado);\n                $TablasDataTable_pane_columnas=@explode(\"|\",$PCO_InformesDataTable_pane_columnas);\n                $TablasDataTable_pane_subtotalesrelativos=@explode(\"|\",$PCO_InformesDataTable_pane_subtotalesrelativos);\n                $TablasDataTable_pane_conteos=@explode(\"|\",$PCO_InformesDataTable_pane_conteos);\n                $TablasDataTable_pane_controles=@explode(\"|\",$PCO_InformesDataTable_pane_controles);\n                $TablasDataTable_pane_control_colapsar=@explode(\"|\",$PCO_InformesDataTable_pane_control_colapsar);\n                $TablasDataTable_pane_control_ordenar=@explode(\"|\",$PCO_InformesDataTable_pane_control_ordenar);\n                \n                if (1==1)  //Solo para efectos de depuracion, cambiar a condicion invalida en produccion\n                echo \"\n                    /*\n                        Activacion de elementos tipo DATATABLE (depuracion):\n                        PCO_InformesDataTable=$PCO_InformesDataTable\n                        PCO_InformesDataTablePaginaciones=$PCO_InformesDataTablePaginaciones\n                        PCO_InformesDataTableTotales=$PCO_InformesDataTableTotales\n                        PCO_InformesDataTableFormatoTotales=$PCO_InformesDataTableFormatoTotales\n                        PCO_InformesDataTableExrpotaCLP=$PCO_InformesDataTableExrpotaCLP\n                        PCO_InformesDataTableExrpotaCSV=$PCO_InformesDataTableExrpotaCSV\n                        PCO_InformesDataTableExrpotaXLS=$PCO_InformesDataTableExrpotaXLS\n                        PCO_InformesDataTableExrpotaPDF=$PCO_InformesDataTableExrpotaPDF\n                        PCO_InformesTablasDataTableDefineCOLS=$PCO_InformesDataTableDefineCOLS\n                        PCO_InformesIdCache=$PCO_InformesIdCache\n                        PCO_InformesRecuperacionAJAX=$PCO_InformesRecuperacionAJAX\n                        PCO_InformesListaColumnasDT=$PCO_InformesListaColumnasDT\n                    */\";\n                \n                for ($i=0; $i<count($TablasDataTable);$i++)\n                    {\n                        //Agrega codigo para activacion de DataTable solamente cuando se tenga un ID de tabla valido\n                        if ($TablasDataTable[$i]!=\"\")\n                            {\n                                $Paginacion=trim($TablasDataTablePaginaciones[$i]);\n                                $ColumnaTotales=trim($TablasDataTableTotales[$i])-1;\n                                $ColumnaTotalesVisual=trim($TablasDataTableTotales[$i]);\n                                $CadenaFormateadaTotales=trim($TablasDataTableFormatosTotales[$i]);\n                                $CadenaExportaCLP=trim($TablasDataTableExportaCLP[$i]); if ($CadenaExportaCLP==\"S\") $CadenaExportaCLP=\'{ extend: \"copy\",    className: \"InformeBotonCopiar\" },\'; else $CadenaExportaCLP=\'\';\n                                $CadenaExportaCSV=trim($TablasDataTableExportaCSV[$i]); if ($CadenaExportaCSV==\"S\") $CadenaExportaCSV=\'{ extend: \"csv\",     className: \"InformeBotonCsv\" },   \'; else $CadenaExportaCSV=\'\';\n                                $CadenaExportaXLS=trim($TablasDataTableExportaXLS[$i]); if ($CadenaExportaXLS==\"S\") $CadenaExportaXLS=\'{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" }, \'; else $CadenaExportaXLS=\'\';\n                                $CadenaExportaPDF=trim($TablasDataTableExportaPDF[$i]); if ($CadenaExportaPDF==\"S\") $CadenaExportaPDF=\'{ extend: \"pdf\",     className: \"InformeBotonPdf\" },   \'; else $CadenaExportaPDF=\'\';\n                                $CadenaPersonalizarColumnas=trim($TablasDataTableDefineCOLS[$i]); if ($CadenaPersonalizarColumnas==\"S\") $CadenaPersonalizarColumnas=\'{ extend: \"colvis\",  text:\"\'.$MULTILANG_Columna.\'(s)\",  className: \"InformeBotonCopiar\" }, \'; else $CadenaPersonalizarColumnas=\'\';\n\n                                //DEFINE CADENAS EN PANELES DE FILTRADO\n                                $CadenaPosicionPanelesArriba=\"\";\n                                $CadenaPosicionPanelesAbajo=\"\";\n                                $Cadena_pane_cascada=\"\";\n                                $Cadena_pane_colapsado=\"\";\n                                $Cadena_pane_columnas=\"\";\n                                $Cadena_pane_subtotalesrelativos=\"\";\n                                $Cadena_pane_conteos=\"\";\n                                $Cadena_pane_controles=\"\";\n                                $Cadena_pane_control_colapsar=\"\";\n                                $Cadena_pane_control_ordenar=\"\";\n                                if ($TablasDataTable_pane_activado[$i]==\"S\") $CadenaPosicionPanelesArriba=\"P\";\n                                if ($TablasDataTable_pane_activado[$i]==\"I\") $CadenaPosicionPanelesAbajo=\"P\";\n                                if ($TablasDataTable_pane_cascada[$i]==\"S\") $Cadena_pane_cascada=\" cascadePanes: true, \";\n                                if ($TablasDataTable_pane_colapsado[$i]==\"S\") $Cadena_pane_colapsado=\" initCollapsed: true, \";\n                                if ($TablasDataTable_pane_columnas[$i]!=\"\") $Cadena_pane_columnas=\' layout: \"columns-\'.$TablasDataTable_pane_columnas[$i].\'\", \';\n                                if ($TablasDataTable_pane_subtotalesrelativos[$i]==\"S\") $Cadena_pane_subtotalesrelativos=\" viewTotal: false, \";\n                                if ($TablasDataTable_pane_conteos[$i]!=\"S\") $Cadena_pane_conteos=\" viewCount: false, \";\n                                if ($TablasDataTable_pane_controles[$i]!=\"S\") $Cadena_pane_controles=\" controls: false, \";\n                                if ($TablasDataTable_pane_control_colapsar[$i]!=\"S\") $Cadena_pane_control_colapsar=\" collapse: false, \";\n                                if ($TablasDataTable_pane_control_ordenar[$i]!=\"S\") $Cadena_pane_control_ordenar=\" orderable: false, \";\n                                $CadenaPanelesFiltrado=\'\n                                            searchPanes:\n                                                {\n                                                    \'.$Cadena_pane_cascada.\'\n                                                    \'.$Cadena_pane_colapsado.\'\n                                                    \'.$Cadena_pane_columnas.\'\n                                                    \'.$Cadena_pane_subtotalesrelativos.\'\n                                                    \'.$Cadena_pane_conteos.\'\n                                                    \'.$Cadena_pane_controles.\'\n                                                    \'.$Cadena_pane_control_colapsar.\'\n                                                    \'.$Cadena_pane_control_ordenar.\'\n                                                },\n                                        \';\n\n/*\nINICIALIZACION CON AJAX\n$(document).ready( function() {\n  var table = $(\'#example\').DataTable({\n    ajax: \'../resources/options.json\',\n    dom: \'Plfrtip\',\n    columns: [\n        { data: \"users.first_name\" },\n        { data: \"users.last_name\" },\n        { data: \"users.phone\" },\n        { data: \"sites.name\" }\n    ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        targets: [0, 1, 2, 3]\n    }],\n  });\n} );\n*/\n\n                                //Realiza operaciones de reemplazo de patrones sobre la cadena de formato de Totales si aplica\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_PAGINA_\",\"\'+pageTotal +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_TOTAL_INFORME_\",\"\'+total +\'\",$CadenaFormateadaTotales);\n                                $CadenaFormateadaTotales=str_replace(\"_COLUMNA_\",\"$ColumnaTotalesVisual\",$CadenaFormateadaTotales);\n        \n                                if ($Paginacion==\"\" || $Paginacion==0) $Paginacion=10;  //Si no hay paginacion personalizada pone 10 por defecto\n\n                                echo \'\n                                    var oTable\'.$i.\' = $(\"#\'.$TablasDataTable[$i].\'\").dataTable(\n                                        {\n                                            destroy: true,   //Habilita autodestruccion de objeto si se necesita reinicializar\n                                            dom: \"\'.$CadenaPosicionPanelesArriba.\'Blfrtip\'.$CadenaPosicionPanelesAbajo.\'\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                            buttons: [\n                                                \'.$CadenaPersonalizarColumnas.\'\n                                                \'.$CadenaExportaCLP.\'\n                                                \'.$CadenaExportaCSV.\'\n                                                \'.$CadenaExportaXLS.\'\n                                                \'.$CadenaExportaPDF.\'\n                                                //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                            ],\n                                            \'.$CadenaPanelesFiltrado.\'\n                                            \"pageLength\": \'.$Paginacion.\',\n                                            //\"responsive\": true, //Opcional, no necesario activarlo si la tabla ya tiene la clase nowrap y responsive (y ya esto se hace en la generacion del informe)\n                                            \"scrollX\": true,\n                                            \"bAutoWidth\": true,\n                                            //\"bSort\": false,\n                                            //\"autoWidth\": true,\n                                            //aoColumns: [ { sWidth: \"45%\" }, { sWidth: \"45%\" }, { sWidth: \"10%\", bSearchable: false, bSortable: false } ],\n                                            //\"aaSorting\": [],  //Un alias a versiones viejas de order:\n                                            \"order\": [],\n                                            \"fnInitComplete\": function() {\n                                            this.fnAdjustColumnSizing(true);\n                                            },\';\n\n                                //Agrega configuraciones especificas para tablas con recuperacion por AJAX\n                                if($TablasDataTableRecuperacionAJAX[$i]==\"1\")\n                                    {\n                                        //Genera la definicion requerida por DT con la lista de columnas \n                                        $ListaCamposDT=explode(\",\",$TablasDataTableColumnas[$i]); //Genera arreglo para los campos\n                                        //FORMA OPCIONAL: Recuperar la lista de columnas directo desde la cache (menos rapido): $ListaCamposDT=explode(\",\",PCO_EjecutarSQL(\"SELECT columnas FROM {$TablasCore}informe_cache WHERE id=\'\".$TablasDataTableIdCache[$i].\"\' \")->fetchColumn());\n                                        $CadenaCamposDT=\"\";\n                                        foreach ($ListaCamposDT as $CampoDT)\n                                            $CadenaCamposDT.=\"{ data: \'{$CampoDT}\' } ,\";\n                                        echo \"\n                                            \'processing\': true,\n                                            \'serverSide\': true,\n                                            \'serverMethod\': \'post\',\n                                            \n                                            \'ajax\': {\n                                                \'url\':\'core/ajax.php?PCO_Accion=PCO_RecuperarRecordsetJSON_DataTable&IdRegistro_CacheSQL=\".$TablasDataTableIdCache[$i].\"&NroFilasBase={$Paginacion}\'\n                                            },\n                                            \n                                            \'columns\': [\n                                                {$CadenaCamposDT}\n                                            ],\n    columnDefs: [{\n        searchPanes: {\n            show: true,\n        },\n        //targets: [7]\n    }],\n                                        \";\n                                    }\n        \n                                //Agrega al datatable el footer con autosuma cuando aplica\n                                if (trim($TablasDataTableTotales[$i])!=\"\" && $CadenaFormateadaTotales!=\"\")\n                                    echo \'\n                                            \"footerCallback\": function ( row, data, start, end, display ) {\n                                                var api = this.api(), data;\n                                                // Remueve el formato de la celda para obtener solamente el numero entero para la suma\n                                                    var intVal = function ( i ) {\n                                                        return typeof i === \\\'string\\\' ?\n                                                            i.replace(/[\\$,]/g, \\\'\\\')*1 :\n                                                            typeof i === \\\'number\\\' ?\n                                                                i : 0;\n                                                    };\n                                                // Total de todas las paginas\n                                                    total = api\n                                                        .column( \'.$ColumnaTotales.\' )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Total de la pagina actual\n                                                    pageTotal = api\n                                                        .column( \'.$ColumnaTotales.\', { page: \\\'current\\\'} )\n                                                        .data()\n                                                        .reduce( function (a, b) {\n                                                            return intVal(a) + intVal(b);\n                                                        }, 0 );\n                                                // Actualiza el pie de pagina del datatable siempre en la columna 0\n                                                $( api.column( 0 ).footer() ).html(\n                                                    \\\'\'.$CadenaFormateadaTotales.\'\\\'\n                                                );\n                                            },\';\n                                echo \'\n                                            \"language\": {\n                                                    \"lengthMenu\": \"\'.$MULTILANG_Mostrando.\' _MENU_ \'.$MULTILANG_InfDataTableResXPag.\'\",\n                                                    \"zeroRecords\": \"Nothing found - sorry\",\n                                                    \"info\": \"\'.$MULTILANG_InfDataTableViendoP.\' _PAGE_ \'.$MULTILANG_InfDataTableDe.\' _PAGES_\",\n                                                    \"infoEmpty\": \"\'.$MULTILANG_InfDataTableNoRegistrosDisponibles.\'\",\n                                                    \"infoFiltered\": \"(\'.$MULTILANG_InfDataTableFiltradoDe.\' _MAX_ \'.$MULTILANG_InfDataTableRegTotal.\')\",\n                                                    oPaginate: { sFirst:\"\'.$MULTILANG_Primero.\'\",sLast:\"\'.$MULTILANG_Ultimo.\'\",sNext:\"\'.$MULTILANG_Siguiente.\'\",sPrevious:\"\'.$MULTILANG_Previo.\'\" },\n                                                    sEmptyTable:\"\'.$MULTILANG_InfDataTableNoDatos.\'\",\n                                                    sSearch:\"\'.$MULTILANG_Buscar.\':\",\n                                                    sLoadingRecords:\"\'.$MULTILANG_Cargando.\'...\",\n                                                    sProcessing:\"\'.$MULTILANG_Procesando.\'...\",\n                                                    sZeroRecords:\"\'.$MULTILANG_InfDataTableNoRegistros.\'\",\n\n                                                    searchPanes: {\n                                                            title: {\n                                                                _: \"Filtros aplicados: %d\",\n                                                                0: \"Sin filtros aplicados\",\n                                                                1: \"Un filtro aplicado\",\n                                                            },\n                                                            collapse: {\n                                                                0: \"Opciones de filtro\",\n                                                                1: \"Filtro (uno aplicado)\",\n                                                                _: \"Opciones de filtro (%d)\"\n                                                            },\n                                                            collapseMessage: \"Colapsar todo\",\n                                                            showMessage: \"Mostrar todo\",\n                                                            clearMessage: \"Quitar filtros\",\n                                                            count: \"{total}\",\n                                                            countFiltered: \"{shown} / ({total})\"\n                                                        }\n                                                }\n                                        }\n                                    );\n                                \';\n                            } //Fin si hay un ID valido de DataTable\n                    } //Fin activacion de todas las DT\n            ?>\n            \n            //Ejecucion de algunas funciones para correcion de estilos y responsive sobre datatables\n            //Ref: https://www.gyrocode.com/articles/jquery-datatables-column-width-issues-with-bootstrap-tabs/\n            $(\'a[data-toggle=\"tab\"]\').on(\'shown.bs.tab\', function(e){\n               $($.fn.dataTable.tables(true)).DataTable()\n                  .columns.adjust();\n            });\n        });\n\n        //Busca por posibles graficos sin datos\n        $( function() {\n            <?php\n                //Desglosa la cadena de posibles graficos sin datos\n                $PCO_MarcosGraficosSinDatos=@explode(\"|\",$PCO_InformesGraficosSinDatos);\n                for ($i=0; $i<count($PCO_MarcosGraficosSinDatos);$i++)\n                    if (trim($PCO_MarcosGraficosSinDatos[$i])!=\"\")\n                        echo \'$(\"#\'.$PCO_MarcosGraficosSinDatos[$i].\'\").html(\"<br><div align=center style=\\\'color:lightgray; text-shadow: 1px 1px 2px gray;\\\'><i class=\\\'fa fa-bar-chart-o fa-fw fa-4x\\\'></i> &nbsp; <i class=\\\'fa fa-pie-chart fa-fw fa-4x\\\'></i><br><i>\'.$MULTILANG_InfSinDatos.\'</i></div>\");\';\n            ?>\n        });\n\n		//Si hay tablas con propiedad de editables espera por eventos sobre sus campos\n		$(function(){\n			$(\"td[contenteditable=true]\").on(\"blur\", function(){\n			//$(\"td[contenteditable=true]\").blur( function(){\n				var nuevo_valor_campo = $(this).text();\n				var datos_campo_peticion = $(this).attr(\"id\");\n				var partes_campo_peticion = datos_campo_peticion.split(\":\");\n				var tabla_peticion=partes_campo_peticion[0];\n				var campo_peticion=partes_campo_peticion[1];\n				var PCO_CambioEstado_CampoLlave=partes_campo_peticion[2];\n				var id_peticion=partes_campo_peticion[3];\n				\n				var ParametrosApertura=\"PCO_Accion=cambiar_estado_campo&Presentar_FullScreen=1&PCO_CambioEstado_NoUsarCore=1&PCO_CambioEstado_NegarRetorno=1&tabla=\"+tabla_peticion+\"&campo=\"+campo_peticion+\"&id=\"+id_peticion+\"&valor=\"+nuevo_valor_campo+\"&PCO_CambioEstado_CampoLlave=\"+PCO_CambioEstado_CampoLlave;\n				Actualizacion=PCO_ObtenerContenidoAjax(1,\"index.php\",ParametrosApertura);\n				\n				//Presenta mensaje temporal de actualizacion durante 1 segundo\n				PCOJS_MostrarMensajeCargandoSimple(1000);\n			});\n		});\n\n    </script>\n\n\n    <?php\n        //Carga las funciones activadoras de diferentes tipos de control (si fue encontrado algun campo de ese tipo)\n        //DatePicker\n        if (@$funciones_activacion_datepickers!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_datepickers.\'</script>\';\n        //Deslizadores\n        if (@$funciones_activacion_sliders!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_sliders.\'</script>\';\n        //Canvas\n        if (@$funciones_activacion_canvas!=\"\")\n            echo \'<script type=\"text/javascript\">\'.$funciones_activacion_canvas.\'</script>\';\n    ?>\n\n    <?php\n        // Calcula tiempos de ejecucion del script\n        $tiempo_final_script = PCO_ObtenerMicrotime();\n        $tiempo_total_script = $tiempo_final_script - @$tiempo_inicio_script;\n        $tiempo_total_script = round($tiempo_total_script,3);\n    ?>\n\n    <script language=\"JavaScript\">\n        //Actualiza marco con el tiempo de carga (inclusiones y PHP del lado del servidor)\n        $(\'#PCO_TCarga\').text(\"<?php echo $tiempo_total_script; ?>\");\n    </script>\n\n    <?php\n        //Si se requiere selector de iconos genera los eventos\n        if (@$PCO_Accion==\"PCOFUNC_AdministrarMenu\")\n            {\n    ?>\n        <script language=\"JavaScript\">\n            //Crea evento para el selector de iconos (cuando aplica)\n            $(\'#lib_glyphicon\').iconpicker().on(\'change\',   (e) => { document.PCO_FormItemMenu.imagen.value=\'glyphicon \'+e.icon; });\n            $(\'#lib_ionicon\').iconpicker().on(\'change\',     (e) => { document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon; });\n            $(\'#lib_fontawesome\').iconpicker().on(\'change\', (e) => { document.PCO_FormItemMenu.imagen.value=\'fa \'+e.icon; });\n            $(\'#lib_weathericon\').iconpicker().on(\'change\', (e) => { document.PCO_FormItemMenu.imagen.value=\'wi fa \'+e.icon; });\n            $(\'#lib_mapicon\').iconpicker().on(\'change\',     (e) => { document.PCO_FormItemMenu.imagen.value=e.icon; });\n            $(\'#lib_octicon\').iconpicker().on(\'change\',     (e) => { document.PCO_FormItemMenu.imagen.value=\'octicon \'+e.icon; });\n            $(\'#lib_typicon\').iconpicker().on(\'change\',     (e) => { document.PCO_FormItemMenu.imagen.value=\'typcn fa \'+e.icon; });\n            $(\'#lib_elusiveicon\').iconpicker().on(\'change\', (e) => { document.PCO_FormItemMenu.imagen.value=e.icon; });\n        </script>\n    <?php\n            } //Fin de eventos para selector de iconos\n\n        // Si existe el directorio para el editor ACE lo incluye\n        if (@file_exists(\"inc/ace\"))\n            {\n    ?>\n            <script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n            <script>\n                // Habilita el editor ACE para los textareas con el atributo data-editor\n                $(function () {\n                    $(\'textarea[data-editor]\').each(function () {\n                        const textarea = $(this);\n\n                        const mode = textarea.data(\'editor\');\n\n                        const editDiv = $(\'<div>\', {\n                            position: \'absolute\',\n                            width: textarea.width(),\n                            height: textarea.height(),\n                            \'class\': textarea.attr(\'class\')\n                        }).insertBefore(textarea);\n\n                        textarea.css(\'visibility\', \'hidden\');\n                        textarea.css(\'display\', \'none\');\n\n                        const editor = ace.edit(editDiv[0]);\n                        //editor.renderer.setShowGutter(false); //Ocultar numero de lineas, ayudas, opciones de colapsar, etc\n                        editor.getSession().setValue(textarea.val());\n                        editor.getSession().setMode(\"ace/mode/\" + mode);\n                        editor.setTheme(\"ace/theme/eclipse\"); //Establece el tema a utilizar twilight|eclipse\n                        \n                        /*\n                        // copy back to textarea on form submit...\n                        textarea.closest(\'form\').submit(function () {\n                            textarea.val(editor.getSession().getValue());\n                        })\n                        */\n\n                        //En cada evento de cambio actualiza el textarea\n                        editor.getSession().on(\'change\', function(){\n                          textarea.val(editor.getSession().getValue());\n                        });\n                        \n                    });\n                });\n            </script>\n    <?php        \n            } // Fin Si existe ACE\n    ?>\n	\n    <script language=\"JavaScript\">\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $( function() {\n            <?php\n				//Activa el summernote para la edicion de controles de texto como etiqueta en formularios si se esta en esa accion\n				if ($PCO_Accion==\"PCO_EditarFormulario\")\n					{\n						echo \"\n							$(\'#Summer_valor_etiqueta\').summernote({\n							lang: \'es-ES\',\n							  height: 300,\n							  toolbar: [\n								[\'Estilos\', [\'style\']],\n								[\'Fuentes1\', [\'fontname\']],\n								[\'Fuentes2\', [\'fontsize\']],\n								[\'Operaciones\', [\'undo\', \'redo\']],\n								[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n								[\'Parrafo1\', [\'ul\', \'ol\']],\n								[\'Parrafo2\', [\'paragraph\']],\n								[\'Parrafo3\', [\'height\']],\n								[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n								[\'Otros\', [\'fullscreen\', \'codeview\']], \n								[\'Insertar2\', [\'picture\', \'video\']],\n								],\n							  //ANTERIORonChange: function(contents) { document.datosform.valor_etiqueta.value=contents; }\n                              callbacks: {\n                                onChange: function(contents) {\n                                   document.datosform.valor_etiqueta.value=contents;\n                                }\n                              }\n							});\n							//ANTERIOR$(\'#Summer_valor_etiqueta\').code(document.datosform.valor_etiqueta.value);\n							$(\'#Summer_valor_etiqueta\').summernote(\'code\',document.datosform.valor_etiqueta.value);\n						\";\n					}\n            ?>\n        }); //Fin del document.ready\n    </script>\n\n    <!-- Menu Toggle Script -->\n    <script language=\"JavaScript\">\n    $(\"#menu-toggle\").on(\"click\",function(e) {\n        e.preventDefault();\n        $(\"#wrapper\").toggleClass(\"toggled\");\n    });\n    </script>\n\n    <script language=\"JavaScript\">\n		/*\n		//Activa visualmente todos los div tipo SummerNote y los asocia a cada textarea\n        $(document).ready(function() {\n			$(\'#Summer_valor_etiqueta\').summernote({\n			lang: \'es-ES\',\n			  height: 300,\n			  toolbar: [\n				[\'Estilos\', [\'style\']],\n				[\'Fuentes1\', [\'fontname\']],\n				[\'Fuentes2\', [\'fontsize\']],\n				[\'Operaciones\', [\'undo\', \'redo\']],\n				[\'Caracter\', [\'bold\', \'italic\', \'underline\', \'strikethrough\', \'clear\', \'color\']],\n				[\'Parrafo1\', [\'ul\', \'ol\']],\n				[\'Parrafo2\', [\'paragraph\']],\n				[\'Parrafo3\', [\'height\']],\n				[\'Insertar1\', [\'link\', \'table\', \'hr\']],\n				[\'Otros\', [\'fullscreen\', \'codeview\']], \n				[\'Insertar2\', [\'picture\', \'video\']],\n				],\n\n			  onChange: function(contents) { document.datos.valor_etiqueta.value=contents; }\n			});\n			$(\'#Summer_valor_etiqueta\').code(document.datos.valor_etiqueta.value);\n        }); //Fin del document.ready\n        */\n    </script>\n\n	<?php\n        //Agrega funcion para la intercepcion del submit del formulario\n        echo \'\n        <script type=\"text/javascript\">\n            PCOJS_ListaCamposValidar=\"\'.$POSTForm_ListaCamposObligatorios.\'\".split(\"|\");\n            PCOJS_ListaCombosMultiplesJoin=\"\'.@$PCO_ListaCombosMultiplesJoin.\'\".split(\"|\");\n            PCOJS_ListaTitulosValidar=\"\'.PCO_ReemplazarVariablesPHPEnCadena($POSTForm_ListaTitulosObligatorios).\'\".split(\"|\");\n            \n            function PCOJS_SanitizarValoresListaMultiple()\n                {\n                    //Antes de hacer el submit definitivo sanitiza valores de combos multiples\n                    for (ComboMultiple of PCOJS_ListaCombosMultiplesJoin) \n                        {\n                            ComboMultiple=ComboMultiple.trim();             //Elimina posibles espacios en el id del elemento\n                            if (ComboMultiple!=\"\")\n                                {\n                                    ValorComboMultiple=$(\"#\"+ComboMultiple).val();\n                                    if (ValorComboMultiple!=null)\n                                        {\n                                            ValorSanitizadoComboMultiple=$(\"#\"+ComboMultiple).val().join(\",\");\n                                            //Asigna al campo extra del combo multiple los valores sanitizados\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(ValorSanitizadoComboMultiple);\n                                        }\n                                    else\n                                        {\n                                            //Si el combo es null porque se dejo sin valores entonces limpia campo sanitizado\n                                            $(\"#PCO_ComboMultiple_\"+ComboMultiple).val(\"\");\n                                        }\n                                }\n                        }\n                }\n            \n            \n            function PCOJS_ValidarCamposYProcesarFormulario(FormularioProcesar=\"datos\",AnularSubmit=0)\n                {\n                    MensajeCamposObligatorios=\"\";\n                    //Recorre todos los campos de la lista en busca de sus valores\n                    ConteoCamposValidacion=0;\n                    for (Campo in PCOJS_ListaCamposValidar)\n                        {\n                            //Si se tiene un nombre de campo como obligatorio valida que tenga valor\n                            if (PCOJS_ListaCamposValidar[Campo]!=\"\")\n                                {\n                                    //Valida su valor actual\n                                    if ($(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == \"\" || $(\"#\"+PCOJS_ListaCamposValidar[Campo]).val() == null )\n                                        MensajeCamposObligatorios+=\"<br><i class=\\\'fa fa-info-circle\\\'></i> \'.$MULTILANG_ErrFrmObligatorio.\' <b>\"+PCOJS_ListaTitulosValidar[ConteoCamposValidacion]+\"</b>\";\n                                }\n                            ConteoCamposValidacion++;\n                        }\n                    // Valida si hay errores y muestra el emerente, sino continua adelante y procesa el form\n                    if (MensajeCamposObligatorios!=\"\")\n                        PCOJS_MostrarMensaje(\"\'.$MULTILANG_AvisoSistema.\'\", MensajeCamposObligatorios);\n                    else\n                        {\n                            if (AnularSubmit==0)\n                                {\n                                    PCOJS_SanitizarValoresListaMultiple();\n                                    //Hace el envio del formulario\n                                    document.getElementById(FormularioProcesar).submit();\n                                }\n                        }\n                }\n        </script> \';\n\n		//Si existen funciones JavaScript generadas por algun formulario del usuario entonces las imprime\n		if(@$PCO_FuncionesJSInternasFORM!=\"\")\n			echo $PCO_FuncionesJSInternasFORM;\n\n        //Agrega funcion para verificar periodicamente la conectividad del cliente\n        if (@$PCOSESS_SesionAbierta)\n            echo \'\n            <script type=\"text/javascript\">\n                function VerificarConectividad()\n                    {\n                        $.ajax({\n                            url: \"inc/version_actual.txt\",\n                            cache: false\n                        })\n                        .done(function( contenido_respuesta_html ) {\n                            $(\"#PCO_Modal_MensajeCargando\").modal(\"hide\");\n                        });\n                    }\n                var ValidadorConexion = setInterval(VerificarConectividad, 5000);\n                $(document).ajaxError(function(){\n                    if (window.console && window.console.error) {\n                        PCOJS_MostrarMensajeCargando(\"\'.$MULTILANG_EventoTipoInternet.\'\", \" <i class=\\\"fa fa-4x fa-globe fa-pull-left fa-border \\\"></i>\'.$MULTILANG_ErrorConexionInternet.\'\", 0, 100);\n                    }\n                });\n            </script> \';\n\n	    //Carga tema de MaterialDesign cuando aplica\n        if ($Tema_PracticoFramework==\"material\")\n            {\n                echo \'\n                    <script src=\"inc/bootstrap-material-design/js/material.min.js\"></script>\n                    <script src=\"inc/bootstrap-material-design/js/ripples.min.js\"></script>\n                \n                    <script language=\"JavaScript\">\n                        $.material.init();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion de ubicar al usuario de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionGPS==\"1\")\n            {\n                echo \'<script language=\"JavaScript\">\n                        PCOJS.GeoLocalizarUsuario();\n                    </script>\';\n            }\n\n	    //Solicita autorizacion para uso de camara y microfono de acuerdo a la configuracion actual\n        if ($PWA_AutorizacionCAM==\"1\" || $PWA_AutorizacionMIC==\"1\")\n            {\n                $PCO_SolicitudCAMf = $PWA_AutorizacionCAM==1 ? \'true\' : \'false\';\n                $PCO_SolicitudMIC = $PWA_AutorizacionMIC==1 ? \'true\' : \'false\';\n                echo \'<script language=\"JavaScript\">\n                        navigator.getUserMedia = ( navigator.getUserMedia ||\n                                               navigator.webkitGetUserMedia ||\n                                               navigator.mozGetUserMedia ||\n                                               navigator.msGetUserMedia);\n                        navigator.getUserMedia (\n\n                           // Indica el tipo de medio al que se solicita el acceso\n                               {\n                                  video: \'.$PCO_SolicitudCAM.\',\n                                  audio: \'.$PCO_SolicitudMIC.\'\n                               },\n                           // Si no hay error, es devuelto en el objeto LocalMediaStream en un tag video:\n                               function(localMediaStream) {\n                                  const  video = document.querySelector(video);\n                                  video.src = window.URL.createObjectURL(localMediaStream);\n                               },\n                           // Si hay errores lleva log a consola de depuracion\n                               function(err) {\n                                console.log(\"Practico Framework: No autorizado el uso de dispositivo de video/audio: \" + err);\n                               }\n                        );\n                    </script>\';\n            }\n\n        // Estadisticas de uso anonimo con GABeacon(Deprecated) Directo por Google Analytics\n        PCO_AgregarFaroAnalytics();\n    ?>\n\n    <script language=\"JavaScript\">\n        //Limpia parametros de la URL si aplica\n        if(window.location.href.indexOf(\"?\") > -1)\n            window.history.pushState({data:true}, \"\", window.location.href.split(\"?\")[0].split(\"index.php\")[0] );\n\n        <?php\n            //Agrega scripts de postcarga para listas de seleccion si aplica\n            echo $PCO_ScriptsListaCombosPostCarga;\n        ?>\n\n        //Actualiza marco con el tiempo de carga JavaScript (tiempo de carga y transferencia)\n        const tiempo_final_javascript = (new Date()).getTime();\n        const tiempo_final_javascript_segs = (tiempo_final_javascript-tiempo_inicio_javascript)/1000;\n        $(\'#PCO_TCargaJS\').text(tiempo_final_javascript_segs);\n\n        //Mensajes de advertencia en consola de desarrollo del navegador\n        console.log(\'%c Practico Framework: <?php echo $MULTILANG_ZonaPeligro; ?>! %c\\nEsta caracteristica del navegador existe para desarrolladores.  Si alguien te sugiere copiar y pegar algun comando aqui puede comprometer tu seguridad. / This is a browser feature intended for developers. If someone told you to copy-paste something here this could break your security.\', \'color: yellow; background: darkred; font-size:1.5rem;font-weight:bold; box-shadow: 10px 3px 3px gray;\', \'font-size:1.25rem;line-height:1.1;margin-top:.5em\');\n\n    </script>\n\n</body>\n</html>','A'),