// Manejo de listas de opciones con arreglos JavaScript

function agregarOpcionCombo(control, opcion) {
	if (document.all) {
		control.add(opcion);
	}
	else {
		control.add(opcion,null);
	}
}

function vaciarCombo(control) {
	for (var q = control.options.length; q >= 0; q--)
		control.options[q] = null;
}

function llenarCombo(control, arreglo, columnaValor, columnaTexto, opcionDefecto, valorDefecto) {
	var myEle;
	var longitud = arreglo.length;
	
	vaciarCombo(control);
	
	if (opcionDefecto && opcionDefecto!="") {
		myEle = document.createElement('option');
		myEle.value = valorDefecto;
		myEle.text = opcionDefecto;
		agregarOpcionCombo(control, myEle);
	}
	
	for (var x = 0; x < longitud; x++) {
		myEle = document.createElement('option');
		myEle.value = arreglo[x][columnaValor];
		myEle.text = arreglo[x][columnaTexto];
		agregarOpcionCombo(control, myEle);
	}
}

function buscarValorAsociadoEnArreglo(arreglo, columnasFiltro, valoresFiltro, columnaValorBuscado) {
	var columnas = columnasFiltro.split("|");
	var valores = valoresFiltro.split("|");
	var longitud = arreglo.length;

	for (var x = 0; x < longitud; x++) {
		if (comprobarFiltro(arreglo[x],columnasFiltro, valoresFiltro)) {
			return arreglo[x][columnaValorBuscado];
		}
	}
	
	return "NO ENCONTRADO";
}

function comprobarFiltro(filaArreglo, columnasFiltro, valoresFiltro) {
	var columnas = columnasFiltro.split("|");
	var valores = valoresFiltro.split("|");
	var valoresLista;

	for (var i=0; i<columnas.length; i++) {
		if (valores[i].indexOf("^")<0) {
			//filtrar por un valor unico
			if (filaArreglo[columnas[i]] != valores[i]) {
				return false;
			}
		}
		else {
			//filtrar por una lista de valores
			valoresLista = valores[i].split("^");
			if (!estaContenidaEnArreglo(valoresLista, filaArreglo[columnas[i]])) {
				return false;
			}
		}
	}
	
	return true;
}

function llenarComboHijo(control, arreglo, columnaValor, columnaTexto, opcionDefecto, valorDefecto, columnasFiltro, valoresFiltro) {
	var myEle;
	var longitud = arreglo.length;

	vaciarCombo(control);
	
	if (valoresFiltro=="")
		return;

	if (opcionDefecto && opcionDefecto!="") {
		myEle = document.createElement('option');
		myEle.value = valorDefecto;
		myEle.text = opcionDefecto;
		agregarOpcionCombo(control, myEle);
	}
	
	for (var x = 0; x < longitud; x++) {
		if (comprobarFiltro(arreglo[x],columnasFiltro, valoresFiltro)) {
			myEle = document.createElement('option');
			myEle.value = arreglo[x][columnaValor];
			myEle.text = arreglo[x][columnaTexto];
			agregarOpcionCombo(control, myEle);
		}
	}
}


function seleccionarOpcion(combo, valorIni) {
	var x;
	var encontrada = false;

	for (x = 0; x < combo.length; x++) {
    if (combo[x].value == valorIni) {
      combo.selectedIndex = x;
			encontrada = true;
      break;
    }
	}
	
	return encontrada;
}

function seleccionarOpcionRadio(radio, valor) {
	var x;
	var encontrada = false;

	for (x = 0; x < radio.length; x++) {
    if (radio[x].value == valor) {
      radio[x].checked = true;
			encontrada = true;
      break;
    }
	}
	
	return encontrada;
}

function obtenerOpcionSeleccionadaRadio(radio) {
	var x;
	var encontrada = false;

	for (x = 0; x < radio.length; x++) {
    if (radio[x].checked == true) {
			encontrada = radio[x];
      break;
    }
	}
	
	return encontrada;
}

function estaOpcionContenidaEnCombo(combo, valor) {
	var x;
	var encontrada = false;

	for (x = 0; x < combo.length; x++) {
    if (combo[x].value == valor) {
			encontrada = true;
      break;
    }
	}
	
	return encontrada;
}

function estaContenidaEnArreglo(arreglo, valor) {
	var encontrada = false;
	
	for (var i=0; i < arreglo.length; i++) {
		if (arreglo[i]==valor) {
			encontrada = true;
			break;
		}
	}
	
	return encontrada;
}

if(typeof Array.prototype.copy=='undefined')
Array.prototype.copy=function(a) {
	var	i=0, b=[];
	for(i;i<this.length;i++)
		b[i]=(typeof this[i].copy!='undefined')?
	this[i].copy():
	this[i];
	return b
};
