/*
   En este librería de código javascript se incorporan las clases necesarias para definir el modelo de objetos que representa
   la información necesaria para el funcionamiento de la aplicación de pancarta.com
   También se incorpora una función de traducción entre la cadena de texto enviada por el servidor de aplicaciones, que contiene
   los datos requeridos por un cliente a través de un servicio web, y el objeto, o array de objetos, que se utilizarán en el
   cliente para implementar la lógica de vista.
 */
 
 /*
    NOTA IMPORTANTE: PUEDE QUE SEA BUENA IDEA PARA EVITAR PROBLEMAS INICIALIZAR ALGUNOS ATRIBUTOS A ALGO QUE NO SEA NULL,
    EN LA LÍNEA DE LOS VALORES POR DEFECTO DEFINIDOS EN LA BASE DE DATOS,
    POR EJEMPLO LOS ESTADOS DE LÍNEA DE CARRITO A 0 EN LUGAR DE A NULL, ETC...
 */

 
//CONSTRUCTORES PARA CONFIGURADOR GRÁFICO DE PANCARTAS 
 function Acabado(codAcabado, nombre, descripcion, icono, precioCm, entradaTubo) {
    //Array con los nombres de los atributos. Útil para la función de traducción

    this.datos = new Array("codAcabado", "nombre", "descripcion", "icono", "precioCm", "entradaTubo");
    
    this.codAcabado = codAcabado;
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.icono = icono;
    this.precioCm = precioCm;
    this.entradaTubo = entradaTubo;
 }
 
 function Ollao(codOllao, nombre, descripcion, icono, precio) {
     //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codOllao", "nombre", "descripcion", "icono", "precio");
    
    this.codOllao = codOllao;
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.icono = icono;
    this.precio = precio;
 }
 
 function Material(codMaterial, nombre, descripcion, anchoMax, altoMax, confeccion, icono, precioCm2) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codMaterial", "nombre", "descripcion", "anchoMax", "altoMax", "confeccion", "icono", "precioCm2");
    
    this.codMaterial = codMaterial;
    this.nombre = nombre;
    this.descripcion = descripcion;    
    this.anchoMax = anchoMax;
    this.altoMax = altoMax;
    this.confeccion = confeccion;
    this.icono = icono;
    this.precioCm2 = precioCm2;
 } 
 
 function EntradaTubo(codAcabado, nombreAcabado, descripcionAcabado, iconoAcabado, precioCm, entradaTubo, codEntTub,  abiertoDos, abiertoIzq, abiertoDer, cerrado, longitud, diametro) {
     //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codAcabado", "nombreAcabado", "descripcionAcabado", "iconoAcabado", "precioCm", "entradaTubo", "codEntTub", "abiertoDos", "abiertoIzq", "abiertoDer",
                           "cerrado", "longitud", "diametro");
	
    /*
      Las entradas de tubo contienen en su definición los datos correspondientes al acabado al cual están asociadas    
     */
    this.codAcabado = codAcabado;
    this.nombreAcabado = nombreAcabado;

    this.descripcionAcabado = descripcionAcabado;    
    this.iconoAcabado = iconoAcabado;  
    this.precioCm = precioCm;  
    this.entradaTubo = entradaTubo;      
    this.codEntTub = codEntTub;    
    this.abiertoDos = abiertoDos;
    this.abiertoIzq = abiertoIzq;
    this.abiertoDer = abiertoDer;
    this.cerrado = cerrado;
    this.longitud = longitud;
    this.diametro = diametro;
	
 }
 
  //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined");
  function EntradaTubo() {
     //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codAcabado", "nombreAcabado", "descripcionAcabado", "iconoAcabado", "precioCm", "entradaTubo", "codEntTub", "abiertoDos", "abiertoIzq", "abiertoDer",
                           "cerrado", "longitud", "diametro");
    /*
      Las entradas de tubo contienen en su definición los datos correspondientes al acabado al cual están asociadas    
     */	
    this.codAcabado = null;
    this.nombreAcabado = null;
    this.descripcionAcabado = null;    
    this.iconoAcabado = null;   
    this.precioCm = null;  
    this.entradaTubo = null;       
    this.codEntTub = null;    
    this.abiertoDos = null;
    this.abiertoIzq = null;
    this.abiertoDer = null;
    this.cerrado = null;
    this.longitud = null;
    this.diametro = null;
 }
 
 function Pancarta (codPancarta, codMaterial, ancho, alto, codAcabSup, codAcabInf, codAcabIzq, codAcabDer,
                    codOllaoSup, codOllaoInf, codOllaoIzq, codOllaoDer, codEntTubSup, codEntTubInf,
                    codEntTubIzq, codEntTubDer, numOllaosSup, numOllaosInf, numOllaosIzq, numOllaosDer,
                    codTerminacion, motivoPropuesta, esPropuesta, acronimo, precioNeto) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codPancarta", "codMaterial", "ancho", "alto", "codAcabSup", "codAcabInf", "codAcabIzq", "codAcabDer",
                           "codOllaoSup", "codOllaoInf", "codOllaoIzq", "codOllaoDer", "codEntTubSup", "codEntTubInf",
                           "codEntTubIzq", "codEntTubDer", "numOllaosSup", "numOllaosInf", "numOllaosIzq", "numOllaosDer",
                           "codTerminacion", "motivoPropuesta", "esPropuesta", "acronimo", "precioNeto");
    
    this.codPancarta = codPancarta;
    this.codMaterial = codMaterial;
    this.ancho = ancho;
    this.alto = alto;
    this.codAcabSup = codAcabSup;
    this.codAcabInf = codAcabInf;
    this.codAcabIzq = codAcabIzq;
    this.codAcabDer = codAcabDer;
    this.codOllaoSup = codOllaoSup;
    this.codOllaoInf = codOllaoInf;
    this.codOllaoIzq = codOllaoIzq;
    this.codOllaoDer = codOllaoDer;
    this.codEntTubSup = codEntTubSup;
    this.codEntTubInf = codEntTubInf;
    this.codEntTubIzq = codEntTubIzq;
    this.codEntTubDer = codEntTubDer;  
    this.numOllaosSup = numOllaosSup;     
    this.numOllaosInf = numOllaosInf;     
    this.numOllaosIzq = numOllaosIzq;     
    this.numOllaosDer = numOllaosDer;   
    this.codTerminacion = codTerminacion;  
    this.motivoPropuesta = motivoPropuesta;
    this.esPropuesta = esPropuesta;
    this.acronimo = acronimo;
    this.precioNeto = precioNeto;
 }
 
 function Terminacion(codTerminacion, nombre, descripcion, icono, precioCm2) {
   //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codTerminacion", "nombre", "descripcion", "icono", "precioCm2"); 
	
	this.codTerminacion = codTerminacion;
	this.nombre = nombre;
	this.descripcion = descripcion;
        this.icono = icono;
        this.precioCm2 = precioCm2;
 }
  
  //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined")
  function Pancarta () {

    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codPancarta", "codMaterial", "ancho", "alto", "codAcabSup", "codAcabInf", "codAcabIzq", "codAcabDer",
                           "codOllaoSup", "codOllaoInf", "codOllaoIzq", "codOllaoDer", "codEntTubSup", "codEntTubInf",
                           "codEntTubIzq", "codEntTubDer", "numOllaosSup", "numOllaosInf", "numOllaosIzq", "numOllaosDer",
                           "codTerminacion", "motivoPropuesta", "esPropuesta", "acronimo", "precioNeto");
    
    this.codPancarta = null;
    this.codMaterial = null;
    this.ancho = null;
    this.alto = null;
    this.codAcabSup = null;
    this.codAcabInf = null;
    this.codAcabIzq = null;
    this.codAcabDer = null;
    this.codOllaoSup = null;
    this.codOllaoInf = null;
    this.codOllaoIzq = null;
    this.codOllaoDer = null;
    this.codEntTubSup = null;
    this.codEntTubInf = null;
    this.codEntTubIzq = null;
    this.codEntTubDer = null;  
    this.numOllaosSup = null;     
    this.numOllaosInf = null;    
    this.numOllaosIzq = null;     
    this.numOllaosDer = null;
    this.codTerminacion = null;    
    this.motivoPropuesta = null;
    this.esPropuesta = null;
    this.acronimo = null;
    this.precioNeto = null;
 }

