function directory_browser(catid, selid, disabled)
{
	// Retrouver ses petits
	var varname = selid.replace(/_[0-9]*$/, '' );
	var categories = eval(varname);
	var level = parseInt(selid.replace(/^.*_/, '' ));
	var brothers = categories['path'][level-1]['childs'];

	for(var i=0; brothers[i]; i++)
	{
		if(brothers[i]['id'] == catid)
		{
			var category = brothers[i];
			var childs = brothers[i]['childs'];
			break;
		}
	}

	if(categories['path'].length == level)
	{
		// Si sélection d'un niveau supplémentaire alors ajouter au path
		categories['path'].push( category );
	}
	else if(document.getElementById(varname+'_'+level).value == 'NaN')
	{
		// Si une sélection est repassée à NaN retirer du path
		categories['path'].pop();
	}

	// Mettre à jour la valeur dans le formulaire
	var input = document.getElementById(selid.replace(/_[0-9]*$/, '_value'));
	var v = (catid == 'NaN' ? 0 : catid);

	if(v == 0)
	{
		// Si possède parent prendre sa valeur
		var  p = document.getElementById( varname+'_'+(level-1) );
		if(p)
		{
			v = (p.value == 'NaN' ? 0 : p.value);
		}
	}

	input.value = v;

	// Détruire les niveaux inférieurs restants
	var i = 1;
	var sel = document.getElementById( varname+'_'+(level+i) );

	while(sel)
	{
		sel.parentNode.removeChild( sel );
		if(sel.value != 'NaN')
		{
			categories['path'].pop();
		}
		i++;
		sel = document.getElementById( varname+'_'+(level+i) );
	}

	if(category && categories['path'][(categories['path'].length-1)]['id'] != category['category_id'] )
	{
		// Il y avait déjà une sélection mais on change de valeur
		categories['path'].pop();
		categories['path'].push( category );
	}

	// Si aucune sous-catégories ne rien faire de plus
	if(!childs) return;

	// Ajouter le select du niveau innférieur
	var select = document.getElementById( selid );
	var sub_select = document.createElement( 'select' );

	if(disabled) sub_select.setAttribute('disabled', 'disabled');

	sub_select.className = 'input_3';
	sub_select.options[0] = new Option( 'Votre choix', 'NaN' );

	for(var i=0; childs[i]; i++)
	{
		sub_select.options[i+1] = new Option(childs[i]['name'], childs[i]['id']);
	}

	sub_select.id = selid.replace( /_[0-9]*$/, '_'+(categories['path'].length) );
	sub_select.onchange = function() { directory_browser( this.value, this.id ) };
	select.parentNode.appendChild( sub_select );
}
