
--
-- Table structure for table `core_bugtracker`
--

CREATE TABLE `core_bugtracker` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `fecha_apertura` datetime DEFAULT NULL,
  `fecha_actualizacion` datetime DEFAULT NULL,
  `fecha_cierre` datetime DEFAULT NULL,
  `proyecto` varchar(255) DEFAULT NULL,
  `proyecto_version` varchar(30) DEFAULT NULL,
  `titulo` varchar(255) DEFAULT NULL,
  `descripcion` text DEFAULT NULL,
  `categoria` varchar(255) DEFAULT NULL,
  `estado` varchar(20) DEFAULT NULL,
  `severidad` varchar(20) DEFAULT NULL,
  `prioridad` varchar(20) DEFAULT NULL,
  `reportado_por` varchar(250) DEFAULT NULL,
  `asignado_a` varchar(250) DEFAULT NULL,
  `pasos_reproduccion` text DEFAULT NULL,
  `sistema_origen` varchar(255) DEFAULT NULL,
  `trazas` text DEFAULT NULL,
  `adjunto` longblob DEFAULT NULL,
  `historial_gestion` text DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `core_bugtracker`
--


--
-- Table structure for table `core_chat`
--

CREATE TABLE `core_chat` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `remitente` varchar(255) NOT NULL DEFAULT '',
  `destinatario` varchar(255) NOT NULL DEFAULT '',
  `message` text NOT NULL,
  `sent` datetime DEFAULT NULL,
  `recd` int(10) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `destinatario` (`destinatario`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `core_chat`
--

INSERT INTO `core_chat` VALUES (1,'edwin','admin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-03-08 18:53:00',0),(2,'edwin','admin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-03-08 19:13:00',0),(3,'admin','edwin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-03-22 17:19:00',0),(4,'rafael','edwin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-04-17 19:10:00',0),(5,'rafael','edwin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-04-17 19:16:00',0),(6,'rafael','edwin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-04-17 19:17:00',0),(7,'admin','rafael','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-06-27 09:04:00',0),(8,'rafael','admin','He intentado abrir el archivo mod/app_facturas/pdf_factura_descargar_tarifa_dinamica.php pero se encuentra bloqueado por ti (mensaje automatico)','2023-08-02 12:19:00',0);

--
-- Table structure for table `core_evento_inventario`
--

CREATE TABLE `core_evento_inventario` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `evento` varchar(250) DEFAULT '',
  `categoria` varchar(250) DEFAULT '',
  `descripcion` varchar(250) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=95 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `core_evento_inventario`
--

INSERT INTO `core_evento_inventario` VALUES (1,'onclick','01. Raton (Mouse)','$MULTILANG_EventoClick'),(2,'ondblclick','01. Raton (Mouse)','$MULTILANG_EventoDobleClick'),(3,'onmousedown','01. Raton (Mouse)','$MULTILANG_EventoMouseDown'),(4,'onmouseenter','01. Raton (Mouse)','$MULTILANG_EventoMouseEnter'),(5,'onmouseleave','01. Raton (Mouse)','$MULTILANG_EventoMouseLeave'),(6,'onmousemove','01. Raton (Mouse)','$MULTILANG_EventoMouseMove'),(7,'onmouseover','01. Raton (Mouse)','$MULTILANG_EventoMouseOver'),(8,'onmouseout','01. Raton (Mouse)','$MULTILANG_EventoMouseOut'),(9,'onmouseup','01. Raton (Mouse)','$MULTILANG_EventoMouseUp'),(10,'contextmenu','01. Raton (Mouse)','$MULTILANG_EventoContextMenu'),(11,'onkeydown','02. Teclado (Keyboard)','$MULTILANG_EventoKeyDown'),(12,'onkeypress','02. Teclado (Keyboard)','$MULTILANG_EventoKeyPress'),(13,'onkeyup','02. Teclado (Keyboard)','$MULTILANG_EventoKeyUp'),(14,'onfocus','03. Formularios (Forms)','$MULTILANG_EventoFocus'),(15,'onblur','03. Formularios (Forms)','$MULTILANG_EventoBlur'),(16,'onchange','03. Formularios (Forms)','$MULTILANG_EventoChange'),(17,'onselect','03. Formularios (Forms)','$MULTILANG_EventoSelect'),(18,'onsubmit','03. Formularios (Forms)','$MULTILANG_EventoSubmit'),(19,'onreset','03. Formularios (Forms)','$MULTILANG_EventoReset'),(20,'oncut','03. Formularios (Forms)','$MULTILANG_EventoCut'),(21,'oncopy','03. Formularios (Forms)','$MULTILANG_EventoCopy'),(22,'onpaste','03. Formularios (Forms)','$MULTILANG_EventoPaste'),(23,'onload','04. Ventanas y Marcos (Windows & Frames)','$MULTILANG_EventoLoad'),(24,'onunload','04. Ventanas y Marcos (Windows & Frames)','$MULTILANG_EventoUnload'),(25,'onresize','04. Ventanas y Marcos (Windows & Frames)','$MULTILANG_EventoResize'),(26,'onclose','04. Ventanas y Marcos (Windows & Frames)','$MULTILANG_EventoClose'),(27,'onscroll','04. Ventanas y Marcos (Windows & Frames)','$MULTILANG_EventoScroll'),(28,'animationend','05. Animaciones y Transiciones','$MULTILANG_EventoAnimFin'),(29,'animationiteration','05. Animaciones y Transiciones','$MULTILANG_EventoAnimIteracion'),(30,'animationstart','05. Animaciones y Transiciones','$MULTILANG_EventoAnimInicio'),(31,'beginEvent','05. Animaciones y Transiciones',''),(32,'endEvent','05. Animaciones y Transiciones',''),(33,'repeatEvent','05. Animaciones y Transiciones',''),(34,'transitionend','05. Animaciones y Transiciones',''),(35,'chargingchange','06. Bateria y carga (Battery & charge)',''),(36,'chargingtimechange','06. Bateria y carga (Battery & charge)',''),(37,'dischargingtimechange','06. Bateria y carga (Battery & charge)',''),(38,'levelchange','06. Bateria y carga (Battery & charge)',''),(39,'alerting','07. Llamadas y Telefonia (Calls)',''),(40,'busy','07. Llamadas y Telefonia (Calls)',''),(41,'callschanged','07. Llamadas y Telefonia (Calls)',''),(42,'connected','07. Llamadas y Telefonia (Calls)',''),(43,'connecting','07. Llamadas y Telefonia (Calls)',''),(44,'dialing','07. Llamadas y Telefonia (Calls)',''),(45,'disconnected','07. Llamadas y Telefonia (Calls)',''),(46,'disconnecting','07. Llamadas y Telefonia (Calls)',''),(47,'error','07. Llamadas y Telefonia (Calls)',''),(48,'held','07. Llamadas y Telefonia (Calls)',''),(49,'holding','07. Llamadas y Telefonia (Calls)',''),(50,'incoming','07. Llamadas y Telefonia (Calls)',''),(51,'resuming','07. Llamadas y Telefonia (Calls)',''),(52,'statechange','07. Llamadas y Telefonia (Calls)',''),(53,'DOMAttrModified','08. Cambios DOM (DOM changes)',''),(54,'DOMCharacterDataModified','08. Cambios DOM (DOM changes)',''),(55,'DOMContentLoaded','08. Cambios DOM (DOM changes)',''),(56,'DOMElementNameChanged','08. Cambios DOM (DOM changes)',''),(57,'DOMNodeInserted','08. Cambios DOM (DOM changes)',''),(58,'DOMNodeInsertedIntoDocument','08. Cambios DOM (DOM changes)',''),(59,'DOMNodeRemoved','08. Cambios DOM (DOM changes)',''),(60,'DOMNodeRemovedFromDocument','08. Cambios DOM (DOM changes)',''),(61,'DOMSubtreeModified','08. Cambios DOM (DOM changes)',''),(62,'drag','09. Arrastre de elementos (Drag&Drop)',''),(63,'dragend','09. Arrastre de elementos (Drag&Drop)',''),(64,'dragenter','09. Arrastre de elementos (Drag&Drop)',''),(65,'dragleave','09. Arrastre de elementos (Drag&Drop)',''),(66,'dragover','09. Arrastre de elementos (Drag&Drop)',''),(67,'dragstart','09. Arrastre de elementos (Drag&Drop)',''),(68,'drop','09. Arrastre de elementos (Drag&Drop)',''),(69,'audioprocess','10. Audio & Video',''),(70,'canplay','10. Audio & Video',''),(71,'canplaythrough','10. Audio & Video',''),(72,'durationchange','10. Audio & Video',''),(73,'emptied','10. Audio & Video',''),(74,'ended','10. Audio & Video',''),(75,'loadeddata','10. Audio & Video',''),(76,'loadedmetadata','10. Audio & Video',''),(77,'pause','10. Audio & Video',''),(78,'play','10. Audio & Video',''),(79,'playing','10. Audio & Video',''),(80,'ratechange','10. Audio & Video',''),(81,'seeked','10. Audio & Video',''),(82,'seeking','10. Audio & Video',''),(83,'stalled','10. Audio & Video',''),(84,'suspend','10. Audio & Video',''),(85,'timeupdate','10. Audio & Video',''),(86,'volumechange','10. Audio & Video',''),(87,'waiting','10. Audio & Video',''),(88,'complete','10. Audio & Video',''),(89,'disabled','11. Conexion a Internet',''),(90,'enabled','11. Conexion a Internet',''),(91,'onoffline','11. Conexion a Internet',''),(92,'ononline','11. Conexion a Internet',''),(93,'statuschange','11. Conexion a Internet',''),(94,'connectionInfoUpdate','11. Conexion a Internet','');

--
-- Table structure for table `core_evento_objeto`
--

CREATE TABLE `core_evento_objeto` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `objeto` int(10) DEFAULT NULL,
  `evento` varchar(250) DEFAULT '',
  `javascript` text DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=191 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `core_evento_objeto`
--

INSERT INTO `core_evento_objeto` VALUES (145,3448,'onchange','ConstruirPlantillaCron();'),(171,3618,'onchange','GenerarCodigoCorto();'),(173,3646,'onchange','PCOJS_ActualizarCamposHijos();\r\n'),(172,3642,'onchange','PCOJS_ActualizarCamposVisibles();'),(177,3767,'onchange','AlternarCamposVisibles_DataTables();'),(178,3806,'onchange','//Valida caracteristicas del adjunto\r\nvar TamanoMaximoPermitido=250000;\r\nvar ArchivoSeleccionado=this.files[0];\r\nExtensionArchivo=ArchivoSeleccionado.name.split(\'.\').pop().toUpperCase();\r\nTamanoArchivo=ArchivoSeleccionado.size||ArchivoSeleccionado.fileSize;\r\n\r\nif( ExtensionArchivo!=\"GIF\" && ExtensionArchivo!=\"PNG\" && ExtensionArchivo!=\"JPG\" && ExtensionArchivo!=\"JPEG\" )\r\n    {\r\n        PCOJS_MostrarMensaje(\"Atención - Atención - Atención\", \"El archivo seleccionado tiene un formato no válido (JPG,GIF,PNG).<br><br>This file doesnt have a valid format (JPG,GIF,PNG)</b></font>\");\r\n        document.FrmEdicionPerfil.avatar.value=\"\";\r\n        return;\r\n    }\r\n\r\nif(TamanoArchivo > TamanoMaximoPermitido)\r\n    {\r\n        PCOJS_MostrarMensaje(\"Atención - Atención - Atención\", \"El archivo seleccionado supera el limite permitido de 250KB.  Si usted continua es probable que el archivo no sea adjuntado al sistema. <hr> <font color=red><b>Se recomienda encarecidamente disminuir el tamaño del archivo con herramientas como tinypng.com e intentar nuevamente.</b></font>\");\r\n	    document.FrmEdicionPerfil.avatar.value=\"\";\r\n	    return;\r\n    }\r\n'),(188,4241,'onchange','document.datosbug.accion_realizada.value+=\" Severidad/Severity \"+document.datosbug.severidad.value+\",\";\r\n'),(187,4240,'onchange','document.datosbug.accion_realizada.value+=\" Prioridad/Priority \"+document.datosbug.prioridad.value+\",\";\r\n'),(186,4239,'onchange','document.datosbug.accion_realizada.value+=\" Categoria/Category \"+document.datosbug.categoria.value+\",\";\r\n'),(185,4238,'onchange','document.datosbug.accion_realizada.value+=\" Estado/Status \"+document.datosbug.estado.value+\",\";\r\n'),(184,4236,'onchange','document.datosbug.accion_realizada.value+=\" Asignado a/Assigned to \"+document.datosbug.asignado_a.value+\",\";\r\n\r\n'),(144,3368,'onchange','onchangeComprobante();'),(143,3363,'onchange',' \r\nif($(\'#id\').val() !=\"\") {\r\n    //event.preventDefault();\r\n}'),(49,1610,'onchange','//onchangeMesCrearFactura();\r\nobtenerFacturaCliente();'),(48,1609,'onchange','onchangeComprobante();'),(47,1606,'onchange','onchangeUsuario();\r\n//obtenerFacturaCliente();'),(147,3521,'onchange','ActualizarFormatoFull();'),(148,3532,'onchange','AlternarCamposVisibles_PaneFilter();'),(175,3722,'onkeyup','muestra_seguridad_clave(this.value, this.form);'),(181,3887,'onchange','//Actualiza el valor de la lista de estados si el valor aqui es marcado como 100.  Caso contrario la pone como en progreso.\r\nValorListaEstado=this.value;\r\nif (ValorListaEstado==\"Finalizado\")    $(\'#porcentaje\').selectpicker(\'val\', \"100\"); \r\n'),(179,3874,'onchange','ValorPlantilla=$(\"#plantilla\").val();\r\n$(\"#descripcion\").val(ValorPlantilla.replace(/BR/g,\'\\n\'));'),(180,3884,'onchange','//Actualiza el valor de la lista de estados si el valor aqui es marcado como 100.  Caso contrario la pone como en progreso.\r\nValorListaProgreso=this.value;\r\nif (ValorListaProgreso==\"100\")\r\n    $(\'#estado_general\').selectpicker(\'val\', \"Finalizado\"); \r\nelse\r\n    if (ValorListaProgreso==\"0\")\r\n        $(\'#estado_general\').selectpicker(\'val\', \"Aceptado\"); \r\n    else\r\n        $(\'#estado_general\').selectpicker(\'val\', \"EnProgreso\"); \r\n'),(183,3905,'onfocus','blur();'),(50,1612,'onchange','obtenerFacturaCliente();'),(182,3904,'onkeyup','muestra_seguridad_clave(this.value, this.form);'),(167,3568,'onmousemove','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(166,3567,'oncut','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(165,3566,'onkeyup','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(164,3565,'onmouseleave','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(163,3564,'onsubmit','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(162,3563,'onselect','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(161,3562,'onkeypress','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(160,3561,'contextmenu','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(159,3560,'onmouseenter','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(158,3559,'onchange','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(157,3558,'onmouseup','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(156,3557,'onmousedown','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(155,3556,'onblur','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(154,3555,'onmouseout','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(153,3554,'ondblclick','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(152,3553,'onfocus','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(146,3513,'onchange','//Valida caracteristicas del adjunto\r\nvar TamanoMaximoPermitido=250000;\r\nvar ArchivoSeleccionado=this.files[0];\r\nExtensionArchivo=ArchivoSeleccionado.name.split(\'.\').pop().toUpperCase();\r\nTamanoArchivo=ArchivoSeleccionado.size||ArchivoSeleccionado.fileSize;\r\n\r\nif( ExtensionArchivo!=\"GIF\" && ExtensionArchivo!=\"PNG\" && ExtensionArchivo!=\"JPG\" && ExtensionArchivo!=\"JPEG\" )\r\n    {\r\n        PCOJS_MostrarMensaje(\"Atención - Atención - Atención\", \"El archivo seleccionado tiene un formato no válido (JPG,GIF,PNG).<br><br>This file doesnt have a valid format (JPG,GIF,PNG)</b></font>\");\r\n        document.datos.ruta_logo.value=\"\";\r\n        return;\r\n    }\r\n\r\nif(TamanoArchivo > TamanoMaximoPermitido)\r\n    {\r\n        PCOJS_MostrarMensaje(\"Atención - Atención - Atención\", \"El archivo seleccionado supera el limite permitido de 250KB.  Si usted continua es probable que el archivo no sea adjuntado al sistema. <hr> <font color=red><b>Se recomienda encarecidamente disminuir el tamaño del archivo con herramientas como tinypng.com e intentar nuevamente.</b></font>\");\r\n	    document.datos.ruta_logo.value=\"\";\r\n	    return;\r\n    }\r\n'),(151,3552,'onkeydown','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(150,3551,'onmouseover','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(149,3550,'onclick','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(174,3719,'onchange','ValidarUsuarioPlantilla();'),(168,3569,'oncopy','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(169,3570,'onpaste','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(170,3571,'onreset','PCOJS_MostrarMensaje(\"Evento lanzado\",\"Campo: \"+this.name+\"<br>Valor: \"+this.value);'),(176,3724,'onfocus','blur();'),(189,3315,'onchange','onchangeVerificarLecturaContador();'),(190,3316,'onchange','onblurLecturaActual();');

--
-- Table structure for table `core_formulario`
--

CREATE TABLE `core_formulario` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `titulo` varchar(250) DEFAULT '',
  `ayuda_titulo` varchar(250) DEFAULT '',
  `ayuda_texto` text DEFAULT NULL,
  `tabla_datos` varchar(250) DEFAULT '',
  `columnas` int(10) DEFAULT 1,
  `javascript` mediumtext DEFAULT NULL,
  `borde_visible` int(10) DEFAULT 0,
  `estilo_pestanas` varchar(10) DEFAULT 'nav-tabs',
  `id_html` varchar(255) DEFAULT '',
  `tipo_maquetacion` varchar(11) DEFAULT 'tradicional',
  `css_columnas` text DEFAULT NULL,
  `estilo_ventana` varchar(50) DEFAULT 'panel-primary',
  `pre_script` mediumtext DEFAULT NULL,
  `post_script` mediumtext DEFAULT NULL,
  `modulo` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `core_formulario`
--

INSERT INTO `core_formulario` VALUES (-3,'{$MULTILANG_BTReporteBugs}','','','core_bugtracker',2,'function FrmAutoRun()\r\n    {\r\n        //Actualiza el marco de la imagen de captura con la recibida\r\n        $( document ).ready(function() {\r\n                $(\'#ImagenVistaPreviaCaptura\').html(\'<img src=\"\'+document.datosbug.adjunto.value+\'\" width=\"100%\" border=0>\');\r\n        });\r\n    }\r\n',0,'nav-tabs','datosbug','tradicional','','panel-primary','','',0),(-21,'TEST_PracticoFramework - ReactJS','Importante','Todos los marcos para componentes ReactJS agregados a este formulario se encuentran dentro de una clase well well-sm para poder hacer visibles los marcos donde se dan las respuestas.<br>Si todo va bien sobre consola de JS debería ver el mensaje de <b>###### Finalizando pruebas de ReactJS Correctamente</b>','core_tabla_comodin',3,'//\'use strict\';  //Opcional, activar Esto puede generar advertencias en el script al no estar definido React\r\nconst e = React.createElement;\r\n\r\n// PRUEBA1 #############################################################################################\r\nclass BotonLike extends React.Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = { liked: false };\r\n  }\r\n\r\n  render() {\r\n    if (this.state.liked) {\r\n      return \'Has presionado el me gusta\';\r\n    }\r\n\r\n    return e(\r\n      \'button\',\r\n      { onClick: () => this.setState({ liked: true }) },\r\n      \'Me gusta\',\r\n    );\r\n  }\r\n}\r\n\r\n// PRUEBA2 #############################################################################################\r\nclass EnlaceHREF extends React.Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = { liked: false };\r\n  }\r\n\r\n  render() {\r\n        return React.createElement(\'a\', {href: \'https://www.unixlandia.org\',class: \'btn btn-info\', target: \'_blank\'}, \'Ejemplo de enlace\')\r\n  }\r\n}\r\n\r\n\r\n\r\nfunction PruebasReactJS()\r\n    {\r\n        //#############################################################################################\r\n        console.log(\"PRUEBA 1:  Adicion control basico de ReactJS a contenedor_react_01\");\r\n        const domContainer = document.querySelector(\'#contenedor_react_01\');\r\n        ReactDOM.render(e(BotonLike), domContainer);\r\n\r\n        //#############################################################################################\r\n        console.log(\"PRUEBA 2:  Adicion control HREF sin JSX a contenedor_react_02\");\r\n        const domContainerHREF = document.querySelector(\'#contenedor_react_02\');\r\n        ReactDOM.render(e(EnlaceHREF), domContainerHREF);\r\n    }\r\n\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        //Ejecuta las pruebas cuando se asegure que ya se cargo todo lo necesario del documento\r\n        $( document ).ready(function() {\r\n            console.log(\"###### Iniciando pruebas de ReactJS\");\r\n            PruebasReactJS();\r\n            console.log(\"###### Finalizando pruebas de ReactJS Correctamente\");\r\n        });\r\n    }\r\n',1,'nav-tabs','FormTEST_PracticoFramework','responsive','col col-xs-4 col-sm-4 col-md-4 col-lg-4','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");','',0),(-16,'{$MULTILANG_CronTitulo}','{$MULTILANG_Ayuda}','{$MULTILANG_CronAyuda}','core_tareascron',2,'function LanzarEditor_CRON()\n    {\n        //FORMA 2: Con funcion interna de apertura - Sobreescribe FORMA 1 - Comentar para pasar a modo de emergencia\n        PCOJS_CargarArchivoPCoderBD(\'{$LlaveParcial_FirmaSistema}\',\'\',\'\',\'\',\'No\',\'B\',\'core_tareascron\',\'script_php\', \'{$IdTareaCRON}\',\'php\',\'PHP\'       ,\'Iconos\',\'1\',\'<font color=white>Script</font> TareaCRON_{$IdTareaCRON}_(PHP){$TituloPCoder_COMPLEMENTO}\');\n    }\n\n\nfunction ConstruirPlantillaCron()\n    {\n        //Construye linea formateada para el archivo crontab de sistemas linux / bsd / unix\n        $(\"#plantilla_cron1\").val($(\"#tipo_planificacion\").val()+\" /path/to/curl --silent \'\"+window.location.href+\"?PCO_Accion=PCO_EjecutarCron&Tarea=\"+$(\"#codigo_tarea\").val()+\"\' &>/dev/null\");\n        $(\"#plantilla_cron2\").val($(\"#tipo_planificacion\").val()+\" /path/to/wget \'\"+window.location.href+\"?PCO_Accion=PCO_EjecutarCron&Tarea=\"+$(\"#codigo_tarea\").val()+\"\' &>/dev/null\");\n    }\n\nfunction GenerarIDTarea(longitud) {\n  var text = \"\";\n  var possible = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\n  for (var i = 0; i < longitud; i++)\n    text += possible.charAt(Math.floor(Math.random() * possible.length));\n\n  return text.toUpperCase();\n}\n\nfunction ConstruirURL() {\n    //var pathname = window.location.pathname; // Returns path only (/path/example.html)\n    //var url      = window.location.href;     // Returns full URL (https://example.com/path/example.html)\n    //var origin   = window.location.origin;   // Returns base URL (https://example.com)\n    $(\"#url_absoluta\").val(window.location.href+\"?PCO_Accion=PCO_EjecutarCron&Tarea=\"+$(\"#codigo_tarea\").val());\n}\n\nfunction FrmAutoRun()\n    {\n        //Si esta editando agrega boton para editar la tarea\n        if ($(\"#id\").val()!=\"0\" && $(\"#id\").val()!=\"\")\n            {\n                $(\"#lbl_edicion\").hide();\n                $(\"#btn_edicion\").show();      \n                $(\"#lbl_script\").show();      \n            }\n        else\n            {\n                $(\"#lbl_edicion\").show();\n                $(\"#btn_edicion\").hide();      \n                $(\"#lbl_script\").hide();      \n            }\n\n\n        if ($(\"#id\").val()==\"0\")\n            {\n                $(\"#codigo_tarea\").val(GenerarIDTarea(10));\n                $(\"#PCOContenedor_btn_actualizar\").hide();\n            }\n        else\n            $(\"#PCOContenedor_btn_guardar\").hide();      \n        ConstruirURL();\n        $(\"#url_absoluta\").addClass(\"btn-xs\");\n    }',0,'nav-tabs','datos_tarea','responsive','col-lg-7 col-md-7 col-sm-7 col-xs-7|col-lg-5 col-md-5 col-sm-5 col-xs-5','panel-primary','<?php\n    ##########################################################################\n    ##########################################################################\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        {\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-16\",\"SECLog:event\");\n            die();\n        }\n    ##########################################################################\n    ##########################################################################\n    \n    //Variables usadas en JS para el llamado a PCoder\n    global $TituloPCoder_COMPLEMENTO,$LlaveParcial_FirmaSistema,$LlaveDePaso,$PCO_RegistroDatosFormulario,$IdTareaCRON;\n    \n    $TituloTareaCRONPCoder=$PCO_RegistroDatosFormulario[\"titulo\"]; //Toma el titulo desde el registro de informe recuperado\n    $IdTareaCRON=$PCO_RegistroDatosFormulario[\"id\"];\n    $TituloPCoder_COMPLEMENTO=\" - <font color=white>\".$TituloTareaCRONPCoder.\"</font> \";\n    $LlaveParcial_FirmaSistema=substr($LlaveDePaso,-3);\n    \n    ','',0),(-11,'{$MULTILANG_MonConfig}','','','core_monitoreo',2,'function CargarMonitoreo()\r\n    {\r\n        PCO_VentanaPopup(\'index.php?PCO_Accion=PCO_VerMonitoreo&Presentar_FullScreen=1\',\'Monitor\',\'toolbar=yes, location=no, directories=no, status=yes, menubar=yes ,scrollbars=yes, resizable=yes, fullscreen=no, width=900, height=600\');\r\n    }\r\n    \r\nfunction FrmAutoRun()\r\n    {\r\n        //Determina si debe ocultar el boton de guardar y presentar el de actualizar segun el tipo de operacion\r\n        if ($(\"#nombre\").val()!=\"\")\r\n            $(\"#PCOContenedor_boton_guardar\").hide();\r\n        else\r\n            $(\"#PCOContenedor_boton_actualizar\").hide();\r\n    }\r\n',0,'nav-tabs','DatosMonitor','tradicional','','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-11\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-26,'Configuración de Accesos SSO mediante SAML','','','core_samlconector',2,'function ActualizarFormatoFull()\r\n    {\r\n        //Actualiza campo de formato full\r\n        $(\"#sp_nameid_format_full\").val(\"urn:oasis:names:tc:SAML:1.1:nameid-format:\"+$(\"#sp_nameid_format\").val());\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        $(\"#PCOContenedor_ruta_logo_precarga\").hide();\r\n\r\n        $( document ).ready(function() {\r\n            if ($(\"#nombre_conector\").val()==\"\")\r\n                $(\"#PCOContenedor_btn_actualizar\").hide();\r\n            else\r\n                $(\"#PCOContenedor_btn_agregar\").hide();\r\n            \r\n            ActualizarFormatoFull();\r\n\r\n            //Si tiene ruta en el campo de avatar reemplaza la imagen predeterminada\r\n            if ($(\"#ruta_logo_precarga\").val()!=\"\")\r\n                {\r\n                    PartesImagen=$(\"#ruta_logo_precarga\").val().split(\"|\");\r\n                    PathImagen=PartesImagen[0];\r\n                    $(\"#PCOContenedor_marco_logo\").html(\"<center><img src=\'\"+PathImagen+\"\' style=\'width:120px; height:120px; border-radius: 5%; margin-top:0px; margin-bottom:0px;\'></center><br>\");\r\n                }\r\n            \r\n            //Cambia tamano y tipo de fuente en campo del certificado\r\n            $(\'#idp_x509cert\').css(\"font-family\", \"Monospace,Mono,Console\");\r\n            $(\'#idp_x509cert\').css(\"font-size\", \"10px\");\r\n        });\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-7 col-lg-7|col-xs-12 col-sm-12 col-md-5 col-lg-5','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-26\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n\r\n	// Determina si la conexion actual de Practico esta encriptada\r\n	global $URI,$DominioServidorSAML,$RaizScriptSAML;\r\n	if(empty($_SERVER[\"HTTPS\"]))\r\n		$protocolo_webservice=\"http://\";\r\n	else\r\n		$protocolo_webservice=\"https://\";\r\n	// Construye la URI de retorno\r\n	$prefijo_webservice=$_SERVER[\'SERVER_NAME\'].$_SERVER[\'PHP_SELF\'];\r\n	// Construye la URI de redireccion base para concatenar el servicio especifico\r\n	$URI = $protocolo_webservice.$prefijo_webservice.\"?PCO_WSOn=1&PCO_WSId=PCO_AutenticacionOauth&OAuthSrv=\";\r\n	$DominioServidorSAML=$protocolo_webservice.$_SERVER[\'SERVER_NAME\'];\r\n	$RaizScriptSAML=$_SERVER[\'PHP_SELF\'];\r\n	$RaizScriptSAML=str_replace ( \"/index.php\" , \"\" , $RaizScriptSAML); //Hace reemplazo con / por si esta en un directorio\r\n	$RaizScriptSAML=str_replace ( \"index.php\" , \"\" , $RaizScriptSAML);  //Hace reemplazo SIN / por si esta en la raiz\r\n	\r\n','global $PCO_PostAccionDirecta;\r\n$PCO_PostAccionDirecta=1;\r\nPCO_CargarFormulario(\"-26\",1);',0),(-8,'{$MULTILANG_UsrLista}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Limpia los campos de filtro cuando ingresa por primera vez (llegan en _|_ ambos)\r\n        if ($(\"#FiltroNombreUsuario\").val()==\"_|_\" && $(\"#FiltroLoginUsuario\").val()==\"_|_\")\r\n            {\r\n                $(\"#FiltroNombreUsuario\").val(\"\");\r\n                $(\"#FiltroLoginUsuario\").val(\"\");\r\n            }\r\n    }\r\n',0,'nav-tabs','FormFiltroUsuarios','responsive','col-xs-12 col-sm-12 col-md-4 col-lg-4|col-xs-12 col-sm-12 col-md-8 col-lg-8','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-8\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-17,'{$MULTILANG_UsrAdmPer}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','','',0),(-24,'TEST_PracticoFramework - INFORMES TABULARES','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n\r\n    }',0,'nav-tabs','banco_pruebas','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");','',0),(-1,'{$MULTILANG_InfTituloAgr}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'nav-tabs','datos','tradicional','','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-1\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-2,'[SubForm] {Creacion informes}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'nav-tabs','datossubinf','tradicional','','panel-primary','','',0),(-20,'TEST_PracticoFramework - Pruebas PRE y POST Scripts + VblesPHP','','','core_auditoria',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n        $(\"#PCOContenedor_lbl_cambio_js\").html(\"Este texto fue asignado dinamicamente desde JS junto con la variable PHP de hora justo aqui --> <b>{$PCO_HoraOperacionPuntos}</b>\");\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");\r\n\r\nPCO_Mensaje(\"Prueba de ejecucion PRE-Script formulario\", \"Se incluyen:  Inclusion de form -25 (Menu) y este mensaje\", \'\', \'fa fa-exclamation-triangle fa-5x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n','<?php\r\nglobal $PCO_PostAccionDirecta;\r\n$PCO_PostAccionDirecta=1;\r\nPCO_Mensaje(\"Prueba de ejecucion POST-Script formulario\", \"Se incluyen: <li>Definicion de vble global PCO_PostAccionDirecta=1<li>Este mensaje<li>Recarga del formulario despues de guardar un registro\", \'\', \'fa fa-exclamation-triangle fa-5x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\nPCO_CargarFormulario(\"-20\",\"1\");',0),(-19,'Generador de URLs cortas','','','core_acortadorurls',2,'//Calcula combinaciones CON repeticion de N tomados de a M\r\nfunction CalcularCombinaciones(n,m)\r\n    {\r\n    	var factorn=1;\r\n    	var factorm=1;\r\n    	var factornm=1;\r\n    	if (Math.floor(n) < Math.floor(m))\r\n    		alert(\"n tiene que ser mayor o igual que m\");\r\n    	else {\r\n    		// n factorial\r\n    		if(n<0)\r\n    			alert(\"Has introducido un número negativo, n debe ser positivo\");\r\n    		else{\r\n    			if(Math.floor(n)!=n)\r\n    				alert(\"n ha de ser entero\");\r\n    			else{\r\n    				for(var i=n-1; i>0; i--)\r\n    				factorn*=i;\r\n    			}\r\n    		}\r\n    		// m factorial\r\n    		if(m<0)\r\n    			alert(\"Has introducido un número negativo, m debe ser positivo\");\r\n    		else{\r\n    			if(Math.floor(m)!=m)\r\n    				alert(\"m ha de ser entero\");\r\n    			else{\r\n    				for(i=m; i>0; i--)\r\n    				factorm*=i;\r\n    			}\r\n    		}\r\n    		// n+m-1 factorial\r\n    		if(n+m-1<0)\r\n    			alert(\"Has introducido un número negativo, n+m-1 debe ser positivo\");\r\n    		else{\r\n    			if(Math.floor(n+m)!=n+m)\r\n    				alert(\"n+m-1 ha de ser entero\");\r\n    			else{\r\n    				for(i=Math.abs(n)+Math.abs(m)-1; i>0; i--)\r\n    				factornm*=i;\r\n    			}\r\n    		}\r\n    	}\r\n    	$(\"#CombinacionesPosibles\").val(Math.floor(factornm/(factorn*factorm)));\r\n    }\r\n\r\nfunction GenerarAleatorio(Longitud,CaracteresPosibles)\r\n    {\r\n        var TextoAleatorio = \"\";\r\n        for (var i = 0; i < Longitud; i++)\r\n            TextoAleatorio += CaracteresPosibles.charAt(Math.floor(Math.random() * CaracteresPosibles.length));\r\n        return TextoAleatorio;\r\n    }\r\n\r\nfunction ActualizarURLCorta()\r\n    {\r\n        //Define URL raiz del framework\r\n        URL_PracticoFramework=window.location.href;\r\n        if(URL_PracticoFramework.indexOf(\"?\") > -1)\r\n            URL_PracticoFramework=window.location.href.split(\"?\")[0].split(\"index.php\")[0];\r\n        //Elimina de la URL el index.php innecesario\r\n        URL_PracticoFramework=URL_PracticoFramework.replace(\'index.php\', \'\');\r\n        //Concantena valores para obtener la URL recortada    \r\n        $(\"#url_recortada\").val(URL_PracticoFramework+\"?e=\"+$(\"#url_corta\").val());\r\n    }\r\n\r\nfunction GenerarCodigoCorto()\r\n    {\r\n        var CaracteresPosibles = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n        $(\"#url_corta\").val(GenerarAleatorio($(\"#CantidadCaracteres\").val(),CaracteresPosibles));\r\n        CalcularCombinaciones(CaracteresPosibles.length,$(\"#CantidadCaracteres\").val());\r\n        ActualizarURLCorta();\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        //Verifica si entra desde cero y va a crear o si esta recuperando registro\r\n        if ($(\"#url_larga\").val()==\"\")\r\n            {\r\n                $(\"#PCOContenedor_contador_uso\").hide();\r\n                $(\"#btn_actualizar\").hide();\r\n                GenerarCodigoCorto();\r\n            }\r\n        else\r\n            {\r\n                ActualizarURLCorta();\r\n                $(\"#PCOContenedor_CantidadCaracteres\").hide();\r\n                $(\"#PCOContenedor_url_corta\").hide();\r\n                $(\"#PCOContenedor_CombinacionesPosibles\").hide();\r\n                $(\"#PCOContenedor_btn_regenerar\").hide();\r\n                $(\"#btn_guardar\").hide();\r\n            }\r\n    }\r\n',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-4 col-lg-4|col-xs-12 col-sm-12 col-md-8 col-lg-8','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-19\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-4,'{$MULTILANG_BTPanel}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'nav-tabs','PanelGestionBugs','tradicional','','panel-primary','','',0),(-9,'{$MULTILANG_UsrAdicion}','{$MULTILANG_Importante}','{$MULTILANG_UsrDesPW}','core_usuario',2,'function ValidarUsuarioPlantilla()\r\n    {\r\n        if ($(\"#es_plantilla\").val()==\"1\")\r\n            {\r\n                $(\'#estado\').selectpicker(\'val\', \'0\');\r\n                $(\'#plantilla_permisos\').selectpicker(\'val\', \'\');\r\n                $(\'#PCOContenedor_plantilla_permisos\').hide();\r\n            }\r\n        else\r\n            {\r\n                $(\'#estado\').selectpicker(\'val\', \'1\');\r\n                $(\'#plantilla_permisos\').selectpicker(\'val\', \'\');\r\n                $(\'#PCOContenedor_plantilla_permisos\').show();\r\n            }\r\n        \r\n    }\r\n\r\nfunction ValidarCamposYEnviar()\r\n    {\r\n        var HayError=false;\r\n        if ($(\"#clave\").val() != $(\"#clave1\").val())\r\n            {\r\n                PCOJS_MostrarMensaje($(\"#MULTILANG_Error\").val(),$(\"#MULTILANG_UsrErrPW2\").val());\r\n                HayError=true;\r\n            }\r\n        if ($(\"#seguridad\").val() < 81)\r\n            {\r\n                PCOJS_MostrarMensaje($(\"#MULTILANG_Error\").val(),$(\"#MULTILANG_UsrErrPW3\").val());\r\n                HayError=true;\r\n            }\r\n        if (!HayError)\r\n            {\r\n                document.FrmAdicionUsuarios.PCO_Accion.value=\"PCO_GuardarUsuario\";\r\n                PCOJS_ValidarCamposYProcesarFormulario(\"FrmAdicionUsuarios\");\r\n            }\r\n    }\r\n    \r\nfunction FrmAutoRun()\r\n    {\r\n        //Identifica si llega como edicion\r\n        if ($(\"#login\").val()!=\"\")\r\n            {\r\n                $( \"#PCOContenedor_login\" ).hide();\r\n\r\n                $( \"#PCOContenedor_clave\" ).hide();\r\n                $( \"#PCOContenedor_seguridad\" ).hide();\r\n                $( \"#PCOContenedor_clave1\" ).hide();\r\n                $( \"#btn_guardar\" ).hide();\r\n                \r\n                //Asigna valores a campos de clave que son obligatorios pero no se usan en actualizaciones por su nombre no coincidente \r\n                $( \"#clave1\" ).val(\"FakeTempPass\");\r\n                document.FrmAdicionUsuarios.PCO_Accion.value=\"PCO_ActualizarDatosFormulario\";\r\n\r\n            }\r\n        else\r\n            {\r\n                $( \"#btn_actualizar\" ).hide();\r\n            }\r\n        ValidarUsuarioPlantilla();\r\n    }\r\n\r\n	function buscar_texto_en_plantilla(texto,plantilla){\r\n	   for(i=0; i<texto.length; i++){\r\n		  if (plantilla.indexOf(texto.charAt(i),0)!=-1){\r\n			 return 1;\r\n		  }\r\n	   }\r\n	   return 0;\r\n	} \r\n\r\n	function tiene_simbolos(texto){\r\n		return buscar_texto_en_plantilla(texto,\"!#$%&*\");\r\n	} \r\n\r\n	function tiene_numeros(texto){\r\n		return buscar_texto_en_plantilla(texto,\"0123456789\");\r\n	} \r\n\r\n	function tiene_letras(texto){\r\n		return buscar_texto_en_plantilla(texto,\"abcdefghyjklmnñopqrstuvwxyz\");\r\n	} \r\n\r\n	function tiene_minusculas(texto){\r\n		return buscar_texto_en_plantilla(texto,\"abcdefghyjklmnñopqrstuvwxyz\");\r\n	} \r\n\r\n	function tiene_mayusculas(texto){\r\n		return buscar_texto_en_plantilla(texto,\"ABCDEFGHYJKLMNÑOPQRSTUVWXYZ\");\r\n	} \r\n\r\n\r\n/* ################################################################## */\r\n/* ################################################################## */\r\n/*\r\n	Function: seguridad_clave\r\n	Retorna un valor asociado al nivel de seguridad de la clave recibida despues de buscar ciertos caracteres sobre esta.\r\n\r\n	Variables de entrada:\r\n\r\n		clave - Valor del campo clave digitado por el usuario\r\n\r\n		(start code)\r\n				if (tiene_numeros(clave)) seguridad += 10;\r\n				if (tiene_minusculas (clave)) seguridad += 20;\r\n				if (tiene_mayusculas(clave)) seguridad += 20;\r\n				if (tiene_simbolos(clave)) seguridad += 20;\r\n				if (tiene_minusculas(clave) && tiene_mayusculas(clave)) seguridad += 30;\r\n				if (tiene_simbolos(clave) && (tiene_mayusculas(clave) || tiene_minusculas (clave))) seguridad += 10;\r\n				if (clave.length <= 7) seguridad -= 40;\r\n				if (clave.length >= 8) seguridad += 10;\r\n		(end)\r\n\r\n	Salida:\r\n		Valor de la variable entera llamada seguridad.\r\n		\r\n			Ver tambien:\r\n				<muestra_seguridad_clave> | <PCO_CambiarContrasena>\r\n*/\r\n	function seguridad_clave(clave){\r\n		var seguridad = 0;\r\n		if (clave.length!=0)\r\n			{\r\n				if (tiene_numeros(clave)) seguridad += 10;\r\n				if (tiene_minusculas (clave)) seguridad += 20;\r\n				if (tiene_mayusculas(clave)) seguridad += 20;\r\n				if (tiene_simbolos(clave)) seguridad += 20;\r\n				if (tiene_minusculas(clave) && tiene_mayusculas(clave)) seguridad += 30;\r\n				if (tiene_simbolos(clave) && (tiene_mayusculas(clave) || tiene_minusculas (clave))) seguridad += 10;\r\n				if (clave.length <= 7) seguridad -= 40;\r\n				if (clave.length >= 8) seguridad += 10;\r\n			}\r\n		if (seguridad>100) seguridad=100;\r\n		if (seguridad<0) seguridad=0;\r\n		return seguridad;\r\n	}\r\n\r\n/* ################################################################## */\r\n/* ################################################################## */\r\n/*\r\n	Function: muestra_seguridad_clave\r\n	Visualiza el valor asociado al nivel de seguridad de la clave sobre el formulario de diligenciamiento\r\n\r\n	Variables de entrada:\r\n\r\n		clave - Valor del campo clave digitado por el usuario\r\n		formulario - Nombre del formulario sobre el que se actualiza el valor del campo seguridad.\r\n\r\n		(start code)\r\n			seguridad=seguridad_clave(clave);\r\n			formulario.seguridad.value=seguridad;\r\n		(end)\r\n\r\n	Salida:\r\n		Campo (visual del formulario) actualizado\r\n		\r\n	Ver tambien:\r\n		<seguridad_clave> | <PCO_CambiarContrasena>\r\n*/\r\n	function muestra_seguridad_clave(clave,formulario){\r\n		seguridad=seguridad_clave(clave);\r\n		formulario.seguridad.value=seguridad;\r\n	}\r\n',0,'nav-tabs','FrmAdicionUsuarios','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-9\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n\r\nglobal $PCO_BarraHerramientasFormulario;\r\n\r\n$PCO_BarraHerramientasFormulario=\"<i class=\'btn btn-xs btn-primary\'>DOCS</i>\";','',0),(-15,'{$MULTILANG_FrmAgregar}','','','core_formulario',1,'function FrmAutoRun()\r\n    {\r\n    }\r\n',0,'nav-tabs','datos_nuevo_form','tradicional','','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-15\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-14,'{$MULTILANG_InfParam}','','','core_informe',2,'function CargarScriptPRE()\n    {\n        //FORMA 1: Enlaces estandar (Modo de emergencia o depuracion de PCoder)\n        //PCO_VentanaPopup(\'index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&Origen_Archivo=B&Tabla_Archivo=core_informe&Campo_Archivo=pre_script&PCODER_extension=php&PCODER_ModoEditor=PHP&PCODER_TipoMenu=Iconos&PCODER_EstadoSimple=1&Llave_Registro=\'+$(\"#id\").val()+\'&PCODER_Titulo=Script_PRE_Informe_\'+$(\"#id\").val()+\'_(PHP)\',\'PcoderNG\',\'toolbar=no, location=no, directories=0, directories=no, status=no, location=no, menubar=no ,scrollbars=no, resizable=yes, fullscreen=no, titlebar=no, width=800, height=600\');\n    \n        //FORMA 2: Con funcion interna de apertura - Sobreescribe FORMA 1 - Comentar para pasar a modo de emergencia\n        PCOJS_CargarArchivoPCoderBD(\'{$LlaveParcial_FirmaSistema}\',\'\',\'\',\'\',\'No\',\'B\',\'core_informe\',\'pre_script\', \'{$IdUnicoInforme}\',\'php\',\'PHP\'       ,\'Iconos\',\'1\',\'<font color=white>Script_PRE</font> Informe_{$IdUnicoInforme}_(PHP){$TituloPCoder_COMPLEMENTO}\');\n    }\n\nfunction CargarScriptPOST()\n    {\n        //FORMA 1: Enlaces estandar (Modo de emergencia o depuracion de PCoder)\n        //PCO_VentanaPopup(\'index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&Origen_Archivo=B&Tabla_Archivo=core_informe&Campo_Archivo=post_script&PCODER_extension=php&PCODER_ModoEditor=PHP&PCODER_TipoMenu=Iconos&PCODER_EstadoSimple=1&Llave_Registro=\'+$(\"#id\").val()+\'&PCODER_Titulo=Script_POST_Informe_\'+$(\"#id\").val()+\'_(PHP)\',\'PcoderNG\',\'toolbar=no, location=no, directories=0, directories=no, status=no, location=no, menubar=no ,scrollbars=no, resizable=yes, fullscreen=no, titlebar=no, width=800, height=600\');\n\n        //FORMA 2: Con funcion interna de apertura - Sobreescribe FORMA 1 - Comentar para pasar a modo de emergencia\n        PCOJS_CargarArchivoPCoderBD(\'{$LlaveParcial_FirmaSistema}\',\'\',\'\',\'\',\'No\',\'B\',\'core_informe\',\'post_script\',\'{$IdUnicoInforme}\',\'php\',\'PHP\'       ,\'Iconos\',\'1\',\'<font color=white>Script_POST</font> Informe_{$IdUnicoInforme}_(PHP){$TituloPCoder_COMPLEMENTO}\');\n    }\n\nfunction CargarScriptJS()\n    {\n        //FORMA 1: Enlaces estandar (Modo de emergencia o depuracion de PCoder)\n        //PCO_VentanaPopup(\'index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&Origen_Archivo=B&Tabla_Archivo=core_informe&Campo_Archivo=javascript&PCODER_extension=js&PCODER_ModoEditor=JavaScript&PCODER_TipoMenu=Iconos&PCODER_EstadoSimple=1&Llave_Registro=\'+$(\"#id\").val()+\'&PCODER_Titulo=Script_JavaScript_Informe_\'+$(\"#id\").val()+\'_(JS)\',\'PcoderNG\',\'toolbar=no, location=no, directories=0, directories=no, status=no, location=no, menubar=no ,scrollbars=no, resizable=yes, fullscreen=no, titlebar=no, width=800, height=600\');\n\n        //FORMA 2: Con funcion interna de apertura - Sobreescribe FORMA 1 - Comentar para pasar a modo de emergencia\n        PCOJS_CargarArchivoPCoderBD(\'{$LlaveParcial_FirmaSistema}\',\'\',\'\',\'\',\'No\',\'B\',\'core_informe\',\'javascript\' ,\'{$IdUnicoInforme}\',\'js\' ,\'JavaScript\',\'Iconos\',\'1\',\'<font color=white>Script_JS</font> Informe_{$IdUnicoInforme}_(JS){$TituloPCoder_COMPLEMENTO}\');\n    }\n\n//Determina que campos deben estar visibles de acuerdo al valor del combo que activa los datatables\nfunction AlternarCamposVisibles_DataTables()\n    {\n        if ($(\"#soporte_datatable\").val()==\"S\")\n            {\n                $(\"#PCOContenedor_tamano_paginacion\").show();\n                $(\"#PCOContenedor_subtotales_columna\").show();\n                $(\"#PCOContenedor_subtotales_formato\").show();\n                $(\"#PCOContenedor_exportar_dt\").show();\n                $(\"#PCOContenedor_exportar_dtclp\").show();\n                $(\"#PCOContenedor_exportar_dtcsv\").show();\n                $(\"#PCOContenedor_exportar_dtxls\").show();\n                $(\"#PCOContenedor_exportar_dtpdf\").show();\n                $(\"#PCOContenedor_tabla_responsive\").show();\n                $(\"#PCOContenedor_lbl_responsive\").show();\n                $(\"#PCOContenedor_usar_ajax\").show();\n                $(\"#PCOContenedor_usar_ajax_detalles\").show();\n                $(\"#PCOContenedor_definir_cols\").show();\n                $(\"#PCOContenedor_marco_panesubform\").show();\n            }\n        else\n            {\n                $(\"#PCOContenedor_tamano_paginacion\").hide();\n                $(\"#PCOContenedor_subtotales_columna\").hide();\n                $(\"#PCOContenedor_subtotales_formato\").hide();\n                $(\"#PCOContenedor_exportar_dt\").hide();\n                $(\"#PCOContenedor_exportar_dtclp\").hide();\n                $(\"#PCOContenedor_exportar_dtcsv\").hide();\n                $(\"#PCOContenedor_exportar_dtxls\").hide();\n                $(\"#PCOContenedor_exportar_dtpdf\").hide();\n                $(\"#PCOContenedor_tabla_responsive\").hide();\n                $(\"#PCOContenedor_lbl_responsive\").hide();\n                $(\"#PCOContenedor_usar_ajax\").hide();\n                $(\"#PCOContenedor_usar_ajax_detalles\").hide();\n                $(\"#PCOContenedor_definir_cols\").hide();\n                $(\"#PCOContenedor_marco_panesubform\").hide();\n            }\n    }\n\nfunction FrmAutoRun()\n    {\n        //Oculta boton de graficos si el formato es tabla\n        if($(\"#formato_final\").val()==\"T\")\n            $(\"#btn_grafico\").addClass(\'disabled\');\n        //Oculta boton de acciones si el formato es graficos\n        if($(\"#formato_final\").val()==\"G\")\n            {\n                $(\"#btn_acciones_agregar\").addClass(\'disabled\');\n                $(\"#btn_acciones_editar\").addClass(\'disabled\');\n            }\n        AlternarCamposVisibles_DataTables();\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','<?php\n    ##########################################################################\n    ##########################################################################\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        {\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-14\",\"SECLog:event\");\n            die();\n        }\n    ##########################################################################\n    ##########################################################################\n\n    //Variables usadas en JS para el llamado a PCoder\n    global $TituloPCoder_COMPLEMENTO,$LlaveParcial_FirmaSistema,$LlaveDePaso,$PCO_RegistroDatosFormulario,$IdUnicoInforme;\n    \n    $TituloReportePCoder=$PCO_RegistroDatosFormulario[\"titulo\"]; //Toma el titulo desde el registro de informe recuperado\n    $IdUnicoInforme=$PCO_RegistroDatosFormulario[\"id\"];\n    $TituloPCoder_COMPLEMENTO=\" - <font color=white>\".$TituloReportePCoder.\"</font> \";\n    $LlaveParcial_FirmaSistema=substr($LlaveDePaso,-3);\n    ','<?php\r\nglobal $id;\r\n				echo \'<form name=\"cancelar\" action=\"index.php\" method=\"POST\">\r\n					<input type=\"Hidden\" name=\"PCO_Accion\" value=\"PCO_EditarInforme\">\r\n					<input type=\"Hidden\" name=\"informe\" value=\"\'.$id.\'\">\r\n					</form>\r\n					<script type=\"\" language=\"JavaScript\"> document.cancelar.submit();  </script>\';',0),(-22,'{$MULTILANG_UsrPerfil}','','','core_usuario',2,'function ValidarCamposYEnviar()\r\n    {\r\n        var HayError=false;\r\n        if (!HayError)\r\n            {\r\n                document.FrmEdicionPerfil.PCO_Accion.value=\"PCO_GuardarUsuario\";\r\n                PCOJS_ValidarCamposYProcesarFormulario(\"FrmEdicionPerfil\");\r\n            }\r\n    }\r\n    \r\nfunction FrmAutoRun()\r\n    {\r\n        //Si el modo demo está activo entonces no deja seguir adelante\r\n        if ($(\"#PCO_ModoDEMO\").val()==\"1\")\r\n            {\r\n                $(\"#PCO_PestanaFormulario_1\").html(\"<center><br><br>Operacion no autorizada en modo DEMO<br><br></center>\");\r\n                $(\"#btn_actualizar\").hide();\r\n            }\r\n        //Si el tipo de autenticaion no es la interna entonces no deja cambiar datos pues se trata de un perfil federado\r\n        if ($(\"#Auth_TipoMotor\").val()!=\"practico\")\r\n            {\r\n                $(\"#PCO_PestanaFormulario_1\").html(\"<center><br><br>Operacion no autorizada en sistemas con autenticaciones federadas<br><br></center>\");\r\n                $(\"#btn_actualizar\").hide();\r\n            }\r\n\r\n        //Valida si el administrador permite o no el cambio por parte de los usuarios\r\n        if ($(\"#PCO_PermitirUsuariosModoNoche\").val()!=\"1\")\r\n                $(\"#PCOContenedor_transformacion_colores\").hide();\r\n        if ($(\"#IdiomaEnLogin\").val()!=\"1\")\r\n                $(\"#PCOContenedor_idioma\").hide();\r\n\r\n        //Si tiene ruta en el campo de avatar reemplaza la imagen predeterminada\r\n        if ($(\"#ruta_foto\").val()!=\"\")\r\n            {\r\n                PartesImagen=$(\"#ruta_foto\").val().split(\"|\");\r\n                PathImagen=PartesImagen[0];\r\n                $(\"#PCOContenedor_marco_avatar\").html(\"<center><img src=\'\"+PathImagen+\"\' style=\'width:120px; height:120px; border-radius: 50%; margin-top:0px; margin-bottom:0px;\'></center><br>\");\r\n            }\r\n\r\n    }\r\n',0,'nav-tabs','FrmEdicionPerfil','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','','',0),(-13,'{$MULTILANG_BarraHtas}','','','core_tabla_comodin',1,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'','PCO_FormHerramientasInforme','tradicional','','panel-primary','','',0),(-18,'{$MULTILANG_UsrCambioPW}','{$MULTILANG_Importante}','{$MULTILANG_UsrDesPW}','core_tabla_comodin',2,'function ValidarCamposYEnviar()\r\n    {\r\n        var HayError=false;\r\n        if ($(\"#clave1\").val() != $(\"#clave2\").val())\r\n            {\r\n                PCOJS_MostrarMensaje($(\"#MULTILANG_Error\").val(),$(\"#MULTILANG_UsrErrPW2\").val());\r\n                HayError=true;\r\n            }\r\n        if ($(\"#seguridad\").val() < 81)\r\n            {\r\n                PCOJS_MostrarMensaje($(\"#MULTILANG_Error\").val(),$(\"#MULTILANG_UsrErrPW3\").val());\r\n                HayError=true;\r\n            }\r\n        if (!HayError)\r\n            PCOJS_ValidarCamposYProcesarFormulario();\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n\r\n	function buscar_texto_en_plantilla(texto,plantilla){\r\n	   for(i=0; i<texto.length; i++){\r\n		  if (plantilla.indexOf(texto.charAt(i),0)!=-1){\r\n			 return 1;\r\n		  }\r\n	   }\r\n	   return 0;\r\n	} \r\n\r\n	function tiene_simbolos(texto){\r\n		return buscar_texto_en_plantilla(texto,\"!#$%&*\");\r\n	} \r\n\r\n	function tiene_numeros(texto){\r\n		return buscar_texto_en_plantilla(texto,\"0123456789\");\r\n	} \r\n\r\n	function tiene_letras(texto){\r\n		return buscar_texto_en_plantilla(texto,\"abcdefghyjklmnñopqrstuvwxyz\");\r\n	} \r\n\r\n	function tiene_minusculas(texto){\r\n		return buscar_texto_en_plantilla(texto,\"abcdefghyjklmnñopqrstuvwxyz\");\r\n	} \r\n\r\n	function tiene_mayusculas(texto){\r\n		return buscar_texto_en_plantilla(texto,\"ABCDEFGHYJKLMNÑOPQRSTUVWXYZ\");\r\n	} \r\n\r\n/* ################################################################## */\r\n/* ################################################################## */\r\n/*\r\n	Function: seguridad_clave\r\n	Retorna un valor asociado al nivel de seguridad de la clave recibida despues de buscar ciertos caracteres sobre esta.\r\n\r\n	Variables de entrada:\r\n\r\n		clave - Valor del campo clave digitado por el usuario\r\n\r\n		(start code)\r\n				if (tiene_numeros(clave)) seguridad += 10;\r\n				if (tiene_minusculas (clave)) seguridad += 20;\r\n				if (tiene_mayusculas(clave)) seguridad += 20;\r\n				if (tiene_simbolos(clave)) seguridad += 20;\r\n				if (tiene_minusculas(clave) && tiene_mayusculas(clave)) seguridad += 30;\r\n				if (tiene_simbolos(clave) && (tiene_mayusculas(clave) || tiene_minusculas (clave))) seguridad += 10;\r\n				if (clave.length <= 7) seguridad -= 40;\r\n				if (clave.length >= 8) seguridad += 10;\r\n		(end)\r\n\r\n	Salida:\r\n		Valor de la variable entera llamada seguridad.\r\n		\r\n			Ver tambien:\r\n				<muestra_seguridad_clave> | <PCO_CambiarContrasena>\r\n*/\r\n	function seguridad_clave(clave){\r\n		var seguridad = 0;\r\n		if (clave.length!=0)\r\n			{\r\n				if (tiene_numeros(clave)) seguridad += 10;\r\n				if (tiene_minusculas (clave)) seguridad += 20;\r\n				if (tiene_mayusculas(clave)) seguridad += 20;\r\n				if (tiene_simbolos(clave)) seguridad += 20;\r\n				if (tiene_minusculas(clave) && tiene_mayusculas(clave)) seguridad += 30;\r\n				if (tiene_simbolos(clave) && (tiene_mayusculas(clave) || tiene_minusculas (clave))) seguridad += 10;\r\n				if (clave.length <= 7) seguridad -= 40;\r\n				if (clave.length >= 8) seguridad += 10;\r\n			}\r\n		if (seguridad>100) seguridad=100;\r\n		if (seguridad<0) seguridad=0;\r\n		return seguridad;\r\n	}\r\n\r\n/* ################################################################## */\r\n/* ################################################################## */\r\n/*\r\n	Function: muestra_seguridad_clave\r\n	Visualiza el valor asociado al nivel de seguridad de la clave sobre el formulario de diligenciamiento\r\n\r\n	Variables de entrada:\r\n\r\n		clave - Valor del campo clave digitado por el usuario\r\n		formulario - Nombre del formulario sobre el que se actualiza el valor del campo seguridad.\r\n\r\n		(start code)\r\n			seguridad=seguridad_clave(clave);\r\n			formulario.seguridad.value=seguridad;\r\n		(end)\r\n\r\n	Salida:\r\n		Campo (visual del formulario) actualizado\r\n		\r\n	Ver tambien:\r\n		<seguridad_clave> | <PCO_CambiarContrasena>\r\n*/\r\n	function muestra_seguridad_clave(clave,formulario){\r\n		seguridad=seguridad_clave(clave);\r\n		formulario.seguridad.value=seguridad;\r\n	}\r\n',0,'nav-tabs','datos','responsive','col col-xs-12 col-sm-12 col-md-3 col-lg-3|col col-xs-12 col-sm-12 col-md-9 col-lg-9','panel-primary','','',0),(-5,'{$MULTILANG_ConfiguracionGeneral}: {$MULTILANG_OauthButt}','','','core_tabla_comodin',4,'function GuardarConfiguracionesProveedoresOAuth()\r\n    {\r\n        document.AutenticacionOauth.PCO_Accion.value=\"PCO_GuardarConfiguracionOAuth\";\r\n        PCOJS_ValidarCamposYProcesarFormulario(\"AutenticacionOauth\",0);\r\n        //document.AutenticacionOauth.submit();\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'nav-tabs','AutenticacionOauth','tradicional','','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-5\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n\r\n	// Determina si la conexion actual de Practico esta encriptada\r\n	global $URI;\r\n	if(empty($_SERVER[\"HTTPS\"]))\r\n		$protocolo_webservice=\"http://\";\r\n	else\r\n		$protocolo_webservice=\"https://\";\r\n	// Construye la URI de retorno\r\n	$prefijo_webservice=$_SERVER[\'SERVER_NAME\'].$_SERVER[\'PHP_SELF\'];\r\n	// Construye la URI de redireccion base para concatenar el servicio especifico\r\n	$URI = $protocolo_webservice.$prefijo_webservice.\"?PCO_WSOn=1&PCO_WSId=PCO_AutenticacionOauth&OAuthSrv=\";\r\n	\r\n','',0),(-25,'TEST_PracticoFramework - MENU','BANCO DE PRUEBAS INTERNAS DEL FRAMEWORK','Este banco de pruebas es utilizado para el desarrollo del framework mismo y toma como base la tabla de auditorias existente en todas las instalaciones.   Se presentan diferentes objetos y controles diagramados por secciones relevantes indicando el detalle de lo que debería ser presentado para que verifique su estado FRENTE AL ESTADO o RESULTADO DESEADO descrito y si su comportamiento difiere, se deduce que algo va mal con el desarrollo y su garantía de compatibilidad con aplicaciones anteriores.','core_tabla_comodin',4,'function FrmAutoRun()\r\n    {\r\n\r\n    }',0,'nav-tabs','menu_banco_pruebas','responsive','col-xs-12 col-sm-12 col-md-3 col-lg-3','panel-danger','','',0),(-6,'{$MULTILANG_Administre}: {$MULTILANG_BTReporteBugs}','','','core_bugtracker',2,'function VerificarFormBugtracker()\r\n    {\r\n        document.datosbug.historial_gestion.value=document.datosbug.historial_gestion.value+\"<li><b>\"+document.datosbug.momento_actual.value+\"</b>: \"+document.datosbug.accion_realizada.value+\"</li>\";\r\n        document.datosbug.PCO_Accion.value=\"PCO_ActualizarDatosFormulario\";\r\n        PCOJS_ValidarCamposYProcesarFormulario(\"datosbug\",0);\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        document.datosbug.fecha_actualizacion.value=document.datosbug.momento_actual.value;\r\n    }\r\n',0,'nav-tabs','datosbug','tradicional','','panel-primary','','',0),(3,'Zona Cobertura: Gestión Zonas de cobertura','Módulo de zona de cobertura','Aquí podrá gestionar todas las Zonas de cobertura de los acueductos veredales','app_zona_cobertura',3,'function FrmAutoRun()\r\n    {\r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n            $(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\r\n            $(\'#PCO_ErrorDescripcion\').val(\'La zona de cobertura se ha actualizado correctamente\');\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }\r\n\r\nfunction eliminarZona(){\r\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=ZONAS_eliminarZona&idZona=\' + document.FRMBASEINFORME.PCO_Valor.value));\r\n    if(respEliminar == 0) {\r\n        setTimeout(function(){ \r\n              \r\n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\r\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:3:1\';\r\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\r\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\r\n			document.FRMBASEINFORME.target = \'_self\';\r\n			document.FRMBASEINFORME.submit();\r\n        }, 3000);\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado la zona\");\r\n\r\n    }\r\n    else\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La zona se encuentra asociado a un usuario!\");\r\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','',NULL),(1,'Tarifas: Gestión de tarifas','Módulo de tarifas','Aqui podrá gestionar todas las tarifas','app_tarifas',3,'function FrmAutoRun()\r\n    {\r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n            $(\'#btn_create2\').hide();\r\n            $(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\r\n            $(\'#PCO_ErrorDescripcion\').val(\'la tarifa se ha actualizado correctamente\');\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }\r\n    \r\nfunction eliminarTarifa() {\r\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=TARIFAS_eliminarTarifa&idTarifa=\' + document.FRMBASEINFORME.PCO_Valor.value));\r\n\r\n    if(respEliminar == 0) {\r\n        setTimeout(function(){ \r\n              \r\n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\r\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:1:1\';\r\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\r\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\r\n			document.FRMBASEINFORME.target = \'_self\';\r\n			document.FRMBASEINFORME.submit();\r\n        }, 3000);\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado la tarifa\");\r\n\r\n    }\r\n    else\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La tarifa se encuentra asociado a un usuario!\");\r\n}\r\n\r\nfunction camposObligatoriosValidar({agregar, eliminar, campo, titulo}) {\r\n    const indexOf = PCOJS_ListaCamposValidar.indexOf(campo);\r\n    if(indexOf > -1) { //existe en el array\r\n        if(agregar) return;\r\n        else if(eliminar) {\r\n            PCOJS_ListaCamposValidar.splice(indexOf, 1);\r\n            PCOJS_ListaTitulosValidar.splice(indexOf, 1);\r\n        }\r\n    } else { //Not found\r\n        if(agregar) {\r\n            PCOJS_ListaCamposValidar.push(campo);\r\n            PCOJS_ListaTitulosValidar.push(titulo);\r\n        } else\r\n            return;\r\n    }\r\n}\r\n\r\nfunction guardarDatos() {\r\n    if($(\'#tarifa_dinamica\').val()) {\r\n        camposObligatoriosValidar({eliminar: 1, campo: \'costo\'});\r\n        camposObligatoriosValidar({agregar: 1, campo: \'valor_metro_cubico\', titulo: \'Valor metro cúbico\'});\r\n    }\r\n    else {\r\n        camposObligatoriosValidar({agregar: 1, campo: \'costo\', titulo: \'Costo\'});\r\n        camposObligatoriosValidar({eliminar: 1, campo: \'valor_metro_cubico\'});\r\n    }\r\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\r\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','',0),(2,'Clientes: Gestión Clientes','Gestión de clientes','Modulo para la gestión de los clientes','app_clientes',3,'function FrmAutoRun()\r\n    {\r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n            $(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\r\n            $(\'#PCO_ErrorDescripcion\').val(\'El cliente se ha actualizado correctamente\');\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }\r\n\r\nfunction eliminarUsuario(){\r\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=CLIENTES_eliminarCliente&idCliente=\' + document.FRMBASEINFORME.PCO_Valor.value));\r\n    if(respEliminar == 0) {\r\n        setTimeout(function(){ \r\n              \r\n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\r\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:2:1\';\r\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\r\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\r\n			document.FRMBASEINFORME.target = \'_self\';\r\n			document.FRMBASEINFORME.submit();\r\n        }, 3000);\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el usuario\");\r\n\r\n    }\r\n    else\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"el usuario se encuentra asociado a una factura!\");\r\n}',0,'nav-tabs','datos','tradicional','','panel-primary','','',NULL),(4,'Facturas: Gestión facturas','','','app_facturas',3,'const { id_contrato } = document.datos;\r\n\r\nfunction HabilitarDTInforme(IdInforme)\r\n    {\r\n        $(\"#TablaInforme_\"+IdInforme).dataTable({\r\n            dom: \"Blfrtip\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\r\n            buttons: [\r\n                { extend: \"copy\",    className: \"InformeBotonCopiar\" },\r\n                { extend: \"csv\",     className: \"InformeBotonCsv\" },\r\n                { extend: \"excel\",   className: \"InformeBotonExcel\" },\r\n                //\'.$CadenaExportaPDF.\'\r\n                //{ extend: \"print\", className: \"InformeBotonPrint\" }\r\n            ],\r\n            \r\n            scrollX: true,\r\n            bAutoWidth: true,\r\n            order: [],\r\n            processing: true,\r\n            colReorder: true,\r\n            fnInitComplete: function() {\r\n                this.fnAdjustColumnSizing(true);\r\n            },\r\n            \"language\": {\r\n                lengthMenu: \"Mostrando _MENU_ resultados por página\",\r\n                zeroRecords: \"Nothing found - sorry\",\r\n                info: \"Viendo página _PAGE_ de _PAGES_\",\r\n                infoEmpty: \"No hay registros disponibles\",\r\n                infoFiltered: \"(Filtrado de _MAX_ registros en total)\",\r\n                oPaginate: { sFirst:\"Primero\",sLast:\"Ultimo\",sNext:\"Siguiente\",sPrevious:\"Previo\" },\r\n                sEmptyTable:\"No hay datos en la tabla\",\r\n                sSearch:\"Buscar:\",\r\n                sLoadingRecords:\"Cargando...\",\r\n                sProcessing:\"Procesando...\",\r\n                sZeroRecords:\"No hay registros que coincidan con el criterio de búsqueda\"\r\n            }\r\n        });\r\n    }\r\n\r\nfunction Aplicar_data_table(inf)\r\n{\r\n    //$(\'#PCO_Modal_MensajeCuerpo\').html(informe_listado_asistentes_de_actividad);\r\n    table=$(\'#TablaInforme_\'+inf).dataTable({\r\n        aLengthMenu: [[5, 10, 25, 50, -1], [5, 10, 25, 50, \"All\"]],\r\n        scrollX: true,\r\n        scrollY: true,\r\n        scrollCollapse: true,\r\n        bAutoWidth: true,\r\n        processing: true,\r\n        colReorder: true,\r\n        fnInitComplete: function() {\r\n            this.fnAdjustColumnSizing(true);\r\n        },\r\n        language: {\r\n            lengthMenu: \"Mostrando _MENU_ resultados por página\",\r\n            zeroRecords: \"Nothing found - sorry\",\r\n            info: \"Viendo página _PAGE_ de _PAGES_\",\r\n            infoEmpty: \"No hay registros disponibles\",\r\n            infoFiltered: \"(Filtrado de _MAX_ registros en total)\",\r\n            oPaginate: { sFirst:\"Primero\",sLast:\"Ultimo\",sNext:\"Siguiente\",sPrevious:\"Previo\" },\r\n            sEmptyTable:\"No hay datos en la tabla\",\r\n            sSearch:\"Buscar:\",\r\n            sLoadingRecords:\"Cargando...\",\r\n            sProcessing:\"Procesando...\",\r\n            sZeroRecords:\"No hay registros que coincidan con el criterio de búsqueda\"\r\n        }\r\n    });\r\n    $(\'#container\').css( \'display\', \'block\' );\r\n    table.columns.adjust().draw();\r\n    table.fnAdjustColumnSizing();\r\n}\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n            $(\'#id_cliente\').attr(\'readonly\', true);\r\n            /*$(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\r\n            $(\'#PCO_ErrorDescripcion\').val(\'El cliente se ha actualizado correctamente\');*/\r\n            //Load Image\r\n            const href = document.querySelector(\"#PCOContenedor_comprobante > table > tbody > tr > td > a\").getAttribute(\"href\");\r\n            if(href)\r\n                $(\'#imgLoader\').html(`<a href=\"${href}\" target=\"_BLANK\"> <img src=\"${href}\" width=\"500\" height=\"600\"> </a>`);\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }\r\n\r\nfunction onchangeComprobante() {\r\n    var currentDate = new Date();\r\n    var fecha_actual = ((currentDate.getFullYear()) + \'-\' + (\'0\' + (currentDate.getMonth()+1)).slice(-2) + \'-\' + (\'0\' + currentDate.getDate()).slice(-2));\r\n\r\n    $(\'#fecha_pago\').val(fecha_actual);\r\n    $(\'#fecha_comprobante\').val(fecha_actual);\r\n}\r\n\r\nfunction validarValorAPagar() {\r\n\r\n	const valorSinRecargo = $(\'#valor_sin_recargo\').val();\r\n	const valorConRecargo = $(\'#valor_con_recargo\').val();\r\n    //const fechaSinRecargo = $(\'#fecha_sin_recargo\').val();\r\n	const fechaConRecargo = $(\'#fecha_con_recargo\').val();\r\n\r\n	const valorPagado = $(\'#valor_pagado\').val();\r\n	const fechaPagado = $(\'#fecha_pago\').val();\r\n\r\n	//const fechaSRArr = fechaSinRecargo.split(\'-\');\r\n	const fechaCRArr = fechaConRecargo.split(\'-\');\r\n	const fechaPagadoArr = fechaPagado.split(\'-\');\r\n\r\n	//const dtFSR = new Date(fechaSRArr[0], parseInt(fechaSRArr[1]) - 1, fechaSRArr[2]).getTime();\r\n	const dtFCR = new Date(fechaCRArr[0], parseInt(fechaCRArr[1]) - 1, fechaCRArr[2]).getTime();\r\n	const dtVP = new Date(fechaPagadoArr[0], parseInt(fechaPagadoArr[1]) - 1, fechaPagadoArr[2]).getTime();\r\n\r\n	if (dtFCR >= dtVP && valorPagado != valorSinRecargo) {\r\n		PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar debe ser el valor sin recargo\");\r\n		return false;\r\n	}\r\n	if (dtFCR <= dtVP && valorPagado != fechaConRecargo) {\r\n		PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El valor a pagar debe ser el valor con recargo\");\r\n		return false;\r\n	}\r\n	return true;\r\n}\r\n\r\nfunction cargarFacturas() {\r\n    const informe = PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:12:0&id_contrato=\' + id_contrato.value);\r\n    $(\'#informeFacturas\').html(informe);\r\n    Aplicar_data_table(12);\r\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','',0),(5,'Facturas: Agregar factura','Gestión de facturas','Módulo para la creación de una factura','app_facturas',3,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\n/*function onchangeUsuario() {\n    if($(\'#id_cliente\').val()) {\n        const user = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=CLIENTES_consultarInfoCliente&idCliente=\' + document.datos.id_cliente.value));\n        console.log({ user });\n    }\n    else {\n        \n    }\n}\n\nfunction onchangeMesCrearFactura() {\n    if($(\'#mes_factura\').val()) {\n        const mesFact = PCO_ObtenerContenidoAjax(0, \'index.php\',\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=FACTMES_consultarInfoFactMes&id=\' + document.datos.mes_factura.value);\n        console.log({ mesFact });\n    }\n    else {\n        \n    }\n}\n*/\n\nfunction onchangeUsuario() {\n    PCOJS_LimpiarComboBox(\'id_contrato\');\n    if(document.datos.id_cliente.value) {\n        const contratos = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=CONTRATOS_consultarContratosCliente&idCliente=\' + document.datos.id_cliente.value));\n        console.log({ contratos });\n        if(contratos.length > 1)\n            PCOJS_AgregarOpcionComboBox(\'id_contrato\', \'\', \'\');\n        contratos.forEach(function(el) {\n            PCOJS_AgregarOpcionComboBox(\'id_contrato\', el.id, el.id + \' - \' + el.direccion);\n        });\n        if(contratos.length == 1)\n            obtenerFacturaCliente();\n        else\n            PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se han cargado varios contratos a este usuario, selecciona uno de ellos para cargar la tarifa correspondiente\");\n    }\n    PCOJS_ActualizarComboBox(\'id_contrato\');\n}\n\nfunction obtenerFacturaCliente() {\n    if(document.datos.mes_factura.value && document.datos.id_cliente.value && document.datos.id_contrato.value) {\n\n        const detFact = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=FACTURAS_consultarInformacionFacturaPorCliente&idCliente=\' + document.datos.id_cliente.value + \'&idFactMes=\' + document.datos.mes_factura.value + \'&idContrato=\' + document.datos.id_contrato.value));\n        //if(detFact.length == 1) {\n            $(\'#tarifa_aplicada\').val(detFact.tarifa_aplicada || \'\');\n            $(\'#valor_con_recargo\').val(detFact.valor_con_recargo || \'\');\n            $(\'#valor_sin_recargo\').val(detFact.valor_sin_recargo || \'\');\n            $(\'#fecha_con_recargo\').val(detFact.fecha_con_recargo || \'\');\n            $(\'#fecha_sin_recargo\').val(detFact.fecha_sin_recargo || \'\');\n            $(\'#fecha_inicio_facturacion\').val(detFact.fecha_inicio_facturacion || \'\');\n            $(\'#saldo_pendiente\').val(detFact.saldo_pendiente || \'0\');\n        //}\n    }\n}\n\nfunction crearFactura() {\n    document.datos.PCO_Accion.value=\'FACTURAS_crearFacturaCliente\';\n	//document.datos.PCO_Objeto.value=\'frm:2:1\';\n	document.datos.Precarga_EstilosBS.value=\'1\';\n	document.datos.Presentar_FullScreen.value=\'0\';\n	document.datos.target = \'_self\';\n    PCOJS_ValidarCamposYProcesarFormulario(\'datos\');\n	\n	//document.FRMBASEINFORME.submit();\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','',NULL),(-28,'[SubForm] {$MULTILANG_InfParam}','','','core_informe',1,'//Determina que campos deben estar visibles de acuerdo al valor del combo que activa los panefilter\r\nfunction AlternarCamposVisibles_PaneFilter()\r\n    {\r\n        if ($(\"#pane_activado\").val()!=\"N\")\r\n            {\r\n                $(\"#PCOContenedor_pane_cascada\").show();\r\n                $(\"#PCOContenedor_pane_colapsado\").show();\r\n                $(\"#PCOContenedor_pane_columnas\").show();\r\n                $(\"#PCOContenedor_pane_subtotalesrelativos\").show();\r\n                $(\"#PCOContenedor_pane_conteos\").show();\r\n                $(\"#PCOContenedor_pane_controles\").show();\r\n                $(\"#PCOContenedor_pane_control_colapsar\").show();\r\n                $(\"#PCOContenedor_pane_control_ordenar\").show();\r\n            }\r\n        else\r\n            {\r\n                $(\"#PCOContenedor_pane_cascada\").hide();\r\n                $(\"#PCOContenedor_pane_colapsado\").hide();\r\n                $(\"#PCOContenedor_pane_columnas\").hide();\r\n                $(\"#PCOContenedor_pane_subtotalesrelativos\").hide();\r\n                $(\"#PCOContenedor_pane_conteos\").hide();\r\n                $(\"#PCOContenedor_pane_controles\").hide();\r\n                $(\"#PCOContenedor_pane_control_colapsar\").hide();\r\n                $(\"#PCOContenedor_pane_control_ordenar\").hide();\r\n            }\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        AlternarCamposVisibles_PaneFilter();\r\n    }',0,'','datos','responsive','col-xs-12 col-sm-12 col-md-12 col-lg-12','panel-primary','','',0),(6,'Contratos: Gestión Contratos','Gestión de contratos','Modulo para la gestión de los contratos','app_contratos',3,'function FrmAutoRun()\r\n    {\r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }\r\n\r\nfunction eliminarUsuario(){\r\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=CLIENTES_eliminarCliente&idCliente=\' + document.FRMBASEINFORME.PCO_Valor.value));\r\n    if(respEliminar == 0) {\r\n        setTimeout(function(){ \r\n              \r\n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\r\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:2:1\';\r\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\r\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\r\n			document.FRMBASEINFORME.target = \'_self\';\r\n			document.FRMBASEINFORME.submit();\r\n        }, 3000);\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el usuario\");\r\n\r\n    }\r\n    else\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"el usuario se encuentra asociado a una factura!\");\r\n}',0,'nav-tabs','datos','tradicional','','panel-primary','','',NULL),(-27,'TEST_PracticoFramework - Pruebas Controles de Datos','','','core_auditoria',3,'function PracticoTEST_Combo_AgregarOpcionesCSV()\r\n    {\r\n        PCOJS_OpcionesCombo_DesdeCSV(\"combo_lista_dinamica\",\"Opcion1,Opcion2,Opcion3\",\",\");\r\n    }\r\n\r\nfunction PracticoTEST_Combo_LimpiarOpciones()\r\n    {\r\n        PCOJS_LimpiarComboBox(\"combo_lista_dinamica\");\r\n    }\r\n\r\nfunction PracticoTEST_Combo_AgregarOpcion()\r\n    {\r\n        var hora = new Date();\r\n        PCOJS_AgregarOpcionComboBox(\"combo_lista_dinamica\",\"ValorAgregado\",\"Opcion agregada \"+hora.getTime());\r\n        PCOJS_ActualizarComboBox(\"combo_lista_dinamica\");\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-4 col-lg-4','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");\r\n','',0),(-23,'{$MULTILANG_AgregarNuevaTarea}','','','core_kanban',2,'function FrmAutoRun()\r\n    {\r\n        $( document ).ready(function() {\r\n            if ($(\"#titulo\").val()==\"\")\r\n                $(\"#PCOContenedor_btn_actualizar\").hide();\r\n            else\r\n                $(\"#PCOContenedor_btn_agregar\").hide();\r\n        });\r\n        \r\n        //Determina si el usuario puede o no aceptar las pruebas directamente sobre la tarea\r\n        if ($(\"#usuario_aceptacion_pf\").val() != \"{$PCOSESS_LoginUsuario}\")\r\n            $(\"#PCOContenedor_aceptacion_pf\").html(\"<br><i class=\'fa fa-ban fa-fw\'></i> <i>Usuario no autorizado para aceptar este tipo de prueba</i>\");\r\n        if ($(\"#usuario_aceptacion_pnf\").val() != \"{$PCOSESS_LoginUsuario}\")\r\n            $(\"#PCOContenedor_aceptacion_pnf\").html(\"<br><i class=\'fa fa-ban fa-fw\'></i> <i>Usuario no autorizado para aceptar este tipo de prueba</i>\");\r\n\r\n\r\n        //Determina si el usuario puede usar el boton de agregar o actualizar\r\n        var PuedeEditarOActualizar=0;\r\n        var CadenaAutorizadosEdicion=\'_LMQTP_,\' + $(\"#PCO_ComboMultiple_usuarios_edicion\").val();//Puede tener comas\r\n        if ($(\"#login_admintablero\").val() == \"{$PCOSESS_LoginUsuario}\") PuedeEditarOActualizar=1;\r\n        if ($(\"#compartido_rw\").val() == \"{$PCOSESS_LoginUsuario}\") PuedeEditarOActualizar=1;\r\n        //alert(CadenaAutorizadosEdicion);\r\n        if (CadenaAutorizadosEdicion.indexOf(\"{$PCOSESS_LoginUsuario}\") > 0 ) PuedeEditarOActualizar=1;\r\n        if (PuedeEditarOActualizar==0)\r\n            {\r\n                $(\"#PCOContenedor_btn_actualizar\").hide();\r\n                $(\"#PCOContenedor_btn_agregar\").hide();\r\n            }\r\n\r\n    }',0,'nav-tabs','datosfield','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','<?php\r\n    //Verifica si el usuario actual tiene acceso a tableros Kanban\r\n    global $PCOSESS_LoginUsuario,$TablasCore;\r\n    $TieneRegistroTableros=PCO_EjecutarSQL(\"SELECT id FROM \".$TablasCore.\"kanban WHERE archivado<>1 AND categoria=\'[PRACTICO][ColumnasTablero]\' AND (login_admintablero=\'$PCOSESS_LoginUsuario\' OR compartido_rw LIKE \'%|$PCOSESS_LoginUsuario|%\') LIMIT 0,1 \")->fetchColumn();\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario) && $TieneRegistroTableros==\"\")\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-26\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','<?php\r\n    global $MULTILANG_AgregarNuevaTarea,$MULTILANG_Finalizado;\r\n	PCO_Auditar(\"Agrega/actualiza tarea Kanban a tablero $tablero\");\r\n    PCO_Mensaje(\"{$MULTILANG_AgregarNuevaTarea}\", \"$MULTILANG_Finalizado.  Puede que necesite actualizar su tablero si desea verla inmediatamente\", \'\', \'fa fa-thumbs-up fa-2x\', \'alert alert-success \');\r\n    die();\r\n',0),(-12,'{$MULTILANG_MnuAdmin}','','','core_menu',2,'// Oculta todos los campos (se debe indicar el valor maximo de los id dados a campoXX\r\nfunction PCOJS_OcultarCampos()\r\n	{\r\n        $(\'#PCOContenedor_Subtitulo1\').hide();            //\r\n        $(\'#PCOContenedor_Subtitulo2\').hide();            //\r\n        $(\'#PCOContenedor_padre\').hide();                 //10\r\n        $(\'#PCOContenedor_texto\').hide();                 //1\r\n        $(\'#PCOContenedor_peso\').hide();                  //2\r\n        $(\'#PCOContenedor_posible_arriba\').hide();        //3\r\n        $(\'#PCOContenedor_posible_escritorio\').hide();    //3\r\n        $(\'#PCOContenedor_posible_centro\').hide();        //3\r\n        $(\'#PCOContenedor_posible_izquierda\').hide();     //3\r\n        $(\'#PCOContenedor_posible_usuario\').hide();       //3\r\n        $(\'#PCOContenedor_seccion\').hide();               //4\r\n        $(\'#PCOContenedor_imagen\').hide();                //5\r\n        $(\'#PCOContenedor_btn_buscar_imagen\').hide();     //5\r\n        $(\'#PCOContenedor_destino\').hide();               //7\r\n        $(\'#PCOContenedor_url\').hide();                   //7\r\n        $(\'#PCOContenedor_tipo_comando\').hide();          //8\r\n        $(\'#PCOContenedor_comando\').hide();               //8\r\n        $(\'#PCOContenedor_btn_buscar_objeto\').hide();     //8\r\n        $(\'#PCOContenedor_clase_contenedor\').hide();      //11\r\n        $(\'#PCOContenedor_btn_guardar\').hide();           //9\r\n        $(\'#PCOContenedor_btn_actualizar\').hide();           //9\r\n	}\r\n\r\n//Determina los campos que debe dejar visibles de acuerdo al tipo de elemento a crear\r\nfunction PCOJS_ActualizarCamposVisibles()\r\n    {\r\n        PCOJS_OcultarCampos();\r\n        \r\n        //Identifica el tipo de objeto y muestra los campos que aplican\r\n        var tipo_objeto_activo=document.PCO_FormItemMenu.tipo_menu.options[document.PCO_FormItemMenu.tipo_menu.selectedIndex].value;\r\n        if (tipo_objeto_activo==\"grp\") //VisualizarCampos(\"1,2,3,4,5,9,11\");\r\n            {\r\n                $(\'#PCOContenedor_Subtitulo1\').show();            //\r\n                $(\'#PCOContenedor_texto\').show();                 //1\r\n                $(\'#PCOContenedor_peso\').show();                  //2\r\n                $(\'#PCOContenedor_posible_arriba\').show();        //3\r\n                $(\'#PCOContenedor_posible_escritorio\').show();    //3\r\n                $(\'#PCOContenedor_posible_centro\').show();        //3\r\n                $(\'#PCOContenedor_posible_izquierda\').show();     //3\r\n                $(\'#PCOContenedor_posible_usuario\').show();       //3\r\n                $(\'#PCOContenedor_seccion\').show();               //4\r\n                $(\'#PCOContenedor_imagen\').show();                //5\r\n                $(\'#PCOContenedor_btn_buscar_imagen\').show();     //5\r\n                $(\'#PCOContenedor_clase_contenedor\').show();      //11\r\n                if ($(\'#id\').val()!=\"\")\r\n                    $(\'#PCOContenedor_btn_actualizar\').show();\r\n                else\r\n                    $(\'#PCOContenedor_btn_guardar\').show();\r\n                //Asigna vacio por defecto al padre para opciones de agrupacion\r\n                document.PCO_FormItemMenu.padre.options[document.PCO_FormItemMenu.padre.selectedIndex].value=\"\";\r\n                document.PCO_FormItemMenu.padre.value=\"\";\r\n                $(\'#padre\').val(\'\');\r\n                $(\'#padre\').selectpicker(\'refresh\');\r\n            }\r\n        if (tipo_objeto_activo==\"opc\")  //VisualizarCampos(\"1,2,3,4,5,6,7,8,9,10\");\r\n            {\r\n                $(\'#PCOContenedor_Subtitulo1\').show();            //\r\n                $(\'#PCOContenedor_Subtitulo2\').show();            //\r\n                $(\'#PCOContenedor_padre\').show();                 //10\r\n                $(\'#PCOContenedor_texto\').show();                 //1\r\n                $(\'#PCOContenedor_peso\').show();                  //2\r\n                $(\'#PCOContenedor_posible_arriba\').show();        //3\r\n                $(\'#PCOContenedor_posible_escritorio\').show();    //3\r\n                $(\'#PCOContenedor_posible_centro\').show();        //3\r\n                $(\'#PCOContenedor_posible_izquierda\').show();     //3\r\n                $(\'#PCOContenedor_posible_usuario\').show();       //3\r\n                $(\'#PCOContenedor_seccion\').show();               //4\r\n                $(\'#PCOContenedor_imagen\').show();                //5\r\n                $(\'#PCOContenedor_btn_buscar_imagen\').show();     //5\r\n                $(\'#PCOContenedor_destino\').show();               //7\r\n                $(\'#PCOContenedor_url\').show();                   //7\r\n                $(\'#PCOContenedor_tipo_comando\').show();          //8\r\n                $(\'#PCOContenedor_comando\').show();               //8\r\n                $(\'#PCOContenedor_btn_buscar_objeto\').show();     //8\r\n                $(\'#PCOContenedor_clase_contenedor\').show();      //11\r\n                if ($(\'#id\').val()!=\"\")\r\n                    $(\'#PCOContenedor_btn_actualizar\').show();\r\n                else\r\n                    $(\'#PCOContenedor_btn_guardar\').show();\r\n\r\n            }\r\n    }\r\n\r\n// Actualiza los campos del form dependiendo de si la opcion tiene padre o no\r\nfunction PCOJS_ActualizarCamposHijos()\r\n	{\r\n	    var padre_seleccionado=document.PCO_FormItemMenu.padre.options[document.PCO_FormItemMenu.padre.selectedIndex].value;\r\n        //Si tiene un padre no aplica la seccion, ya que la hereda del padre\r\n        if (padre_seleccionado!=\"\")\r\n            {\r\n                $(\'#seccion\').val(\"PCO_NoVisible\");\r\n                $(\'#PCOContenedor_seccion\').hide();\r\n                $(\'#PCOContenedor_posible_arriba\').hide();        //3\r\n                $(\'#PCOContenedor_posible_escritorio\').hide();    //3\r\n                $(\'#PCOContenedor_posible_centro\').hide();        //3\r\n                $(\'#PCOContenedor_posible_izquierda\').hide();     //3\r\n                $(\'#PCOContenedor_posible_usuario\').hide();     //3\r\n            }\r\n        else\r\n            {\r\n                $(\'#PCOContenedor_seccion\').show();\r\n                $(\'#PCOContenedor_posible_arriba\').show();        //3\r\n                $(\'#PCOContenedor_posible_escritorio\').show();    //3\r\n                $(\'#PCOContenedor_posible_centro\').show();        //3\r\n                $(\'#PCOContenedor_posible_izquierda\').show();     //3\r\n                $(\'#PCOContenedor_posible_usuario\').show();     //3\r\n            }\r\n	}\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        PCOJS_OcultarCampos();\r\n        \r\n        //Si recibe un id entonces esta en modo de edicion y presenta lo que corresponda\r\n        if ($(\'#id\').val()!=\"\") \r\n            {\r\n                PCOJS_ActualizarCamposVisibles();\r\n                PCOJS_ActualizarCamposHijos();\r\n            }\r\n        else\r\n            {\r\n                $(\"#hash_unico\").val($.now());\r\n            }\r\n    }\r\n',0,'nav-tabs','PCO_FormItemMenu','tradicional','','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-12\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-32,'{$MULTILANG_Modulos}','{$MULTILANG_FrmTitOrigen2}','En aplicaciones de cierta envergadura,  permite definir los módulos que conformarán su aplicación y en los que serán agrupados posteriormente elementos como los formularios o informes.  Adicionalmente permite la granularidad de permisos entre equipos de desarrolladores y la generación de documentación de proyecto basada en una jerarquía determinada.','core_modulos_app',2,'function FrmAutoRun()\r\n    {\r\n        //Si esta en modo de edicion oculta la creacion y viceversa\r\n        if ($(\"#nombre\").val()==\"\")\r\n            {\r\n                $(\"#btn_actualizar\").hide();\r\n            }\r\n        else\r\n            {\r\n                $(\"#btn_guardar\").hide();\r\n            }\r\n        \r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-4 col-lg-4|col-xs-12 col-sm-12 col-md-8 col-lg-8','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-26\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n\r\n','<?php\r\nglobal $PCO_PostAccionDirecta;\r\n$PCO_PostAccionDirecta=1;\r\nPCO_CargarFormulario(\"-32\",1);',0),(-10,'{$MULTILANG_ReplicaTitulo}','','','core_replicasbd',2,'function FrmAutoRun()\r\n    {\r\n        //Determina si debe ocultar el boton de guardar y presentar el de actualizar segun el tipo de operacion\r\n        if ($(\"#nombre\").val()!=\"\")\r\n            $(\"#PCOContenedor_boton_guardar\").hide();\r\n        else\r\n            $(\"#PCOContenedor_boton_actualizar\").hide();\r\n    }\r\n',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-10\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n','',0),(-29,'TEST_PracticoFramework - Eventos JS','','','core_tabla_comodin',3,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }',0,'','datos','responsive','col col-xs-4 col-sm-4 col-md-4 col-lg-4','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");\r\n','',0),(-30,'TEST_PracticoFramework - Pruebas CRUD','','','core_auditoria',2,'function FrmAutoRun()\r\n    {\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");\r\n','<?php\r\nglobal $PCO_PostAccionDirecta;\r\n$PCO_PostAccionDirecta=1;\r\nPCO_CargarFormulario(\"-30\",\"1\");',0),(-7,'{$MULTILANG_UsrAudit1}','','','core_tabla_comodin',2,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }\r\n',0,'nav-tabs','FormAuditoria','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','<?php\r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-7\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n	PCO_Auditar(\"Carga modulo de auditoria\");\r\n    global $FechaInicioAuditoria,$PCO_FechaOperacionGuiones,$FechaFinAuditoria;\r\n    if ($FechaInicioAuditoria==\"\")\r\n        $FechaInicioAuditoria=$PCO_FechaOperacionGuiones;\r\n    if ($FechaFinAuditoria==\"\")\r\n        $FechaFinAuditoria=$PCO_FechaOperacionGuiones;\r\n    \r\n','<?php\r\n	PCO_CargarFormulario(\"-7\",1);\r\n',0),(-31,'TEST_PracticoFramework - Pruebas de Controles Especiales','','','core_auditoria',2,'function FrmAutoRun()\r\n    {\r\n    }',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-6','panel-primary','PCO_CargarFormulario(\"-25\",\"1\");\r\n','<?php\r\nglobal $PCO_PostAccionDirecta;\r\n$PCO_PostAccionDirecta=1;\r\nPCO_CargarFormulario(\"-31\",\"1\");',0),(-33,'{$MULTILANG_EnlacePcoder}','','','core_tabla_comodin',1,'function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); }\n\nfunction CambiarModo_Bienvenida()\n    {\n        const ModosPermitidos = [\"Eiffel\", \"AsciiDoc\", \"Cirru\", \"Clojure\", \"Dockerfile\", \"Elixir\", \"Elm\", \"Erlang\", \"Io\", \"Jack\", \"Markdown\", \"Mask\", \"pgSQL\", \"Properties\", \"Space\", \"Tcl\", \"Vala\", \"Text\"];\n        const Indice = Math.floor(Math.random() * ModosPermitidos.length);\n	    if ($(\"#PCODER_archivo\").val() == \"inc/practico/PCoder\")\n	        {\n	            CambiarModoEditor(\"ace/mode/\"+ModosPermitidos[Indice]);\n	        }\n    }\n\nfunction PCODER_CerrarArchivoActual()\n    {\n        //TODO: revisar si con almacenamiento local se puede validar si hay cambios sin guardar para advertir\n        \n        //Elimina bloqueos de versiones abiertas del archivo SOLO si son abiertas por el mismo usuario\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-33&Llave={$LlaveDePaso}&PCODER_Accion=PCODER_EliminarBloqueo&ArchivoBloqueo={$PCODER_archivo}\");\n\n        //Elimina variable local que indica que la ventana esta abierta\n        localStorage.removeItem(\"{$LlaveVentana_Archivo}\");\n        \n        //Cierra la ventana de manera definitiva\n        window.close();\n        //Para los casos en que la ventana no puede ser cerrada, presenta mensaje que no se puede cerrar automaticamente y quita el editor.\n		PCOJS_MostrarMensaje(\"Sesion\", \"{P}Coder ha sido cerrado. Puede cerrar su navegador o pestaña.<br><br><br>{P}Coder was closed. You can close this browser or tab.\",\" modal modal-wide \");\n        $(\"#page-wrapper\").hide();\n    }\n\n\n//para posible eliminacion, mirar solo el evento de apertura.\nfunction ExplorarPath(DesdeOnChange)\n	{\n		//Inicializa el explorador de archivos (panel izquierdo)\n		$(document).ready( function() {\n			$(\'#marco_explorador\').fileTree({ root: path_exploracion_archivos.value, script: \'../../inc/jquery/plugins/jquery.fileTree-1.01/connectors/jqueryFileTree.php\', folderEvent: \'dblclick\' }, function(archivo_seleccionado) {\n				PCODER_CargarArchivo(archivo_seleccionado);\n\n				//Simula clic sobre la pestana de archivos para pasar automaticamente a esta vista\n				$(\'#pestana_editor_archivos\').trigger(\'click\');\n			});\n		});\n		\n		//Inicializa el explorador de archivos (creacion de archivos y carpetas)\n		$(document).ready( function() {\n			$(\'#marco_explorador_creacionarchivo\').fileTree({ root: path_exploracion_archivos.value, script: \'../../inc/jquery/plugins/jquery.fileTree-1.01/connectors/jqueryFileTree.php?nofiles=true\' }, function(path_seleccionado_creacion) {\n			});\n		});\n	}\n\nfunction PCODER_EliminarHistorialArchivo()\n    {\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-33&Llave={$LlaveDePaso}&PCODER_Accion=PCODER_EliminarHistorial&Llave_Registro=\"+document.FRMBASEINFORME.PCO_Valor.value);\n		$(\'#PCO_Modal_Mensaje\').modal(\'hide\');\n    }\n\nfunction PCODER_CompararVersionArchivo()\n    {\n        var ParametrosVentana = [\n            \'height=\'+screen.height,\n            \'width=\'+screen.width,\n            \'location=no\',\n            \'menubar=no\',\n            \'resizable=yes\',\n            \'scrollbars=no\',\n            \'status=no\',\n            \'titlebar=no\',\n            \'toolbar=no\',\n            \'fullscreen=yes\' // only works in IE, but here for completeness\n        ].join(\',\');\n\n        URL=\"index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-35:0&Presentar_FullScreen=1&Precarga_EstilosBS=1\";\n\n        //Version historica siempre sale desde el registro de PCoder\n        URL+=\"&PDIFF_Version1=\";\n        URL+=\"&PDIFF_OrigenVersion1=B\";  //A | B\n        URL+=\"&PDIFF_TablaBDVersion1=core_pcoder_historial\";\n        URL+=\"&PDIFF_CampoBDVersion1=contenido\";\n        URL+=\"&PDIFF_LlaveBDVersion1=\"+document.FRMBASEINFORME.PCO_Valor.value;\n\n        //Version nueva puede estar saliendo desde archivo nuevo o BD segun origen del archivo editado.  Segun el caso define el origen para el Diff\n        if ($(\"#Origen_Archivo\").val()==\"A\")\n            {\n                URL+=\"&PDIFF_OrigenVersion2=A\";  //A | B\n                URL+=\"&PDIFF_Version2=\"+$(\"#PCODER_archivo\").val();\n            }\n        else\n            {\n                URL+=\"&PDIFF_OrigenVersion2=B\";  //A | B\n                URL+=\"&PDIFF_TablaBDVersion2=\"+$(\"#Tabla_Archivo\").val();\n                URL+=\"&PDIFF_CampoBDVersion2=\"+$(\"#Campo_Archivo\").val();\n                URL+=\"&PDIFF_LlaveBDVersion2=\"+$(\"#Llave_Registro\").val();                \n            }\n\n        var VentanaHistorial = window.open(URL, VentanaHistorial, ParametrosVentana).focus();\n        VentanaHistorial.moveTo(0,0);\n    }\n\nfunction PCODER_HistorialArchivoActual()\n    {\n        if(\"{$PCODER_archivo}\"!=\"inc/practico/PCoder\")\n            {\n        		ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_CargarObjeto&PCO_Objeto=inf:-23:0&PCODER_archivo=\"+$(\"#PCODER_archivo\").val()+\"&NombreArchivo={$PCODER_NombreArchivo}&Presentar_FullScreen=1&Precarga_EstilosBS=0\");\n        		PCOJS_MostrarMensaje(\"{$MULTILANG_PCODER_HistorialVersiones}\", ResultadoOperacion,\" modal modal-wide \");                \n                //$(\"#PCODIV_SeccionLateralFlotante\").html(ResultadoOperacion);\n                \n            }\n        // else\n        //     {\n        // 		PCOJS_MostrarMensaje(MULTILANG_PCODER_HistorialVersiones, \"Cargue primero un archivo para revisar su historial de cambios<br><br>Please load a file to see the version history\");\n        //     }\n    }\n\n\nfunction AjustarTipoMenu()\n    {\n		if ($(\'#PCODER_TipoMenu\').val()==\"Texto\")\n		    {\n		        $(\'.menu_iconos\').hide();\n		    }\n		else\n		    {\n		        $(\'.menu_textual\').hide();\n		        $(\'.menu_iconos\').css(\"padding\",\"0\");\n		    }\n    }\n\nfunction AjustarMaquetacion_FormularioEditor()\n    {\n        //Estilos para ajustar la maquetacion y economizar espacio\n        $(\'#PCOContenedor_marco_cadena_editores_ace\').css(\'padding\',\'0\');\n        $(\'#page-wrapper\').css(\'padding\',\'0\');\n        $(\"[class=container-fluid]\").each(function() { $(this).css(\"padding\", \"0\"); });\n        $(\"[class=col-lg-12]\").each(function() { $(this).find(\'br:first\').remove(); });\n        $(\".menu_textual\").each(function() { $(this).css(\"padding-left\", \"0\"); });\n        //$(\".iconos_fijos_menu\").each(function() { $(this).css(\"padding\", \"0\"); });\n        $(\"#MENU_FORMULARIO_OPCION_1\").each(function() { $(this).find(\'ul:first\').css(\"padding\",\"0\"); });\n\n\n\n\n        //TODO: Elimina la barra de navegacion responsive y deja el menu para que se comporte como un DIV mas...\n        // $(\"MENU_FORMULARIO_-33\").removeClass(\"collapse navbar navbar-collapse navbar-default navbar-inverse\");\n        // $(\".navbar-header\").remove();\n        // $(\"nav\").removeClass(\"navbar-default\");\n        // $(\"nav\").each(function() { $(this).css(\"min-height\", \"0\"); });\n        //$(\"nav\").removeClass(\"navbar\");\n        // $(\".navbar-collapse\").css(\"overflow\", \"visible\");\n        // $(\".navbar-collapse.collapse\").css(\"overflow\", \"visible\"); \n        // $(\".navbar-toggle\").css(\"display\", \"none\"); \n\n        //Ajusta barras de desplazamiento\n        $(\'body\').css(\'overflow-x\',\'hidden\');\n        $(\'body\').css(\'overflow-y\',\'hidden\');\n        $(\'html\').css(\'overflow-x\',\'hidden\');\n        $(\'html\').css(\'overflow-y\',\'hidden\');\n\n        //Estilos generales inyectados directamente al HEAD usados en el estandar anterior de PCoder\n		$(\'head\').append(\'<style type=\"text/css\"> \\\n            /*Personalizacion de barras de desplazamiento*/ \\\n	        /*Barra de desplazamiento como tal*/ \\\n	        ::-webkit-scrollbar { \\\n		        width: 10px; \\\n		        height: 10px; \\\n	        } \\\n        	/*Botones de los extremos de la barra*/ \\\n        	::-webkit-scrollbar-button:start:decrement, \\\n        	::-webkit-scrollbar-button:end:increment  { \\\n        		display: none; \\\n        	} \\\n        	/*Barra sobre la que se mueve el boton flotante*/ \\\n        	::-webkit-scrollbar-track  { \\\n        	} \\\n        	/*Espacio libre de la barra de desplazamiento*/ \\\n        	::-webkit-scrollbar-track-piece  { \\\n        		background-color: #3b3b3b; \\\n        		-webkit-border-radius: 6px; \\\n        	} \\\n        	/*Boton flotante de la barra de desplazamiento*/ \\\n        	::-webkit-scrollbar-thumb:vertical { \\\n        		-webkit-border-radius: 6px; \\\n        		background: #666 no-repeat center; \\\n        	} \\\n        	::-webkit-scrollbar-thumb:horizontal { \\\n        		-webkit-border-radius: 6px; \\\n        		background: #666 no-repeat center; \\\n        	} \\\n        	/*Esquina donde se encuentran las barras*/ \\\n        	::-webkit-scrollbar-corner { \\\n        		display: none; \\\n        	} \\\n        	/*Esquina donde se encuentran las barras - cuando es redimensionable*/ \\\n        	::-webkit-resizer { \\\n        		display: none; \\\n        	} \\\n	        </style>\');\n    }\n\nfunction AjustarPaletaEditor()\n    {\n        //Ajusta colores, tamaños y presentacion de algunos elementos\n        //$(\".navbar-collapse\").css(\"background\",\"272727\");                       //Fondo barra de menus:  gray | 272727 | 222222 | 3d3d3d\n        $(\"#MENU_FORMULARIO_-33\").addClass(\"navbar-default navbar-inverse\");        //Estilo barra de menues\n        $(\"#MENU_FORMULARIO_-33\").css(\"color\",\"lightgray\");                         //Color de fuente menus\n        $(\".navbar-default\").css(\"border-width\",\"0\");                               //Elimina borde en barra de menus\n        $(\".dropdown-menu\").css(\"background\",\"darkgray\");                           //Fondo de los menues desplegables - opciones\n        $(\"[class=container-fluid]\").each(function() { $(this).find(\'div:first\').css(\'background\',\'#272727\'); });   //Fondo general del editor antes usada en body o html: 002a36 | BFBFBF | 888888 | 272727 | 000000\n        $( \"#wrapper\" ).css( \"background-color\",\"#272727\" );                        //Color del fondo de la barra izquierda\n\n        //Estilos para nombre del archivo o recurso editado\n        //$(\".path_visual\").each(function() { $(this).css(\"padding\", \"1\"); });\n        $(\".path_visual\").css(\"background\",\"#272727\");\n        $(\".path_visual\").addClass(\"btn-xs\");\n        $(\".path_visual\").each(function() { $(this).css(\"font-weight\", \"bold\"); });\n        $(\".path_visual\").each(function() { $(this).css(\"font-size\", \"9px\"); });\n        $(\".path_visual\").each(function() { $(this).css(\"color\", \"orange\"); });\n        \n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            {\n                $(\"html\").css(\"filter\",\"invert(0%)\");\n                $(\"video\").css(\"filter\",\"invert(0%)\");\n                $(\"iframe\").css(\"filter\",\"invert(0%)\");\n                $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n            }\n        if (\"{$PCO_TransformacionColores}\"==\"grises\")\n            {\n                $(\"html\").css(\"filter\",\"grayscale(0%)\");\n            }\n        if (\"{$PCO_TransformacionColores}\"==\"sepia\")\n            {\n                $(\"html\").css(\"filter\",\"sepia(0%)\");\n            }\n    }\n    \n\nfunction IntercambiarVisibilidadNumerosDeLinea()\n	{\n		//InterCambia el modo del editor para mostrar (true) u ocultar (false) los numeros de linea\n		if (editor.renderer.getShowGutter()==true)\n			{\n				editor.renderer.setShowGutter(false);\n				EditorClonado.renderer.setShowGutter(false);\n			}\n		else\n			{\n				editor.renderer.setShowGutter(true);\n				EditorClonado.renderer.setShowGutter(true);\n			}\n	}\n\nfunction IntercambiarVisibilidadMenu()\n	{\n		if ($(\"#PCODER_OcultarMenu\").val()==\"0\")\n			{\n				$(\".navbar-default\").hide();\n				//$(\"#panel_inferior\").hide();\n			    $(\"#PCODER_OcultarMenu\").val(\"1\");\n			}\n		else\n			{\n				$(\".navbar-default\").show();\n				//$(\"#panel_inferior\").show();\n				$(\"#PCODER_OcultarMenu\").val(\"0\");\n			}\n		ActualizarBarraEstado();\n		PCODER_RecalcularMaquetacion();\n	}\n\n\nfunction SaltarALinea()\n	{\n		//Salta a una linea especifica del editor\n		var linea = document.getElementById(\"linea_salto\").value;\n		//Valida que se tenga un valor de linea y que este en un rango valido\n		if (linea!=\"\" && linea>0)\n			{\n				editor.gotoLine(linea, 0, true);\n				document.getElementById(\"linea_salto\").value=\"\";			\n			}\n	}\n\n//Toma las propiedades del editor principal y las copia en el editor clonado\nfunction ClonarPropiedadesEditor()\n	{\n		EditorClonado.setAnimatedScroll(editor.getAnimatedScroll());\n		EditorClonado.setBehavioursEnabled(editor.getBehavioursEnabled());\n		EditorClonado.setOverwrite(editor.getOverwrite());\n		EditorClonado.setPrintMarginColumn(editor.getPrintMarginColumn());\n		EditorClonado.setScrollSpeed(editor.getScrollSpeed());\n		EditorClonado.setShowInvisibles(editor.getShowInvisibles());\n		EditorClonado.setShowPrintMargin(editor.getShowPrintMargin());\n		EditorClonado.setWrapBehavioursEnabled(editor.getWrapBehavioursEnabled());\n		EditorClonado.setTheme(editor.getTheme());\n		EditorClonado.setFontSize(editor.getFontSize());\n		EditorClonado.renderer.setShowGutter(editor.renderer.getShowGutter());\n		\n		//Modo de resaltado\n		ModoClonado=\"ace/mode/{$PCODER_ModoEditor}\";\n		var ModoFiltrado = ModoClonado.replace(/_/g, \" \");\n		ModoFiltrado = ModoFiltrado.toLowerCase();\n		//Cambia el modo de sintaxis y errores resaltado por el editor\n		EditorClonado.getSession().setMode(ModoFiltrado);\n	}\n\nfunction IntercambiarEstadoCaracteresInvisibles()\n	{\n		//InterCambia el modo del editor para mostrar (true) u ocultar (false) los caracteres invisibles segun su estado actual\n		if (editor.getShowInvisibles()==true)\n			{\n				editor.setShowInvisibles(false);\n				EditorClonado.setShowInvisibles(false);\n			}\n		else\n			{\n				editor.setShowInvisibles(true);\n				EditorClonado.setShowInvisibles(true);\n			}\n	}\n\nfunction IntercambiarPantallaCompleta()\n	{\n		if (!document.fullscreenElement &&    // alternative standard method\n		  !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement ) {  // current working methods\n			if (document.documentElement.requestFullscreen) {\n			  document.documentElement.requestFullscreen();\n			} else if (document.documentElement.msRequestFullscreen) {\n			  document.documentElement.msRequestFullscreen();\n			} else if (document.documentElement.mozRequestFullScreen) {\n			  document.documentElement.mozRequestFullScreen();\n			} else if (document.documentElement.webkitRequestFullscreen) {\n			  document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n			}\n		} else {\n			if (document.exitFullscreen) {\n			  document.exitFullscreen();\n			} else if (document.msExitFullscreen) {\n			  document.msExitFullscreen();\n			} else if (document.mozCancelFullScreen) {\n			  document.mozCancelFullScreen();\n			} else if (document.webkitExitFullscreen) {\n			  document.webkitExitFullscreen();\n			}\n		}\n	}\n\nfunction CambiarFuenteEditor(tamano)\n	{\n		//Cambia la fuente del editor al tamano recibido\n		editor.setFontSize(tamano);\n		try\n			{\n				EditorClonado.setFontSize(tamano);\n			}\n		catch(error) {}\n	}\n\nfunction CambiarTemaEditor(tema)\n	{\n		//Cambia la apariencia grafica del editor\n		editor.setTheme(tema);\n		try\n			{\n				EditorClonado.setTheme(tema);\n			}\n		catch(error) {}\n	}\n\nfunction CaracteresInvisiblesEditor(estado)\n	{\n		//Cambia el modo del editor para mostrar (true) u ocultar (false) los caracteres invisibles\n		if (estado==0)\n			editor.setShowInvisibles(false);\n		else\n			editor.setShowInvisibles(true);\n	}\n\nfunction AumentarTamanoFuente()\n	{\n		tamano=editor.getFontSize();\n		tamano = tamano.substring(0, tamano.length-2); //Elimina las letras de px al final\n		tamano=parseInt(tamano)+2;\n		CambiarFuenteEditor(tamano+\"px\");\n	}\n\n\nfunction DisminuirTamanoFuente()\n	{\n		tamano=editor.getFontSize();\n		tamano = tamano.substring(0, tamano.length-2); //Elimina las letras de px al final\n		tamano=parseInt(tamano)-2;\n		CambiarFuenteEditor(tamano+\"px\");\n	}\n\nfunction PCODER_DeshacerEdicion()\n	{\n        //editor.undo(true);\n        editor.getSession().getUndoManager().undo(false); //Si true deshabilita seleccion del texto\n    }\n\n\nfunction PCODER_RehacerEdicion()\n	{\n        //editor.redo(true);\n        editor.getSession().getUndoManager().redo(false); //Si true deshabilita seleccion del texto\n    }\n\n//Genera una nueva sesion del editor ACE\nfunction ClonarSesionEditor(session)\n	{\n		var s = new ace.EditSession(session.getDocument(), session.getMode());\n		s.$foldData = session.$cloneFoldData();\n		return s;\n	}\n\nfunction PCO_MostrarMensajeCargandoSimple(MiliSegundos)\n	{\n		// Se muestra el cuadro modal\n		$(\'#PCO_Modal_MensajeCargandoSimple\').modal(\'show\');\n\n		//Hacer que la ventana este siempre por encima\n		$(\"#PCO_Modal_MensajeCargandoSimple\").css(\"z-index\", \"1500\");\n		\n		//Si recibe un valor de segundos diferente de cero entonces programa el cierre automatico\n		if (MiliSegundos!=0)\n			setTimeout(function(){PCOJS_OcultarMensajeCargandoSimple()},MiliSegundos);\n	}\n\nfunction Guardar()\n	{\n	    document.form_archivo_editado.PCO_Accion.value=\"PCO_EjecutarPostFormulario\";\n	    $(\"#form_archivo_editado\").attr(\"target\", \"frame_almacenamiento\");\n	    $(\"#form_archivo_editado\").attr(\"action\", \"index.php\");\n	    \n		var MensajeErrorAlmacenamiento=\"\";\n		//Si se trata del archivo demo\n		if ($(\"#PCODER_archivo\").val() == \"\")\n			MensajeErrorAlmacenamiento=\"{$MULTILANG_PCODER_ErrGuardarDefecto}\";\n		//Verifica permisos\n		if ($(\"#PermisosRW\").val()!=\"1\")\n			MensajeErrorAlmacenamiento=\"{$MULTILANG_PCODER_ErrGuardarNoPermiso}\";\n			\n		//Verifica que no este abierto como de solo lectura\n		if ($(\"#PCODER_SoloLectura\").val()==\"1\")\n			MensajeErrorAlmacenamiento=\"Contenido abierto como de solo lectura\";\n			\n		//Ejecuta el proceso de almacenamiento\n		if (MensajeErrorAlmacenamiento == \"\")\n			{\n			    //Evita guardar el archivo de bienvenida de PCoder\n			    if ($(\"#PCODER_archivo\").val() != \"inc/practico/PCoder\")\n			        {\n                        //Actualiza el textareacon el valor del textarea a enviar con el valor del textarea en el indice\n                        // 			document.getElementById(\"PCODER_AreaTexto\"+IndiceArchivoActual).value=editor.getSession().getValue();\n                        \n                        // 		//Actualiza el Textarea y formulario base del editor\n                        // 		document.form_archivo_editado.PCODER_archivo.value=ListaArchivos[IndiceRecibido].RutaDocumento;\n                        // 		document.form_archivo_editado.PCODER_TokenEdicion.value=ListaArchivos[IndiceRecibido].TokenEdicion;\n                        // 		document.form_archivo_editado.PCODER_AreaTexto.value=document.getElementById(\"PCODER_AreaTexto\"+IndiceRecibido).value;\n        			\n        				//Metodo estandar, envia todo sobre el iframe para evitar recargar la pagina\n        				PCO_MostrarMensajeCargandoSimple(1000);\n        				document.form_archivo_editado.submit();\n			        }\n			}\n		else\n			{\n				PCOJS_MostrarMensaje(\"{$MULTILANG_PCODER_Guardando}: {$MULTILANG_PCODER_Error}\",MensajeErrorAlmacenamiento);			\n			}\n	}\n\nfunction InicializarEditorACE()\n    {\n        //Incluye extension de lenguaje para ACE\n        ace.require(\"ace/ext/language_tools\");\n        // Crea el editor\n        editor = ace.edit(\"editor_codigo\");\n        //editor = ace.edit(\"marco_cadena_editores_ace\");\n        editor.getSession().setUseWorker(true); //Llevar a false para evitar el error 404 para \"worker-php.js Failed to load resource: the server responded with a status of 404 (Not Found)\"\n        editor.resize(true);\n        editor.getSession().setNewLineMode(\"unix\");\n\n        //ace.$blockScrolling = Infinity;\n        //ace.$blockScrolling = 1;\n        //editor.blockScrolling = Infinity;\n\n        // Inicia el editor de codigo con las opciones predeterminadas\n        CambiarFuenteEditor(\"13px\");\n        CambiarTemaEditor(\"ace/theme/ambiance\");  //tomorrow_night|twilight|eclipse|ambiance|ETC\n\n        //Activa la autocompletacion de codigo y los snippets\n        editor.setOptions({\n        	enableBasicAutocompletion: true,\n        	enableSnippets: true,\n        	enableLiveAutocompletion: true\n        });\n        \n        editor.setAnimatedScroll(true);\n        \n        //Elimina la visualizacion de margen de impresion\n        editor.setShowPrintMargin(0);\n        CaracteresInvisiblesEditor(0);\n\n        //En cada evento de cambio actualiza el textarea\n        editor.getSession().on(\'change\', function(){\n          document.getElementById(\"PCODER_AreaTexto\").value=editor.getSession().getValue();\n          //TODO:PCODER_ActualizarMinimap();\n        });\n        \n        // CAPTURA DE EVENTOS DE TECLADO DESDE LA VENTANA  #############################################################\n        //Captura el evento de Ctrl+S para guardar el archivo\n        $(window).bind(\'keydown\', function(event) {\n        	//alert(String.fromCharCode(event.which).toLowerCase());\n        	if (event.ctrlKey || event.metaKey) {\n        		switch (String.fromCharCode(event.which).toLowerCase()) {\n        		case \'s\':  //<-- Cambiar para otras letras ;)\n        			event.preventDefault();\n        			Guardar();\n        			break;\n        		case \'b\':\n        			event.preventDefault();\n        			IntercambiarVisibilidadMenu();\n        			break;\n        		case \'o\':\n        			event.preventDefault();\n        			//TODO:PCODER_ActivarPanelIzquierdo();\n        			break;\n        		case \'q\':\n        			event.preventDefault();\n        			PCODER_CerrarArchivoActual();\n        			break;\n        		case \'w\':\n        			event.preventDefault();\n        			PCODER_CerrarArchivoActual();\n        			break;\n        		case \'z\':	//Captura evento y no retorna nada para anular comando\n        			event.preventDefault();\n        			break;\n        		case \'y\':	//Captura evento y no retorna nada para anular comando\n        			event.preventDefault();\n        			break;\n        		}\n        	}\n        });\n\n        // CAPTURA DE EVENTOS DE RATON DESDE EL EDITOR  #############################################################\n        editor.on(\"click\", function(ev){\n            //TODO:PCODER_ActualizarMinimap();\n            });\n        \n        // CAPTURA DE EVENTOS DE TECLADO DESDE EL EDITOR  #############################################################\n        editor.commands.addCommand({\n        		name: \'vermarcoderecho\',\n        		bindKey: {win: \'Ctrl-M\', mac: \'Command-Option-M\'},\n        		exec: function(editor) {\n        			//TODO:PCODER_ActivarPanelDerecho();\n        			},\n        		readOnly: true\n        	});\n        \n        //DEPRECATED: Captura de eventos para manejador propio de hacer-deshacer\n        // editor.commands.addCommand({\n        // 		name: \'deshacer\',\n        // 		bindKey: {win: \'Ctrl-Z\', mac: \'Command-Option-Z\'},\n        // 		exec: function(editor) {\n        // 			PCODER_DeshacerEdicion();\n        // 			},\n        // 		readOnly: true\n        // 	});\n        // editor.commands.addCommand({\n        // 		name: \'rehacer\',\n        // 		bindKey: {win: \'Ctrl-Y\', mac: \'Command-Option-Y\'},\n        // 		exec: function(editor) {\n        // 			PCODER_RehacerEdicion();\n        // 			},\n        // 		readOnly: true\n        // 	});\n        \n        editor.commands.addCommand({\n        		name: \'aumentarfuenteeditor\',\n        		bindKey: {win: \'Ctrl-+\', mac: \'Command-Option-+\'},\n        		exec: function(editor) {\n        			AumentarTamanoFuente();\n        			},\n        		readOnly: true\n        	});\n        editor.commands.addCommand({\n        		name: \'disminuirfuenteeditor\',\n        		bindKey: {win: \'Ctrl--\', mac: \'Command-Option--\'},\n        		exec: function(editor) {\n        			DisminuirTamanoFuente();\n        			},\n        		readOnly: true\n        	});\n\n    }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction QuitarAvisoAlmacenamiento()\n	{\n		//Deja el mensaje de almacenamiento al menos un segundo (para archivos pequenos almacenados rapido), luego lo oculta\n		setTimeout(PCO_OcultarMensajeCargandoSimple, 500);\n		\n		//TODO: Devolver el foco al editor\n		//editor.focus();											//Establece el foco al editor\n		//$(\'#editor_codigo\').trigger(\'click\');\n	}\n\nfunction PCO_OcultarMensajeCargandoSimple()\n	{\n		// Se oculta el cuadro modal\n		$(\'#PCO_Modal_MensajeCargandoSimple\').modal(\'hide\');\n		$(\'#PCO_Modal_MensajeCargandoSimple\').hide();\n	}	\n\n\nvar EditorClonado;  //Declara como global la variable del segundo editor para ser manipulada sin problema\nVistaSplit=\"\";  //Asume que inicia con un solo editor\nvar ContenidoBarraEstado=\"\";\nfunction FrmAutoRun()\n    {\n        //Almacena una variable local para saber que el archivo se encuentra abierto\n	    //if ($(\"#PCODER_archivo\").val() != \"inc/practico/PCoder\")\n            localStorage.setItem(\"{$LlaveVentana_Archivo}\", \"{$LlaveVentana_Ruta}\");\n        \n        //Define evento para que al cierre de la ventana se elimine la variable local\n            //Eventos DEPRECATED: Ya no operan sobre Chrome por seguridad.\n            // window.addEventListener(\"beforeunload\", function (event) { PCODER_CerrarArchivoActual(); });\n            // window.onbeforeunload = function(){PCODER_CerrarArchivoActual();};\n            // $(window).on(\'beforeunload\', function() { PCODER_CerrarArchivoActual(); });\n            \n            // $( window ).unload(function() { PCODER_CerrarArchivoActual(); });\n            // window.onunload = function(){PCODER_CerrarArchivoActual();};\n            // $(window).on(\'unload\', function() { PCODER_CerrarArchivoActual(); });\n//        $(window).on(\'beforeunload\', function() { return \'Esta a punto de cerar PCoder. Recuerde cerrarlo apropiadamente...\'; });\n//        window.onbeforeunload = function() { return \"Esta a punto de cerar PCoder. Recuerde cerrarlo apropiadamente...\"; }\n\n\n        ContenidoBarraEstado=$(\"#panel_inferior\").html();\n\n        $(function(){\n            InicializarEditorACE();\n\n            ActualizarBarraEstado();\n            AjustarTipoMenu();\n            AjustarMaquetacion_FormularioEditor();\n            AjustarPaletaEditor();\n\n            //Carga el contenido inicial del editor\n            PCODER_CargarContenidoInicial();\n\n            //Genera el administrador de deshacer y rehacer por defecto una vez cargado el contenido.  A partir de alli considera los eventos de cambio para deshacer o rehacer\n            editor.getSession().setUndoManager(new ace.UndoManager());\n            \n			CambiarModoEditor(\"ace/mode/{$PCODER_ModoEditor}\"); //Hace cambio forzado de tipo de editor cuando se abre un nuevo archivo\n\n            //Clona el editor hacia uno nuevo para permitir los split\n            var NuevaSessionEditor = editor.getSession();\n            var editor_actual = document.getElementById(\"editor_codigo\");\n            var parent = editor_actual.parentNode;\n            \n            var clone = editor_actual.cloneNode();\n            EditorClonado = ace.edit(\"editor_clonado\");\n            EditorClonado.setSession( ClonarSesionEditor(NuevaSessionEditor) );\n    \n            // FUNCIONES DE INICIALIZACION ###############################################################\n        	ExplorarPath();\n\n            PCODER_RecalcularMaquetacion();\n            \n            //Verifica si esta abierto como de solo lectura y bloquea el editor\n		    if ($(\"#PCODER_SoloLectura\").val()==\"1\")\n		        {\n		            editor.setReadOnly(true);\n		            //Hace ocultamiento forzado del menu, del tipo de barra y del estado\n		            $(\'#PCODER_TipoMenu\').val(\"Iconos\");\n		            $(\"#PCODER_OcultarMenu\").val(\"0\");\n		            $(\"#PCODER_EstadoSimple\").val(\"1\");\n		            IntercambiarVisibilidadMenu();\n		        }\n		    \n		    //Verifica si hay mensajes de carga\n		    if (\"{$MensajesBloqueo}\"!=\"\")\n		        {\n                    PCOJS_MostrarMensaje(\"{$MULTILANG_Importante}\", \"{$MensajesBloqueo}\",\" modal \");                \n\n		        }\n		        \n		    CambiarModo_Bienvenida();\n        });\n        \n        \n        \n        //Ajusta tamano del editor en cada cambio de tamano de la ventana\n        $( window ).resize(function() {\n            	PCODER_RecalcularMaquetacion();\n            });\n    }\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: PCODER_DividirPantalla_NO\n	Elimina el modo Split del editor y llama a la funcion que recalcula y dibuja la nueva maquetacion\n*/\nfunction PCODER_DividirPantalla_NO()\n	{\n		//Ejecuta la operacion si ya no esta dividido\n		if (VistaSplit!=\"\")\n			{\n				VistaSplit=\"\";\n				//Actualiza el editor\n				PCODER_RecalcularMaquetacion();\n			}\n	}\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: PCODER_DividirPantalla_Horizontal\n	Define el modo Split del editor y llama a la funcion que recalcula y dibuja la nueva maquetacion\n*/\nfunction PCODER_DividirPantalla_Horizontal()\n	{\n		//Ejecuta la operacion si ya no esta dividido\n		if (VistaSplit!=\"H\")\n			{\n				VistaSplit=\"H\";\n				ClonarPropiedadesEditor();\n				//Actualiza el editor\n				PCODER_RecalcularMaquetacion();\n			}\n	}\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: PCODER_DividirPantalla_Vertical\n	Define el modo Split del editor y llama a la funcion que recalcula y dibuja la nueva maquetacion\n*/\nfunction PCODER_DividirPantalla_Vertical()\n	{\n		//Ejecuta la operacion si ya no esta dividido\n		if (VistaSplit!=\"V\")\n			{\n				VistaSplit=\"V\";\n				ClonarPropiedadesEditor();\n				//Actualiza el editor\n				PCODER_RecalcularMaquetacion();\n			}\n	}\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: CambiarModoEditor\n	Define el modo o tipo de archivo o contenido que se esta editando.\n	\n    Variables de entrada:\n\n        modo - Un modo valido segun ACE Editor que identifica el lenguaje o tipo de archivo a editar\n        editor - La variable de entorno ya definida para el objeto tipo ACE Editor\n\n	Salida:\n		Cambio del modo para el editor, incluyendo resaltado, sintaxis, etc.\n*/\nfunction CambiarModoEditor(modo)\n	{\n		var ModoFiltrado = modo.replace(/_/g, \" \");\n		ModoFiltrado = ModoFiltrado.toLowerCase();\n		//Cambia el modo de sintaxis y errores resaltado por el editor\n		editor.getSession().setMode(ModoFiltrado);\n\n		//Actualiza las listas de seleccion con el modo correspondiente\n		document.getElementById(\"modo_archivo_preferencias\").value=modo;\n		document.getElementById(\"modo_archivo_top\").value=modo;\n		try\n			{\n				EditorClonado.getSession().setMode(ModoFiltrado);\n			}\n		catch(error) {}\n	}\n	\n	\n//##############################################################################\n//##############################################################################\n/*\n	Function: PCODER_CargarContenidoInicial\n	Durante la carga del editor, toma el archivo indicado inicialmente, busca su contenido y lo carga en el ACE Editor\n	\n    Variables de entrada:\n\n        PCODER_archivo - Ruta del archivo que se desea cargar sobre el editor.\n        Llave - La llave del sistema usada por seguridad para la carga del contenido\n\n	Salida:\n		Contenido del textarea del editor actualizado con el contenido a editar\n*/\nfunction PCODER_CargarContenidoInicial()\n    {\n        ValorContenidoArchivo=\"\";\n        ValorContenidoArchivo=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-33&Llave=\"+$(\"#Llave\").val()+\"&PCODER_Accion=PCOMOD_ObtenerContenidoArchivo&PCODER_archivo=\"+$(\"#PCODER_archivo\").val()+\"&Origen_Archivo={$Origen_Archivo}&Tabla_Archivo={$Tabla_Archivo}&Campo_Archivo={$Campo_Archivo}&Llave_Registro={$Llave_Registro}\");\n\n		//Actualiza el editor ACE con el valor obtenido y sus propiedades\n		editor.setValue(ValorContenidoArchivo);\n		editor.focus();											//Establece el foco al editor\n		editor.gotoLine(1, 0, false);							//Ubica cursor en la linea,columna,sin animacion\n		editor.scrollToLine(1, true, false, function () {});	//Desplaza archivo hasta la linea, sin centrarla en pantalla, sin animacion\n		editor.clearSelection();\n		ActualizarTituloEditor(\"{P} {$PCODER_NombreArchivo}\");\n    }\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: PCODER_RecalcularMaquetacion\n	Define el tamano de los marcos de cada elemento (especialmente los editores) segun los tamanos disponibles para la ventana actual del navegador\n	\n    Variables de entrada:\n\n        VistaSplit - Indica el modo bajo el cual se encuentra el editor (completo, division horizontal o vertical)\n        varias - Tomadas desde el ambiente, como anchos y altos de algunos marcos del editor\n\n	Salida:\n		Cambio en caliente de los tamanos de los diferentes elementos para redibujar todo en el navegador\n*/\nfunction PCODER_RecalcularMaquetacion()\n	{\n		//Define el ALTO Y ANCHO DE LOS EDITORES segun la disposicion visual (splits) y el tamano del panel_central_medio\n		var AltoBarraMenu = $(\"#MENU_FORMULARIO_-33\").height();\n		var AltoBarraEstado = $(\"#MarcoContenedorInferior\").height();  //*2 Factor de corrección en alto de barra\n		var AltoBarraTitulo=0;\n		\n		if (\"{$PCODER_Titulo}\"!=\"\")\n		    AltoBarraTitulo = $(\"#TituloElemento\").height() + 3; //Los altos no incluyen los padding, como el marco tiene 2 por todos lados se sume 3 dejando un pixel de diferencia y evitar marcos blancos.\n		\n		//Calcula tamano de la ventana\n		//DEPRECATED: var AltoDisponiblePagina = $(\"body\").height();\n		//DEPRECATED: var AltoDisponiblePagina = $(\"document\").height();\n		//DEPRECATED: var AltoDisponiblePagina = $(\"#page-wrapper\").height();\n		//DEPRECATED: var AltoDisponiblePagina = $(\"#PCO_PestanaFormulario_1\").height();\n		var AltoDisponiblePagina = $(window).height();\n\n		var AltoDisponible_Editores = AltoDisponiblePagina-AltoBarraMenu-AltoBarraEstado-AltoBarraTitulo;\n		var AnchoDisponible_Editores = $(\"#PCO_PestanaFormulario_1\").width();\n\n		//Establece tamanos especificos para los editores segun la disposicion visual (splits) y deja visible el editor clonado\n		if(VistaSplit==\"H\")\n			{\n				AltoDisponible_Editores=Math.round(AltoDisponible_Editores/2)-1;\n				$(\"#panel_editor_clonado\").show();\n			}\n			\n		if(VistaSplit==\"V\")\n			{\n				AnchoDisponible_Editores=Math.round(AnchoDisponible_Editores/2)-2;\n				$(\"#panel_editor_clonado\").show();\n			}\n\n		//Reasigna los anchos y altos a los paneles por defecto\n		AltoEditorReal = AltoDisponible_Editores;\n		AnchoEditorReal = AnchoDisponible_Editores;\n		AltoEditorClonado = AltoDisponible_Editores;\n		AnchoEditorClonado = AnchoDisponible_Editores;\n		\n		//Si no hay divisiones pone en ceros el editor clonado y ademas oculta el marco que lo contiene\n		if(VistaSplit==\"\")\n			{\n				AltoEditorClonado = 0;\n				AnchoEditorClonado = 0;\n				$(\"#panel_editor_clonado\").hide();\n			}\n		\n		$(\'#editor_codigo\').height( AltoEditorReal+\"px\" ).css({ });	//Asignacion en porcentaje\n		$(\'#editor_codigo\').width( AnchoEditorReal+\"px\" ).css({ });	//Asignacion en porcentaje\n		$(\'#editor_clonado\').height( AltoEditorClonado+\"px\" ).css({ });	//Asignacion en porcentaje\n		$(\'#editor_clonado\').width( AnchoEditorClonado+\"px\" ).css({ });	//Asignacion en porcentaje\n		\n		//Actualiza el tamano de los editores segun las nuevas dimensiones\n		editor.resize();\n		try\n			{\n				EditorClonado.resize();\n			}\n		catch(error)\n			{\n				//document.getElementById(\"demo\").innerHTML = err.message;\n			}\n	}\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: ActualizarTituloEditor\n	Cambia el titulo de la ventana de navegador para coincidir con el del archivo editado actualmente\n	\n    Variables de entrada:\n\n        titulo - Texto que debe asignarse a la ventana\n\n	Salida:\n		Titulo de ventana actualizado, que deberia estar visible en barras de tareas del sistema operativo del usuario\n*/\nfunction ActualizarTituloEditor(titulo)\n	{\n		//Cambia el titulo presentado en la ventada del editor\n		document.title = titulo;\n		$(document).attr(\'title\',titulo);\n	}\n\n\n//##############################################################################\n//##############################################################################\n/*\n	Function: ActualizarBarraEstado\n	Actualiza periodicamente la barra de estado inferior del editor con la informacion del archivo\n\n	Salida:\n		Actualizacion de marcos con la informacion de la barra de estado\n*/\nfunction ActualizarBarraEstado()\n	{\n	    //Si se desea ocultar las barras de menu y estado presenta una barra simplificada, sino muestra la barra completa\n	    if ($(\"#PCODER_OcultarMenu\").val()==\"1\")\n	        {\n	            $(\"#panel_inferior\").html(\"<div align=\'right\' style=\'margin-top:3px; color:gray; font-size:11px;\'><i class=\'fa fa-info-circle fa-fw text-info\'></i> <b>{P}Coder</b> <i>en modo ampliado.  Use <font color=white>Ctrl+B</font> para ver/ocultar herramientas</i></div>\");\n	        }\n	    else\n	        {\n        		//Actualiza ademas las posiciones del cursor sobre el arreglo de archivos abiertos\n        		posicion_cursor=editor.getCursorPosition();\n        		LineaActual=posicion_cursor.row;\n        		ColumnaActual=posicion_cursor.column;\n        \n        		//Actualiza la barra de estado del editor\n        		var NroLineasDocumento=editor.session.getLength();\n        		var NroCaracteresDocumento=editor.session.getValue().length;\n        		//Actualiza formulario de envio de archivo por posible almacenamiento de estadisticas\n        		$(\"#PCODER_NroLineasDocumento\").val(NroLineasDocumento);\n        		$(\"#PCODER_NroCaracteresDocumento\").val(NroCaracteresDocumento);\n\n	            if ($(\"#PCODER_EstadoSimple\").val()!=\"1\" )\n                    {\n                        $(\"#panel_inferior\").html(ContenidoBarraEstado);\n                		//Actualiza los contenedores con la informacion de estado\n                		$(\"#NroLineasDocumento\").html(\"{$MULTILANG_PCODER_Linea}: \" + (LineaActual+1) +\" / \"+NroLineasDocumento);\n                		$(\"#NroColumnaDocumento\").html(\"{$MULTILANG_PCODER_Columna}: \"+ (ColumnaActual+1));\n                		$(\"#NroCaracteresDocumento\").html(\"{$MULTILANG_PCODER_Caracteres}: \"+NroCaracteresDocumento);\n                 		$(\"#TipoDocumento\").html(\"{$MULTILANG_PCODER_Tipo}: {$PCODER_TipoElemento}\");\n                 		$(\"#TamanoDocumento\").html(\"{$MULTILANG_PCODER_Tamano}: <b>{$PCODER_TamanoElemento} Kb</b>\");\n                 		$(\"#FechaModificadoDocumento\").html(\"{$MULTILANG_PCODER_Modificado}: <b>{$PCODER_FechaElemento}</b>\");\n                    }\n                else\n                    {\n                		$(\"#NroLineasDocumento\").html(\"{$MULTILANG_PCODER_Linea}: \" + (LineaActual+1) +\"/\"+NroLineasDocumento);\n                		$(\"#NroColumnaDocumento\").html(\"{$MULTILANG_PCODER_Columna}: \"+ (ColumnaActual+1));\n                		$(\"#NroCaracteresDocumento\").html(\"\");\n                 		$(\"#TipoDocumento\").html(\"\");\n                 		$(\"#TamanoDocumento\").html(\"\");\n                 		$(\"#FechaModificadoDocumento\").html(\"\");\n                    }\n	        }\n        \n		//Llama periodicamente la rutina de actualizacion de la barra\n		window.setTimeout(ActualizarBarraEstado, 1000);\n	}\n\nfunction VerificarSintaxisEditor()\n	{\n		//Cambia la verificacion de sintaxis del editor\n		if (document.getElementById(\"Check_VerificarSintaxisEditor\").value==\"1\")\n			{\n				editor.session.setOption(\"useWorker\", false);\n				EditorClonado.session.setOption(\"useWorker\", false);\n				document.getElementById(\"Check_VerificarSintaxisEditor\").value=\"0\";\n				$(\'#Check_VerificarSintaxisEditor\').prop(\'checked\', false);\n			}\n		else\n			{\n				editor.session.setOption(\"useWorker\", true);\n				EditorClonado.session.setOption(\"useWorker\", true);\n				document.getElementById(\"Check_VerificarSintaxisEditor\").value=\"1\";\n				$(\'#Check_VerificarSintaxisEditor\').prop(\'checked\', true);\n			}\n	}\n\n\nfunction VerificarAutocompletado()\n	{\n		//Cambia el autocompletado del editor\n		if (document.getElementById(\"Check_VerificarAutocompletado\").value==\"1\")\n			{\n				editor.setOptions({enableBasicAutocompletion: false, enableLiveAutocompletion: false});\n				EditorClonado.setOptions({enableBasicAutocompletion: false, enableLiveAutocompletion: false});\n				//EditorClonado.session.setOption(\"useWorker\", false);\n				document.getElementById(\"Check_VerificarAutocompletado\").value=\"0\";\n				$(\'#Check_VerificarAutocompletado\').prop(\'checked\', false);\n			}\n		else\n			{\n				editor.setOptions({enableBasicAutocompletion: true, enableLiveAutocompletion: true});\n				EditorClonado.setOptions({enableBasicAutocompletion: true, enableLiveAutocompletion: true});\n				//EditorClonado.session.setOption(\"useWorker\", true);\n				document.getElementById(\"Check_VerificarAutocompletado\").value=\"1\";\n				$(\'#Check_VerificarAutocompletado\').prop(\'checked\', true);\n			}\n	}\n\nfunction AbrirAcercaDe()\n    {\n        var LMQTP=$(\'#myModalACERCADEPCODER\').modal(\'show\');\n        var LMQTP2=$(\'#myModalACERCADEPCODER\').css(\'z-index\', \'1500\');\n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n    }\n\nfunction AbrirAtajosTeclado()\n    {\n        var LMQTP=$(\'#AtajosTeclado\').modal(\'show\');\n        var LMQTP2=$(\'#AtajosTeclado\').css(\'z-index\', \'1500\');\n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n    }\n\n\nfunction AbrirPreferencias()\n    {\n        var LMQTP=$(\'#myModalPREFERENCIAS\').modal(\'show\');\n        var LMQTP2=$(\'#myModalPREFERENCIAS\').css(\'z-index\', \'1500\');\n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n    }\n\n\nfunction OperacionFS_CrearArchivo()\n	{\n		//Presenta el cuadro de dialogo\n		$(\'#myModalOPERARFS\').css(\'z-index\', \'500\');	//Asigna un index inferior a los dialogos emergentes de resultado\n		$(\'#myModalOPERARFS\').modal(\'show\');\n		\n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n	}\n\nfunction OperacionFS_AbrirArchivo()\n	{\n		//Presenta el cuadro de dialogo\n		$(\'#myModalABRIRFS\').css(\'z-index\', \'500\');	//Asigna un index inferior a los dialogos emergentes de resultado\n		$(\'#myModalABRIRFS\').modal(\'show\');\n		\n        //Si detecta que se tiene activado el filtro de colores inverso (modo noche) deja el editor en su formato oscuro original revirtiendo el filtro\n        if (\"{$PCO_TransformacionColores}\"==\"inverso\")\n            $(\".modal-backdrop\").css(\"filter\",\"invert(0%)\");\n	}\n\nfunction OperacionFS_CerrarModalAperturaArchivo()\n	{\n		//Cierra el cuadro de dialogo\n		$(\'#myModalABRIRFS\').modal(\'hide\');\n	}',0,'nav-tabs','form_archivo_editado','responsive','col-xs-12 col-sm-12 col-md-12 col-lg-12','panel-primary','<?php\n//33\n    ##########################################################################\n    ##########################################################################\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        {\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-33\",\"SECLog:event\");\n            die();\n        }\n    ##########################################################################\n    ##########################################################################\n\n\n    /*\n    	Function: PCO_CargarObjeto_LlamadoInternoPCoder\n    	Carga el elemento interno (Formulario -33) asociado al diseno del {P}Coder\n    	\n        Variables de entrada basicas del Framework:\n            URL - index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1\n        \n        Variables de entrada especificas para el elemento:\n            PCODER_archivo - Ruta del archivo que sera abierto.\n            PCODER_ModoEditor - Modo utilizado para el editor (lenguaje a ser reconocido)\n            PCODER_OcultarMenu - Indica a PCoder que no cargue la barra de menu superior y la barra de estado para hacer el editor mas amplio.  Se presentara mensaje advirtiendo como se puede abrir en caso que se desee.\n            PCODER_OcultarEstado - Oculta barra de estado del editor\n            PCODER_TipoMenu - Indica el tipo de diseno de menu del editor como uno de dos valores:  Texto | Iconos.  Si no es especificado se asume tipo texto\n            PCODER_EstadoSimple - Indica a PCoder que no cargue la barra de estado inferior con datos sobre el contenido editado.  Solo presentara las opciones basicas de distribucion del editor y comando de saltar a una linea.\n            PCODER_SoloLectura - Determina si el editor ACE se inicia en modo de solo lectura.  Util para vistas o revision de versiones anteriores del documento.  Que permiten editor completo sin posibilidad de edicion\n            PCODER_Titulo - Define un texto utilizado como titulo del documento cuando se requiera dar detalles para su edicion\n\n            Origen_Archivo - Determina el origen del contenido para el archivo.  A=Archivo B=BaseDatos\n            Tabla_Archivo - Cuando el origen es B.  Indica el nombre de la tabla vinculada que almacena el contenido\n            Campo_Archivo - Cuando el origen es B.  Indica el nombre del campo que almacena el contenido\n            Llave_Registro - Cuando el origen es B.  Indica valor del campo ID del registro que almacena el contenido\n            PCODER_extension - Extension de archivo asociada al contenido.  Si no se recibe y es un archivo se intenta tomar desde su nombre.  Obligatorio en las aperturas de contenido por BD.  Ej:  php | html | js | txt\n\n    	Salida:\n    		Editor {P}Coder cargado en el navegador con edicion del elemento deseado\n    	\n    	Ejemplos (Concatene a la URL base):\n    	    Llamado archivo:            &PCODER_archivo=tmp/index.html\n    	    Cambio del modo o lenguaje: &PCODER_ModoEditor=HTML\n    	    Ocultar menu superior:      &PCODER_OcultarMenu=1\n    	    Usar menu de iconos:        &PCODER_TipoMenu=Iconos\n    	    Ocultar la barra de estado: &PCODER_OcultarEstado=1\n    	    Abrir en modo de lectura:   &PCODER_SoloLectura=1\n\n    	index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-33:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PCODER_archivo=tmp/index.html&PCODER_ModoEditor=PHP&PCODER_TipoMenu=Iconos&PCODER_EstadoSimple=1&PCODER_SoloLectura=1\n\n    */\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/variables.php\n            //Define los modos o lenguajes soportados por el editor\n            global $PCODER_Modos;\n        	$PCODER_Modos[]=array(Nombre => \"ABAP\",	Extensiones => \"abap\");\n        	$PCODER_Modos[]=array(Nombre => \"ActionScript\",	Extensiones => \"as\");\n        	$PCODER_Modos[]=array(Nombre => \"ADA\",	Extensiones => \"ada|adb|ads\");\n        	$PCODER_Modos[]=array(Nombre => \"Apache_Conf\",	Extensiones => \"htaccess|htgroups|htpasswd|conf|htaccess|htgroups|htpasswd\");\n        	$PCODER_Modos[]=array(Nombre => \"AsciiDoc\",	Extensiones => \"asciidoc|adoc|ans|asc\");\n        	$PCODER_Modos[]=array(Nombre => \"Assembly_x86\",	Extensiones => \"asm\");\n        	$PCODER_Modos[]=array(Nombre => \"AutoHotKey\",	Extensiones => \"ahk\");\n        	$PCODER_Modos[]=array(Nombre => \"BatchFile\",	Extensiones => \"bat|cmd|pif|wsf\");\n        	$PCODER_Modos[]=array(Nombre => \"C9Search\",	Extensiones => \"c9search_results\");\n        	$PCODER_Modos[]=array(Nombre => \"C_Cpp\",	Extensiones => \"cpp|c|cc|cxx|h|hh|hpp|bcp|tcc\");\n        	$PCODER_Modos[]=array(Nombre => \"Cirru\",	Extensiones => \"cirru|cr\");\n        	$PCODER_Modos[]=array(Nombre => \"Clojure\",	Extensiones => \"clj|cljs\");\n        	$PCODER_Modos[]=array(Nombre => \"Cobol\",	Extensiones => \"CBL|COB\");\n        	$PCODER_Modos[]=array(Nombre => \"coffee\",	Extensiones => \"coffee|cf|cson|Cakefile\");\n        	$PCODER_Modos[]=array(Nombre => \"ColdFusion\",	Extensiones => \"cfm\");\n        	$PCODER_Modos[]=array(Nombre => \"CSharp\",	Extensiones => \"cs|csx\");\n        	$PCODER_Modos[]=array(Nombre => \"CSS\",	Extensiones => \"css\");\n        	$PCODER_Modos[]=array(Nombre => \"Curly\",	Extensiones => \"curly\");\n        	$PCODER_Modos[]=array(Nombre => \"D\",	Extensiones => \"d|di\");\n        	$PCODER_Modos[]=array(Nombre => \"Dart\",	Extensiones => \"dart\");\n        	$PCODER_Modos[]=array(Nombre => \"Diff\",	Extensiones => \"diff|patch\");\n        	$PCODER_Modos[]=array(Nombre => \"Dockerfile\",	Extensiones => \"Dockerfile\");\n        	$PCODER_Modos[]=array(Nombre => \"Dot\",	Extensiones => \"dot\");\n        	$PCODER_Modos[]=array(Nombre => \"Dummy\",	Extensiones => \"dummy\");\n        	$PCODER_Modos[]=array(Nombre => \"DummySyntax\",	Extensiones => \"dummy\");\n        	$PCODER_Modos[]=array(Nombre => \"Eiffel\",	Extensiones => \"e\");\n        	$PCODER_Modos[]=array(Nombre => \"EJS\",	Extensiones => \"ejs\");\n        	$PCODER_Modos[]=array(Nombre => \"Elixir\",	Extensiones => \"ex|exs\");\n        	$PCODER_Modos[]=array(Nombre => \"Elm\",	Extensiones => \"elm\");\n        	$PCODER_Modos[]=array(Nombre => \"Erlang\",	Extensiones => \"erl|hrl\");\n        	$PCODER_Modos[]=array(Nombre => \"Forth\",	Extensiones => \"frt|fs|ldr|4th|forth\");\n        	$PCODER_Modos[]=array(Nombre => \"FTL\",	Extensiones => \"ftl\");\n        	$PCODER_Modos[]=array(Nombre => \"Gcode\",	Extensiones => \"gcode\");\n        	$PCODER_Modos[]=array(Nombre => \"Gherkin\",	Extensiones => \"feature\");\n        	$PCODER_Modos[]=array(Nombre => \"Gitignore\",	Extensiones => \"gitignore|gcloudignore\");\n        	$PCODER_Modos[]=array(Nombre => \"Glsl\",	Extensiones => \"glsl|frag|vert\");\n        	$PCODER_Modos[]=array(Nombre => \"golang\",	Extensiones => \"go\");\n        	$PCODER_Modos[]=array(Nombre => \"Groovy\",	Extensiones => \"groovy\");\n        	$PCODER_Modos[]=array(Nombre => \"HAML\",	Extensiones => \"haml\");\n        	$PCODER_Modos[]=array(Nombre => \"Handlebars\",	Extensiones => \"hbs|handlebars|tpl|mustache\");\n        	$PCODER_Modos[]=array(Nombre => \"Haskell\",	Extensiones => \"hs|has|lhs|lit\");\n        	$PCODER_Modos[]=array(Nombre => \"haXe\",	Extensiones => \"hx\");\n        	$PCODER_Modos[]=array(Nombre => \"HTML\",	Extensiones => \"html|htm|xhtml|asp|aspx\");\n        	$PCODER_Modos[]=array(Nombre => \"HTML_Ruby\",	Extensiones => \"erb|rhtml\");\n        	$PCODER_Modos[]=array(Nombre => \"INI\",	Extensiones => \"ini|cfg|prefs\");\n        	$PCODER_Modos[]=array(Nombre => \"Io\",	Extensiones => \"io\");\n        	$PCODER_Modos[]=array(Nombre => \"Jack\",	Extensiones => \"jack\");\n        	$PCODER_Modos[]=array(Nombre => \"Jade\",	Extensiones => \"jade\");\n        	$PCODER_Modos[]=array(Nombre => \"Java\",	Extensiones => \"java\");\n        	$PCODER_Modos[]=array(Nombre => \"JavaScript\",	Extensiones => \"js|jsm\");\n        	$PCODER_Modos[]=array(Nombre => \"JSON\",	Extensiones => \"json\");\n        	$PCODER_Modos[]=array(Nombre => \"JSONiq\",	Extensiones => \"jq\");\n        	$PCODER_Modos[]=array(Nombre => \"JSP\",	Extensiones => \"jsp\");\n        	$PCODER_Modos[]=array(Nombre => \"JSX\",	Extensiones => \"jsx\");\n        	$PCODER_Modos[]=array(Nombre => \"Julia\",	Extensiones => \"jl\");\n        	$PCODER_Modos[]=array(Nombre => \"LaTeX\",	Extensiones => \"tex|latex|ltx|bib|sty\");\n        	$PCODER_Modos[]=array(Nombre => \"LESS\",	Extensiones => \"less\");\n        	$PCODER_Modos[]=array(Nombre => \"Liquid\",	Extensiones => \"liquid\");\n        	$PCODER_Modos[]=array(Nombre => \"Lisp\",	Extensiones => \"lisp|lsp\");\n        	$PCODER_Modos[]=array(Nombre => \"LiveScript\",	Extensiones => \"ls\");\n        	$PCODER_Modos[]=array(Nombre => \"LogiQL\",	Extensiones => \"logic|lql\");\n        	$PCODER_Modos[]=array(Nombre => \"LSL\",	Extensiones => \"lsl\");\n        	$PCODER_Modos[]=array(Nombre => \"Lua\",	Extensiones => \"lua\");\n        	$PCODER_Modos[]=array(Nombre => \"LuaPage\",	Extensiones => \"lp\");\n        	$PCODER_Modos[]=array(Nombre => \"Lucene\",	Extensiones => \"lucene\");\n        	$PCODER_Modos[]=array(Nombre => \"Makefile\",	Extensiones => \"Makefile|GNUmakefile|makefile|OCamlMakefile|make|am\");\n        	$PCODER_Modos[]=array(Nombre => \"Markdown\",	Extensiones => \"md|markdown|markdn\");\n        	$PCODER_Modos[]=array(Nombre => \"Mask\",	Extensiones => \"mask\");\n        	$PCODER_Modos[]=array(Nombre => \"MATLAB\",	Extensiones => \"matlab\");\n        	$PCODER_Modos[]=array(Nombre => \"MEL\",	Extensiones => \"mel\");\n        	$PCODER_Modos[]=array(Nombre => \"MUSHCode\",	Extensiones => \"mc|mush\");\n        	$PCODER_Modos[]=array(Nombre => \"MySQL\",	Extensiones => \"mysql\");\n        	$PCODER_Modos[]=array(Nombre => \"Nix\",	Extensiones => \"nix\");\n        	$PCODER_Modos[]=array(Nombre => \"ObjectiveC\",	Extensiones => \"m|mm\");\n        	$PCODER_Modos[]=array(Nombre => \"OCaml\",	Extensiones => \"ml|mli\");\n        	$PCODER_Modos[]=array(Nombre => \"Pascal\",	Extensiones => \"pas|p|dfm\");\n        	$PCODER_Modos[]=array(Nombre => \"Perl\",	Extensiones => \"pl|pm\");\n        	$PCODER_Modos[]=array(Nombre => \"pgSQL\",	Extensiones => \"pgsql\");\n        	$PCODER_Modos[]=array(Nombre => \"PHP\",	Extensiones => \"php|phtml|inc|ctp|snt\");\n        	$PCODER_Modos[]=array(Nombre => \"Powershell\",	Extensiones => \"ps1\");\n        	$PCODER_Modos[]=array(Nombre => \"Praat\",	Extensiones => \"praat|praatscript|psc|proc\");\n        	$PCODER_Modos[]=array(Nombre => \"Prolog\",	Extensiones => \"plg|prolog\");\n        	$PCODER_Modos[]=array(Nombre => \"Properties\",	Extensiones => \"properties\");\n        	$PCODER_Modos[]=array(Nombre => \"Protobuf\",	Extensiones => \"proto\");\n        	$PCODER_Modos[]=array(Nombre => \"Python\",	Extensiones => \"py\");\n        	$PCODER_Modos[]=array(Nombre => \"R\",	Extensiones => \"r\");\n        	$PCODER_Modos[]=array(Nombre => \"RDoc\",	Extensiones => \"Rd\");\n        	$PCODER_Modos[]=array(Nombre => \"RHTML\",	Extensiones => \"Rhtml\");\n        	$PCODER_Modos[]=array(Nombre => \"Ruby\",	Extensiones => \"rb|ru|gemspec|rake|Guardfile|Rakefile|Gemfile\");\n        	$PCODER_Modos[]=array(Nombre => \"Rust\",	Extensiones => \"rs\");\n        	$PCODER_Modos[]=array(Nombre => \"SASS\",	Extensiones => \"sass\");\n        	$PCODER_Modos[]=array(Nombre => \"SCAD\",	Extensiones => \"scad\");\n        	$PCODER_Modos[]=array(Nombre => \"Scala\",	Extensiones => \"scala\");\n        	$PCODER_Modos[]=array(Nombre => \"Scheme\",	Extensiones => \"scm|rkt\");\n        	$PCODER_Modos[]=array(Nombre => \"SCSS\",	Extensiones => \"scss\");\n        	$PCODER_Modos[]=array(Nombre => \"SH\",	Extensiones => \"sh|bash|bashrc|bsh\");\n        	$PCODER_Modos[]=array(Nombre => \"SJS\",	Extensiones => \"sjs\");\n        	$PCODER_Modos[]=array(Nombre => \"Smarty\",	Extensiones => \"smarty|tpl\");\n        	$PCODER_Modos[]=array(Nombre => \"snippets\",	Extensiones => \"snippets\");\n        	$PCODER_Modos[]=array(Nombre => \"Soy_Template\",	Extensiones => \"soy\");\n        	$PCODER_Modos[]=array(Nombre => \"Space\",	Extensiones => \"space\");\n        	$PCODER_Modos[]=array(Nombre => \"SQL\",	Extensiones => \"sql|dblib|dblib_mssql|fbd|ibm|ifmx|mssql|odbc|oracle|sqlite|sqlsrv\");\n        	$PCODER_Modos[]=array(Nombre => \"Stylus\",	Extensiones => \"styl|stylus\");\n        	$PCODER_Modos[]=array(Nombre => \"SVG\",	Extensiones => \"svg\");\n        	$PCODER_Modos[]=array(Nombre => \"Tcl\",	Extensiones => \"tcl\");\n        	$PCODER_Modos[]=array(Nombre => \"Tex\",	Extensiones => \"tex\");\n        	$PCODER_Modos[]=array(Nombre => \"Text\",	Extensiones => \"txt|nfo|dat|inf|log|csv|tab|url|1st|fountain|me|now|readme|rft|cst|pl1|pli|plc|src|swift|tk\");\n        	$PCODER_Modos[]=array(Nombre => \"Textile\",	Extensiones => \"textile\");\n        	$PCODER_Modos[]=array(Nombre => \"Toml\",	Extensiones => \"toml\");\n        	$PCODER_Modos[]=array(Nombre => \"Twig\",	Extensiones => \"twig\");\n        	$PCODER_Modos[]=array(Nombre => \"Typescript\",	Extensiones => \"ts|typescript|str\");\n        	$PCODER_Modos[]=array(Nombre => \"Vala\",	Extensiones => \"vala\");\n        	$PCODER_Modos[]=array(Nombre => \"VBScript\",	Extensiones => \"bas|vbs|vb|b|sb\");\n        	$PCODER_Modos[]=array(Nombre => \"Velocity\",	Extensiones => \"vm\");\n        	$PCODER_Modos[]=array(Nombre => \"Verilog\",	Extensiones => \"v|vh|sv|svh\");\n        	$PCODER_Modos[]=array(Nombre => \"VHDL\",	Extensiones => \"vhd|vhdl\");\n        	$PCODER_Modos[]=array(Nombre => \"XML\",	Extensiones => \"xml|rdf|rss|wsdl|xsl|xslt|atom|mathml|mml|xul|xbl\");\n        	$PCODER_Modos[]=array(Nombre => \"XQuery\",	Extensiones => \"xq\");\n        	$PCODER_Modos[]=array(Nombre => \"YAML\",	Extensiones => \"yaml|yml\");\n\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/index.php\n	//L72: Variables y entorno inicial\n	/*	Define el Path inicial sobre el cual el usuario puede navegar\n		por el sistema de archivos del servidor para editarlos. A mayor\n		numero de carpetas a leer sera mas lenta la apertura del editor.\n		Posibles valores:	/							-> Todo su disco!!!\n							.							-> Directorio Actual de PCoder (generalmente sobre mod/pcoder)\n							../							-> Raiz de PCoder (generalmente sobre mod/pcoder/mod)\n							../../						-> Raiz de PCoder (Donde reside LICENSE, AUTHORS, Etc)\n							../../../  					-> Raiz Instalacion PCoder cuando es independiente o Raiz de Practico si esta como modulo\n							Otros						-> Agregue aqui tantos niveles superiores como desee segun su ruta de instalacion\n							$_SERVER[\'DOCUMENT_ROOT\']	-> Raiz de Todo el servidor web  */\n	global $PCO_PCODER_RaizExploracionArchivos;\n	$PCO_PCODER_RaizExploracionArchivos=$_SERVER[\'DOCUMENT_ROOT\'].DIRECTORY_SEPARATOR;\n\n    //L125: Variables y entorno inicial\n    // Datos de fecha, hora y direccion IP para algunas operaciones asi como variables de compatibilidad para modulo de Practico\n    $PCO_PCODER_FechaOperacion=date(\"Ymd\");\n    $PCO_PCODER_FechaOperacionGuiones=date(\"Y-m-d\");\n    $PCO_PCODER_HoraOperacion=date(\"His\");\n    $PCO_PCODER_HoraOperacionPuntos=date(\"H:i\");\n    $PCO_PCODER_DireccionAuditoria=$_SERVER [\'REMOTE_ADDR\'];\n    $PCO_FechaOperacion=$PCO_PCODER_FechaOperacion;\n    $PCO_FechaOperacionGuiones=$PCO_PCODER_FechaOperacionGuiones;\n    $PCO_HoraOperacion=$PCO_PCODER_HoraOperacion;\n    $PCO_HoraOperacionPuntos=$PCO_PCODER_HoraOperacionPuntos;\n    $PCO_DireccionAuditoria=$PCO_PCODER_DireccionAuditoria;\n\n	// Establece version actual del sistema\n	$PCO_PCODER_VersionActual = file(\"inc/version_actual.txt\");\n	$PCO_PCODER_VersionActual = trim($PCO_PCODER_VersionActual[0]);\n	\n	// Si no hay una accion definida entonces inicia con la predeterminada\n	if (@$PCO_Accion==\"\" || !isset($PCO_Accion))\n		$PCO_Accion=\"PCOMOD_CargarPcoder\";\n    \n\n    global $PCODER_archivo,$LlaveVentana_Archivo,$LlaveVentana_Ruta,$LlaveDePaso;\n    \n	//Genera algunas variables requeridas con informacion del archivo\n	global $PCODER_PathVisual,$PCODER_FechaElemento,$PCODER_TamanoElemento,$PCODER_TipoElemento,$PCODER_NombreArchivo;\n	//Genera token unico de edicion para el archivo.  La variable queda en el form disponible para cada envio\n	global $PCODER_TokenEdicion;\n    \n    //Determina tipo de contenido (Archivo o BaseDatos)\n    global $Origen_Archivo,$Tabla_Archivo,$Campo_Archivo,$Llave_Registro;\n    if ($Origen_Archivo==\"\") $Origen_Archivo=\"A\";\n    //Si el origen del archivo es BaseDatos genera algunas variables por defecto para tratar el contenido de manera generica como un archivo\n    if ($Origen_Archivo==\"B\")\n        {\n            $PCODER_archivo=\"{$Tabla_Archivo}[{$Llave_Registro}].{$Campo_Archivo}\";\n        	$PCODER_TipoElemento=\"BD\";\n        	$PCODER_FechaElemento=\"N/A\";\n        	$ContenidoRecuperadoBD=PCO_EjecutarSQL(\"SELECT {$Campo_Archivo} as Contenido, LENGTH({$Campo_Archivo}) as TamanoBytes FROM {$Tabla_Archivo} WHERE id=\'{$Llave_Registro}\' \")->fetch();\n        	$PCODER_TamanoElemento=$ContenidoRecuperadoBD[\"TamanoBytes\"];\n            $PCODERcontenido_original_archivo=$ContenidoRecuperadoBD[\"Contenido\"];\n            $PCODER_TokenEdicion=md5($PCODER_archivo.$PCODER_TamanoElemento.$PCODER_FechaElemento.$PCODERcontenido_original_archivo);\n            $PCODER_NombreArchivo = \"{$Tabla_Archivo}.{$Campo_Archivo}\";\n        }\n\n    //Define las llaves y valores con que se diferencia el editor de texto (sobre el LocalStorage)\n    $LlaveVentana_Archivo=base64_encode(substr($LlaveDePaso,-3).\"{$PCODER_archivo}\");\n    $LlaveVentana_Ruta=$PCODER_archivo;\n\n    //Carga el archivo recibido, si no recibe nada carga un demo\n    if (@$PCODER_archivo==\"\")\n        {\n            global $MULTILANG_Error;\n            PCO_Mensaje(\"{$MULTILANG_Error}\",\"[ES]:No se ha recibido un archivo u origen de datos a ser editado<br>[EN]:A file or data source to be edited has not been received.\",\"\",\"fa fa-fw fa-4x fa-times\",\"alert alert-dismissible alert-danger btn-xs\");\n            die();\n            //$PCODER_archivo = \"mod/pcoder/demos/demo.txt\"; //Archivo de pruebas.   Comentado en produccion\n            //$PCODER_archivo = \"tmp/index.html\";\n        }\n\n	//Verifica permisos de escritura en cada cargue de archivo para saber si presenta o no mensaje de advertencia\n	global $PCODER_SoloLectura,$PCODER_EstadoSimple,$PCODER_TipoMenu,$PCODER_OcultarMenu,$PermisosRW,$CadenaPermisoEscritura,$MULTILANG_PCODER_ErrorRW,$MULTILANG_PCODER_Estado,$MULTILANG_Error;\n	$PermisosRW=1;\n	//Si el origen es desde un archivo valida los permisos desde el filesystem\n    if ($Origen_Archivo==\"A\")\n        {\n        	$permisos_encontrados=@substr(sprintf(\'%o\', fileperms($PCODER_archivo)), -4);\n        	if (!is_writable($PCODER_archivo)) { $PermisosRW=0; }\n            $CadenaPermisoEscritura=\'\';\n            if ($PermisosRW==0)\n                PCO_Mensaje(\"{$MULTILANG_Error}\",\"{$MULTILANG_PCODER_ErrorRW}\",\"\",\"fa fa-fw fa-2x fa-thumbs-down\",\"alert alert-dismissible alert-warning btn-xs\");\n        }\n	if ($PCODER_OcultarMenu==\"\") $PCODER_OcultarMenu=\"0\";\n	if ($PCODER_TipoMenu==\"\") $PCODER_TipoMenu=\"Texto\";\n\n    //Marco para recepcion de eventos generados por el boton de guardar\n    echo \'<iframe OnLoad=\"if (frame_almacenamiento.location.href != \\\'about:blank\\\') QuitarAvisoAlmacenamiento();\" height=\"0\" width=\"0\" name=\"frame_almacenamiento\" id=\"frame_almacenamiento\" src=\"about:blank\" style=\"visibility:hidden; display:none\"></iframe>\';\n\n    //Busca datos especificos del archivo en el filesystem\n    if ($Origen_Archivo==\"A\")\n        {\n        	$PCODER_TipoElemento=@filetype($PCODER_archivo);\n        	$PCODER_FechaElemento=@date(\"d F Y H:i:s\", @filemtime($PCODER_archivo));\n        	$PCODER_TamanoElemento=@round(filesize($PCODER_archivo)/1024);\n            $PCODERcontenido_original_archivo=@file_get_contents($PCODER_archivo);\n            $PCODER_TokenEdicion=md5($PCODER_archivo.$PCODER_TamanoElemento.$PCODER_FechaElemento.$PCODERcontenido_original_archivo);\n            $PCODER_PartesNombreArchivo=explode(DIRECTORY_SEPARATOR,$PCODER_archivo);\n            $PCODER_NombreArchivo = $PCODER_PartesNombreArchivo[count($PCODER_PartesNombreArchivo)-1];\n        }\n\n    //Antes de seguir adelante con la apertura verifica si el archivo no tiene registro de bloqueo\n    global $MULTILANG_PCODER_AdvertenciaMalCierre,$MULTILANG_PCODER_ErrorRO;\n    global $MensajesBloqueo; //Variable que contiene cualquier mensaje de error o advertencia del archivo\n    $MensajesBloqueo=\"\";\n    //Genera/revisa bloqueo evitando el archivo de base que es abierto por todos\n    if ($PCODER_archivo!=\"inc/practico/PCoder\")\n        {\n            $RegistroBloqueo=PCO_EjecutarSQL(\"SELECT * FROM core_pcoder_bloqueos WHERE archivo=\'$PCODER_archivo\' \")->fetch();\n            if ($RegistroBloqueo[\"id\"]==\"\")\n                {\n                    PCO_EjecutarSQLUnaria(\"INSERT INTO core_pcoder_bloqueos (archivo,ultima_edicion,usuario,abierto,direccion_origen,agente) VALUES (\'$PCODER_archivo\',\'$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00\',\'$PCOSESS_LoginUsuario\',\'1\',\'$PCO_PCODER_DireccionAuditoria\',\'\".$_SERVER[\'HTTP_USER_AGENT\'].\"\');\");\n                }\n            else\n                {\n                    //Verifica si el bloqueo es de otro usuario o del mismo\n                    if ($RegistroBloqueo[\"usuario\"]!=$PCOSESS_LoginUsuario)\n                        {\n                            $MensajesBloqueo= \"<i class=\'fa fa-warning fa-2x\'></i> [ERR]: \".$MULTILANG_PCODER_ErrorRO.\"<br><br><font color=blue><b>Se abre como sólo lectura</b></font><br><br><li>Usuario/User: <b>\".$RegistroBloqueo[\"usuario\"].\"</b></li><li>Fecha de apertura/Opened date: <b>\".$RegistroBloqueo[\"ultima_edicion\"].\"</b></li><li>Origen/Origin: <b>\".$RegistroBloqueo[\"direccion_origen\"].\"</b> <i>(\".$RegistroBloqueo[\"agente\"].\")</i></li>\";\n                            //Envia a si mismo un mensaje de advertencia a posible estacion abierta\n                            PCO_EjecutarSQLUnaria(\"INSERT INTO core_chat (remitente,destinatario,message,sent,recd) VALUES (\'$PCOSESS_LoginUsuario\',\'\".$RegistroBloqueo[\"usuario\"].\"\',\'He intentado abrir el archivo $PCODER_archivo pero se encuentra bloqueado por ti (mensaje automatico)\',\'$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00\',\'0\');\");\n            \n                            //Cambia algunos estados del editor par que sea de solo lectura\n                            $PCODER_OcultarMenu=1;\n                            $PCODER_TipoMenu=\"Iconos\";\n                            $PCODER_SoloLectura=1;\n                        }\n                    else\n                        {\n                            $MensajesBloqueo= \"<i class=\'fa fa-info-circle fa-2x\'></i> [ADV]: \".$MULTILANG_PCODER_AdvertenciaMalCierre.\"<br><br><li>Fecha de apertura/Opened date: <b>\".$RegistroBloqueo[\"ultima_edicion\"].\"</b></li><li>Origen/Origin: <b>\".$RegistroBloqueo[\"direccion_origen\"].\"</b> <i>(\".$RegistroBloqueo[\"agente\"].\")</i></li><hr>\".$MULTILANG_PCODER_AdvConcurrencia;\n                            //Despues de generar advertencia actualiza ultima fecha apertura, direccion y agente como la actual\n                            PCO_EjecutarSQLUnaria(\"UPDATE core_pcoder_bloqueos SET ultima_edicion=\'$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00\',direccion_origen=\'$PCO_PCODER_DireccionAuditoria\',agente=\'\".$_SERVER[\'HTTP_USER_AGENT\'].\"\' WHERE archivo=\'$PCODER_archivo\' \");\n                            //Envia a si mismo un mensaje de advertencia a posible estacion abierta\n                            //PCO_EjecutarSQLUnaria(\"INSERT INTO core_chat (remitente,destinatario,message,sent,recd) VALUES (\'$PCOSESS_LoginUsuario\',\'\".$RegistroBloqueo[\"usuario\"].\"\',\'He abierto el archivo $PCODER_archivo con advertencia de apertura desde $PCO_PCODER_DireccionAuditoria (mensaje automatico)\',\'$PCO_PCODER_FechaOperacionGuiones $PCO_PCODER_HoraOperacionPuntos:00\',\'0\');\");\n                        }\n                }\n        }\n\n\n    ################################################################################\n    ################################################################################\n    /*\n    	Function: PCOMOD_ObtenerModoEditor\n    	Detecta el tipo de archivo y especifica el modo que se debe utilizar en el editor\n    */\n        //Obtiene la extension del archivo (cuando es archivo y no se ha recibido directamente)\n        global $PCODER_extension;\n        if ($Origen_Archivo==\"A\" && $PCODER_extension==\"\")\n            {\n                $PCODER_partes_extension = explode(\".\",$PCODER_archivo);\n                $PCODER_extension = $PCODER_partes_extension[count($PCODER_partes_extension)-1];\n            }\n\n        //Identifica el tipo de documento a ser aplicado segun la extension del archivo\n        global $PCODER_ModoEditor;\n        for ($i=0;$i<count($PCODER_Modos) && $PCODER_ModoEditor==\'\';$i++)\n            {\n				//Lleva las extensiones a un array para buscar en el\n				$ArregloExtensiones=explode(\"|\",$PCODER_Modos[$i][\"Extensiones\"]);\n                if(in_array($PCODER_extension,$ArregloExtensiones))\n					{\n						$PCODER_ModoEditor=$PCODER_Modos[$i][\"Nombre\"];\n					}\n            }\n		//Valida que no se trate de un archivo sin extension despues de revisar todo\n		if($PCODER_ModoEditor==\"\")\n			{\n				//Asigna por defecto el modo de texto plano\n				if(count($PCODER_partes_extension)==1)\n					$PCODER_ModoEditor=\"Text\";\n			}\n\n\n    //Prepara el nombre de archivo visual sobre el editor en la esquina superior izquierda\n    global $MULTILANG_PCODER_Archivo,$MULTILANG_PCODER_Permisos;\n    $PCODER_PathVisual=\"<div ><i class=\'fa fa-file\'></i> <i data-html=\'true\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'<b>{$MULTILANG_PCODER_Archivo}</b>: {$PCODER_archivo}<br><b>{$MULTILANG_PCODER_Permisos}</b>: {$permisos_encontrados}<br><font color=yellow><b>Tipo</b>: {$PCODER_ModoEditor}</font>\'>\".$PCODER_NombreArchivo.\"</i></div>\";\n\n\n    //L329: Marcos para el editor\n    global $CadenaEditoresACE,$PCODER_Titulo;\n    //Agrega marco con el titulo del editor\n    if ($PCODER_Titulo!=\"\")\n        $CadenaEditoresACE.=\'<div class=\"row\" style=\"margin:0px; color:orange; font-size:12px; font-weight:bold; padding:2px;\" id=\"TituloElemento\" align=center><i class=\"fa fa-pencil fa-fw\"></i> \'.$PCODER_Titulo.\'</div>\';\n\n    $CadenaEditoresACE.=\'\n		<div class=\"row\" style=\"margin:0px;\">\n		    <div id=\"EditorD\">\n    			<div id=\"panel_editor_real\" style=\"float:left\">\n    				<div id=\"editor_codigo\" name=\"editor_codigo\" style=\"display:block;  width:100%; height:100vh;\" width=\"100%\" height=\"100vh\"></div>\n    			</div>\n    			<div id=\"panel_editor_clonado\" style=\"float:right\">\n    				<div id=\"editor_clonado\" name=\"editor_clonado\" style=\"display:block;  width:100%; height:100vh; border-style: solid; border-width:1px; border-color:#373737;\" width=\"100%\" height=\"100vh\"></div>\n    			</div>\n    		</div>\n		</div>\';\n\n    //Genera barra de estado del editor y archivo\n    global $CadenaBarraEstado,$MULTILANG_PCODER_DividirNO,$MULTILANG_PCODER_DividirHorizontal,$MULTILANG_PCODER_DividirVertical,$MULTILANG_PCODER_Ir,$MULTILANG_PCODER_SaltarLinea;\n\n    //Define la barra de estado a presentar con el archivo o la cambia mas adelante si se desea simplificada\n    $CadenaMarcosEstados=\'\n		<!-- LINEAS DEL DOCUMENTO -->\n		<div id=\"NroLineasDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\n\n		<!-- COLUMNA ACTUAL DEL DOCUMENTO -->\n		<div id=\"NroColumnaDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\n\n		<!-- CARACTERES DEL DOCUMENTO -->\n		<div id=\"NroCaracteresDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\n\n		<!-- TIPO DOCUMENTO -->\n		<div id=\"TipoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\n\n		<!-- TAMANO DEL DOCUMENTO -->\n		<div id=\"TamanoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\n\n		<!-- FECHA MODIFICACION -->\n		<div id=\"FechaModificadoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n		</div>\';\n    \n    //Cambia la barra de estado por una mas simple cuando asi es requerido pero sin eliminar los marcos\n    $CadenaBarraEstado=\'\n        <div class=\"row\" id=\"MarcoContenedorInferior\">\n        	<div class=\"col-md-12\">\n        \n        		<div id=\"panel_inferior\">\n        			\n        			<div class=\"well well-sm\" style=\"border:0px; margin:0px; padding:0px; padding-bottom:1px; background: #272727;\">\n        \n        						<!-- FORMULARIO DISPOSICION DE PANTALLA -->\n        						<div style=\"display:inline;\">\n        							<div data-toggle=\"tooltip\" data-placement=\"top\" title=\"\'.$MULTILANG_PCODER_DividirNO.\'\" class=\"btn btn-success btn-xs\" onClick=\"var LMQTP=PCODER_DividirPantalla_NO();\"><i class=\"fa fa-stop fa-fw\"></i></div>\n        							<div data-toggle=\"tooltip\" data-placement=\"top\" title=\"\'.$MULTILANG_PCODER_DividirHorizontal.\'\" class=\"btn btn-danger btn-xs\" onClick=\"var LMQTP=PCODER_DividirPantalla_Horizontal();\"><i class=\"fa fa-pause fa-rotate-90 fa-fw\"></i></div>\n        							<div data-toggle=\"tooltip\" data-placement=\"top\" title=\"\'.$MULTILANG_PCODER_DividirVertical.\'\" class=\"btn btn-danger btn-xs\" onClick=\"var LMQTP=PCODER_DividirPantalla_Vertical();\"><i class=\"fa fa-pause fa-fw\"></i></div>\n        						</div>\n        \n        						<!-- FORMULARIO IR A -->\n        						<!--\n        						<div style=\"display:inline;\">\n        							<input type=\"text\" id=\"linea_salto\" size=10 name=\"linea_salto\" class=\"input-mini btn-xs btn-default\" placeholder=\"\'.$MULTILANG_PCODER_SaltarLinea.\'\">\n        							<div class=\"btn btn-primary btn-xs\" onClick=\"var LMQTP=SaltarALinea();\">\'.$MULTILANG_PCODER_Ir.\' <i class=\"fa fa-arrow-circle-right\"></i></div>\n        						</div>\n        						-->\n        \n        						<font color=\"gray\">\n        							\n                            		<!-- LINEAS DEL DOCUMENTO -->\n                            		<div id=\"NroLineasDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>\n                            \n                            		<!-- COLUMNA ACTUAL DEL DOCUMENTO -->\n                            		<div id=\"NroColumnaDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>\n                            \n                            		<!-- CARACTERES DEL DOCUMENTO -->\n                            		<div id=\"NroCaracteresDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>\n                            \n                            		<!-- TIPO DOCUMENTO -->\n                            		<div id=\"TipoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>\n                            \n                            		<!-- TAMANO DEL DOCUMENTO -->\n                            		<div id=\"TamanoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>\n                            \n                            		<!-- FECHA MODIFICACION -->\n                            		<div id=\"FechaModificadoDocumento\" class=\"btn-xs\" style=\"display:inline;\">\n                            		</div>        \n        						</font>\n        \n        			</div>\n        \n        		</div><!-- /.contenedor -->\n        \n        	</div>\n        </div>\';\n\n\n    //L415: Carga librerias\n    echo \'\n        <!-- Carga editor ACE y sus extensiones -->\n    	<script src=\"inc/ace/src-min-noconflict/ace.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n    	<script src=\"inc/ace/src-min-noconflict/ext-language_tools.js\" type=\"text/javascript\" charset=\"utf-8\"></script>\n\n	<!-- Funciones especificas de PCoder -->\'; ?>\n	<script language=\"JavaScript\">\n	    var MensajeFuncionalidadNoDisponible=\"<center><b>OPCION INACTIVA!!! - FEATURE DISABLED!!!</b></center><HR>Su instalacion de {P}Coder no se encuentra integrada a <a href=\'https://www.practico.org\'>Practico Framework</a><br>Muchas de las caracteristicas solo son habilitadas cuando PCoder se integra de manera nativa con Practico Framework<br><br>Your {P}Coder setup its not embeded into <a href=\'https://www.practico.org\'>Practico Framework</a><br>Many features are available when your PCoder is embeded into a Practico Framework setup\";\n		//Convierte variables de idioma desde PHP a JS\n		var MULTILANG_PCODER_Linea=\"<?php echo $MULTILANG_PCODER_Linea; ?>\";\n		var MULTILANG_PCODER_Columna=\"<?php echo $MULTILANG_PCODER_Columna; ?>\";\n		var MULTILANG_PCODER_Caracteres=\"<?php echo $MULTILANG_PCODER_Caracteres; ?>\";\n		var MULTILANG_PCODER_Tipo=\"<?php echo $MULTILANG_PCODER_Tipo; ?>\";\n		var MULTILANG_PCODER_Tamano=\"<?php echo $MULTILANG_PCODER_Tamano; ?>\";\n		var MULTILANG_PCODER_Modificado=\"<?php echo $MULTILANG_PCODER_Modificado; ?>\";\n		var MULTILANG_PCODER_ErrorRW=\"<?php echo $MULTILANG_PCODER_ErrorRW; ?>\";\n		var MULTILANG_PCODER_Estado=\"<?php echo $MULTILANG_PCODER_Estado; ?>\";\n		var MULTILANG_PCODER_ErrGuardarDefecto=\"<?php echo $MULTILANG_PCODER_ErrGuardarDefecto; ?>\";\n		var MULTILANG_PCODER_ErrGuardarNoPermiso=\"<?php echo $MULTILANG_PCODER_ErrGuardarNoPermiso; ?>\";\n		var MULTILANG_PCODER_Guardando=\"<?php echo $MULTILANG_PCODER_Guardando; ?>\";\n		var MULTILANG_PCODER_Error=\"<?php echo $MULTILANG_PCODER_Error; ?>\";\n		var MULTILANG_PCODER_Finalizado=\"<?php echo $MULTILANG_PCODER_Finalizado; ?>\";\n		var MULTILANG_PCODER_ElementoCreado=\"<?php echo $MULTILANG_PCODER_ElementoCreado; ?>\";\n		var MULTILANG_PCODER_ElementoExiste=\"<?php echo $MULTILANG_PCODER_ElementoExiste; ?>\";\n		var MULTILANG_PCODER_ElementoNoCreado=\"<?php echo $MULTILANG_PCODER_ElementoNoCreado; ?>\";\n		var MULTILANG_PCODER_Propietario=\"<?php echo $MULTILANG_PCODER_Propietario; ?>\";\n		var MULTILANG_PCODER_Permisos=\"<?php echo $MULTILANG_PCODER_Permisos; ?>\";\n		var MULTILANG_PCODER_Eliminado=\"<?php echo $MULTILANG_PCODER_Eliminado; ?>\";\n		var MULTILANG_PCODER_ExtensionNoSoportada=\"<?php echo $MULTILANG_PCODER_ExtensionNoSoportada; ?>\";\n		var MULTILANG_PCODER_HistorialVersiones=\"<?php echo $MULTILANG_PCODER_HistorialVersiones; ?>\";\n		var PCO_PCODER_StandAlone=\"<?php echo $PCO_PCODER_StandAlone; ?>\";\n		var PCOSESS_LoginUsuario=\"<?php echo $PCOSESS_LoginUsuario; ?>\";\n		var MULTILANG_PCODER_AdvertenciaCierre=\"<?php echo $MULTILANG_PCODER_AdvertenciaCierre; ?>\";\n	</script>\n\n\n<?php\n\n\n    \n    \n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/lib_pcoder.php\n    \n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCODER_EliminarElemento\n	Elimina un elemento en el sistema de ficheros\n	Retorna:\n		1	Operacion exitosa\n		-1	Error\n*/\nif ($PCO_Accion==\"PCODER_EliminarElemento\") \n	{\n		$ResultadoOperacion=\"0\";\n		//Realiza operacion segun el tipo de elemento\n		if($PCODER_TipoElementoFS==\"archivo\")\n			$Eliminacion=unlink($PCODER_ElementoFS);\n		if($PCODER_TipoElementoFS==\"carpeta\")\n			$Eliminacion=rmdir($PCODER_ElementoFS);\n		//Determina valor a devolver\n		if ($Eliminacion)\n			$ResultadoOperacion=\"1\";\n		else\n			$ResultadoOperacion=\"-1\";\n		@ob_clean();\n        echo $ResultadoOperacion;\n        die();\n	}\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCODER_EditarPermisos\n	Cambia los permisos o propietario de un elemento en el sistema de ficheros\n	Retorna:\n		1	Operacion exitosa\n		-1	Error cambiando permisos y propietario\n		-2	Error cambiando permisos\n		-3	Error cambiando propietario\n*/\nif ($PCO_Accion==\"PCODER_EditarPermisos\") \n	{\n		$ResultadoOperacion=\"0\";\n\n		//Cambia permisos\n		$CambioPermisos=chmod($PCODER_ElementoFS, $PCODER_PermisosFS );\n		\n		//Cambia propietario\n		$CambioPropietario=chown($PCODER_ElementoFS, $PCODER_PropietarioFS );\n		\n		if ($CambioPermisos && $CambioPropietario)\n			{\n				$ResultadoOperacion=\"1\";\n			}\n		else\n			{\n				if (!$CambioPermisos && !$CambioPropietario)\n					{\n						$ResultadoOperacion=\"-1\";\n					}\n				else\n					{\n						if (!$CambioPermisos)\n							$ResultadoOperacion=\"-2\";\n						if (!$CambioPropietario)\n							$ResultadoOperacion=\"-3\";\n					}\n			}\n		@ob_clean();\n        echo $ResultadoOperacion;\n        die();\n	}\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCODER_CrearCarpeta\n	Crea una nueva carpeta sobre el sistema de ficheros\n	Retorna:\n		1	Operacion exitosa\n		-1	La carpeta ya existe\n		-2	La carpeta no se pudo crear\n*/\nif ($PCO_Accion==\"PCODER_CrearCarpeta\") \n	{\n		$ResultadoOperacion=\"0\";\n		//Crea el archivo solo si no existe\n		$ExisteElemento=file_exists($PCODER_ElementoFS);\n		if(!$ExisteElemento)\n			{\n				$CreacionElemento=mkdir($PCODER_ElementoFS);\n				if ($CreacionElemento)\n					$ResultadoOperacion=\"1\";\n				else\n					$ResultadoOperacion=\"-2\";\n			}\n		else\n			$ResultadoOperacion=\"-1\";\n		@ob_clean();\n        echo $ResultadoOperacion;\n        die();\n	}\n\n\n\n\n\n\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCOMOD_ObtenerPermisosArchivo\n	Determina cuales son los permisos de un archivo\n*/\nif ($PCO_Accion==\"PCOMOD_ObtenerPermisosArchivo\") \n	{\n		$permisos_encontrados=@substr(sprintf(\'%o\', fileperms($PCODER_archivo)), -4);\n        @ob_clean();\n        echo $permisos_encontrados;\n        die();\n	}\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCOMOD_ObtenerPropietarioArchivo\n	Determina el propietario de un archivo\n*/\nif ($PCO_Accion==\"PCOMOD_ObtenerPropietarioArchivo\") \n	{\n		$propietario_encontrado=@posix_getpwuid(fileowner($PCODER_archivo));\n		$propietario_encontrado=$propietario_encontrado[\'name\'];\n        @ob_clean();\n        echo $propietario_encontrado;\n        die();\n	}\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCOMOD_VerificarPermisosRW\n	Verifica si el archivo cuenta o no con permisos de escritura por parte del usuario que corre el proceso web (generalmente Apache)\n*/\nif ($PCO_Accion==\"PCOMOD_VerificarPermisosRW\") \n	{\n		$permisos_ok=1;\n		$permisos_encontrados=@substr(sprintf(\'%o\', fileperms($PCODER_archivo)), -4);\n		if (!is_writable($PCODER_archivo)) { $permisos_ok=0; }\n        @ob_clean();\n        echo $permisos_ok;\n        die();\n	}\n\n\n/* ################################################################## */\n/* ################################################################## */\n/*\n	Function: PCOMOD_ObtenerTamanoDocumento\n	Obtiene el tamano de elemento o archivo indicado\n*/\nif ($PCO_Accion==\"PCOMOD_ObtenerTamanoDocumento\") \n	{\n        $PCODER_TamanoElemento=@round(filesize($PCODER_archivo)/1024);\n		@ob_clean();\n        echo $PCODER_TamanoElemento;\n        die();\n	}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/variables.php\n            //Define los temas de color claro disponibles para el editor\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Chrome\",	Valor => \"chrome\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Clouds\",	Valor => \"clouds\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Crimson Editor\",	Valor => \"crimson_editor\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Dawn\",	Valor => \"dawn\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Dreamweaver\",	Valor => \"dreamweaver\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Eclipse\",	Valor => \"eclipse\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"GitHub\",	Valor => \"github\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Solarized Light\",	Valor => \"solarized_light\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"TextMate\",	Valor => \"textmate\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Tomorrow\",	Valor => \"tomorrow\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"XCode\",	Valor => \"xcode\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"Kuroir\",	Valor => \"kuroir\");\n            $PCODER_TemasBrillantes[]=array(Nombre => \"KatzenMilch\",	Valor => \"katzenmilch\");\n        \n        \n            //Define los temas de color oscuro disponibles para el editor\n            $PCODER_TemasOscuros[]=array(Nombre => \"Ambiance\",	Valor => \"ambiance\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Chaos\",	Valor => \"chaos\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Clouds Midnight\",	Valor => \"clouds_midnight\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Cobalt\",	Valor => \"cobalt\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"idle Fingers\",	Valor => \"idle_fingers\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"krTheme\",	Valor => \"kr_theme\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Merbivore\",	Valor => \"merbivore\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Merbivore Soft\",	Valor => \"merbivore_soft\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Mono Industrial\",	Valor => \"mono_industrial\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Monokai\",	Valor => \"monokai\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Pastel on dark\",	Valor => \"pastel_on_dark\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Solarized Dark\",	Valor => \"solarized_dark\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Terminal\",	Valor => \"terminal\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Tomorrow Night\",	Valor => \"tomorrow_night\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Tomorrow Night Blue\",	Valor => \"tomorrow_night_blue\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Tomorrow Night Bright\",	Valor => \"tomorrow_night_bright\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Tomorrow Night 80s\",	Valor => \"tomorrow_night_eighties\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Twilight\",	Valor => \"twilight\");\n            $PCODER_TemasOscuros[]=array(Nombre => \"Vibrant Ink\",	Valor => \"vibrant_ink\");\n\n\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_teclado.php\n	//Genera dialogo modal para Atajos de Teclado\n            global $MULTILANG_PCODER_Ayuda,$MULTILANG_PCODER_AtajosTitPcoder;\n            PCO_AbrirDialogoModal(\"AtajosTeclado\",$MULTILANG_PCODER_Ayuda.\': <b>\'.$MULTILANG_PCODER_AtajosTitPcoder.\'</b>\',\"\"); ?>\n                <DIV style=\"DISPLAY: block; OVERFLOW: auto; WIDTH: 100%; POSITION: relative; HEIGHT: 400px\">\n                    <?php PCODER_PresentarKeyBindings(); ?>\n                </DIV>\n            <?php \n                $barra_herramientas_modal=\'\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">\'.$MULTILANG_PCODER_Cerrar.\' {<i class=\"fa fa-keyboard-o\"></i> Esc}</button>\';\n                PCO_CerrarDialogoModal($barra_herramientas_modal);\n\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_acerca.php\n	//Genera dialogo modal para Acerca de PCoder\n            global $MULTILANG_PCODER_Acerca,$MULTILANG_PCODER_Cerrar;\n            PCO_AbrirDialogoModal(\"myModalACERCADEPCODER\",$MULTILANG_PCODER_Acerca); ?>\n        		<div align=\"center\">\n        			<br><h2><b>{P}Coder </b><i>ver Embebido</i></h2>\n        			Practico CODe EditoR<br><br>\n        			 Powered by <a href=\"http://www.practico.org/\"><i>Practico Framework PHP (www.practico.org)</i></a><hr>\n        \n        			   <b>Editor de Código en la Nube basado en PHP<br></b>\n        			   Copyright (C) 2015  John F. Arroyave Gutiérrez<br><br>\n        		</div>\n            <?php \n                $barra_herramientas_modal=\'\n                <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">\'.$MULTILANG_PCODER_Cerrar.\' {<i class=\"fa fa-keyboard-o\"></i> Esc}</button>\';\n                PCO_CerrarDialogoModal($barra_herramientas_modal);\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_preferencias.php\n	//Genera dialogo modal para marco de preferencias\n	        global $MULTILANG_PCODER_Preferencias,$MULTILANG_PCODER_TamanoFuente,$MULTILANG_PCODER_AparienciaEditor;\n	        global $MULTILANG_PCODER_LenguajeProg,$MULTILANG_PCODER_VerCaracteres,$MULTILANG_PCODER_No,$MULTILANG_PCODER_Si;\n	        global $MULTILANG_PCODER_RevisarSintaxis;\n\n	        PCO_AbrirDialogoModal(\"myModalPREFERENCIAS\",$MULTILANG_PCODER_Preferencias); ?>\n			<div class=\"row\">\n				<div class=\"col-lg-6\">\n						<label for=\"tamano_fuente\"><?php echo $MULTILANG_PCODER_TamanoFuente; ?></label>\n						<select id=\"tamano_fuente\" size=\"1\" class=\"form-control btn-warning\" onchange=\"CambiarFuenteEditor(this.value)\">\n						  <option value=\"10px\">10px</option>\n						  <option value=\"11px\">11px</option>\n						  <option value=\"12px\">12px</option>\n						  <option value=\"13px\">13px</option>\n						  <option value=\"14px\" selected=\"selected\">14px</option>\n						  <option value=\"16px\">16px</option>\n						  <option value=\"18px\">18px</option>\n						  <option value=\"20px\">20px</option>\n						  <option value=\"24px\">24px</option>\n						</select>\n				</div>\n				<div class=\"col-lg-6\">\n						<label for=\"tema_grafico\"><?php echo $MULTILANG_PCODER_AparienciaEditor; ?></label>\n						<select id=\"tema_grafico\" size=\"1\" class=\"form-control btn-primary\" onchange=\"CambiarTemaEditor(this.value)\">\n						  <optgroup label=\"Brillantes / Bright\">\n							  <?php\n								//Presenta los temas claros disponibles\n								for ($i=0;$i<count($PCODER_TemasBrillantes);$i++)\n									echo \'<option value=\"ace/theme/\'.$PCODER_TemasBrillantes[$i][\"Valor\"].\'\">\'.$PCODER_TemasBrillantes[$i][\"Nombre\"].\'</option>\';\n							  ?>\n						  </optgroup>\n						  <optgroup label=\"Oscuros / Dark\">\n							  <?php\n								//Presenta los temas claros disponibles\n								for ($i=0;$i<count($PCODER_TemasOscuros);$i++)\n									{\n										$EstadoSeleccionTema=\"\";\n										if ($PCODER_TemasOscuros[$i][\"Valor\"]==\"ambiance\")\n											$EstadoSeleccionTema=\" SELECTED \";\n										echo \'<option value=\"ace/theme/\'.$PCODER_TemasOscuros[$i][\"Valor\"].\'\" \'.$EstadoSeleccionTema.\'>\'.$PCODER_TemasOscuros[$i][\"Nombre\"].\'</option>\';\n									}\n							  ?>\n						  </optgroup>\n						</select>\n				</div>\n			</div>\n			<hr>\n			<div class=\"row\">\n				<div class=\"col-lg-6\">\n						<label for=\"modo_archivo_preferencias\"><?php echo $MULTILANG_PCODER_LenguajeProg; ?></label>\n						<select id=\"modo_archivo_preferencias\" size=\"1\" class=\"form-control btn-info\" onchange=\"CambiarModoEditor(this.value)\">\n							  <?php\n								//Presenta los lenguajes disponibles\n								for ($i=0;$i<count($PCODER_Modos);$i++)\n									echo \'<option value=\"ace/mode/\'.$PCODER_Modos[$i][\"Nombre\"].\'\">\'.$PCODER_Modos[$i][\"Nombre\"].\'</option>\';\n							  ?>\n						</select>\n				</div>\n				<div class=\"col-lg-6\">\n						<label for=\"modo_invisibles\"><?php echo $MULTILANG_PCODER_VerCaracteres; ?></label>\n						<select id=\"modo_invisibles\" size=\"1\" class=\"form-control btn-default\" onchange=\"CaracteresInvisiblesEditor(this.value)\">\n							<option value=\"0\"><?php echo $MULTILANG_PCODER_No; ?></option>\n							<option value=\"1\"><?php echo $MULTILANG_PCODER_Si; ?></option>\n						</select>\n				</div>\n			</div>\n			<hr>\n			<div class=\"row\">\n				<div class=\"col-lg-6\">\n						<label for=\"verificacion_sintaxis\"><?php echo $MULTILANG_PCODER_RevisarSintaxis; ?></label>\n						<select id=\"verificacion_sintaxis\" size=\"1\" class=\"form-control btn-success\" onchange=\"VerificarSintaxisEditor(this.value)\">\n							<option value=\"0\"><?php echo $MULTILANG_PCODER_No; ?></option>\n							<option value=\"1\"><?php echo $MULTILANG_PCODER_Si; ?></option>\n						</select>\n				</div>\n				<div class=\"col-lg-6\">\n					<!--\n						<label for=\"verificacion_autocompletado\"><?php echo $MULTILANG_PCODER_RevisarSintaxis; ?></label>\n						<select id=\"verificacion_autocompletado\" size=\"1\" class=\"form-control btn-success\" onchange=\"VerificarAutocompletadoEditor(this.value)\">\n							<option value=\"0\"><?php echo $MULTILANG_PCODER_No; ?></option>\n							<option value=\"1\"><?php echo $MULTILANG_PCODER_Si; ?></option>\n						</select>\n					-->\n				</div>\n			</div>\n    <?php \n            $barra_herramientas_modal=\'\n            <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">\'.$MULTILANG_PCODER_Cerrar.\' {<i class=\"fa fa-keyboard-o\"></i> Esc}</button>\';\n            PCO_CerrarDialogoModal($barra_herramientas_modal);\n\n\n    ############################################################################\n    ############################################################################\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/marco_operarfs.php\n	//Genera dialogo modal para crear archivos o carpetas\n	global $MULTILANG_PCODER_OperacionesFS,$MULTILANG_PCODER_Ubicacion,$MULTILANG_PCODER_Explorar,$MULTILANG_PCODER_Operacion;\n	global $MULTILANG_PCODER_CrearArchivo,$MULTILANG_PCODER_CrearCarpeta,$MULTILANG_PCODER_EditarPermisos,$MULTILANG_PCODER_SubirArchivo,$MULTILANG_PCODER_EliminarElemento;\n	global $MULTILANG_PCODER_Nombre,$MULTILANG_PCODER_Permisos,$MULTILANG_PCODER_Propietario,$MULTILANG_PCODER_Aceptar,$MULTILANG_Cancelar,$MULTILANG_Cerrar;\n	global $MULTILANG_PCODER_Comunes,$MULTILANG_PCODER_Predeterminado,$MULTILANG_PCODER_PathDisco,$MULTILANG_PCODER_PathFull;\n	PCO_AbrirDialogoModal(\"myModalOPERARFS\",$MULTILANG_PCODER_OperacionesFS); ?>\n			<div class=\"row\">\n				<div class=\"col-xs-12 col-sm-12 col-md-6 col-lg-12\">\n					<iframe width=\"100%\" height=400 src=\"index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PFE_OcultarMigasPan=0&PFE_VistaBasicaArchivos=1&PFE_VisibleBotonDT=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDescargar=0&PFE_ActivarDataTable=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDT=0&PFE_OcultarArchivos=1\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\">Cargando...</iframe>\n				</div>\n			</div>\n    <?php \n        $barra_herramientas_modal=\'\n        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times fa-fw\"></i> \'.$MULTILANG_Cerrar.\' {<i class=\"fa fa-keyboard-o\"></i> Esc}</button>\';\n        PCO_CerrarDialogoModal($barra_herramientas_modal);\n\n\n    ############################################################################\n    ############################################################################\n	//Genera dialogo modal para abrir archivos\n	global $MULTILANG_PCODER_OperacionesFS,$MULTILANG_PCODER_Ubicacion,$MULTILANG_PCODER_Explorar,$MULTILANG_PCODER_Operacion;\n	global $MULTILANG_PCODER_CrearArchivo,$MULTILANG_PCODER_CrearCarpeta,$MULTILANG_PCODER_EditarPermisos,$MULTILANG_PCODER_SubirArchivo,$MULTILANG_PCODER_EliminarElemento;\n	global $MULTILANG_PCODER_Nombre,$MULTILANG_PCODER_Permisos,$MULTILANG_PCODER_Propietario,$MULTILANG_PCODER_Aceptar,$MULTILANG_Cancelar,$MULTILANG_Cerrar;\n	global $MULTILANG_PCODER_Comunes,$MULTILANG_PCODER_Predeterminado,$MULTILANG_PCODER_PathDisco,$MULTILANG_PCODER_PathFull;\n	PCO_AbrirDialogoModal(\"myModalABRIRFS\",\"Abrir/Editar un archivo\"); ?>\n			<div class=\"row\">\n				<div class=\"col-xs-12 col-sm-12 col-md-6 col-lg-12\">\n					<iframe width=\"100%\" height=400 src=\"index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen=1&Precarga_EstilosBS=1&PFE_OcultarMigasPan=0&PFE_VistaBasicaArchivos=1&PFE_VisibleBotonDT=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDescargar=0&PFE_ActivarDataTable=0&PFE_VisibleBotonCargarArchivo=0&PFE_VisibleBotonCargarCloud=0&PFE_VisibleBotonDT=0&PFE_OcultarBarraHerramientas=0&PFE_VisibleBotonEliminar=0&PFE_VisibleBotonRenombrar=0&PFE_VisibleBotonPermisos=0&PFE_VisibleBotonNuevoArchivo=0&PFE_VisibleBotonNuevoDirectorio=0&PFE_ActivarCargarEnPcoder=1\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\">Cargando...</iframe>\n				</div>\n			</div>\n    <?php \n        $barra_herramientas_modal=\'\n        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\"><i class=\"fa fa-times fa-fw\"></i> \'.$MULTILANG_Cerrar.\' {<i class=\"fa fa-keyboard-o\"></i> Esc}</button>\';\n        PCO_CerrarDialogoModal($barra_herramientas_modal);\n\n\n    ############################################################################\n    ############################################################################\n    //Define los modos o lenguajes soportados por el editor\n            global $PCODER_LenguajesResaltado,$MULTILANG_PCODER_LenguajeResaltado;\n            //Genera la lista con las opciones\n            $PCODER_LenguajesResaltado=\"\";\n            $PCODER_LenguajesResaltado.=\"<select style=\'width:25px; padding:0px;\' id=\'modo_archivo_top\' size=\'1\' class=\' btn-xs btn-primary\' onclick=\'event.preventDefault();\' onchange=\'event.preventDefault(); CambiarModoEditor(this.value);\'  data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'{$MULTILANG_PCODER_LenguajeResaltado}\'>\";\n        		for ($i=0;$i<count($PCODER_Modos);$i++)\n        		    $PCODER_LenguajesResaltado.=\"<option class=\'btn-xs\' value=\'ace/mode/\".$PCODER_Modos[$i][\"Nombre\"].\"\' >\".$PCODER_Modos[$i][\"Nombre\"].\"</option>\";\n            $PCODER_LenguajesResaltado.=\"</select>\";\n\n        \n/* ################################################################## */\n/* ################################################################## */\n    ##  Compatilidad/Equivalencia con  mod/pcoder/inc/comunes.php\n\n/*\n    Function: Presentar_KeyBindings\n    Presenta la inforamcion de ayuda de atajos de teclado\n*/\nfunction PCODER_PresentarKeyBindings()\n    {\n        global $MULTILANG_PCODER_Basicos,$MULTILANG_PCODER_Otros,$MULTILANG_PCODER_Desplazar,$MULTILANG_PCODER_Seleccionar;\n        echo \'\n            <div class=\"btn btn-success btn-block\"><b>\'.$MULTILANG_PCODER_Basicos.\'</b></div>\n            <table class=\"table table-responsive table-bordered table-condensed table-hover btn-xs\">\n                <thead>\n                    <tr>\n                        <td><b>PC (Windows/Linux)</b></td>\n                        <td><b>Mac</b></td>\n                        <td><b>Acción</b></td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td>Ctrl-L</td>\n                        <td>Command-L</td>\n                        <td>Ir a la línea</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-F</td>\n                        <td>Command-F</td>\n                        <td>Buscar</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-H</td>\n                        <td>Command-Option-F</td>\n                        <td>Buscar y reemplazar</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-K</td>\n                        <td>Command-G</td>\n                        <td>Buscar siguiente</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-K</td>\n                        <td>Command-Shift-G</td>\n                        <td>Buscar anterior</td>\n                    </tr>\n                    <tr>\n                        <td>Tab</td>\n                        <td>Tab</td>\n                        <td>Agregar sangría</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Tab</td>\n                        <td>Shift-Tab</td>\n                        <td>Disminuir sangría</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-L, Ctrl-F1</td>\n                        <td>Command-Option-L, Command-F1</td>\n                        <td>Recoger/Expandir selección</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-P</td>\n                        <td></td>\n                        <td>Buscar el siguiente elemento que abre o cierra el actual (llaves, paréntesis,cochetes,etc)</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-P</td>\n                        <td></td>\n                        <td>Buscar el siguiente elemento que abre o cierra el actual (llaves, paréntesis,cochetes,etc)</td>\n                    </tr>\n                </tbody>\n            </table>\n\n            <div class=\"btn btn-success btn-block\"><b>\'.$MULTILANG_PCODER_Desplazar.\'</b></div>\n            <table class=\"table table-responsive table-bordered table-condensed table-hover btn-xs\">\n                <thead>\n                    <tr>\n                        <td><b>PC (Windows/Linux)</b></td>\n                        <td><b>Mac</b></td>\n                        <td><b>Acción</b></td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td>Down</td>\n                        <td>Down, Ctrl-N</td>\n                        <td>Bajar una línea</td>\n                    </tr>\n                    <tr>\n                        <td>Up</td>\n                        <td>Up, Ctrl-P</td>\n                        <td>Subir una línea</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-End</td>\n                        <td>Command-End, Command-Down</td>\n                        <td>Ir al final</td>\n                    </tr>\n                    <tr>\n                        <td>Left</td>\n                        <td>Left, Ctrl-B</td>\n                        <td>Ir a la izquierda</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Right, End</td>\n                        <td>Command-Right, End, Ctrl-E</td>\n                        <td>Ir al final de la línea</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Left, Home</td>\n                        <td>Command-Left, Home, Ctrl-A</td>\n                        <td>Ir al comienzo de la línea</td>\n                    </tr>\n                    <tr>\n                        <td>PageDown</td>\n                        <td>Option-PageDown, Ctrl-V</td>\n                        <td>Ir una página abajo</td>\n                    </tr>\n                    <tr>\n                        <td>PageUp</td>\n                        <td>Option-PageUp</td>\n                        <td>Ir una página arriba</td>\n                    </tr>\n                    <tr>\n                        <td>Right</td>\n                        <td>Right, Ctrl-F</td>\n                        <td>Ir a la derecha</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Home</td>\n                        <td>Command-Home, Command-Up</td>\n                        <td>Ir al inicio del documento</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Left</td>\n                        <td>Option-Left</td>\n                        <td>Ir una palabra a la izquierda</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Right</td>\n                        <td>Option-Right</td>\n                        <td>Ir una palabra a la derecha</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Down</td>\n                        <td>Option-Down</td>\n                        <td>Mover una línea abajo</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Up</td>\n                        <td>Option-Up</td>\n                        <td>Mover una línea arriba</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Shift-Up</td>\n                        <td>Ctrl-Option-Shift-Up</td>\n                        <td>Mover multicursor de la línea actual a la línea superior</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Shift-Down</td>\n                        <td>Ctrl-Option-Shift-Down</td>\n                        <td>Mover multicursor de la línea actual a la línea inferior</td>\n                    </tr>\n                    <tr>\n                        <td>Insert</td>\n                        <td>Insert</td>\n                        <td>Sobreescribir en el cursor</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Shift-Right</td>\n                        <td>Ctrl-Option-Shift-Right</td>\n                        <td>Remover la ocurrencia actual de la multiseleccion y moverse al siguiente</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Shift-Left</td>\n                        <td>Ctrl-Option-Shift-Left</td>\n                        <td>Remover la ocurrencia actual de la multiseleccion y moverse al anterior</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-D</td>\n                        <td>Command-D</td>\n                        <td>Remover línea</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Delete</td>\n                        <td>Ctrl-K</td>\n                        <td>Remover hasta el fin de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Backspace</td>\n                        <td>Command-Backspace</td>\n                        <td>Remover hasta el inicio de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Backspace</td>\n                        <td>Option-Backspace, Ctrl-Option-Backspace</td>\n                        <td>Remover palabra a la izquierda</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Delete</td>\n                        <td>Option-Delete</td>\n                        <td>Remover palabra a la derecha</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Down</td>\n                        <td>Command-Down</td>\n                        <td>Desplazar una línea hacia abajo</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Up</td>\n                        <td></td>\n                        <td>Desplazar una línea hacia arriba</td>\n                    </tr>\n                    <tr>\n                        <td></td>\n                        <td>Option-PageDown	</td>\n                        <td>Desplazar una página hacia abajo</td>\n                    </tr>\n                    <tr>\n                        <td></td>\n                        <td>Option-PageUp</td>\n                        <td>Desplazar una página hacia arriba</td>\n                    </tr>\n                </tbody>\n            </table>\n\n            <div class=\"btn btn-success btn-block\"><b>\'.$MULTILANG_PCODER_Seleccionar.\'</b></div>\n            <table class=\"table table-responsive table-bordered table-condensed table-hover btn-xs\">\n                <thead>\n                    <tr>\n                        <td><b>PC (Windows/Linux)</b></td>\n                        <td><b>Mac</b></td>\n                        <td><b>Acción</b></td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td>Ctrl-A</td>\n                        <td>Command-A</td>\n                        <td>Seleccionar todo</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-L</td>\n                        <td>Ctrl-Shift-L</td>\n                        <td>Seleccionar todo de una multiselección</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Down</td>\n                        <td>Shift-Down</td>\n                        <td>Seleccionar hacia abajo</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Left</td>\n                        <td>Shift-Left</td>\n                        <td>Seleccionar hacia la izquierda</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-End</td>\n                        <td>Shift-End</td>\n                        <td>Seleccionar hasta el fin de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Home</td>\n                        <td>Shift-Home</td>\n                        <td>Seleccionar hasta el comienzo de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-PageDown</td>\n                        <td>Shift-PageDown</td>\n                        <td>Seleccionar una página hacia abajo</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-PageUp</td>\n                        <td>Shift-PageUp</td>\n                        <td>Seleccionar una página hacia arriba</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Right</td>\n                        <td>Shift-Right</td>\n                        <td>Seleccionar hacia la derecha</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-End</td>\n                        <td>Command-Shift-Down</td>\n                        <td>Seleccionar hasta el fin del documento</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-Right</td>\n                        <td>Command-Shift-Right	</td>\n                        <td>Seleccionar hasta el fin de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-Left</td>\n                        <td>Command-Shift-Left</td>\n                        <td>Seleccionar hasta el comienzo de línea</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-Home</td>\n                        <td>Command-Shift-Up</td>\n                        <td>Seleccionar hasta el inicio del documento</td>\n                    </tr>\n                    <tr>\n                        <td>Shift-Up</td>\n                        <td>Shift-Up</td>\n                        <td>Seleccionar hacia arriba</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-Left</td>\n                        <td>Option-Shift-Left</td>\n                        <td>Seleccionar palabra a la izquierda</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-Right</td>\n                        <td>Option-Shift-Right</td>\n                        <td>Seleccionar palabra a la derecha</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-D</td>\n                        <td>Command-Shift-D</td>\n                        <td>Duplicar la selección</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Up</td>\n                        <td>Ctrl-Option-Up</td>\n                        <td>Agregar multicursor arriba</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Down</td>\n                        <td>Ctrl-Option-Down</td>\n                        <td>Agregar multicursor abajo</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Right</td>\n                        <td>Ctrl-Option-Right</td>\n                        <td>Añadir siguiente aparición de selección múltiple</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Alt-Left</td>\n                        <td>Ctrl-Option-Left</td>\n                        <td>Añadir previa aparición de selección múltiple</td>\n                    </tr>\n                    <tr>\n                        <td></td>\n                        <td>Ctrl-L</td>\n                        <td>Centrar la selección</td>\n                    </tr>\n                </tbody>\n            </table>\n\n\n            <div class=\"btn btn-success btn-block\"><b>\'.$MULTILANG_PCODER_Otros.\'</b></div>\n            <table class=\"table table-responsive table-bordered table-condensed table-hover btn-xs\">\n                <thead>\n                    <tr>\n                        <td><b>PC (Windows/Linux)</b></td>\n                        <td><b>Mac</b></td>\n                        <td><b>Acción</b></td>\n                    </tr>\n                </thead>\n                <tbody>\n                    <tr>\n                        <td>Ctrl-Alt-E</td>\n                        <td></td>\n                        <td>Grabar una macro</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-E</td>\n                        <td>Command-Shift-E</td>\n                        <td>Ejecutar una macro</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Z</td>\n                        <td>Command-Z</td>\n                        <td>Deshacer</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-Z, Ctrl-Y</td>\n                        <td>Command-Shift-Z, Command-Y</td>\n                        <td>Rehacer</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Shift-U</td>\n                        <td>Ctrl-Shift-U</td>\n                        <td>Cambiar a minúsculas</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-U</td>\n                        <td>Ctrl-U</td>\n                        <td>Cambiar a mayúsculas</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-Down</td>\n                        <td>Command-Option-Down</td>\n                        <td>Copiar línea debajo</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-Up</td>\n                        <td>Command-Option-Up</td>\n                        <td>Copiar línea encima</td>\n                    </tr>\n                    <tr>\n                        <td>Delete</td>\n                        <td></td>\n                        <td>Eliminar</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-0</td>\n                        <td>Command-Option-0</td>\n                        <td>Recoger todo</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-Enter, F11</td>\n                        <td>Command-Enter</td>\n                        <td>Pantalla completa</td>\n                    </tr>\n                    <tr>\n                        <td></td>\n                        <td>Ctrl-O</td>\n                        <td>Dividir línea</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-/</td>\n                        <td>Command-/</td>\n                        <td>Cambiar a comentario</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl-T</td>\n                        <td>Ctrl-T</td>\n                        <td>Transponer letras</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-L, Ctrl-Shift-F1</td>\n                        <td>Command-Option-Shift-L, Command-Shift-F1</td>\n                        <td>Expandir</td>\n                    </tr>\n                    <tr>\n                        <td>Alt-Shift-0</td>\n                        <td>Command-Option-Shift-0</td>\n                        <td>Expandir todo</td>\n                    </tr>\n                    <tr>\n                        <td>Ctrl- ,</td>\n                        <td>Command- ,</td>\n                        <td>Ver menu de configuración</td>\n                    </tr>\n                </tbody>\n            </table>\n        \';\n    }','<?php\n    ##########################################################################\n    ##########################################################################\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        {\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-33\",\"SECLog:event\");\n            die();\n        }\n    ##########################################################################\n    ##########################################################################\n\n\nglobal $PCODER_Accion,$PCODER_archivo,$Origen_Archivo,$Tabla_Archivo,$Campo_Archivo,$Llave_Registro,$PCOSESS_LoginUsuario,$ArchivoBloqueo;\n\n################################################################################\n################################################################################\n/*\n	Function: PCODER_EliminarBloqueo\n	Elimina un bloqueo de la tabla de pcoder siempre y cuando sea un archivo abierto por el usuario activo\n*/\nif ($PCODER_Accion==\"PCODER_EliminarBloqueo\") \n	{\n        PCO_EjecutarSQLUnaria(\"DELETE FROM core_pcoder_bloqueos WHERE archivo=\'{$ArchivoBloqueo}\' AND usuario=\'{$PCOSESS_LoginUsuario}\' \");\n        @ob_clean();\n        die();\n	}\n\n################################################################################\n################################################################################\n/*\n	Function: PCOMOD_EliminarHistorial\n	Dado un ID de registro de historial lo elimina de la tabla.\n*/\nif ($PCODER_Accion==\"PCODER_EliminarHistorial\") \n	{\n        PCO_EjecutarSQLUnaria(\"DELETE FROM core_pcoder_historial WHERE id={$Llave_Registro} \");\n\n   		@ob_clean();\n        echo \"Eliminado\";\n        die();\n	}\n\n\n################################################################################\n################################################################################\n/*\n	Function: PCOMOD_ObtenerContenidoArchivo\n	Obtiene el contenido del archivo indicado dependiendo de su origen (A=rchivo o B=asedatos)\n*/\nif ($PCODER_Accion==\"PCOMOD_ObtenerContenidoArchivo\") \n	{\n	    if ($Origen_Archivo==\"A\")\n            $PCODER_Contenido_original_archivo=@file_get_contents($PCODER_archivo, FILE_BINARY);   // FILE_TEXT | FILE_BINARY | FILE_USE_INCLUDE_PATH\n\n	    if ($Origen_Archivo==\"B\")\n            $PCODER_Contenido_original_archivo=PCO_EjecutarSQL(\"SELECT {$Campo_Archivo} FROM {$Tabla_Archivo} WHERE id={$Llave_Registro} \")->fetchColumn();\n\n        //$PCODER_ContenidoArchivo=@htmlspecialchars($PCODER_Contenido_original_archivo); //Para cargue como estaba en forma original (Sin Ajax)\n        $PCODER_ContenidoArchivo= $PCODER_Contenido_original_archivo;\n\n        //DOCS: http://stackoverflow.com/questions/15186558/loading-a-html-file-into-ace-editor-pre-tag\n        //DOCS: <pre id=\"editor\"><INTE ? php echo htmlentities(file_get_contents($input_dir.\"abc.html\")); ? ></pre>\n        //$PCODER_ContenidoArchivo=@htmlspecialchars(addslashes($PCODER_ContenidoArchivo));\n   		@ob_clean();\n        echo $PCODER_ContenidoArchivo;\n        die();\n	}\n\n\n################################################################################\n################################################################################\n/*\n	Function: PCOMOD_GuardarArchivo\n	Almacena un archivo previamente abierto con el PCODER\n\n	Salida:\n		Archivo para edicion en pantalla\n*/\nif ($PCODER_Accion==\"PCOMOD_GuardarArchivo\") \n	{\n	    global $TablasCore,$PCOSESS_LoginUsuario,$PCODER_AreaTexto,$PCODER_NroLineasDocumento,$PCODER_NroCaracteresDocumento;\n        global $_SeparadorCampos_,$PCO_FechaOperacionGuiones,$PCO_HoraOperacionPuntos,$CantidadLineas,$CantidadCaracteres,$ContenidoArchivo;\n\n        //Guarda el archivo\n        $ContenidoArchivo=$PCODER_AreaTexto;\n        $ContenidoArchivo = preg_replace(\'~\\r\\n?~\', \"\\n\", $ContenidoArchivo); //Normaliza los saltos de linea dentro del archivo\n\n	    if ($Origen_Archivo==\"A\")\n            $PCODER_Respuesta = file_put_contents($PCODER_archivo, $ContenidoArchivo) or die(\"No se puede abrir el archivo para escritura\");\n\n	    if ($Origen_Archivo==\"B\")\n            PCO_EjecutarSQLUnaria(\"UPDATE {$Tabla_Archivo} SET {$Campo_Archivo}=? WHERE id={$Llave_Registro} \",\"$ContenidoArchivo\");\n\n        //Vuelve a cargar el archivo para continuar con su edicion\n            PCO_Auditar(\"Modifica archivo $PCODER_archivo\",\"PCoder:$PCOSESS_LoginUsuario\");\n            //Lleva el historial de revision\n            $CantidadLineas=$PCODER_NroLineasDocumento;\n            $CantidadCaracteres=$PCODER_NroCaracteresDocumento;\n	        PCO_EjecutarSQLUnaria(\"INSERT INTO \".$TablasCore.\"pcoder_historial (archivo,fecha_edicion,usuario,lineas,caracteres,contenido,tipo_origen) VALUES (?,?,?,?,?,?,?)\",\"$PCODER_archivo$_SeparadorCampos_$PCO_FechaOperacionGuiones $PCO_HoraOperacionPuntos:00$_SeparadorCampos_$PCOSESS_LoginUsuario$_SeparadorCampos_$CantidadLineas$_SeparadorCampos_$CantidadCaracteres$_SeparadorCampos_$ContenidoArchivo$_SeparadorCampos_$Origen_Archivo\",\"\",0,0);\n\n        echo \'<script type=\"\" language=\"JavaScript\"> console.log(\"PCODER: contenido guardado\");  </script>\';\n	}',0),(8,'Lectura Medidor','Lectura Medidor','Módulo para ingresar las lecturas de los medidores mensuales','app_consumo_medidor',3,'const { lectura_actual, ultima_lectura, id_contrato } = document.datos;\n\nfunction FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n            $(\'#PCO_ErrorTitulo\').val(\'Actualizado correctamente\');\n            $(\'#PCO_ErrorDescripcion\').val(\'El contador se ha actualizado correctamente\');\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction onchangeVerificarLecturaContador() {\n    if(id_contrato.value) {\n        const lectura = PCO_ObtenerContenidoAjax(0, \'index.php\',\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=LECTURA_getUltimaLecturaByContrato&id_contrato=\' + id_contrato.value);\n\n        $(\'#ultima_lectura\').val(lectura || 0);\n    }\n}\n\nfunction onblurLecturaActual() {\n    if(ultima_lectura.value && lectura_actual.value < ultima_lectura.value) {\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La lectura medida no puede ser menor a la última lectura registrada!\");\n        lectura_actual.value = \'\';\n    }\n}',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-12 col-md-6 col-lg-4','panel-primary','','',0),(7,'Menú facturas','Gestión de facturas','Módulo para la gestión de las facturas','core_tabla_comodin',2,'const { mes_factura, zona, tipo_facturacion } = document.datos;\r\nfunction FrmAutoRun()\r\n    {\r\n        facturacionMeses();\r\n    }\r\n    \r\nfunction sleep(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)) }\r\n\r\nasync function descargarFacturas() {\r\n    if($(\'#mes_factura\').val()) {\r\n        const facturas = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=FACTURAS_consultarFacturasMes\'+\r\n            \'&idMes=\' + mes_factura.value +\r\n            \'&zona=\' + zona.value +\r\n            \'&tipo_facturacion=\' + tipo_facturacion.value\r\n        ));\r\n        console.log(facturas);\r\n        // facturas.forEach(function callback(el, index) {\r\n        // descargaFactura = facturas.length;\r\n        for (let i = 0; i < facturas.length; i++) {\r\n            console.log(facturas[i]);\r\n            console.log(facturas[i].id);\r\n            document.datos.PCO_Accion.value = \'FACTURAS_descargarFactura\';\r\n            document.datos.id_registro_datos.value = facturas[i].id;\r\n            document.datos.Precarga_EstilosBS.value = 0;\r\n            document.datos.Presentar_FullScreen.value = 1;\r\n        	document.datos.target = \'_blank\';\r\n        	document.datos.submit();\r\n        	/*const sleep = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n            \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=FACTURAS_sleep\'));*/\r\n            //console.log({sleep});\r\n            await sleep(1200);\r\n           //if (i === 3) throw BreakException;\r\n        };\r\n    }\r\n    else\r\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Debes seleccionar un mes para descargar las facturas\");\r\n}\r\n\r\nfunction facturacionMeses()\r\n{\r\n    const months = [\"\", \"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"];\r\n    const meses = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\r\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=FACTURAS_consultarMesesFacturacion\'));\r\n\r\n    meses.forEach((el) => PCOJS_AgregarOpcionComboBox(\'mes_factura\', el.id, months[parseInt(el.mes)] + \' - \' + el.year));\r\n    PCOJS_ActualizarComboBox(\'mes_factura\');\r\n}\r\n    ',0,'nav-tabs','datos','tradicional','','panel-primary','','',0),(9,'Superintendecia','Informe para Superintendecia','Informe para Superintendecia','app_clientes',1,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }',0,'nav-tabs','datos','responsive','','panel-primary','','',0),(10,'Historico Facturas','Historico Facturas','Todas las facturas registradas en el sistema','app_facturas',1,'function FrmAutoRun()\r\n    {\r\n        //Aqui sus instrucciones\r\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','',0),(-35,'{$MULTILANG_PCODER_HerramientaDiferencias}','','','core_tabla_comodin',1,'function AjustarMaquetacion_FormularioEditor()\r\n    {\r\n        //Estilos para ajustar la maquetacion y economizar espacio\r\n        $(\'#page-wrapper\').css(\'padding\',\'0\');\r\n        $(\"[class=container-fluid]\").each(function() { $(this).css(\"padding\", \"0\"); });\r\n        $(\"[class=col-lg-12]\").each(function() { $(this).find(\'br:first\').remove(); });\r\n        \r\n        //El analizador inserta <br> adicionales mediante funciones nl2br.  Aqui se eliminan los excesos.\r\n        $(\"[class=borrado]\").each(function() { $(this).find(\'br\').remove(); });\r\n        $(\"[class=insertado]\").each(function() { $(this).find(\'br\').remove(); });\r\n        $(\"[class=conservado]\").each(function() { $(this).find(\'br\').remove(); });\r\n        \r\n        AltoVentana=$(window).height();\r\n        TamanoMarcoResultados=AltoVentana-120;\r\n        $(\"#MarcoResultado\").css(\"height\", TamanoMarcoResultados+\"px\");\r\n    }\r\n\r\nfunction FrmAutoRun()\r\n    {\r\n        AjustarMaquetacion_FormularioEditor();\r\n\r\n        //Deshabilitar F5 \r\n        $(function() {\r\n                  $(window).keydown(function(event){\r\n                    if(event.keyCode == 116) {\r\n                      event.preventDefault();\r\n                      return false;\r\n                    }\r\n                  });\r\n            \r\n        });\r\n    }',0,'nav-tabs','datos','responsive','','panel-primary','<?php \r\n    ##########################################################################\r\n    ##########################################################################\r\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\r\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\r\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\r\n        {\r\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\r\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-35\",\"SECLog:event\");\r\n            die();\r\n        }\r\n    ##########################################################################\r\n    ##########################################################################\r\n\r\n    /*\r\n    	Function: PCO_CargarObjeto_VisorDeDiferencias\r\n    	Carga el elemento interno (Formulario -35) asociado al visor de diferencias\r\n    	\r\n        Variables de entrada basicas del Framework:\r\n            URL - index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-35:0&Presentar_FullScreen=1&Precarga_EstilosBS=1\r\n        \r\n        Variables de entrada especificas para el elemento:\r\n            PDIFF_Version1 - Ruta al elemento que representa la version 1 del documento o codigo\r\n            PDIFF_Version2 - Ruta al elemento que representa la version 2 del documento o codigo\r\n            PDIFF_OrigenVersion1 - Tipo de origen (A=Archivo B=BaseDatos)\r\n            PDIFF_OrigenVersion2 - Tipo de origen (A=Archivo B=BaseDatos)\r\n            PDIFF_TablaBDVersion1 - Para Origenes de version tipo B indica ubicacion en el motor\r\n            PDIFF_CampoBDVersion1 - Para Origenes de version tipo B indica ubicacion en el motor\r\n            PDIFF_LlaveBDVersion1 - Para Origenes de version tipo B indica ubicacion en el motor\r\n            PDIFF_TablaBDVersion2 - Para Origenes de version tipo B indica ubicacion en el motor\r\n            PDIFF_CampoBDVersion2 - Para Origenes de version tipo B indica ubicacion en el motor\r\n            PDIFF_LlaveBDVersion2 - Para Origenes de version tipo B indica ubicacion en el motor\r\n\r\n    	Salida:\r\n    	    Comparacion de ambas cadenas formateada en HTML\r\n    */\r\n\r\n	global $PDIFF_Version1,$PDIFF_Version2,$PDIFF_OrigenVersion1,$PDIFF_OrigenVersion2;\r\n	global $PDIFF_TablaBDVersion1,$PDIFF_CampoBDVersion1,$PDIFF_LlaveBDVersion1,$PDIFF_TablaBDVersion2,$PDIFF_CampoBDVersion2,$PDIFF_LlaveBDVersion2;\r\n	global $Presentar_FullScreen,$Precarga_EstilosBS;\r\n\r\n	//PARAMETROS BASICOS DE CONFIGURACION\r\n	$URLRecarga=\"&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-35:0&Presentar_FullScreen={$Presentar_FullScreen}&Precarga_EstilosBS={$Precarga_EstilosBS}&PDIFF_Version1={$PDIFF_Version1}&PDIFF_Version2={$PDIFF_Version2}&PDIFF_OrigenVersion1={$PDIFF_OrigenVersion1}&PDIFF_OrigenVersion2={$PDIFF_OrigenVersion2}\";\r\n\r\n    //VARIABLES DE BANCO DE PRUEBAS - Deberian estar siempre comentadas para produccion\r\n    // ARCHIVOS:\r\n        //$PDIFF_Version1=\"index.php\";\r\n        //$PDIFF_Version2=\"index.php\";\r\n        //$PDIFF_Version2=\"tmp/index2.php\";\r\n\r\n    // BASEDATOS:\r\n        //$PDIFF_OrigenVersion2=\"B\";\r\n        //$PDIFF_CampoBDVersion2=\"contenido\";\r\n        //$PDIFF_TablaBDVersion2=\"core_pcoder_historial\";\r\n        //$PDIFF_LlaveBDVersion2=\"10\";\r\n    \r\n        //$PDIFF_OrigenVersion1=\"B\";\r\n        //$PDIFF_CampoBDVersion1=\"contenido\";\r\n        //$PDIFF_TablaBDVersion1=\"core_pcoder_historial\";\r\n        //$PDIFF_LlaveBDVersion1=\"34\";\r\n\r\n################################################################################\r\n################################################################################\r\n    class BuscadorDiferencias\r\n        {\r\n        	var $error = \'\';\r\n            ////////////////////////////////////////////////////////////////////\r\n            ////////////////////////////////////////////////////////////////////\r\n        	function SepararCadena($Cadena, $Separador, $Fin, &$positions)\r\n            	{\r\n            		$l = strlen($Cadena);\r\n            		$split = array();\r\n            		for($p = 0; $p < $l;)\r\n            		{\r\n            			$e = strcspn($Cadena, $Separador.$Fin, $p);\r\n            			$e += strspn($Cadena, $Separador, $p + $e);\r\n            			$split[] = substr($Cadena, $p, $e);\r\n            			$positions[] = $p;\r\n            			$p += $e;\r\n            			if(strlen($Fin)\r\n            			&& ($e = strspn($Cadena, $Fin, $p)))\r\n            			{\r\n            				$split[] = substr($Cadena, $p, $e);\r\n            				$positions[] = $p;\r\n            				$p += $e;\r\n            			}\r\n            		}\r\n            		$positions[] = $p;\r\n            		return $split;\r\n            	}\r\n        \r\n\r\n            ////////////////////////////////////////////////////////////////////\r\n            ////////////////////////////////////////////////////////////////////\r\n        	function Diff($before, $after, &$difference)\r\n            	{\r\n            		$for_patch = (IsSet($difference->patch) && $difference->patch);\r\n\r\n    				$before = $this->SepararCadena($before, \"\\r\\n\", \'\', $posb);\r\n    				$lb = count($before);\r\n    				$after = $this->SepararCadena($after, \"\\r\\n\", \'\', $posa);\r\n    				$la = count($after);\r\n\r\n            		$diff = array();\r\n            		for($b = $a = 0; $b < $lb && $a < $la;)\r\n            		{\r\n            			for($pb = $b; $a < $la && $pb < $lb && $after[$a] === $before[$pb]; ++$a, ++$pb);\r\n            			if($pb !== $b)\r\n            			{\r\n            				$diff[] = array(\r\n            					\'change\'=>\'=\',\r\n            					\'position\'=>$posb[$b],\r\n            					\'length\'=>$posb[$pb] - $posb[$b]\r\n            				);\r\n            				$b = $pb;\r\n            			}\r\n            			if($b === $lb)\r\n            				break;\r\n            			for($pb = $b; $pb < $lb; ++$pb)\r\n            			{\r\n            				for($pa = $a ; $pa < $la && $after[$pa] !== $before[$pb]; ++$pa);\r\n            				if($pa !== $la)\r\n            					break;\r\n            			}\r\n            			if($pb !== $b)\r\n            			{\r\n            				$diff[] = array(\r\n            					\'change\'=>\'-\',\r\n            					\'position\'=>$posb[$b],\r\n            					\'length\'=>$posb[$pb] - $posb[$b]\r\n            				);\r\n            				$b = $pb;\r\n            			}\r\n            			if($pa !== $a)\r\n            			{\r\n            				$position = $posa[$a];\r\n            				$length = $posa[$pa] - $posa[$a];\r\n            				$change = array(\r\n            					\'change\'=>\'+\',\r\n            					\'position\'=>$position,\r\n            					\'length\'=>$length\r\n            				);\r\n            				if($for_patch)\r\n            				{\r\n        						$patch = $after[$a];\r\n        						for(++$a; $a < $pa; ++$a)\r\n        							$patch .= $after[$a];\r\n            							\r\n            					$change[\'patch\'] = $patch;\r\n            				}\r\n            				$diff[] = $change;\r\n            				$a = $pa;\r\n            			}\r\n            		}\r\n            		if($a < $la)\r\n            		{\r\n            			$position = $posa[$a];\r\n            			$length = $posa[$la] - $posa[$a];\r\n            			$change = array(\r\n            				\'change\'=>\'+\',\r\n            				\'position\'=>$position,\r\n            				\'length\'=>$length\r\n            			);\r\n            			if($for_patch)\r\n            			{\r\n            					$patch = $after[$a];\r\n            					for(++$a; $a < $la; ++$a)\r\n            						$patch .= $after[$a];\r\n\r\n            				$change[\'patch\'] = $patch;\r\n            			}\r\n            			$diff[] = $change;\r\n            		}\r\n            		$difference->difference = $diff;\r\n            		return true;\r\n            	}\r\n\r\n\r\n            ////////////////////////////////////////////////////////////////////\r\n            ////////////////////////////////////////////////////////////////////\r\n        	function FormatearEnHTML($before, $after, &$difference)\r\n            	{\r\n            		if(!$this->diff($before, $after, $difference))\r\n            		{\r\n            			return false;\r\n            		}\r\n            		$html = \'\';\r\n            		$td = count($difference->difference);\r\n            		for($d = 0; $d < $td; ++$d)\r\n            		{\r\n            			$diff = $difference->difference[$d];\r\n            			\r\n            			//Define los elementos indicadores que van al lado izquierdo solo despues de la primera interaccion\r\n            			//if ($d>=1)\r\n            			    {\r\n                    			$IndicadorNormal =\"<div class=\'btn btn-xs btn-default\' data-toggle=\'tooltip\' data-placement=\'bottom\' data-html=\'true\' title=\'Interacción <font color=yellow><b>#{$d}</b></font><br>Conservar\' style=\'margin-left:-30px !important;text-decoration:none;\' ><i class=\'fa fa-arrow-right\'></i></div>\";\r\n                    			$IndicadorAgregar=\"<div class=\'btn btn-xs btn-success\' data-toggle=\'tooltip\' data-placement=\'bottom\' data-html=\'true\' title=\'Interacción <font color=yellow><b>#{$d}</b></font><br>Insertar\'  style=\'margin-left:-30px !important; text-decoration:none;\'><i class=\'fa fa-plus\'></i></div>\";\r\n                    			$IndicadorBorrar =\"<div class=\'btn btn-xs btn-warning\' data-toggle=\'tooltip\' data-placement=\'bottom\' data-html=\'true\' title=\'Interacción <font color=yellow><b>#{$d}</b></font><br>Eliminar\'  style=\'margin-left:-30px !important;text-decoration:none;\' ><i class=\'fa fa-minus\'></i></div>\";\r\n            			    }\r\n            			\r\n            			switch($diff[\'change\'])\r\n            			{\r\n            				case \'=\':\r\n            					$html .= \'<div class=\"conservado\">\'.$IndicadorNormal.nl2br(HtmlSpecialChars(substr($before, $diff[\'position\'], $diff[\'length\']))).\'</div>\';\r\n            					break;\r\n            				case \'-\':\r\n            					$html .= \'<div class=\"borrado\" style=\"background-color:orange;\">\'.$IndicadorBorrar.nl2br(HtmlSpecialChars(substr($before, $diff[\'position\'], $diff[\'length\']))).\'</div>\';\r\n            					break;\r\n            				case \'+\':\r\n            					$html .= \'<div class=\"insertado\" style=\"background-color:lightgreen;\">\'.$IndicadorAgregar.nl2br(HtmlSpecialChars(substr($after, $diff[\'position\'], $diff[\'length\']))).\'</div>\';\r\n            					break;\r\n            				default:\r\n            					$this->error = $diff[\'change\'].\' : Este no es un tipo de cambio esperado\';\r\n            					return false;\r\n            			}\r\n            		}\r\n            		$difference->html = $html;\r\n            		return true;\r\n            	}\r\n\r\n            ////////////////////////////////////////////////////////////////////\r\n            ////////////////////////////////////////////////////////////////////\r\n            function GenerarParche($before, $difference, &$after_patch)\r\n            	{\r\n            		$after = \'\';\r\n            		$b = 0;\r\n            		foreach($difference as $segment)\r\n            		{\r\n            			switch($segment[\'change\'])\r\n            			{\r\n            				case \'-\':\r\n            					if($segment[\'position\'] !== $b)\r\n            					{\r\n            						$this->error = \'la posicion de segmento removida es \'.$segment->position.\' y no \'.$b.\' como se esperaba\';\r\n            						return false;\r\n            					}\r\n            					$b += $segment[\'length\'];\r\n            					break;\r\n            \r\n            				case \'+\':\r\n            					$after .= $segment[\'patch\'];\r\n            					break;\r\n            \r\n            				case \'=\':\r\n            					if($segment[\'position\'] !== $b)\r\n            					{\r\n            						$this->error = \'la posicion de segmento removida es \'.$segment->position.\' y no \'.$b.\' como se esperaba\';\r\n            						return false;\r\n            					}\r\n            					$b += $segment[\'length\'];\r\n            					$after .= substr($before, $segment[\'position\'], $segment[\'length\']);\r\n            					break;\r\n            \r\n            				default:\r\n            					$this->error = $segment[\'change\'].\' tipo de cambio no soportado (no es +, - o =)\';\r\n            					return false;\r\n            			}\r\n            		}\r\n            		$after_patch->after = $after;\r\n            		return true;\r\n            	}\r\n        };\r\n\r\n\r\n################################################################################\r\n################################################################################\r\n    //Carga la version 1 segun su origen\r\n    if ($PDIFF_OrigenVersion1==\"A\")\r\n        $before=file_get_contents($PDIFF_Version1);\r\n    if ($PDIFF_OrigenVersion1==\"B\")\r\n        $before=PCO_EjecutarSQL(\"SELECT {$PDIFF_CampoBDVersion1} FROM {$PDIFF_TablaBDVersion1} WHERE id=\'{$PDIFF_LlaveBDVersion1} \'\")->fetchColumn();\r\n\r\n    //Carga la version 2 segun su origen\r\n    if ($PDIFF_OrigenVersion2==\"A\")\r\n        $after=file_get_contents($PDIFF_Version2);\r\n    if ($PDIFF_OrigenVersion2==\"B\")\r\n        $after=PCO_EjecutarSQL(\"SELECT {$PDIFF_CampoBDVersion2} FROM {$PDIFF_TablaBDVersion2} WHERE id=\'{$PDIFF_LlaveBDVersion2} \'\")->fetchColumn();\r\n\r\n    //Ejecuta la comparacion si se reciben al menos dos versiones\r\n	if($before!=\"\" || $after!=\"\")\r\n    	{\r\n    	    echo \'<div style=\"font-family: sans-serif,arial,helvetica;\">\';\r\n    		$diff = new BuscadorDiferencias;\r\n    		$difference = new stdClass;\r\n    		$difference->patch = true;\r\n    		$after_patch = new stdClass;\r\n    		if($diff->FormatearEnHTML($before, $after, $difference)\r\n    		&& $diff->GenerarParche($before, $difference->difference, $after_patch))\r\n        		{\r\n        			echo \'<div class=\"well well-sm\">\r\n    			            Comparando: \r\n    			                <div class=\"btn btn-xs btn-default\">[\'.$PDIFF_OrigenVersion1.\']->\'.$PDIFF_Version1.$PDIFF_TablaBDVersion1.\'.\'.$PDIFF_CampoBDVersion2.\'[\'.$PDIFF_LlaveBDVersion1.\']</div> \r\n    			                <b>VS</b> \r\n    			                <div class=\"btn btn-xs btn-default\">[\'.$PDIFF_OrigenVersion2.\']->\'.$PDIFF_Version2.$PDIFF_TablaBDVersion2.\'.\'.$PDIFF_CampoBDVersion2.\'[\'.$PDIFF_LlaveBDVersion2.\']</div>\r\n    			            <div>\r\n            			    <pre id=\"MarcoResultado\" style=\"margin-top:10px; background-color:lightgray; padding-left:40px; font-family: mono,monospace,terminal; font-size:11px;\">\r\n            			        \', $difference->html, \'\r\n            			    </pre>\r\n            			  \';\r\n        			\r\n        			echo \'<div class=\"\">\r\n        			        <div class=\"btn btn-xs btn-default\">Chequeo de integridad</div>\r\n        			        \', ($after === $after_patch->after ? \' <b>OK</b>\' : \'Se ha encontrado un bug. Texto parcheado (<b>\'.HtmlSpecialChars($after_patch->after).\'</b>) no coincide con el texto posterior (<b>\'.HtmlSpecialChars($after).\'</b>).\');\r\n        			echo \'</div>\';\r\n        		}\r\n    		else\r\n    			echo \'<div>Error: \', HtmlSpecialChars($diff->error), \'</div>\';\r\n    	    echo \'</div>\';\r\n    	}','',0),(-34,'{$MULTILANG_AdminArchivos}','','','core_tabla_comodin',1,'//##############################################################################\n//##############################################################################\nfunction PFE_LanzarBuscador()\n    {\n        // document.location=\"{$dirLink}{$PrefijoURLForm}\";\n        URLPopUp=\"index.php?PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_BusquedaProfunda&elemento=\"+$(\"#elemento_busqueda\").val();\n        PCOJS_MostrarMensaje(\"Buscando elemento en todos los directorios.  Espere...\",\"Cargando...\",\"modal-wideXX\");\n        $(\"#PCO_Modal_MensajeCuerpo\").html(\'<iframe scrolling=\"yes\" style=\"margin:10px; border:0px;\" height=360 width=100% src=\"\'+URLPopUp+\'\"></iframe>\');\n    }\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_AdjuntarArchivoRedireccion()\n    {\n        //document.location=$(\"#dirLink\").val()+\"{$PrefijoURLForm}\";\n        //document.location=$(\"#dirLink\").val()+$(\"#PrefijoURLForm\").val();\n        //document.location=\"https://dev.practico.org/practico/\";\n        //console.log(\"{$dirLink}{$PrefijoURLForm}\");\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_GUARDAR_AdjuntarArchivo()\n    {\n	    document.datos_explorador_archivos.PCO_Accion.value=\"PCO_EjecutarPostFormulario\";\n	    $(\"#datos_explorador_archivos\").attr(\"target\", \"frame_almacenamiento\");\n	    $(\"#datos_explorador_archivos\").attr(\"action\", \"index.php\");  \n\n	    PCOJS_MostrarMensajeCargandoSimple(60000);\n	    document.datos_explorador_archivos.submit();\n\n        //La siguiente redireccion NO se hace necesaria, se deja comentada solo por escenarios de prueba.\n        //La redireccion es realizada directamente por la accion POST que llama a la funcion PFE_GUARDAR_AdjuntarArchivoRedireccion cuando procesa los archivos.\n        //document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_AdjuntarArchivo()\n    {\n	    $(\"#PCOContenedor_lbl_carga\").show();\n	    $(\"#PCOContenedor_path\").show();\n	    $(\"#PCOContenedor_archivo_adjunto\").show();\n	    $(\"#PCOContenedor_btn_cargar\").show();\n	    $(\"#archivo_adjunto\").focus();\n    }\n\n    \n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_Renombrar(elemento)\n    {\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_Renombrar&viejo_nombre=\"+$(\"#viejo_nombre\").val()+\"&nuevo_nombre=\"+$(\"#nuevo_nombre\").val()+\"&path={$path}\");\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_Renombrar(elemento)\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-edit\'></i> Renombrar elemento\",\"Cambiar nombre de: <b>\"+elemento+\"</b><br><input type=\'hidden\' value=\'\"+elemento+\"\' name=\'viejo_nombre\' id=\'viejo_nombre\'><br>Nuevo nombre: <input type=\'text\' value=\'\"+elemento+\"\' size=\'20\' name=\'nuevo_nombre\' id=\'nuevo_nombre\' placeholder=\'Nuevo nombre\'><br><br><a href=\'javascript: var LMQTP=PFE_GUARDAR_Renombrar();\' class=\'btn btn-success btn-sm\'>Renombrar</a>\");\n    }\n    \n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_EliminarArchivo(archivo)\n    {\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_EliminarArchivo&archivo=\"+archivo);\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_EliminarArchivo(archivo)\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-trash\'></i> Eliminar carpeta\",\"Confirme la eliminación de: <b>\"+archivo+\"</b><br><br><a href=\'javascript: var LMQTP=PFE_GUARDAR_EliminarArchivo(\\\"\"+archivo+\"\\\");\' class=\'btn btn-danger btn-sm\'>Eliminar</a>\");\n    }\n    \n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_CambiarPermisos(elemento)\n    {\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_CambiarPermisos&elemento=\"+elemento+\"&permisos=\"+$(\"#permisos\").val());\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_CambiarPermisos(elemento,permisos)\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-lock\'></i> Cambiar permisos\",\"Permisos actuales de: <b>\"+elemento+\"</b><br><input type=\'text\' value=\'\"+permisos+\"\' size=\'20\' name=\'permisos\' id=\'permisos\' placeholder=\'Ingrese un valor: 0777\'><br><br><a href=\'javascript: var LMQTP=PFE_GUARDAR_CambiarPermisos(\\\"\"+elemento+\"\\\");\' class=\'btn btn-warning btn-sm\'>Actualizar</a>\");\n    }\n\n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_CrearArchivo()\n    {\n        archivo=$(\"#archivo\").val();\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_CrearArchivo&archivo=\"+archivo+\"&path={$path}\");\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_CrearArchivo()\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-file-o\'></i> Crear nuevo archivo\",\"Creando en: /<b>{$path}</b><br><br><input type=\'text\' size=\'20\' name=\'archivo\' id=\'archivo\' placeholder=\'Ingrese nombre\'>  <a href=\'javascript: var LMQTP=PFE_GUARDAR_CrearArchivo();\' class=\'btn btn-success btn-sm\'>Crear</a>\");\n    }\n\n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_ArchivoDesdeNube()\n    {\n        archivo=$(\"#archivo\").val();\n        url=$(\"#url\").val();\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_ArchivoDesdeNube&archivo=\"+archivo+\"&url=\"+url+\"&path={$path}\");\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_ArchivoDesdeNube()\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-cloud\'></i> Crear nuevo archivo desde una URL\",\"Descargando en: /<b>{$path}</b><br><br><input type=\'text\' size=\'60\' name=\'url\' id=\'url\' placeholder=\'Ingrese URL\'><br><br>Nombre del archivo final:<br><input type=\'text\' size=\'20\' name=\'archivo\' id=\'archivo\' placeholder=\'Ej: archivo.zip\'>  <a href=\'javascript: var LMQTP=PFE_GUARDAR_ArchivoDesdeNube();\' class=\'btn btn-success btn-sm\'>Descargar</a>\");\n    }\n    \n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_EliminarCarpeta(carpeta)\n    {\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_EliminarCarpeta&carpeta=\"+carpeta);\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_EliminarCarpeta(carpeta)\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-trash\'></i> Eliminar carpeta\",\"Confirme la eliminación de: <b>\"+carpeta+\"</b><br><i>Por seguridad, la carpeta debe estar vacía antes de continuar.</i><br><br><a href=\'javascript: var LMQTP=PFE_GUARDAR_EliminarCarpeta(\\\"\"+carpeta+\"\\\");\' class=\'btn btn-danger btn-sm\'>Eliminar</a>\");\n    }\n\n\n//##############################################################################\n//##############################################################################\nfunction PFE_GUARDAR_CrearCarpeta()\n    {\n        carpeta=$(\"#carpeta\").val();\n        ResultadoOperacion=PCO_ObtenerContenidoAjax(0,\"index.php\",\"PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_CrearCarpeta&carpeta=\"+carpeta+\"&path={$path}\");\n        document.location=\"{$dirLink}{$PrefijoURLForm}\";\n    }\nfunction PFE_CrearCarpeta()\n    {\n        PCOJS_MostrarMensaje(\"<i class=\'fa fa-folder\'></i> Crear nueva carpeta\",\"Creando en: /<b>{$path}</b><br><br><input type=\'text\' size=\'20\' name=\'carpeta\' id=\'carpeta\' placeholder=\'Ingrese nombre\'>  <a href=\'javascript: var LMQTP=PFE_GUARDAR_CrearCarpeta();\' class=\'btn btn-success btn-sm\'>Crear</a>\");\n    }\n\n\n//##############################################################################\n//##############################################################################\nfunction AjustarMaquetacion_FormularioEditor()\n    {\n        //Estilos para ajustar la maquetacion y economizar espacio\n        $(\'#PCOContenedor_marco_cadena_editores_ace\').css(\'padding\',\'0\');\n        $(\'#page-wrapper\').css(\'padding\',\'0\');\n        $(\"[class=container-fluid]\").each(function() { $(this).css(\"padding\", \"0\"); });\n        $(\"[class=col-lg-12]\").each(function() { $(this).find(\'br:first\').remove(); });\n        $(\".menu_textual\").each(function() { $(this).css(\"padding-left\", \"0\"); });\n    }\n\n\n//##############################################################################\n//##############################################################################\nfunction FrmAutoRun()\n    {\n	    $(\"#PCOContenedor_lbl_carga\").hide();  \n	    $(\"#PCOContenedor_path\").hide();  \n	    $(\"#PCOContenedor_archivo_adjunto\").hide();  \n	    $(\"#PCOContenedor_btn_cargar\").hide();  \n\n        //Si se recibe fullscreen como parametro entonces ajusta la maquetacion para aprovechar todo el espacio\n        if (\"{$Presentar_FullScreen}\"==\"1\")\n            AjustarMaquetacion_FormularioEditor();\n\n        //Inicializa el DataTable para la lista de carpetas y arcihvos\n        if (\"{$PFE_ActivarDataTable}\"==\"1\")\n            {\n                    $(function() {\n                        $(\"#TablaExploradorArchivos\").dataTable({\n                            //Blfrtip\n                          dom: \"Blfrtip\",  //Ej:  Blfrtip  Da formato a la tabla: Ver https://datatables.net/reference/option/dom\n                                    buttons: [\n                                        //{ extend: \"csv\",     className: \"InformeBotonCsv\" },\n                                        //{ extend: \"excel\",   className: \"InformeBotonExcel\" ,  title: \"\" },\n                                        //{ extend: \"print\", className: \"InformeBotonPrint\" }\n                                    ],\n                            scrollX: true,\n                            bAutoWidth: true,\n                            order: [],\n                            processing: true,\n                            colReorder: true,\n                            pageLength: 25,\n                            responsive: true,\n                            fnInitComplete: function() {\n                                this.fnAdjustColumnSizing(true);\n                            },\n                            \"language\": {\n                                lengthMenu: \"Mostrando _MENU_ resultados por página\",\n                                zeroRecords: \"Nothing found - sorry\",\n                                info: \"Viendo página _PAGE_ de _PAGES_\",\n                                infoEmpty: \"No hay registros disponibles\",\n                                infoFiltered: \"(Filtrado de _MAX_ registros en total)\",\n                                oPaginate: { sFirst:\"Primero\",sLast:\"Ultimo\",sNext:\"Siguiente\",sPrevious:\"Previo\" },\n                                sEmptyTable:\"No hay datos en la tabla\",\n                                sSearch:\"Buscar:\",\n                                sLoadingRecords:\"Cargando...\",\n                                sProcessing:\"Procesando...\",\n                                sZeroRecords:\"No hay registros que coincidan con el criterio de búsqueda\"\n                            }\n                        });\n                    });\n            }\n\n    }',0,'nav-tabs','datos_explorador_archivos','responsive','col-xs-12 col-sm-12 col-md-12 col-lg-12','panel-primary','<?php \n//34\n    ##########################################################################\n    ##########################################################################\n    //VERIFICA SEGURIDAD: Perfil de Administrador requerido antes de continuar\n    global $PCOSESS_LoginUsuario,$MULTILANG_ErrorTitAuth,$MULTILANG_WSErr06;\n    if (!PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        {\n            PCO_Mensaje(\"{$MULTILANG_ErrorTitAuth}\", \"{$MULTILANG_WSErr06}\", \'\', \'fa fa-exclamation-triangle fa-3x texto-rojo texto-blink\', \'alert alert-warning alert-dismissible\');\n            PCO_Auditar(\"$PCOSESS_LoginUsuario Intenta acceso no autorizado Frm:-34\",\"SECLog:event\");\n            die();\n        }\n    ##########################################################################\n    ##########################################################################\n\n    /*\n    	Function: PCO_CargarObjeto_LlamadoInternoExplorador\n    	Carga el elemento interno (Formulario -34) asociado al administrador de archivos\n    	\n        Variables de entrada basicas del Framework:\n            URL - index.php?PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen=1&Precarga_EstilosBS=1\n        \n        Variables de entrada especificas para el elemento:\n            PFE_ActivarDataTable - Valores 1 o 0 para determinar si se debe activar o no DataTables sobre la lista de archivos y carpetas recuperados\n            PFE_VistaBasicaArchivos - Permite presentar vista básica o completa de la lista de archivos.  1=Activo 0=Inactivo  Cuando se activa se ocultan las columnas de Tamano, permisos, propietario, grupo y Fecha\n            PFE_CalcularTamano - Cuando esta en true cuenta el numero de elementos dentro de un directorio.  Cuando se cuenta con directorios de miles de elementos es util deshabilitarlo.\n            PFE_VisibleBotonDT - Determina si el boton de conversion a DataTables esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonCargarArchivo - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonCargarCloud - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonDescargar - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonNuevoArchivo - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonNuevoDirectorio - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonEliminar - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonRenombrar - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_VisibleBotonPermisos - Determina si el boton esta activado o no. Valores 0 o 1\n            PFE_PermitirSubdirectorios - Determina si se permite navegar en subdirectorios o no. Valores 0 o 1\n            PFE_CalcularTamano - Determina si se desea calcula o no cuantos items existen en cada directorio\n            PFE_ElementosOcultos - Cadena con los elementos ocultos separados por PIPES | Siempre se agragaran el . y ..\n            PFE_OcultarBarraHerramientas - Determina si se oculta o no la barra de herramientas superior\n            PFE_OcultarArchivos - Determina si se oculta o no la lista de archivos. 0=Inactivo 1=Activo\n            PFE_OcultarCarpetas - Determina si se oculta o no la lista de archivos. 0=Inactivo 1=Activo\n            PFE_PresentarCarpetasEspeciales - Por defecto inactivo.  Determina si se deben presentar carpetas compartidas anteriormente mediante ElFinder en sus configuraciones especiales asi: 1)Carpeta publica, 2) Mis archivos (si existe carpeta personal), 3) Raiz del framework y 4) Cargas por formulario.  0=Inactivo 1=Activo\n            PFE_OcultarMigasPan - Por defecto visible, permite ocultar los enlaces de migas de pan en la parte superior\n            PFE_ActivarCargarEnPcoder - Por defecto desactivado (0), Para activar=1.  Permite convertir los nombres de archivo en enlaces hacia PCoder que permita cargar para edicion el elemento indicado\n            PFE_BuscadorArchivos - Por defecto desactivado (0), Para activar=1.  Presenta en la parte superior un buscador de archivos profundo que recorre todas las carpetas.\n            \n    	Salida:\n    		Administrador de archivos cargado en el navegador\n    */\n\n	global $dirLink,$PrefijoURLForm,$path,$LlaveDePaso,$Presentar_FullScreen,$Precarga_EstilosBS,$PFE_CalcularTamano,$PFE_PermitirSubdirectorios,$PFE_ActivarDataTable,$PFE_VistaBasicaArchivos;\n	global $PFE_BuscadorArchivos,$PFE_ActivarCargarEnPcoder,$PFE_OcultarMigasPan,$PFE_PresentarCarpetasEspeciales,$PFE_DirectorioInicial,$PFE_OcultarCarpetas,$PFE_OcultarArchivos,$PFE_OcultarBarraHerramientas,$PFE_ElementosOcultos,$PFE_VisibleBotonPermisos,$PFE_VisibleBotonRenombrar,$PFE_VisibleBotonEliminar,$PFE_VisibleBotonNuevoDirectorio,$PFE_VisibleBotonNuevoArchivo,$PFE_VisibleBotonDescargar,$PFE_VisibleBotonCargarCloud,$PFE_VisibleBotonCargarArchivo,$PFE_VisibleBotonDT;\n\n	//PARAMETROS BASICOS DE CONFIGURACION\n	$PrefijoURLForm=\"&PCO_Accion=PCO_CargarObjeto&PCO_Objeto=frm:-34:0&Presentar_FullScreen={$Presentar_FullScreen}&Precarga_EstilosBS={$Precarga_EstilosBS}&PFE_ElementosOcultos={$PFE_ElementosOcultos}&PFE_CalcularTamano={$PFE_CalcularTamano}&PFE_PermitirSubdirectorios={$PFE_PermitirSubdirectorios}&PFE_OcultarBarraHerramientas={$PFE_OcultarBarraHerramientas}&PFE_ActivarDataTable={$PFE_ActivarDataTable}&PFE_VistaBasicaArchivos={$PFE_VistaBasicaArchivos}&PFE_OcultarArchivos={$PFE_OcultarArchivos}&PFE_OcultarCarpetas={$PFE_OcultarCarpetas}&PFE_PresentarCarpetasEspeciales={$PFE_PresentarCarpetasEspeciales}&PFE_OcultarMigasPan={$PFE_OcultarMigasPan}&PFE_VisibleBotonDT={$PFE_VisibleBotonDT}&PFE_VisibleBotonCargarArchivo={$PFE_VisibleBotonCargarArchivo}&PFE_VisibleBotonCargarCloud={$PFE_VisibleBotonCargarCloud}&PFE_VisibleBotonDescargar={$PFE_VisibleBotonDescargar}&PFE_ActivarCargarEnPcoder={$PFE_ActivarCargarEnPcoder}&PFE_VisibleBotonEliminar={$PFE_VisibleBotonEliminar}&PFE_VisibleBotonRenombrar={$PFE_VisibleBotonRenombrar}&PFE_VisibleBotonPermisos={$PFE_VisibleBotonPermisos}&PFE_VisibleBotonNuevoArchivo={$PFE_VisibleBotonNuevoArchivo}&PFE_VisibleBotonNuevoDirectorio={$PFE_VisibleBotonNuevoDirectorio}&PFE_BuscadorArchivos={$PFE_BuscadorArchivos}\";\n\n	$PFE_ElementosOcultos =\".|..|\".$PFE_ElementosOcultos;  //Define elementos que deben ser ocultados en la lista, ej: MiArchivo.Ext|MiCarpetaOculta\n	$PFE_ElementosOcultos=explode(\"|\",$PFE_ElementosOcultos);\n	if ($PFE_PermitirSubdirectorios==\"\") $PFE_PermitirSubdirectorios=\"1\";\n	if ($PFE_CalcularTamano==\"\") $PFE_CalcularTamano=\"0\";  //Para carpetas con miles de elementos puede tardar\n	$ClaseCSSTamanosTextos=\"\";  //btn-xs para reducir tamano de los elementos\n	if ($PFE_OcultarBarraHerramientas==\"1\") $ClaseOcultacionBarra=\" hidden \";\n    $PFE_DirectorioInicial=getcwd();\n    \n	//Define donde comienza la navegacion del script.  Administradores en la raiz, usuarios en la carpeta publica y agrega index a los ocultos\n    if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n        $DirectorioInicial=\".\";\n    else\n        {\n            $DirectorioInicial=\"mod/fileman/archivos/_publico_\";\n            $PFE_ElementosOcultos[]=\"index.html\";\n        }\n\n/***************************************************************************/\n/**  INICIO DEL CODIGO DE APLICACION                                      **/\n/***************************************************************************/\nchdir($DirectorioInicial);\n$snifServer = $_SERVER[\'HTTP_HOST\'];\n$separationString = \"\\t\";\n$descriptionFilenamesCaseSensitive = false;\n$ArregloMensajesError = Array();\n\n    //Marco para recepcion de eventos generados por el boton de guardar\n    echo \'<iframe height=\"0\" width=\"0\" name=\"frame_almacenamiento\" id=\"frame_almacenamiento\" src=\"about:blank\" style=\"visibility:hidden; display:none\"></iframe>\';\n\n\n\n################################################################################\n################################################################################\n/*\n    Function: ObtenerTamanoLegible\n    Formatea el tamano de archivo en unidades comprensibles (750 B, 3.4 KB etc.)\n*/\nfunction ObtenerTamanoLegible($size) {\n	define(\"SIZESTEP\", 1024.0);\n	static $sizeUnits = Array();\n	if (count($sizeUnits)==0) {\n		$sizeUnits[] = \" B\";\n		$sizeUnits[] = \"KB\";\n		$sizeUnits[] = \"MB\";\n		$sizeUnits[] = \"GB\";\n		$sizeUnits[] = \"TB\";\n	}\n	\n	if ($size===\"\")\n		return \"\";\n	\n	$unitIndex = 0;\n	while ($size>SIZESTEP) {\n		$size = $size / SIZESTEP;\n		$unitIndex++;\n	}\n	\n	if ($unitIndex==0) {\n		return number_format($size, 0).\" \".$sizeUnits[$unitIndex];\n	} else {\n		return number_format($size, 1, \".\", \",\").\" \".$sizeUnits[$unitIndex];\n	}\n}\n\n\n/**\n * URLEncodes some characters in a string. PHP\'s urlencode and rawurlencode\n * produce very unsatisfying results for special and reserved characters in\n * filenames.\n **/\nfunction myEncode($path, $filename) {\n	// % must be the first, as it is the escape character\n	/*\n	$from = Array(\"%\",\" \",\"#\",\"&\");\n	$to = Array(\"%25\",\"%20\",\"%23\",\"%26\");\n	return str_replace($from, $to, $string);\n	*/\n	return $path.rawurlencode($filename);\n}\n\n\n################################################################################\n################################################################################\n/*\n    Function: ConstruirURL\n    Data una ruta determinada, construye la URL codificada para ser llamada mediante un enlace\n*/\nfunction ConstruirURL($Directorio)\n    {\n    	return $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode($Directorio).\"/\";\n    }\n\n\n################################################################################\n################################################################################\n/*\n    Function: ObtenerTamanoDirectorio\n    Lee un directorio determinado y cuenta la cantidad de elementos internos\n*/\nfunction ObtenerTamanoDirectorio($Directorio)\n    {\n    	$LecturaDirectorio = dir($Directorio);\n    	$ConteoArchivos = 0;\n    	while ($Archivo = $LecturaDirectorio->read())\n    		$ConteoArchivos++;\n    	return $ConteoArchivos-2; // No incluye . y ..\n    }\n\n\n    ##########################################################################\n    ######################### LISTADOR DEL DIRECTORIO  #######################\n    // Verifica que pueda cambiar al directorio deseado antes de seguir adelante\n    if ($path!=\"\")\n        {\n        	if (!@chdir($path)) {\n        		$ArregloMensajesError[] = sprintf(\"%s no es un subdirectorio del directorio actual.\", $path);\n        		$path = \"\";\n        	}\n        } \n    $dir = dir(\".\");\n\n\n    //Construye arreglo bidimencional con los elementos y sus metadatos\n    $files = Array();\n    while($entry = $dir->read())\n        {\n        	// Valida si es un directorio y se encuentra activo el ocultamiento de directorios\n        	if ($PFE_PermitirSubdirectorios==\"0\" AND is_dir($entry))\n        		continue;\n        	\n        	//Valida que el elemento no sea oculto (que se encuentre en el arreglo definido de elementos ocultos)\n        	if (in_array($entry, $PFE_ElementosOcultos))\n        	    continue;\n        	\n        	\n        	$f = Array();\n        	\n        	//Genera cadena en primera posicion de arreglo usada solo para ordenar la vista\n        	if (is_dir($entry))\n        	    $f[\"ValorInternoOrdenamiento\"] = \"....AAAA\".$entry;  //Usa puntos y Aes para ubicarlo al principio\n        	else\n        	    $f[\"ValorInternoOrdenamiento\"] = $entry;\n\n        	$f[\"name\"] = $entry;\n        	$f[\"isDirectory\"] = is_dir($entry);\n        	$fDate = @filemtime($entry);\n        	$f[\"date\"] = $fDate;\n        	$f[\"fullDate\"] = date(\"r\", $fDate);\n        	$f[\"shortDate\"] = date(\"Y-m-d H:m\", $fDate);\n        	$f[\"Permisos\"] = substr(sprintf(\'%o\', fileperms($entry)), -4);\n\n            clearstatcache();\n            $InformacionArchivo=@stat($entry);\n            $InformacionPropietario=posix_getpwuid($InformacionArchivo[\"uid\"]);\n            $InformacionGrupo=posix_getgrgid($InformacionArchivo[\"gid\"]);\n        	$f[\"Propietario\"] = $InformacionPropietario[\"name\"];\n        	$f[\"Grupo\"] = $InformacionGrupo[\"name\"];\n\n        	if ($f[\"isDirectory\"]) {\n        		$f[\"type\"] = \"<DIR>\";\n        		$f[\"size\"] = \"\";\n        		$f[\"niceSize\"] = \"\";\n        		\n        		// Construye el enlace al elemento\n        		if ($entry==\"..\") {\n        			// xxx strip the last directory from the path\n                    $pathArr = explode(\"/\",$path);\n        			$link = implode(\"/\",array_slice($pathArr,0,count($pathArr)-2));\n        			\n        			// if there is no path set, don\'t add it to the link\n        			if ($link==\"\") {\n        				// we\'re already in $baseDir, so skip the file\n        				if ($path==\"\")\n        					continue;\n        				$f[\"link\"] = $_SERVER[\"PHP_SELF\"].\"?lmqtp=no\";\n        			} else {\n        				$link.= \"/\";\n        				$f[\"link\"] = $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode($link);\n        			}\n        			$f[\"isBack\"] = true;\n        			$f[\"displayName\"] = \"[..]\";\n        		} else {\n        			if ($PFE_CalcularTamano!=\"0\")\n        				{\n        					$filesInDir = ObtenerTamanoDirectorio($entry);\n        					if ($filesInDir==1) {\n        						$f[\"niceSize\"] = \"1 item\";\n        					} else {\n        						$f[\"niceSize\"] = sprintf(\"%d items\",$filesInDir);\n        					}\n        				}\n        			else\n        				{\n        					$f[\"niceSize\"] = \"\"; //Sin calcular\n        				}\n        			\n        			$f[\"link\"] = ConstruirURL($path.$entry);\n        		}\n        	} else {\n                		if (is_link($entry)) {\n                			$linkTarget = readlink($entry);\n                			$pi = pathinfo($linkTarget);\n                			$scriptDir = dirname($_SERVER[\"SCRIPT_FILENAME\"]);\n                			if (strpos($pi[\"dirname\"], $scriptDir)===0) {\n                				$f[\"type\"] = \"<LINK>\";\n                				// links have no date, so take the target\'s date\n                				$f[\"date\"] = filemtime($linkTarget);\n                				$f[\"link\"] = $path.urlencode(substr($linkTarget, strlen($scriptDir)+1));\n                			} else {\n                				// link target is outside of script directory, so skip it\n                				continue;\n                			}\n                		} else {\n                			$fSize = @filesize($entry);\n                			$f[\"size\"] = $fSize;\n                			$f[\"fullSize\"] = number_format($fSize,0,\".\",\",\");\n                			$f[\"niceSize\"] = ObtenerTamanoLegible($fSize);\n                			$f[\"link\"] = myEncode($path,$entry);\n                		}\n\n        	}\n        	if (!$f[\"isBack\"]) {\n        		$f[\"displayName\"] = htmlentities($f[\"name\"]);\n        	}\n\n        	$files[] = $f;\n 	\n        }\n\n\n    ##########################################################################\n    ######################### INICIO DE LA MAQUETACION #######################\n?>\n\n	<DIV class=\"well  well-sm\" style=\"margin:0px;\">\n\n\n\n        <?php \n            //Presenta cualquier error acumulado de los procesos anteriores de exploracion de archivos o similares\n            if (count($ArregloMensajesError)>0)\n            	foreach($ArregloMensajesError AS $MensajeError)\n            		PCO_Mensaje(\"Error\",\"$MensajeError\",\"fa fa-2x fa-warning\",\"alert alert-danger\");\n\n            //Genera las migas de pan (Path de navegacion)\n			$baseDirname = $snifServer.htmlentities(dirname($_SERVER[\"PHP_SELF\"]));\n			$pathToSnif = explode(\"/\",$baseDirname);\n			echo \"<div class=\'{$ClaseOcultacionBarra} btn-xs {$ClaseCSSTamanosTextos}\' style=\'background-color:lightgray;\'>\";\n			            \n                    if ($PFE_OcultarMigasPan!=\"1\")\n                        {\n    			            echo \"<a href=\\\"\".$_SERVER[\"PHP_SELF\"].\"?lmqtp=no{$PrefijoURLForm}\\\"><i class=\'fa fa-home fa-fw fa-1x\' style=\'color:navy;\'></i>Raíz \".join(\"/\",array_slice($pathToSnif, -1)).\"</a>\";\n                			$pathArr = explode(\"/\",$path);\n                			for ($i=0; $i<count($pathArr)-1; $i++)\n                    			{\n                    				$dirLink = ConstruirURL(join(\"/\",array_slice($pathArr, 0, $i+1)));\n                    				$AnchoMigaPan=15+10*$i;\n                    				echo \"<br><i style=\'padding-left: {$AnchoMigaPan}px;\' class=\'fa fa-folder-open-o\'></i> <a href=\\\"{$dirLink}{$PrefijoURLForm}\\\">\".htmlentities($pathArr[$i]).\"</a>\";\n                    			}\n                        }\n\n                //Barra de herramientas de carpeta\n                echo \"<div style=\'padding:5px; display:block;\'>\";\n                \n                    ###### Boton para Activar/Desactivar los datatables\n                        if ($PFE_VisibleBotonDT!=\"0\")\n                            {\n                                if ($path==\"\")\n                                    {\n                                        if ($PFE_ActivarDataTable==\"1\")\n                			                echo \"<a href=\\\"\".$_SERVER[\"PHP_SELF\"].\"?lmqtp=no{$PrefijoURLForm}&PFE_ActivarDataTable=0\\\" data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Desactivar tabla dinamica responsive en archivos\' class=\'btn btn-xs btn-success\'><i class=\'fa fa-table fa-fw fa-1x\'></i></a>\";\n                                        else    			                \n                			                echo \"<a href=\\\"\".$_SERVER[\"PHP_SELF\"].\"?lmqtp=no{$PrefijoURLForm}&PFE_ActivarDataTable=1\\\" data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Activar tabla dinamica responsive en archivos\' class=\'btn btn-xs btn-default\'><i class=\'fa fa-table fa-fw fa-1x\'></i></a>\";\n                                    }\n                                else\n                                    {\n                                        if ($PFE_ActivarDataTable==\"1\")\n                                	        echo \"<a href=\'{$dirLink}{$PrefijoURLForm}&PFE_ActivarDataTable=0\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Desactivar tabla dinamica en archivos\' class=\'btn btn-xs btn-success\'><i class=\'fa fa-table\'></i></a>\";\n                                        else\n                            	            echo \"<a href=\'{$dirLink}{$PrefijoURLForm}&PFE_ActivarDataTable=1\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Activar tabla dinamica en archivos\'    class=\'btn btn-xs btn-default\'><i class=\'fa fa-table\'></i></a>\";\n                                    }\n                            }\n\n                    ###### BOTONES DE DIRECTORIO\n                    //Define clase para habilitar o deshabilitar botones si se cuenta con permisos sobre la carpeta\n                    $ClaseDesactivarElemento=\" disabled \";\n                    $PathPruebaPermisos=\"/\".$path;\n                    if (is_writable($PathPruebaPermisos))\n                        $ClaseDesactivarElemento=\" \";\n                    //else\n                        //echo \" <font color=red><i class=\'fa fa-info-circle\'></i> <i>sin permisos</i></font>\";\n                    \n                    //Por defecto en directorios se esta dejando todo activo.  is_writable de PHP parece operar solo con archivos\n                    $ClaseDesactivarElemento=\" \";\n\n                    //Presenta las opciones para el directorio que requieran permisos de escritura\n                    if ($PFE_VisibleBotonNuevoDirectorio!=\"0\")\n                        echo \" <a href=\'javascript:var LMQTP=PFE_CrearCarpeta();\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Crear nueva carpeta\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-default\'><i class=\'fa fa-folder-o\'></i></a>\";\n\n                    if ($PFE_VisibleBotonNuevoArchivo!=\"0\")\n                        echo \" <a href=\'javascript:var LMQTP=PFE_CrearArchivo();\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Crear archivo en blanco\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-default\'><i class=\'fa fa-file-o\'></i></a>\";\n\n                    if ($PFE_VisibleBotonCargarArchivo!=\"0\")\n                        echo \" <a href=\'javascript: var LMQTP=PFE_AdjuntarArchivo();\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Cargar archivo desde mi PC\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-default\'><i class=\'fa fa-upload\'></i></a>\";\n\n                    if ($PFE_VisibleBotonCargarCloud!=\"0\")\n                        echo \" <a href=\'javascript:var LMQTP=PFE_ArchivoDesdeNube();\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Cargar archivo desde URL\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-default\'><i class=\'fa fa-cloud-upload\'></i></a>\";\n\n\n                //Presenta botones especiales para comparticiones y carpetas especificas\n                if ($PFE_PresentarCarpetasEspeciales==\"1\")\n                    {\n                        echo \"<div style=\'margin-left:20px; display:inline;\'> Lugares: \";\n\n                        //Carpeta PUBLICA\n        				$dirLinkEspecial = $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode(\"mod/fileman/archivos/_publico_/\");\n                        echo \" <a href=\'{$dirLinkEspecial}{$PrefijoURLForm}\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Carpeta Pública\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-primary\'><i class=\'fa fa-globe fa-1x\'></i></a>\";\n                        \n                        //Carpeta PERSONAL (si existe)\n                        $PathPersonal=\"mod/fileman/archivos/\".$PCOSESS_LoginUsuario;\n                        $dirLinkEspecial = $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode($PathPersonal.\"/\");\n                        if (file_exists($PFE_DirectorioInicial.\"/\".$PathPersonal)==true)\n                            echo \" <a href=\'{$dirLinkEspecial}{$PrefijoURLForm}\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Mis archivos personales (si existe)\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-primary\'><i class=\'fa fa-heart fa-1x\'></i></a>\";\n\n                        //Carpeta TODOS LOS USUARIOS (si es admin)\n        				$dirLinkEspecial = $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode(\"mod/fileman/archivos/\");\n                        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n                            echo \" <a href=\'{$dirLinkEspecial}{$PrefijoURLForm}\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Todos los usuarios\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-primary\'><i class=\'fa fa-group fa-1x\'></i></a>\";\n\n                        //Carpeta RAIZ (si es admin)   ../../../../../\'.$Directorio_instalacion.\'/\n        				$dirLinkEspecial = $_SERVER[\"PHP_SELF\"].\"?path=\";\n                        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n                            echo \" <a href=\'{$dirLinkEspecial}{$PrefijoURLForm}\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Raiz del Framework\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-primary\'><i class=\'fa fa-home fa-1x\'></i></a>\";\n\n                        //Carpeta CARGAS POR FORMULARIO (si es admin)   ../../cargas/\n        				$dirLinkEspecial = $_SERVER[\"PHP_SELF\"].\"?path=\".urlEncode(\"mod/fileman/cargas/\");\n                        if (PCO_EsAdministrador(@$PCOSESS_LoginUsuario))\n                            echo \" <a href=\'{$dirLinkEspecial}{$PrefijoURLForm}\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Cargas por formulario\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-primary\'><i class=\'fa fa-paper-plane fa-1x\'></i></a>\";\n\n                        \n                        //Buscador de archivos\n                        if ($PFE_BuscadorArchivos==\"1\")\n                            {\n                                echo \" <input name=\'elemento_busqueda\' id=\'elemento_busqueda\' placeholder=\'Buscar...\' type=\'text\' size=8 class=\'input input-xs\' style=\'margin-left:15px !important;\'>\";\n                                echo \" <a href=\'javascript:var LMQTP=PFE_LanzarBuscador();\' data-html=\'true\' data-toggle=\'tooltip\' data-placement=\'bottom\' title=\'Buscar de manera profunda este archivo (o parte) en todo el arbol de directorios.  <b>Puede tardar</b> segun su cantidad de archivos en servidor.\' class=\'{$ClaseDesactivarElemento} btn btn-xs btn-warning\'><i class=\'fa fa-search fa-1x\'></i></a>\";\n                            }\n\n\n                        echo \"</div>\";\n                    }\n\n                echo \"</div>\";\n\n    		echo \"</div><br class=\'{$ClaseOcultacionBarra}\'>\";\n        ?>\n        \n        <table id=\"TablaExploradorArchivos\" class=\"<?php echo $ClaseCSSTamanosTextos; ?>\">\n            <thead>\n            	<tr style=\"font-weight: bold; \">\n            		<td style=\'padding-left: 10px;\'>Acciones</td>\n            		<td style=\'padding-left: 10px;\'>Nombre</td>\n            		<?php \n            		    if ($PFE_VistaBasicaArchivos!=\"1\")\n            		        {\n            		?>\n                        		<td style=\'padding-left: 10px;\'>Tamaño</td>\n                        		<td style=\'padding-left: 10px;\'>Permisos</td>\n                        		<td style=\'padding-left: 10px;\'>Propietario</td>\n                        		<td style=\'padding-left: 10px;\'>Grupo</td>\n                        		<td style=\'padding-left: 10px;\'>Fecha</td>\n            		<?php \n            		        }\n            		?>\n            	</tr>\n        	</thead>\n        	<tbody>\n                	<?php \n                	//Ordena y Recorre el arreglo de archivos y carpetas\n                    sort($files);\n                	for ($i=0;$i<min(count($files),count($files));$i++)\n                    	{\n                    	    $SalidaElemento=\"\";\n                    	    $SalidaElemento.=\"<tr>\";\n\n                        			//ICONOS del elemento si es un directorio o un archivo\n                        			$SalidaElemento.= \"<td align=right nowrap style=\'padding-left: 10px;\'>\";\n                            			if ($files[$i][\"isDirectory\"]) \n                                			{\n                            			        if ($PFE_VisibleBotonRenombrar!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_Renombrar(\\\"{$files[$i][\"name\"]}\\\");\' data-toggle=\'tooltip\' title=\'Renombrar\' class=\'btn1 1btn-xs 1btn-default\'><i class=\'fa fa-fw fa-edit\'></i></a>\";\n                            			            }\n                            			        if ($PFE_VisibleBotonEliminar!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_EliminarCarpeta(\\\"{$path}{$files[$i][\"name\"]}\\\");\' data-toggle=\'tooltip\' title=\'Eliminar\' class=\'btn1 1btn-xs 1btn-default\' href=\'{$PHP_SELF}?PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_DescargarArchivo&path=\".rawurlencode($path).\"&download=\".rawurlencode($files[$i][\"name\"]).\"\'><i class=\'fa fa-fw fa-trash\'></i></a>\";\n                            			            }\n                            			        if ($PFE_VisibleBotonPermisos!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_CambiarPermisos(\\\"{$path}{$files[$i][\"name\"]}\\\",\\\"{$files[$i][\"Permisos\"]}\\\");\' data-toggle=\'tooltip\' title=\'Permisos\' class=\'btn1 1btn-xs 1btn-default\' href=\'{$PHP_SELF}?PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_DescargarArchivo&path=\".rawurlencode($path).\"&download=\".rawurlencode($files[$i][\"name\"]).\"\'><i class=\'fa fa-fw fa-lock\'></i></a>\";\n                            			            }\n                                			} \n                            			else\n                            			    {\n                            			        if ($PFE_VisibleBotonDescargar!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a  data-toggle=\'tooltip\' title=\'Descargar\' class=\'btn1 1btn-xs 1btn-default\' href=\'{$PHP_SELF}?PCO_Accion=PCO_EjecutarPostFormulario&Formulario=-34&Llave={$LlaveDePaso}&PFE_Accion=PFE_DescargarArchivo&path=\".rawurlencode($path).\"&download=\".rawurlencode($files[$i][\"name\"]).\"\'><i class=\'fa fa-fw fa-download\'></i></a>\";\n                            			            }\n                            			        if ($PFE_VisibleBotonRenombrar!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_Renombrar(\\\"{$files[$i][\"name\"]}\\\");\' data-toggle=\'tooltip\' title=\'Renombrar\' class=\'btn1 1btn-xs 1btn-default\'><i class=\'fa fa-fw fa-edit\'></i></a>\";\n                            			            }\n                            			        if ($PFE_VisibleBotonEliminar!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_EliminarArchivo(\\\"{$path}{$files[$i][\"name\"]}\\\");\' data-toggle=\'tooltip\' title=\'Eliminar\' class=\'btn1 1btn-xs 1btn-default\'><i class=\'fa fa-fw fa-trash\'></i></a>\";\n                            			            }\n                            			        if ($PFE_VisibleBotonPermisos!=\"0\")\n                            			            {\n                                                        $SalidaElemento.= \"<a href=\'javascript: var LMQTP=PFE_CambiarPermisos(\\\"{$path}{$files[$i][\"name\"]}\\\",\\\"{$files[$i][\"Permisos\"]}\\\");\' data-toggle=\'tooltip\' title=\'Permisos\' class=\'btn1 1btn-xs 1btn-default\'><i class=\'fa fa-fw fa-lock\'></i></a>\";\n                            			            }\n                            			    }\n                        			$SalidaElemento.= \"</td>\";\n                    \n                        			//NOMBRE\n                        			$EnlaceElemento=\"#\";\n                        			//Si es carpeta agrega enlace para navegar en ella\n                        			if ($files[$i][\"isDirectory\"]) $EnlaceElemento=\"{$files[$i][\'link\']}{$PrefijoURLForm}\";\n                        			//Si es archivo y ademas se encuentra activada la apertura por PCoder genera el enlace correspondiente\n        			                $LlaveParcial_FirmaSistema=substr($LlaveDePaso,-3);\n                        			if (!$files[$i][\"isDirectory\"] && $PFE_ActivarCargarEnPcoder==\"1\") $EnlaceElemento=\"javascript: var LMQTP=PCOJS_CargarArchivoPCoderFS(\\\"{$LlaveParcial_FirmaSistema}\\\",\\\"\\\",\\\"\\\",\\\"{$path}{$files[$i][\"name\"]}\\\",\\\"Si\\\");\";\n\n                        			$ComplementoIconoCarpetas=\"<i class=\'fa fa-fw fa-file\' style=\'color:gray\'></i>\";\n                        			if ($files[$i][\"isDirectory\"]) $ComplementoIconoCarpetas=\"<i class=\'fa fa-fw fa-folder\' style=\'color:orange\'></i>\";\n\n                        			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'><a href=\'{$EnlaceElemento}\'>{$ComplementoIconoCarpetas}{$files[$i][\"displayName\"]}</a></td>\";\n\n                        		    if ($PFE_VistaBasicaArchivos!=\"1\")\n                        		        {\n                                    			//TAMANO\n                                    			if ($files[$i][\"fullSize\"]!=\"\") $TootipTamanoFull=\" title=\'{$files[$i][\"fullSize\"]} Bytes\'\";    \n                                    			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'><span {$TootipTamanoFull}>{$files[$i][\'niceSize\']}</span></td>\";\n\n                                    			//PERMISOS\n                                    			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'>{$files[$i][\'Permisos\']}</td>\";\n                                    			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'>{$files[$i][\'Propietario\']}</td>\";\n                                    			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'>{$files[$i][\'Grupo\']}</td>\";\n\n                                    			//FECHA\n                                    			$SalidaElemento.= \"<td nowrap style=\'padding-left: 10px;\'><span title=\'{$files[$i][\'fullDate\']}\'>{$files[$i][\'shortDate\']}</span></td>\";\n                        		        }\n\n                        	$SalidaElemento.=\"</tr>\";\n\n                    	    //PARA ARCHIVOS:  Determina si se debe presentar o no\n                    	    if (!$files[$i][\"isDirectory\"] && $PFE_OcultarArchivos!=\"1\")\n                        	    echo $SalidaElemento;\n\n                    	    //PARA CARPETAS:  Determina si se debe presentar o no\n                    	    if ($files[$i][\"isDirectory\"] && $PFE_OcultarCarpetas!=\"1\")\n                        	    echo $SalidaElemento;\n\n                    	} //Fin for que recorre archivos\n                	?>\n        	</tbody>\n        </table>\n\n	</DIV>\n\n<?php\n    //Retorna el directorio de trabajo al original del framework para evitar errores de inclusiones innecesarias\n    //Las inclusiones se generan al final (marco abajo) pues al detectar ciertos PATH se trata de incluir ficheros\n    //En rutas que al haber hecho un chdir previo obviamente no aplican\n    chdir($PFE_DirectorioInicial);\n?>','<?php\r\nglobal $PFE_Accion,$_FILES,$download,$path,$displayError,$carpeta,$elemento,$permisos,$archivo,$nuevo_nombre,$viejo_nombre,$url;\r\n\r\n\r\n################################################################################\r\n################################################################################\r\nfunction ExplorarDirectorio($ruta,$elemento)\r\n    {\r\n        global $TotalEncontrados,$TotalExaminados;\r\n        // abrir un directorio y listarlo recursivo\r\n        if (is_dir($ruta))\r\n            {\r\n                if ($dh = opendir($ruta))\r\n                    {\r\n                        //echo \"<br />Buscando en <strong>$ruta</strong>\"; // Aqui se imprime el nombre de la carpeta o directorio\r\n                        while (($file = readdir($dh)) !== false)\r\n                            {\r\n                                //if (is_dir($ruta . $file) && $file!=\".\" && $file!=\"..\") // Si se desea mostrar solo directorios\r\n                                if ($file!=\".\" && $file!=\"..\") // Si se desea mostrar directorios y archivos\r\n                                    {\r\n                                        $TotalExaminados++;\r\n                                        //echo \"<br />$ruta\".DIRECTORY_SEPARATOR.\"$file\"; // Aqui se imprime el nombre del Archivo con su ruta relativa\r\n        								//Si se desea sensible a mayuscula selecciona la funcion correcta strpos / stripos\r\n        								$PosicionBusqueda = stripos($file,$elemento);\r\n        								//Muestra el elemento si cumple con el patron de busqueda\r\n        								if ($PosicionBusqueda!==false)\r\n        									{						\r\n        										//OnDblClick=\\\"UltimoArchivoSeleccionado=\'\"		  PCODER_CargarArchivo(path_operacion_elemento+\"/\"+nombre_elemento);				\r\n        										echo \'<li style=\"font-size:12px; font-family:Arial;\">\'.$ruta.\'/<b style=\"color:red;\">\'.$file.\'</b></li>\';\r\n        										$TotalEncontrados++;\r\n        									}\r\n                                        //Llamado recursivo para el resto del arbol\r\n                                        ExplorarDirectorio($ruta . DIRECTORY_SEPARATOR. $file,$elemento);\r\n                                    }\r\n                            }\r\n                        closedir($dh);\r\n                    }\r\n            }\r\n    }\r\n \r\n \r\n/*\r\n	Function: PFE_BusquedaProfunda\r\n	Toma el nombre de una archivo o carpeta y lo busca en todo el arbol de directorios\r\n*/\r\nif ($PFE_Accion==\"PFE_BusquedaProfunda\") \r\n	{\r\n        global $DirectorioExploracion,$TotalEncontrados,$TotalExaminados;\r\n        if ($DirectorioExploracion==\"\")	$DirectorioExploracion=\".\";\r\n   	    \r\n   		@ob_clean();\r\n   	    echo \"<div style=\'font-family:Arial;\'>\";       \r\n   		if (strlen($elemento)<3)\r\n   	        echo \"El elemento a buscar debe ser de al menos tres caracteres\";       \r\n   	    else\r\n   	        {\r\n                $TotalEncontrados=0;\r\n                $TotalExaminados=0;\r\n   	            echo \"<ol>\";\r\n  	            ExplorarDirectorio($DirectorioExploracion,$elemento);\r\n   	            echo \"</ol>\";\r\n   	            echo \"<hr><b>Finalizado</b>\";\r\n   	            echo \"<br>Examinados: {$TotalExaminados}, Econtrados: <b>{$TotalEncontrados}</b>\";\r\n   	        }\r\n   	    echo \"</div>\";\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_CrearCarpeta\r\n	Agrega una carpeta sobre el path actual\r\n*/\r\nif ($PFE_Accion==\"PFE_CrearCarpeta\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($carpeta!=\"\")\r\n   	        {\r\n                mkdir($path.$carpeta,0777);\r\n            }\r\n   	    die();\r\n   	}\r\n\r\n/*\r\n	Function: PFE_EliminarCarpeta\r\n	Elimina una carpeta sobre el path actual\r\n*/\r\nif ($PFE_Accion==\"PFE_EliminarCarpeta\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($carpeta!=\"\")\r\n            rmdir($carpeta);\r\n   	    die();\r\n   	}\r\n\r\n/*\r\n	Function: PFE_CambiarPermisos\r\n	Cambia los permisos para un elemento determinado\r\n*/\r\nif ($PFE_Accion==\"PFE_CambiarPermisos\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($elemento!=\"\")\r\n   	        {\r\n                //chmod($elemento, 0+$permisos);\r\n                chmod($elemento, octdec($permisos));\r\n            }\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_EliminarArchivo\r\n	Elimina un archivo sobre el path actual\r\n*/\r\nif ($PFE_Accion==\"PFE_EliminarArchivo\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($archivo!=\"\")\r\n            unlink($archivo);\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_CrearArchivo\r\n	Agrega una carpeta sobre el path actual\r\n*/\r\nif ($PFE_Accion==\"PFE_CrearArchivo\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($archivo!=\"\")\r\n   	        {\r\n                touch($path.$archivo);\r\n            }\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_Renombrar\r\n    Renombra un elemento en el path actual\r\n*/\r\nif ($PFE_Accion==\"PFE_Renombrar\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($viejo_nombre!=\"\" && $nuevo_nombre!=\"\")\r\n   	        {\r\n                rename($path.$viejo_nombre, $path.$nuevo_nombre);\r\n            }\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_ArchivoDesdeNube\r\n    Toma una URL y la descarga en la ruta actual\r\n*/\r\nif ($PFE_Accion==\"PFE_ArchivoDesdeNube\") \r\n	{\r\n   		@ob_clean();\r\n   	    if ($archivo!=\"\")\r\n   	        {\r\n   	            $Contenido = file_get_contents($url);\r\n                file_put_contents($path.$archivo, $Contenido);\r\n            }\r\n   	    die();\r\n   	}\r\n\r\n/*\r\n	Function: PFE_DescargarArchivo\r\n    Descarga el contenido de un archivo determinado\r\n*/\r\nif ($PFE_Accion==\"PFE_DescargarArchivo\") \r\n	{\r\n   		@ob_clean();\r\n   		$ArchivoDescargado=$download;\r\n        $download=$path.$download;\r\n		Header(\"Content-Length: \".filesize($download));\r\n		Header(\"Content-Type: application/x-download\");\r\n		Header(\"Content-Disposition: attachment; filename=\\\"\".rawurlencode($ArchivoDescargado).\"\\\"\");\r\n		readfile($download);\r\n\r\n   	    die();\r\n   	}\r\n\r\n\r\n/*\r\n	Function: PFE_ArchivoDesdePC\r\n    Carga uno o mas archivos locales\r\n*/\r\nif ($PFE_Accion==\"PFE_ArchivoDesdePC\") \r\n	{\r\n   		@ob_clean();\r\n\r\n        $TotalArchivosCargados = count($_FILES[\'archivo_adjunto\'][\'name\']);\r\n        //Recorre todos los archivos recibidos\r\n        for($i=0;$i<$TotalArchivosCargados;$i++)\r\n            {\r\n                $NombreArchivoFinal = $path.$_FILES[\'archivo_adjunto\'][\'name\'][$i];\r\n                //Intenta mover el archivo temporal a la carpeta definitiva\r\n                move_uploaded_file($_FILES[\'archivo_adjunto\'][\'tmp_name\'][$i],$NombreArchivoFinal);\r\n            }\r\n        \r\n        sleep(1);\r\n        //Llama a la funcion del parent para redireccionar al path despues de la carga\r\n        echo \"<script language=\'JavaScript\'>\r\n            window.parent.PFE_GUARDAR_AdjuntarArchivoRedireccion();\r\n        </script>\";\r\n   	    //die();\r\n   	}\r\n\r\n',0),(11,'Afiliados Empleados','Afiliados Empleados','Afiliados Empleados','app_afiliados_empleados',3,'function FrmAutoRun()\n    {\n    \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n        actualizarInforme();\n    \n       \n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"El afiliado se ha $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(16);',0),(12,'Registro ARL','Registro ARL','Registro de ARL ','app_arl',2,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction eliminarARL(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=ARL_eliminarARL&idARL=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:8:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado la ARL\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La ARL se encuentra asociado a un usuario!\");\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardada\";\nif($id)\n    $accionForm = \"Actualizada\";\nPCO_Mensaje(\"Aviso del sistema\",\"ARL $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(12);',0),(13,'Registro AFP','Registro AFP','Registro de Fondo de pensiones y Cesantias','app_afp',4,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction eliminarAFP(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=AFP_eliminarAFP&idAFP=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:9:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado la AFP\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La AFP se encuentra asociado a un usuario!\");\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"AFP $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(9);',0),(14,'Registro Areas','Registro Areas','Registro de Areas de la empesa','app_areas',2,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction eliminarArea(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=AREAS_eliminarArea&idArea=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:7:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el area\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El area se encuentra asociada a un empleado!\");\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"Area $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(7);',0),(15,'Registro EPS','Registro EPS','Registro EPS','app_eps',2,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n    \nfunction eliminarEPS(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=EPS_eliminarEPS&idEPS=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:6:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado la EPS\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"La EPS se encuentra asociado a un usuario!\");\n}',0,'nav-tabs','datos','responsive','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardada\";\nif($id)\n    $accionForm = \"Actualizada\";\nPCO_Mensaje(\"Aviso del sistema\",\"EPS $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(6);',0),(16,'Clasificacion de Incapacidades','Registro de Clasificacion de Incapacidades','Registro de Clasificacion de Incapacidades','app_clasificacion_incapacidad',2,'function FrmAutoRun()\r\n    {\r\n    \r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n        actualizarInforme();\r\n    \r\n       \r\n    }',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"areas $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(4);',0),(17,'Registro de Cargos','Registro de Cargos','Registro de Cargos','app_cargos',2,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction eliminarCargo(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=CARGOS_eliminarCargo&idCargo=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:5:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el cargo\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El cargo se encuentra asociado a un usuario!\");\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"Cargo $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(5);',0),(18,'Ausentismo','Ausentismo Empleados','Registro de Ausentismo Empleados','app_ausentismo',2,'function FrmAutoRun()\n    {\n    \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"Ausentismo $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(3);',0),(19,'Registro Empleados','Registro Empleados','Registro Empleados','app_empleados',3,'function FrmAutoRun()\n    {\n    \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"Empleado $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(1);',0),(20,'Registro Tipos de Incapacidades','Registro Tipos de Incapacidades','Registro Tipos de Incapacidades','app_tipos_incapacidades',3,'function FrmAutoRun()\n    {\n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n    }\n\nfunction eliminarTipoIncap(){\n    const respEliminar = JSON.parse(PCO_ObtenerContenidoAjax(0, \'index.php\',\n        \'Presentar_FullScreen=1&Precarga_EstilosBS=0&PCO_Accion=TIPOS_INCAP_eliminarTiposIncapacid&idTipoIncap=\' + document.FRMBASEINFORME.PCO_Valor.value));\n    if(respEliminar == 0) {\n        setTimeout(function(){ \n              \n			document.FRMBASEINFORME.PCO_Accion.value=\'PCO_CargarObjeto\';\n			document.FRMBASEINFORME.PCO_Objeto.value=\'frm:2:1\';\n			document.FRMBASEINFORME.Precarga_EstilosBS.value=\'1\';\n			document.FRMBASEINFORME.Presentar_FullScreen.value=\'0\';\n			document.FRMBASEINFORME.target = \'_self\';\n			document.FRMBASEINFORME.submit();\n        }, 2000);\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"Se ha eliminado el tipo de incapacidad\");\n\n    }\n    else\n        PCOJS_MostrarMensaje(\"Aviso del sistema\", \"El tipo de incapacidad se encuentra asociado a una incapacidad!\");\n}',0,'nav-tabs','datos','tradicional','col-xs-12 col-sm-10 col-md-8 col-lg-6','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"Tipo de incapacidad $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(2);',0),(21,'Gestión Documental','Gestión Documental','Gestión Documental','app_gestion_documental',3,'function fillSelect(es_multiple, campo, lista_parametros)\n{\n    if(es_multiple === 0)//pregunta si es multiple\n        PCOJS_AgregarOpcionComboBox(campo,\'\',\'\');\n    PCOJS_OpcionesCombo_DesdeCSV(campo,lista_parametros,\'|\');\n    PCOJS_ActualizarComboBox(campo);\n}\n\nfunction obtenerListaMultiplesParametrosEmpresa()\n{\n    //campo_frm, campo_tabla_empresa, es_multiple\n    const campos_array = [\n                [\'nombre\',\'tipos_adjuntos\',0],\n            ];\n    const campos_enviar = \'tipos_adjuntos\';\n    const info_empresa = PCO_ObtenerContenidoAjax(0,\'index.php\',\'PCO_Accion=obtenerMultiplesParametrosEmpresa&CamposParametros=\' + campos_enviar + \n    \'&Presentar_FullScreen=1&Precarga_EstilosBS=0\');\n\n    if(info_empresa !== \'\') {\n\n        const info_empresa_js = JSON.parse(info_empresa);\n\n        if(Object.keys(info_empresa_js).length > 0) {\n\n            $.each(campos_array, (index, value) => {\n\n                const ListaCategorias = info_empresa_js[value[1]]\n                    .replace(/(?:\\\\[rn]|[\\r\\n]+)+/g, \'|\');\n                fillSelect(value[2], value[0], ListaCategorias);\n            });\n        }\n    }\n}\n\nfunction FrmAutoRun()\n    {\n    \n        if($(\'#id\').val()) {\n            $(\'#btn_create\').hide();\n        }\n        else {\n            $(\'#btn_update\').hide();\n        }\n        obtenerListaMultiplesParametrosEmpresa();\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','<?php\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\n$PCO_PostAccionDirecta = 1;\n//$PCO_PostAccion = 1;\n$accionForm = \"Guardado\";\nif($id)\n    $accionForm = \"Actualizado\";\nPCO_Mensaje(\"Aviso del sistema\",\"El documento se ha $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\nPCO_CargarFormulario(14);',0),(22,'Inventario','Gestión de inventario ','Gestión de inventario ','app_activos',3,'function FrmAutoRun()\r\n    {\r\n    \r\n        if($(\'#id\').val()) {\r\n            $(\'#btn_create\').hide();\r\n        }\r\n        else {\r\n            $(\'#btn_update\').hide();\r\n        }\r\n    }',0,'nav-tabs','datos','tradicional','','panel-primary','','<?php\r\nglobal $PCO_PostAccionDirecta, $id, $accionForm;\r\n$PCO_PostAccionDirecta = 1;\r\n//$PCO_PostAccion = 1;\r\n$accionForm = \"Guardado\";\r\nif($id)\r\n    $accionForm = \"Actualizado\";\r\nPCO_Mensaje(\"Aviso del sistema\",\"Activo $accionForm correctamente!\", \'\', \'fa fa-thumbs-up fa-5x icon-green texto-blink\', \'alert alert-success alert-dismissible\');\r\nPCO_CargarFormulario(22);',0);

--
