// -------------------------------------
// Estrutura do array.
//     [0] - codigo base,
//     [1] - nome base,
//     [2] - array tipo documento (codigo, nome),
//     [3] - array campos (tagXML, paragrafo, significado, array(campos))
//

var _ARRAY_BASE_CODIGO = 0;
var _ARRAY_BASE_NOME = 1;
var _ARRAY_BASE_TIPOS_DOCS = 2;
var _ARRAY_BASE_CAMPOS = 3;

var _ARRAY_TIPO_CODIGO = 0;
var _ARRAY_TIPO_NOME = 1;

var _ARRAY_CAMPO_TAG_XML = 0;
var _ARRAY_CAMPO_PARAGRAFO = 1;
var _ARRAY_CAMPO_SIGNIFICADO = 2;
var _ARRAY_CAMPO_CAMPOS = 3;

var _BASE_DUBLIN_CORE = '0';


<!-- ............................................................ -->
function montaComboBases(id, bases, opcaoTudo, eventoChange) {
    var i = 0;
    var html = "";
    var base;
    
    if (id == "")
        id = "base";
    
    html += "<span id=\"_" + id + "_\"><select id=\"" + id + "\" name=\"" + id + "\"";
    
    if (eventoChange) 
        html += " onchange=\"javascript:" + id + "_onchange(this, '" + id + "')\"";
    html += " class=\"select\">";
    
    if (opcaoTudo)
	    html += "<option value=\"\">Todas</option>";
	else 
	    html += "<option value=\"\">-- Selecione uma Base --</option>";
    
    for (i = 0; i < bases.length; i++) {
        base = bases[i];
        
        if (base[_ARRAY_BASE_CODIGO] != _BASE_DUBLIN_CORE) 
	        html += "<option value=\"" + base[_ARRAY_BASE_CODIGO] + "\">" + base[_ARRAY_BASE_NOME] + "</option>";
    }
    html += "</select></span>";

    return html;
}


<!-- ............................................................ -->
function montaComboTiposDocumentos(id, bases, codBase, opcaoTudo, eventoChange) {
    var i = 0;
    var html = "";
    var base;

    for (i = 0; i < bases.length; i++) {
        base = bases[i];

        if (base[_ARRAY_BASE_CODIGO] == codBase) {
            break;
        }
    }
    
    var tipos = base[_ARRAY_BASE_TIPOS_DOCS];
    var tipo;
    
    if (id == "")
        id = "tipoDocumento";
        
    html = "<span id=\"_" + id + "_\"><select id=\"" + id + "\" name=\"" + id + "\"";
    
    if (eventoChange) 
        html += " onchange=\"javascript:" + id + "_onchange(this, '" + id + "')\"";
    html += " class=\"select\">";
    
    if (opcaoTudo)
	    html += "<option value=\"\">Todos</option>";
    
    if (i < bases.length) {
        for (i = 0; i < tipos.length; i++) {
            tipo = tipos[i];
            
            html += "<option value=\"" + codBase + "@" + tipo[_ARRAY_TIPO_CODIGO] + "\">" + tipo[_ARRAY_TIPO_NOME] + "</option>";
        }
    } 
    html += "</select></span>";

    return html;
}


<!-- ............................................................ -->
function montaComboCampos(id, bases, relacaoCampos, codBase, opcaoTudo, eventoChange, maisMenosCampos) {
    var i = 0;
    var html = "";
    var base;

    for (i = 0; i < bases.length; i++) {
        base = bases[i];
        if (base[_ARRAY_BASE_CODIGO] == codBase) {
            break;
        }
    }
    
    if (id == "")
        id = "campo";
        
    html = "<span id=\"_" + id + "_\"><select id=\"" + id + "\" name=\"" + id + "\"";
    
    if (eventoChange) 
        html += " onchange=\"javascript:" + id + "_onchange(this, '" + id + "')\"";
    html += " class=\"select\">";
    
    if (opcaoTudo)
	    html += "<option value=\"\">Todo o documento</option>";
    
    if (i < bases.length && codBase != '') 
		html += montaOptionCampos(0, relacaoCampos, codBase, base[_ARRAY_BASE_CAMPOS]);
    
    if (maisMenosCampos != "") {
        if (maisMenosCampos == "+")
            html += "<option value=\"+\" class=\"label\">Mais campos...</option>"
        else 
            html += "<option value=\"-\" class=\"label\">Menos campos...</option>"
    }

    html += "</select></span>";

    return html;
}