//CONSTRUCTORES PARA MANTENIMIENTO DE ACCESORIOS Y ARTÍCULOS 
 function Accesorio(codAccesorio, nombre, descripcion, foto, precio, alto, ancho, codTipoAccesorio, codAccesorioTalla) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codAccesorio", "nombre", "descripcion", "foto", "precio", "alto", "ancho", "codTipoAccesorio", "codAccesorioTalla");
    
    this.codAccesorio = codAccesorio;
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.foto = foto;
    this.precio = precio;
    this.alto = alto;
    this.ancho = ancho;
    this.codTipoAccesorio = codTipoAccesorio;    
    this.codAccesorioTalla = codAccesorioTalla;        
 } 
 
 function TipoAccesorio(codTipoAccesorio, nombre, descripcion) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codTipoAccesorio", "nombre", "descripcion");
    
    this.codTipoAccesorio = codTipoAccesorio;
    this.nombre = nombre;
    this.descripcion = descripcion;
 }  
 
 function Articulo(codArticulo, alto, ancho, codAccesorio) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codArticulo", "alto", "ancho", "codAccesorio");
    
    this.codArticulo = codArticulo;
    this.alto = alto;
    this.ancho = ancho;
    this.codAccesorio = codAccesorio;    
 }
 
 //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined")

 function Articulo() {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codArticulo", "alto", "ancho", "codAccesorio");
    
    this.codArticulo = null;
    this.alto = null;
    this.ancho = null;
    this.codAccesorio = null;    
 }   
 
  //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined");
  function Accesorio() {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codAccesorio", "nombre", "descripcion", "foto", "precio", "alto", "ancho", "codTipoAccesorio", "codAccesorioTalla");
    
    this.codAccesorio = null;
    this.nombre = null;
    this.descripcion = null;
    this.foto = null;
    this.precio = null;
    this.alto = null;
    this.ancho = null;
    this.codTipoAccesorio = null;    
    this.codAccesorioTalla = null;        
 } 
 
