var __subgroupCannotBeSelected = "Por favor seleccione una opción del Grupo antes de seleccionar Subgrupo";
var __categoryCannotBeSelected = "Por favor seleccione una opción del Grupo y Subgrupo antes de seleccionar Categoría";

// Controla listas de grupos, subgrupos y categorías de una taxonomía de productos de B2Bportales
// Para su uso es necesario fijar un valor para la variable global _B2B_formaTaxonomia, que haga referencia a la forma que contiene la taxonomía
// Requiere que antes se incluya listasRelacionadas.js
// Supone que se las listas (selects) se llaman grupo, subgrupo y categoria

var subgrupos = new Array()
var categorias = new Array();
var _subgruposCargados = false;
var _categoriasCargadas = false;

function actualizarListaSubgrupos(grupo) {
	var grupoSeleccionado = grupo.options[grupo.selectedIndex].value;
	actualizarListaHijos(grupo, "subgrupo", subgrupos[grupoSeleccionado]);
	if (_B2B_formaTaxonomia.categoria)
		for (var i = _B2B_formaTaxonomia.categoria.options.length -1; i > 0; i--)
			_B2B_formaTaxonomia.categoria.options[i] = null;
	_B2B_formaTaxonomia.subgrupo.selectedIndex = 0;
	if (_B2B_formaTaxonomia.categoria)
		_B2B_formaTaxonomia.categoria.selectedIndex = 0;
}

function actualizarListaCategorias(subgrupo) {
	var grupoSeleccionado = subgrupo.form.grupo.options[subgrupo.form.grupo.selectedIndex].value;
	if (categorias[grupoSeleccionado]) {
		var subgrupoSeleccionado = subgrupo.options[subgrupo.selectedIndex].value;
		actualizarListaHijos(subgrupo, "categoria", categorias[grupoSeleccionado][subgrupoSeleccionado]);
	}
	_B2B_formaTaxonomia.categoria.selectedIndex = 0;
}


var _grupoAActualizar;
var _subgrupoAActualizar;

function actualizarSubgrupoYCategoria(grupo, subgrupo, categoria) {
	for(var i = _B2B_formaTaxonomia.subgrupo.options.length -1; i > 0; i--)
		_B2B_formaTaxonomia.subgrupo.options[i] = null;
	for(var i = _B2B_formaTaxonomia.categoria.options.length -1; i > 0; i--)
		_B2B_formaTaxonomia.categoria.options[i] = null;
	if (!_subgruposCargados) {
		_grupoAActualizar = grupo;
		_subgrupoAActualizar = subgrupo;
		_categoriaAActualizar = categoria;
		actualizarSubgrupoCuandoLleguen();
		return;
	}
	seleccionarEnLista(_B2B_formaTaxonomia.grupo, grupo);
	actualizarListaSubgrupos(_B2B_formaTaxonomia.grupo);
	seleccionarEnLista(_B2B_formaTaxonomia.subgrupo, subgrupo);
	actualizarCategoria(grupo, subgrupo, categoria);
}

function actualizarSubgrupoCuandoLleguen() {
	if (!_subgruposCargados) {
		setTimeout("actualizarSubgrupoCuandoLleguen()", 1000);
		return;
	}
	actualizarSubgrupoYCategoria(_grupoAActualizar, _subgrupoAActualizar, _categoriaAActualizar);
	if ((_B2B_formaTaxonomia.subgrupo.selectedIndex == -1)
			|| (_B2B_formaTaxonomia.subgrupo.options[_B2B_formaTaxonomia.subgrupo.selectedIndex].value == -1))
		actualizarSubgrupoYCategoria(_grupoDefault, _subgrupoDefault);
	_B2B_formaTaxonomia.subgrupo.options[0] = null;
}


function actualizarCategoria(grupo, subgrupo, categoria) {
	if (!_categoriasCargadas) {
		_grupoAActualizar = grupo;
		_subgrupoAActualizar = subgrupo;
		_categoriaAActualizar = categoria;
		actualizarCategoriaCuandoLleguen();
		return;
	}
	actualizarListaCategorias(_B2B_formaTaxonomia.subgrupo);
	seleccionarEnLista(_B2B_formaTaxonomia.categoria, categoria);
}

function actualizarCategoriaCuandoLleguen() {
	if (!__categoriasCargadas) {
		setTimeout("actualizarCategoriaCuandoLleguen()", 1000);
		return;
	}
	actualizarCategoria(_grupoAActualizar, _subgrupoAActualizar, _categoriaAActualizar);
	if ((_B2B_formaTaxonomia.subgrupo.selectedIndex == -1)
			|| (_B2B_formaTaxonomia.subgrupo.options[_B2B_formaTaxonomia.subgrupo.selectedIndex].value == -1))
		actualizarCategoria(_grupoDefault, _subgrupoDefault, _categoriaDefault);
	_B2B_formaTaxonomia.categoria.options[0] = null;
}

function mirarSiPuedeSeleccionarSubgrupo() {
	if (_B2B_formaTaxonomia.grupo.selectedIndex < 1) {
		alert(__subgroupCannotBeSelected);
	}
}

function mirarSiPuedeSeleccionarCategoria() {
	if (_B2B_formaTaxonomia.subgrupo.selectedIndex < 1) {
		alert(__categoryCannotBeSelected);
	}
}


function Subgrupo(id, text) {
	this.id = id;
	this.text = text;
}

function Categoria(id, text) {
	this.id = id;
	this.text = text;
}