<!-- ............................................................ -->
function montaOptionCampos(nivel, relacaoCampos, codBase, campos) {
    var i = 0;
    var x = -1;
    var html = "";
    var campo;
    var brancos = "";
    var tamRC = relacaoCampos.length;
    
    for (i = 0; i < nivel; i++) 
    	brancos += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

    for (i = 0; i < campos.length; i++) {
        campo = campos[i];
	
		if (tamRC > 0) {
		    for (x = 0; x < tamRC; x++) {
		        if (relacaoCampos[x] == campo[_ARRAY_CAMPO_PARAGRAFO]) {
		            break;
		        }
		    }
	    }
	    
		if (x < tamRC) {
	        html += "<option value=\"" + codBase + "@" + campo[_ARRAY_CAMPO_PARAGRAFO] + "\">";
	        html += brancos + campo[_ARRAY_CAMPO_SIGNIFICADO] + "</option>";
			
			if (campo[_ARRAY_CAMPO_CAMPOS].length > 0)
				html += montaOptionCampos((nivel + 1), relacaoCampos, codBase, campo[_ARRAY_CAMPO_CAMPOS]);
		}
    }
    return html;
}



// -------------------------------------
// Estrutura do array.
//     [0] - valor do item
//     [1] - titulo do item
//     [2] - nome checkbox
//     [3] - link
//     [4] - aberto ("S"-Aberto)
//     [5] - array com a mesma estrutura
//


<!-- ............................................................ -->
function getArrayArvoreBaseTipoDocumento(bases, checkBoxBase, checkBoxTipoDoc) {
	var i = 0;
	var a = new Array();
	
	for (i = 0; i < bases.length; i++) {
		if (bases[i][_ARRAY_BASE_CODIGO] != _BASE_DUBLIN_CORE) {
			var base = new Array(6);
			base[0] = bases[i][_ARRAY_BASE_CODIGO];
			base[1] = bases[i][_ARRAY_BASE_NOME];
			base[2] = checkBoxBase;
			base[3] = "";
			base[4] = "";
			base[5] = getArrayArvoreItensTiposDocs(bases[i][_ARRAY_BASE_TIPOS_DOCS], checkBoxTipoDoc);
			
			a.push(base);
		}
	}
	
	return a;
}


<!-- ............................................................ -->
function getArrayArvoreItensTiposDocs(tipos, checkBoxTipoDoc) {
	var i = 0;
	var a = new Array();
	
	for (i = 0; i < tipos.length; i++) {
		var tipo = new Array(6);
		tipo[0] = tipos[i][_ARRAY_TIPO_CODIGO];
		tipo[1] = tipos[i][_ARRAY_TIPO_NOME];
		tipo[2] = checkBoxTipoDoc;
		tipo[3] = "";
		tipo[4] = "";
		tipo[5] = new Array();
		
		a.push(tipo);
	}
	
	return a;
}


<!-- ............................................................ -->
function getArrayArvoreBasesCampos(listaBases, bases, checkBoxBase, checkBoxCampo) {
	var i = 0;
	var x = 0;
	var a = new Array();
	
	for (i = 0; i < bases.length; i++) {
		for (x = 0; x < listaBases.length; x++) {
			if (bases[i][_ARRAY_BASE_CODIGO] == listaBases[x]) 
				break;
		}
		
		if (x < listaBases.length) {
			if (bases[i][_ARRAY_BASE_CODIGO] == _BASE_DUBLIN_CORE) 
				titulo = "Todas as Bases";
			else
				titulo = bases[i][_ARRAY_BASE_NOME];
			
			var base = new Array(6);
			base[0] = bases[i][_ARRAY_BASE_CODIGO];
			base[1] = titulo;
			base[2] = checkBoxBase;
			base[3] = "";
			base[4] = "";
			base[5] = getArrayArvoreItensCampos(bases[i][_ARRAY_BASE_CAMPOS], checkBoxCampo);
			
			a.push(base);
		}
	}
	
	return a;
}


<!-- ............................................................ -->
function getArrayArvoreCamposBase(base, bases, checkBoxCampo) {
	var i = 0;
	
	for (i = 0; i < bases.length; i++) {
		if (bases[i][_ARRAY_BASE_CODIGO] == base) 
			break;
	}
	return getArrayArvoreItensCampos(bases[i][_ARRAY_BASE_CAMPOS], checkBoxCampo);
}


<!-- ............................................................ -->
function getArrayArvoreItensCampos(campos, checkBoxCampo) {
	var i = 0;
	var a = new Array();
	var campo 
	
	for (i = 0; i < campos.length; i++) {
		var campo = new Array(6);
		campo[0] = campos[i][_ARRAY_CAMPO_TAG_XML];
		campo[1] = campos[i][_ARRAY_CAMPO_SIGNIFICADO];
		campo[2] = checkBoxCampo;
		campo[3] = "";
		campo[4] = "";
		campo[5] = getArrayArvoreItensCampos(campos[i][_ARRAY_CAMPO_CAMPOS], checkBoxCampo);
		
		a.push(campo);
	}
	
	return a;
}

