/** * PAQUETE JS con las clases que manejan los botones Tooltips * Clase objBotonToolTip * Clase objBTTLimpiar * Clase objBTTModificar * Clase objBTTInsertar * Clase objBTTEliminar * Clase objBTTAbrirVS * Clase objBTTBuscarVS * Clase objBTTRestaurar **/ Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Function.method('inherits', function (parent) { var d = 0, p = (this.prototype = new parent()); this.method('uber', function uber(name) { var f, r, t = d, v = parent.prototype; if (t) { while (t) { v = v.constructor.prototype; t -= 1; } f = v[name]; } else { f = p[name]; if (f == this[name]) { f = v[name]; } } d += 1; r = f.apply(this, Array.prototype.slice.apply(arguments, [1])); d -= 1; return r; }); return this; } ) /** * Clase que maneja los botones tooltips, se incluye la funcionalidad * global y de ella heredarán las distintas clases de botones posteriormente */ function objBotonToolTip(nomObjeto,idPanel,esMaestro,esDetalle) { this.constructor (nomObjeto,idPanel,esMaestro,esDetalle); } //Devuelve el obj HTML Form, formulario donde se encuentra el botón objBotonToolTip.method('constructor', function (nomObjeto,idPanel,esMaestro,esDetalle) { this.nomObj = nomObjeto; this.idPanel = idPanel; this.idForm = 'F_'+idPanel; this.formulario = eval('document.getElementById("'+this.idForm+'")'); /* Sólo se utilizan en las pantallas con Maestro Detalle */ this.idPanelMD = null; this.imagen = null; if (this.formulario === null) { this.formulario = null; this.idForm = ''; } this.nomClase = 'objBotonToolTip'; this.esMaestro = esMaestro; this.esDetalle = esDetalle; this.habilitado = true; return this; } ); ////////////////////////////////////////////////////////// //// MÉTODOS BOTON TOOLTIP //// ---------- //// getForm //// ---------- objBotonToolTip.method('getForm', function () { return (this.formulario); } ); //// ------------- //// getFormId //// ------------- //Devuelve una cadena que será el nombre del formulario donde se encuentra el botón objBotonToolTip.method('getFormId', function () { return (this.idForm); }); //// ------------ //// getPanel //// ------------ //Devuelve el nombre del panel donde se encuentra el botón objBotonToolTip.method('getPanel', function () { return (this.idPanel); }); //// ------------------- //// getNombreObj //// ------------------- //Devuelve una cadena que será el nombre de la instancia creada objBotonToolTip.method('getNombreObj', function () { return (this.nomObj); }); //// ----------- //// getClase //// ----------- //Devuelve el nombre de la clase de la q es instancia objBotonToolTip.method('getClase', function () { return (this.nomClase); }); //// -------------------- //// estoyEnMaestro //// -------------------- //Devuelve un true o false según este o no en un panel maestro objBotonToolTip.method('estoyEnMaestro', function () { return (this.esMaestro); }); //// -------------------- //// estoyEnDetalle //// -------------------- //Devuelve un true o false según este o no en un panel detalle objBotonToolTip.method('estoyEnDetalle', function () { return (this.esDetalle); }); //// -------------- //// esPanelMD //// -------------- objBotonToolTip.method('esPanelMD', function () { panelMD = false; // Existe detalle?? if ( (document.getElementById('P_ediDetalle')) || (document.getElementById('P_lisDetalle')) ) { // Soy panel dl detalle if ( (this.idPanel == 'ediDetalle') || (this.idPanel == 'lisDetalle') ) { // Oculto panel maestro if (document.getElementById('P_edi')) this.idPanelMD = 'edi' else this.idPanelMD = 'lis' panelMD = true; } else { // No soy el panel detalle // El panel detalle es de tipo 'edi' o 'lis'???? if (document.getElementById('P_lisDetalle')) this.idPanelMD = 'lisDetalle' else this.idPanelMD = 'ediDetalle' panelMD = true; } } return(panelMD); } ); //// -------------- //// activarGC (Activar los botones Guardar/Cancelar) //// -------------- objBotonToolTip.method('activarGC', function (panelActivar) { btnActivar = 'bn'+panelActivar+'_guardar'; if (document.getElementById(btnActivar)) { bton = document.getElementById(btnActivar); bton.disabled = false; bton.style.display = 'inline'; } btnActivar = 'bn'+panelActivar+'_cancelar'; if (document.getElementById(btnActivar)) { bton = document.getElementById(btnActivar); bton.disabled = false; bton.style.display = 'inline'; } var button = document.getElementsByTagName('button'); for(i=0;i 2) prefijo = vIdElemento[0]; // prefijo del campo 'cam' o 'ins' else prefijo =''; //Estamos tratando el panel de búsqueda? dificil no? // sólo queremos actuar sobre los campos de usuario, es decir, eliminamos: // - Campos hidden de control de concurrencia // - Campos con el prefijo ant if ( (elemento.type != "hidden") && (prefijo != 'ant') && ( (prefijo =='cam') || (prefijo =='ins') ) ) { sufijo = vIdElemento[2]; // sufijo del campo = FichaEdicion_pag (cam___nomCampo___FichaEdicion_pag) pagCampo = sufijo.split('_')[1]; // Encontramos un campo de la página activa if (pagCampo == pagActiva) { if (prefijo=='ins') { //Si es una inserción no hay valor anterior if ((elemento.type != 'select-one') && (elemento.type != 'select-multiple')) elemento.value=''; else { listaActual = elemento; nombreSinPrefijo = idElemento.substr(3,idElemento.length); listaAnterior = eval('formulario.ant'+nombreSinPrefijo); listaActual.options.length = 0; for(j=0; j 1) && (vIdElemento[2] == idFila) && (vIdElemento[0] != 'ant')) ) { idSinPrefijo = idElemento.substr(3,idElemento.length); switch (elemento.type) { case 'text': valorAnt = eval('formulario.ant'+idSinPrefijo+'.value'); elemento.value = valorAnt; //elemento.readOnly = true; break; case 'checkbox': idSinPrefijo = idElemento.substr(4,id.length); //ccam (checkbox) lcam (listas disabled) valorAnt = eval('formulario.ant'+idSinPrefijo+'.value'); valorActual = eval('formulario.cam'+idSinPrefijo+'.value'); if (valorAnt != valorActual) if (eval('document.getElementById("'+idElemento+'").checked')) eval('document.getElementById("'+idElemento+'").checked = "false"'); else eval('document.getElementById("'+idElemento+'").checked = "true"'); eval('document.getElementById("'+idElemento+'").disabled = "true"'); break; case 'select-one': valorAnt = eval('formulario.ant'+idSinPrefijo+'.value'); for(k=0;k 3) ) { valueFinal += separador; textFinal += separador; } } // Añadimos el valor de la concatenación de todos los campos al select múltiple destino posicion = eval('document.getElementById("'+destino+'").length'); campoDestino = eval('document.getElementById("'+destino+'")'); campoDestino.options[posicion] = new Option(textFinal,valueFinal); campoDestino.options[posicion].selected = true; } //Marcamos la modificacion en el panel (ficha/fila) cadenaAux = 'document.'+this.idPanel+'_comp'; objComprobacion = eval(cadenaAux);//Instanciar el objeto objComprobacion.marcarModificacionCampo(destino); } ); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////// CLASE PARA EL botón MODIFICAR.- objBTTModificar ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function objBTTModificar (nomObjeto,idPanel,esMaestro,esDetalle,tresModos,iconoCSS) { //llamamos al constructor del padre this.uber('constructor',nomObjeto,idPanel,esMaestro,esDetalle); this.nomClase = 'objBTTModificar'; this.tresModos = tresModos; this.iconoCSS = iconoCSS; } //DECLARACIÓN DE HERENCIA objBTTModificar.inherits(objBotonToolTip); objBTTModificar.method('modificarTabla', function () { var idFila = ""; var hayFoco = 0; //Activamos los botones inferiores!! if (this.tresModos != 1) this.activarGC(this.idPanel); formulario = this.getForm(); nomForm = this.getFormId(); // Tenemos un campo oculto q contendrá la acción realizada con los botones ToolTip accionActivaP = 'accionActivaP_'+nomForm; if (this.esPanelMD()) // Si es maestro o Detalle { /* this.deshabilitarMD('modificar'); //Deshabilito botones del panel complementario if (this.idPanel == 'lis') //Soy el panel maestro this.deshabilitarHermanos('insertar,eliminar,modificar',',');*/ // Si en el detalle hay solapas (varios detalles) ocultamos las solapas // si estamos trabajando sobre uno de ellos if (document.getElementById("detalles")) document.getElementById("detalles").style.display = 'none'; } idFila = ''; for(i=0;i idFila = "F_".$idTabla."_".$iterActual; tipoCampo = formulario.elements[i].type; nombreCampo = formulario.elements[i].id; prefijo = nombreCampo.split('_')[0]; idFilaCampo = nombreCampo.split('___')[2]; // PARA EL CASO DE UNA TABLA PQ TIENE UN CHECK Q LA IDENTIFICA if ( (prefijo== 'check') && (tipoCampo == 'checkbox') && (formulario.elements[i].checked) && (nombreCampo != 'seleccionarTodo') ) { // Las filas chequeadas se marcarán como modificadas idFila = nombreCampo.split('check_')[1]; fila = eval('document.getElementById("'+idFila+'")'); // Campo oculto con el estado d la fila eval('formulario.est_'+idFila+'.value="modificada"'); // Oculto con la acción eval('formulario.'+accionActivaP+'.value="modificar"'); } // if checkbox if ((idFila != '') && (idFilaCampo == idFila) // solo queremos los campos correspondientes a la fila a modificar && (nombreCampo.split('___')[0] != 'ant')) { if ( ( (tipoCampo != 'hidden') || // Todos los campos q no sean ocultos ( (prefijo != 'check') && (tipoCampo == 'checkbox') && (nombreCampo != 'seleccionarTodo') ) // Es un checkbox d una fila ) ) { classCampo = formulario.elements[i].className; vClassCampo = classCampo.split(' '); // ej. text tableEdit alerta vClassCampo[1] = (vClassCampo[1] != undefined)? vClassCampo[1] : ''; vClassCampo[2] = (vClassCampo[2] != undefined)? vClassCampo[2] : ''; if (hayFoco == 0) campoFoco = formulario.elements[i]; else hayFoco = 1; if (this.iconoCSS == '') { if (eval('document["cal_'+nombreCampo+'"]')) { classCampo = eval('document.getElementById("'+nombreCampo+'").className'); vClassCampo = classCampo.split(' '); // ej. text tableEdit alerta vClassCampo[1] = (vClassCampo[1] != undefined)? vClassCampo[1] : ''; vClassCampo[2] = (vClassCampo[2] != undefined)? vClassCampo[2] : ''; src = eval('document.getElementById("cal_'+nombreCampo+'").src'); src = src.replace("botones/17off.gif","botones/17.gif"); eval('document["cal_'+nombreCampo+'"].src = "'+src+'"'); } // botón ventana selección nombreSinPrefijo = nombreCampo.substr(6,nombreCampo.length); if (eval('document["vs_'+nombreSinPrefijo+'"]')) { if (eval('document.getElementById("vs_'+nombreSinPrefijo+'").className')) { if (eval('document.getElementById("vs_'+nombreSinPrefijo+'").className') == 'tableEdit') { src = eval('document["vs_'+nombreSinPrefijo+'"].src'); src = src.replace("botones/13off.gif","botones/13.gif"); eval('document["vs_'+nombreSinPrefijo+'"].src = "'+src+'"'); } } else // Para que siga funcionando como antes de tener el parámetro "editable" { src = eval('document["vs_'+nombreSinPrefijo+'"].src'); src = src.replace("botones/13off.gif","botones/13.gif"); eval('document["vs_'+nombreSinPrefijo+'"].src = "'+src+'"'); } } /////////////////////////////////////////////////// /// BOTÓN DE SALTO if (eval('document["jump_'+nombreSinPrefijo+'"]')) { if (eval('document.getElementById("jump_'+nombreSinPrefijo+'").className')) { if (eval('document.getElementById("jump_'+nombreSinPrefijo+'").className') == 'tableEdit') { src = eval('document["jump_'+nombreSinPrefijo+'"].src'); src = src.replace("off.gif",".gif"); eval('document["jump_'+nombreSinPrefijo+'"].src = "'+src+'"'); } } else // Para que siga funcionando como antes de tener el parámetro "editable" { src = eval('document["jump_'+nombreSinPrefijo+'"].src'); src = src.replace("off.gif",".gif"); eval('document["jump_'+nombreSinPrefijo+'"].src = "'+src+'"'); } } } if ((vClassCampo[1] == "tableEdit") && (tipoCampo != 'button')) { if ((tipoCampo == 'radio') || (tipoCampo == 'checkbox') || (tipoCampo == 'select-one') || (tipoCampo == 'select-multiple') ){ formulario.elements[i].disabled = false; } else formulario.elements[i].readOnly = false; nuevoClass = classCampo.replace(vClassCampo[1],"tableModify"); nuevoClass = nuevoClass.replace(vClassCampo[2],""); formulario.elements[i].className = nuevoClass; } } }// if } // for i if (hayFoco) eval('campoFoco.focus()'); marcaModificado = document.getElementById(this.idPanel+'_imgModificado'); if (marcaModificado != null) { capaMenuFalso = document.getElementById('capa_menuFalso'); capaMenuReal = document.getElementById('capa_menuReal'); capaMenuFalso.style.display="inline"; capaMenuReal.style.display="none"; marcaModificado.style.display="inline"; ocultoPerCerrarApli=document.getElementById('permitirCerrarAplicacion'); ocultoPerCerrarApli.value='no'; } if (eval(this.idPanel+'_paginacion')) { paginador = eval(this.idPanel+'_paginacion'); //Se marca la página como modificada... paginador.paginasModificadas[parseInt(this.getPaginaActiva(),10)] = true; } } ); objBTTModificar.method('modificarFicha', function () { if (this.habilitado == false) return; //Activamos los botones inferiores!! this.activarGC(this.idPanel); formulario = this.getForm(); var capas = formulario.getElementsByTagName("DIV"); var pagina = null; var soloLectura = true; var numCapas = capas.length; accionActivaP = 'accionActivaP_'+formulario.id; /* if (this.esPanelMD()) // Si es maestro o Detalle { if (this.idPanel == 'edi') //Soy el panel edi y soy un maestro this.deshabilitarHermanos('insertar,eliminar,modificar',','); this.deshabilitarMD('modificar'); //Deshabilito botones del panel complementario }*/ for(i=0;i 0) campoDestino.options[campoDestino.options.selectedIndex] = null; } ); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////// CLASE PARA EL botón ELIMINAR.- objBTTEliminar ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function objBTTEliminar(nomObjeto,idPanel,esMaestro,esDetalle,iconoCSS) { //llamamos al constructor del padre this.uber('constructor',nomObjeto,idPanel,esMaestro,esDetalle); this.nomClase = 'objBTTEliminar'; this.iconoCSS = iconoCSS; } //DECLARACION DE HERENCIA objBTTEliminar.inherits(objBotonToolTip); objBTTEliminar.method('eliminarTabla', function () { var idFila = ""; var hayFoco = 0; //Activamos los botones inferiores!! this.activarGC(this.idPanel); formulario = this.getForm(); nomForm = this.getFormId(); // Tenemos un campo oculto q contendrá la acción realizada con los botones ToolTip accionActivaP = 'accionActivaP_'+nomForm; if (this.esPanelMD()) // Si es maestro o Detalle { /*this.deshabilitarMD('eliminar'); //Deshabilito botones del panel complementario if (this.idPanel == 'lis') //Soy el panel maestro this.deshabilitarHermanos('insertar,eliminar,modificar',',');*/ // Si en el detalle hay solapas (varios detalles) ocultamos las solapas // si estamos trabajando sobre uno de ellos if (document.getElementById("detalles")) document.getElementById("detalles").style.display = 'none'; } for(i=0;i idFila = "F_".$idTabla."_".$iterActual; valorId = String(formulario.elements[i].id); prefijo = valorId.split('_')[0]; tipoCampo = formulario.elements[i].type; nombreCampo = formulario.elements[i].id; // PARA EL CASO DE UNA TABLA PQ TIENE UN CHECK Q LA IDENTIFICA if ( (prefijo== 'check') && (tipoCampo == 'checkbox') && (formulario.elements[i].checked) && (nombreCampo != 'seleccionarTodo') ) { // Las filas chequeadas se marcarán como modificadas idFila = valorId.split('check_')[1]; fila = eval('document.getElementById("'+idFila+'")'); // Campo oculto con el estado d la fila q miraremos que no sea un modificar estado = eval('formulario.est_'+idFila+'.value'); if (estado == "nada") { eval('formulario.est_'+idFila+'.value="borrada"'); //Se deschequea y y se desactiva el campo checked formulario.elements[i].checked = false; formulario.elements[i].disabled = true; // Estilo de la fila classFila = eval('document.getElementById("'+idFila+'").className'); classFila = classFila.replace("rowOn","rowDeleted"); fila.className = classFila; // Oculto con la acción eval('formulario.'+accionActivaP+'.value="borrar"'); } } // if checkbox // REVIEW Vero 02/03/2009 Para buscar el estado del radio hay q utilizar el name y no el id if (tipoCampo == 'radio') nombreCampo = formulario.elements[i].name; idFilaCampo = nombreCampo.split('___')[2]; // Para el resto de campos que pueden estar dentro d una tabla estado = ''; if (idFilaCampo) estado = eval('formulario.est_'+idFilaCampo+'.value'); if ( ( (tipoCampo != 'hidden') && (estado == 'borrada') && (prefijo != 'check') && (nombreCampo != 'seleccionarTodo') && ((tipoCampo == 'textarea') || (tipoCampo == 'text') || (tipoCampo == 'checkbox') || (tipoCampo == 'radio') || (tipoCampo == 'select-one')) ) && ((idFilaCampo == idFila) && (valorId.split('___')[0] != 'ant')) ) { classCampo = eval('document.getElementById("'+valorId+'").className'); // Primero quitamos el color de fila activa classCampo = classCampo.replace("rowOn","rowDeleted"); vClassCampo = classCampo.split(' '); // ej. text alerta rowOn vClassCampo[1] = (vClassCampo[1] != undefined)? vClassCampo[1] : ''; vClassCampo[2] = (vClassCampo[2] != undefined)? vClassCampo[2] : ''; if (vClassCampo[2] != '') nuevoClass = classCampo.replace(vClassCampo[2],"tableDelete"); else nuevoClass = classCampo.replace(vClassCampo[1],"tableDelete"); formulario.elements[i].className = nuevoClass; if (tipoCampo == 'radio') { idLabelRadio = 'l'+formulario.elements[i].id; labelRadio = document.getElementById(idLabelRadio); if (labelRadio) labelRadio.className = formulario.elements[i].className; } }// if } // for i marcaModificado = document.getElementById(this.idPanel+'_imgModificado'); if (marcaModificado != null) { marcaModificado.style.display="inline"; capaMenuFalso = document.getElementById('capa_menuFalso'); capaMenuReal = document.getElementById('capa_menuReal'); capaMenuFalso.style.display="inline"; capaMenuReal.style.display="none"; ocultoPerCerrarApli=document.getElementById('permitirCerrarAplicacion'); ocultoPerCerrarApli.value='no'; } if (eval(this.idPanel+'_paginacion')) { paginador = eval(this.idPanel+'_paginacion'); //Se marca la página como modificada... paginador.paginasModificadas[parseInt(this.getPaginaActiva(),10)] = true; } } ); objBTTEliminar.method('eliminarFicha', function () { if (this.habilitado == false) return; //Activamos los botones inferiores!! this.activarGC(this.idPanel); formulario = this.getForm(); var capas = formulario.getElementsByTagName("DIV"); var pagina = null; var soloLectura = true; var numCapas = capas.length; accionActivaP = 'accionActivaP_'+formulario.id; if (this.esPanelMD()) // Si es maestro o Detalle { // Deshabilitar mis hermanos /*if (this.idPanel == 'edi') //Soy el panel edi y soy un maestro this.deshabilitarHermanos('insertar,eliminar,modificar',','); this.deshabilitarMD('eliminar'); //Deshabilito botones del palnel complementario*/ } for(i=0;i 0) campoDestino.options[campoDestino.options.selectedIndex] = null; for(i=0;i