//CONSTRUCTORES PARA MANTENIMIENTO DE PEDIDOS
 function CarritoPedido(codCarritoPedido, fecha, codCliente, fechaEntrega, direccionEntrega, direccionFactura, codTransportista, 
                       nombreCarrito, pdf, esCarrito, urlTransportista, idSesion, precio, precioIva, precioPromocion, dtoSupAplicado) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codCarritoPedido", "fecha", "codCliente", "fechaEntrega", "direccionEntrega", "direccionFactura", "codTransportista", 
                           "nombreCarrito", "pdf", "esCarrito", "urlTransportista", "idSesion", "precio", "precioIva", "precioPromocion", "dtoSupAplicado");
                           
    this.codCarritoPedido = codCarritoPedido;
    this.fecha = fecha;
    this.codCliente = codCliente;

    this.fechaEntrega = fechaEntrega;
    this.direccionEntrega = direccionEntrega;
    this.direccionFactura = direccionFactura;
    this.codTransportista = codTransportista;
    this.nombreCarrito = nombreCarrito;
    this.pdf = pdf;
    this.esCarrito = esCarrito;
    this.urlTransportista = urlTransportista;
    this.idSesion = idSesion;
    this.precio = precio;
    this.precioIva = precioIva;
    this.precioPromocion = precioPromocion;
    this.dtoSupAplicado = dtoSupAplicado;
 } 

 //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined");
 function CarritoPedido() {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codCarritoPedido", "fecha", "codCliente", "fechaEntrega", "direccionEntrega", "direccionFactura", "codTransportista", 
                           "nombreCarrito", "pdf", "esCarrito", "urlTransportista", "idSesion", "precio", "precioIva", "precioPromocion", "dtoSupAplicado");
                           
    this.codCarritoPedido = null;
    this.fecha = null;
    this.codCliente = null;
    this.fechaEntrega = null;
    this.direccionEntrega = null;
    this.direccionFactura = null;
    this.codTransportista = null;
    this.nombreCarrito = null;
    this.pdf = null;
    //this.esCarrito = "1";
    this.esCarrito = null;
    this.urlTransportista = null;
    this.idSesion = null;
    //this.precio = "0.0";
    this.precio = null;
    //this.precioIva = "0.0";
    this.precioIva = null;
    //this.precioPromocion = "0.0";    
    this.precioPromocion = null;  
    this.dtoSupAplicado = null;
 }
 

 function LineaCarritoPedido(codLinea, codCarritoPedido, codEstadoLinea, precioUnitario, descripcion, unidades, codArticulo, 

                            codPancarta, archivoMotivo) {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codLinea", "codCarritoPedido", "codEstadoLinea", "precioUnitario", "descripcion", "unidades", 
                           "codArticulo", "codPancarta", "archivoMotivo", "precio", "dto");  
                           
    this.codLinea = codLinea;
    this.codCarritoPedido = codCarritoPedido;
    this.codEstadoLinea = codEstadoLinea;
    this.precioUnitario = precioUnitario;
    this.descripcion = descripcion;
    this.unidades = unidades;
    this.codArticulo = codArticulo;
    this.codPancarta = codPancarta;
    this.archivoMotivo = archivoMotivo;
    this.precio = precio;
    this.dto = dto;
 }
 
 //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined");
 function LineaCarritoPedido() {
    //Array con los nombres de los atributos. Útil para la función de traducción
    this.datos = new Array("codLinea", "codCarritoPedido", "codEstadoLinea", "precioUnitario", "descripcion", "unidades", 
                           "codArticulo", "codPancarta", "archivoMotivo", "precio", "dto"); 
                           
    this.codLinea = null;
    this.codCarritoPedido = null;
    //this.codEstadoLinea = "0";

    this.codEstadoLinea = null;
    this.precioUnitario = null;
    //this.precioUnitario = "0.0";
    this.descripcion = null;
    //this.unidades = "0";
    this.unidades = null;
    this.codArticulo = null;
    this.codPancarta = null;
    this.archivoMotivo = null;
    //this.precio = "0.0";
    this.precio = null;;
    //this.dto = "0.0";  
    this.dto = null;
 } 

//CONSTRUCTORES PARA MANTENIMIENTO DE CLIENTES 
 function Cliente(codCliente, nombre, direccion, logotipo, razonSocial, tipo, codFamiliaProfesional, email, fechaAlta,
                  login, password, baja, apellidos, localidad, provincia, pais, codFormaPago, dtoImpresion, dtoAccesorios,
                  exentoIva, telefono1, telefono2) { 
    //Array con los nombres de los atributos. Útil para la función de traducción                  
    this.datos = new Array("codCliente", "nombre", "direccion", "logotipo", "razonSocial", "tipo", "codFamiliaProfesional",
                            "email", "fechaAlta", "login", "password", "baja", "apellidos", "localidad", "provincia",
                            "pais", "codFormaPago", "dtoImpresion", "dtoAccesorios", "exentoIva", "telefono1", "telefono2");  
                            
    this.codCliente = codCliente;
    this.nombre = nombre;
    this.direccion = direccion;
    this.logotipo = logotipo;
    this.razonSocial = razonSocial;
    this.tipo = tipo;
    this.codFamiliaProfesional = codFamiliaProfesional;
    this.email = email;
    this.fechaAlta = fechaAlta;
    this.login = login;
    this.password = password;
    this.baja = baja;
    this.apellidos = apellidos;
    this.localidad = localidad;
    this.provincia = provincia;
    this.pais = pais;
    this.codFormaPago = codFormaPago;
    this.dtoImpresion = dtoImpresion;
    this.dtoAccesorios = dtoAccesorios;
    this.exentoIva = exentoIva;
    this.telefono1 = telefono1;
    this.telefono2 = telefono2;                  
 }
 
 //Constructor por defecto con inicialización a null (Necesaria para que no se envíen al servidor "undefined");
 function Cliente() {
    //Array con los nombres de los atributos. Útil para la función de traducción                  
    this.datos = new Array("codCliente", "nombre", "direccion", "logotipo", "razonSocial", "tipo", "codFamiliaProfesional",
                            "email", "fechaAlta", "login", "password", "baja", "apellidos", "localidad", "provincia",
                            "pais", "codFormaPago", "dtoImpresion", "dtoAccesorios", "exentoIva", "telefono1", "telefono2");  
                            
    this.codCliente = null;
    this.nombre = null;
    this.direccion = null;
    this.logotipo = null;
    this.razonSocial = null;
    this.tipo = null;
    this.codFamiliaProfesional = null;
    this.email = null;
    this.fechaAlta = null;
    this.login = null;
    this.password = null;
    this.baja = "0";
    this.apellidos =  null;
    this.localidad = null;
    this.provincia =  null;
    this.pais = null;
    this.codFormaPago = null;
    this.dtoImpresion = null;
    this.dtoAccesorios = null;
    this.exentoIva = "0";
    this.telefono1 = null;
    this.telefono2 = null;        
 }
 
 function FormaPago(codFormaPago, nombre, descripcion) {
    this.datos = new Array("codFormaPago", "nombre", "descripcion");
    
    this.codFormaPago = codFormaPago;
    this.nombre = nombre;
    this.descripcion = descripcion;
 }
 
 function FamiliaProfesional(codFamiliaProfesional, nombre, descripcion) {
    this.datos = new Array("codFamiliaProfesional", "nombre", "descripcion");
    
    this.codFamiliaProfesional = codFamiliaProfesional;
    this.nombre = nombre;
    this.descripcion = descripcion;
 } 

 //Clase para manejo de condiciones de error en la recepción de respuesta del servidor
 function Error(codigo, descripcion) {
    this.codigo = codigo;
    this.descripcion = descripcion;
 }
 
 //FUNCIÓN DE TRADUCCIÓN DEL TEXTO DEVUELTO POR EL SERVIDOR A OBJETOS
 function traducirTextoAObjeto(textoDeServidor) {
    /*
      El formato acordado para recuperar la información del servidor en modo texto es la siguiente:
        -Los campos o atributos de un mismo objeto se separan mediante "<"
        -Los objetos en sí, para el caso de que se envíe en la misma petición más de un objeto, se separarán con "|"
      En función del indicador de objeto, el elemento a la izquierda de la primera "|" del texto, se construirá un objeto
      de la clase asociada al indicador (por ejemplo Acabado, Ollao, Material, Pancarta, etc.).
      La estructura de aparición de los atributos del objeto en el texto está preacordada para cada tipo y coincidirá con la
      especificada en las funciones de construcción de los objetos definidas arriba.
     */
     
     //1: "Spliteamos" el texto por "|", para obtener los objetos, en caso de que haya más de uno:
     var elementos = textoDeServidor.split("|");
     //var i,j;
     //El primer elemento corresponde al tipo de objeto del que se pasa información
     
     //Tratamiento de errores de la respuesta del servidor
     if(elementos.length > 0 && elementos[0] == "error") {

        //En caso de error se devuelve un objeto de tipo Error
        var error = new Error(null, null);

        if(elementos.length > 2) {
            error.codigo = elementos[1];
            error.descripcion = elementos[2];
        }
        return error;
     }     
     
     var arrayObjetos = new Array();
    //Para todos los elementos separados por "|" se crea un objeto
     for(i=1; i<elementos.length; i++){
        var objeto = null;
        var atributos = elementos[i].split("<");
        /*
         Para comprobar que no se trata de un elemento "null", basta comprobar que el resultado del split
         ha devuelto más de un elemento
        */
        if(atributos.length > 1) {  
            //En elementos[0] se encuentra el nombre del objeto a crear (coincide con el nombre del constructor más arriba)
            objeto = eval("new " + elementos[0] + "()");
            //Creamos los atributos del objeto por índice textual (por ejemplo al estilo acabado["nombre"] )
            for(j=0; j<atributos.length; j++){
                if(atributos[j] != "null") { 
                    objeto[objeto.datos[j]] = atributos[j];                    
                }
            }       
        }

        //Añadimos al array el objeto. En obj se recoge el índice +1 del último elemento introducido
        var obj = arrayObjetos.push(objeto);
        //Ejemplo de acceso a un atributo del elemento introducido
        //document.write(pancartas[pan - 1].nombre);                  
     }      
     
     return arrayObjetos;
    }
    
 /*
    Función de sincronziación de datos con el modelo, es decir, con la base de datos.
    Se utiliza para sincronizar los objetos Offline, creados en el cliente javascript con objetos Online que realmente existen
    en el lado del servidor de aplicaciones. Según esto es necesario realizar varios pasos en este proceso:
    1.- Creación de los objetos "en crudo" en la base de datos, es decir registros vacíos únicamente con información de clave 
        primaria.
    2.- Modificación de los objetos creados en el paso 1 con la información de los objetos Offline.
    Parámetros:
    existeObjetoPrincipal: Indica si es preciso crear o no el objeto principal, por ejemplo Pancarta.
    nombreObjetoPrincipal: Por ejemplo Pancarta
    objetoPrincipal: referencia al objeto Offline principal
    nombrePKPrincipal: nombre del atributo de clave primaria del objeto principal
    nombreFKs: array de nombres, en orden respecto al array de objetos secundarios, de los atributos del objeto principal que
    se refieren a objetos secundarios asociados mediante relación con él.
    nombreObjetoSecundario: Por ejemplo EntradaTubo
    objetosSecundarios: Array de referencias a objetos Offline que deberán sincronizarse y asociarse con el objeto principal
    nombrePKSecundario: nombre del atributo de clave primaria del objeto secundario
    NOTA: Recordar que las llamadas en javascript son por valor, incluso aunque lo que se pase sea un objeto
    Ejemplo de llamada: sincronizarModelo("pancarta", pancarta, "codPancarta", new Array("codEntTubSup"), "entradatubo", 
                            new Array(entrada), "codEntTub");  
 */
 function sincronizarModelo(existeObjetoPrincipal, nombreObjetoPrincipal, objetoPrincipal, nombrePKPrincipal, 
                            nombreFKs, nombreObjetoSecundario, objetosSecundarios, nombrePKSecundario) {
    var i; 
	
    if(!existeObjetoPrincipal) {
        //Creación del objeto principal en la BBDD:
        var objetoModelo = eval("crear" + nombreObjetoPrincipal + "()");    		
        //Modificación del objeto recién creado según el objeto pasado como parámetro:
        //Establecemos la clave primaria del objeto Offline, según el valor de clave primaria del objeto Online recién creado
        eval("objetoPrincipal." + nombrePKPrincipal + " = objetoModelo." + nombrePKPrincipal);
    }       
   
    /*
      Creación de objeto secundarios, es decir aquellos que son referenciados por claves foráneas dede el principal. 
      En "clavesForaneas" se guardan los nombres de los atributos del objeto principal que corresponden a claves foráneas 
      que apuntarán a los objetos secundarios que vamos a crear y después modificar con "objetosSecundarios".
      Además el orden de aparición de los nombres de los atributos "clavesForaneas" corresponde con el orden de los objetos en
      "objetosSecundarios". De nuevo puede haber ciertos atributos que no deben modificarse una vez se hayan creado los objetos,
      en este caso recogidos en el array atributosROSecundario.
     */                 
    //Creación y modificación de los objetos secundarios          
    for(i = 0; i < objetosSecundarios.length; i++) {			
        //Creamos el objeto secundario
        var objetoModeloSecundario = eval("crear" + nombreObjetoSecundario + "()");  			
                 
        //Establecemos la clave primaria del objeto Offline, según el valor de clave primaria del objeto Online recién creado
        eval("objetosSecundarios[" + i + "]." + nombrePKSecundario + " = objetoModeloSecundario." + nombrePKSecundario);
 		 
        //Modificamos el objeto secundario para hacer Online el objeto Offline
		/*
		error  en IE "no coinciden los tipos"
		El siguiente eval produce el siguiente resultado: modificarEntradaTubo(objetosSecundarios[0]);
		*/

        eval("modificar" + nombreObjetoSecundario + "(objetosSecundarios[" + i + "])");		
        
        //Establecemos el valor de clave foránea del objeto principal para el correspondiente objeto secundario
        eval("objetoPrincipal." + nombreFKs[i] + " = objetosSecundarios[" + i + "]." + nombrePKSecundario);     
		
    }        
  
    //Modificamos el objeto principal para hacer Online el objeto Offline
    eval("modificar" + nombreObjetoPrincipal + "(objetoPrincipal)");
    //Necesario si queremos manejar el objeto principal desde el código de llamada
    return objetoPrincipal; 
 } 
