<!--
function menuTree(objName) {
  
  this.config = {
  	  target: null,
	  folderLinks: false,
	  useSelection: true,
	  useCookies: true,
	  useLines: false,
	  useIcons: true,
	  useStatusText: true,
	  closeSameLevel: true,
	  inOrder: false
	}

	this.objName = objName;
	this.htmlCode = null; //codi generat a cada moemnt
	this.aNodes = new Array();
	//Cada nivel tiene asociado un texto ANTES del nombre
	this.levelTextDecorations = new Array();
	this.root = new Node(-1);
	this.selectedNode = null;
	this.tableWidth = 140;
	//Array con todos los nodos de nivel 1
	this.levelOne = new Array();
	//Indica el l'ultim node obert. 0 es cap
	this.nodeOpen = 0;
	this.nodeSeparators = new Array();
	
	return this;
};

function Node(id, pid, level, name, url, title, target, icon, iconOpen, open) {

	this.id = id;
	this.pid = pid;
	this.level = level;
	this.name = name;
	this.url = url;
	this.title = title;
	this.target = target;
	this.icon = icon;
	this.iconOpen = iconOpen;
	this._io = open || false; //Indica si es obert
	
	this.subMenuIndex = new Array();
	this._is = false; //Per si està sel·lecionat
	this.show = true; //indica si es mostra o no;

	return this;
};

//Afegeix un Node a l'estructura aNodes del menuTree
menuTree.prototype.add = function(id, pid, level, name, url, title, target, icon, iconOpen, open) {

	this.aNodes[this.aNodes.length] = new Node(id, pid, level, name, url, title, target, icon, iconOpen, open);
	if(pid>0) this.aNodes[pid].subMenuIndex[this.aNodes[pid].subMenuIndex.length] = id;
	if(pid==0 && level==1) this.levelOne[this.levelOne.length] = id;		
};

menuTree.prototype.setNodeSeparators = function(level, separator, emptySeparator)
{
	var lv = (level-1)*2;
	this.nodeSeparators[lv] = separator;
	this.nodeSeparators[lv+1] = emptySeparator;
};

//Muestra un nodo en función de sus parámetros (lastNode fuerza un separador debajo del Ítem)
function buildMenuNode(id, mTree, lastNode)
{
	if(mTree.aNodes[id].show){

		var lv = (mTree.aNodes[id].level-1) * 2;
		//SEPARADORS ENTRE NODES
		if(mTree.nodeSeparators[lv] && (id!=1 || mTree.aNodes[id]._io)) 
						mTree.htmlCode += '<img src="' + mTree.nodeSeparators[lv] + '"><BR>';
		else if(id==1 && mTree.nodeSeparators[lv+1]) mTree.htmlCode += '<img src="' + mTree.nodeSeparators[lv+1] + '"><BR>';
		//IMG. Per si volem mostrar les icones. 
		if(mTree.config.useIcons && mTree.aNodes[id].icon && mTree.aNodes[id].iconOpen && mTree.aNodes[id].subMenuIndex.length>0) //Cal veure que el node tingui icones
		{
				mTree.htmlCode += '<img border=0 class="menutitle_img" src="';
				if(mTree.aNodes[id]._io) mTree.htmlCode += mTree.aNodes[id].iconOpen;
				else mTree.htmlCode += mTree.aNodes[id].icon;
				mTree.htmlCode += '">';
		}
		if(mTree.aNodes[id].level==2 && mTree.aNodes[id].subMenuIndex.length==0) mTree.htmlCode += '<div class="menutitle_img">&nbsp;-&nbsp;</div>';
		////////////////////////////////////////////////////////////////////////////////////////
		//ANCHOR
		mTree.htmlCode += '<a onFocus="this.blur()" href="'; //onFocus per eliminar el recuadre que surt en sel·lecionar un link
		////////////////////////////////////////////////////////////////////////////////////////
		//HREF-TARGET-OnClick.
		if(!mTree.aNodes[id].url || mTree.aNodes[id].url=='_todo') 
			mTree.htmlCode += 'javascript:showSubmenu(\'' + mTree.aNodes[id].id + '\', ' + mTree.objName + ')" ';
		else 
			mTree.htmlCode += mTree.aNodes[id].url + '" target="' + mTree.aNodes[id].target + 
							   '" onClick="showSubmenu(\'' + mTree.aNodes[id].id + '\', ' + mTree.objName + ')" ';
		////////////////////////////////////////////////////////////////////////////////////////
		//CLASS
		mTree.htmlCode += 'class="menutitle_level' + mTree.aNodes[id].level; 
		
		if(mTree.aNodes[id]._io)
			mTree.htmlCode += '_Sel';
		
		/*PARCHE*/
		/*if(mTree.aNodes[id]._io) 
		{
			if(id==4)
				mTree.aNodes[5]._io=true;
			if(id==15)
				mTree.aNodes[16]._io=true;
			if(id==28)
				mTree.aNodes[29]._io=true;
		}*/
		mTree.htmlCode += '">';
		////////////////////////////////////////////////////////////////////////////////////////
		////////////////////////////////////////////////////////////////////////////////////////
		mTree.htmlCode += mTree.levelTextDecorations[mTree.aNodes[id].level]; //Texto antes del nombre
		mTree.htmlCode += mTree.aNodes[id].name + '</a>';
		if( (mTree.nodeSeparators[lv] && mTree.aNodes[id]._io && mTree.aNodes[id].subMenuIndex.length>0) || lastNode) 
					mTree.htmlCode += '<img src="' + mTree.nodeSeparators[lv] + '"><br>';
	}
}

//Muestra el menú teniendo en cuenta los elementos abiertos y seleccionados
menuTree.prototype.buildMenuTree = function()
{
	this.htmlCode = ''; //netejem el codi
	for(var i=0; i<this.levelOne.length; i++) //Recorremos el nivel 1 del menú
	{
		var index = this.levelOne[i];
		buildMenuNode(index, this, (i==this.levelOne.length-1)); //Montamos el Item correspondiente
						
		if(this.aNodes[index]._io && this.aNodes[index].subMenuIndex.length>0) //Si el menú L1 està obert i té Nodes que penjen d'ell
		{
			for(var j=0; j<this.aNodes[index].subMenuIndex.length; j++)
			{
				var nodeIndex = this.aNodes[index].subMenuIndex[j];
				buildMenuNode(nodeIndex, this);
				if(this.aNodes[nodeIndex]._io && this.aNodes[nodeIndex].subMenuIndex.length>0) //Si el menú L2 està obert i te nodes...
				{
					var seleccionado = 0;
					for(var k=0; k<this.aNodes[nodeIndex].subMenuIndex.length; k++)
					{
						if(this.aNodes[this.aNodes[nodeIndex].subMenuIndex[k]]._io)
							seleccionado=k;
							
					}
					
					this.aNodes[this.aNodes[nodeIndex].subMenuIndex[seleccionado]]._io=true;
					for(var k=0; k<this.aNodes[nodeIndex].subMenuIndex.length; k++)
					{
						var nodeIndexB = this.aNodes[nodeIndex].subMenuIndex[k];
						buildMenuNode(nodeIndexB, this);
					}
				}
			}
		}
	}	
	//Per mostrar el contingut només al DIV amb id 'bmt'
	var layer = document.getElementById('bmt');
	if(layer) layer.innerHTML = this.htmlCode;
};

function showSubmenu(id, mTree){
	
	////////////CUTRE PARCHE///////
	//Cerramos todos los nodos del Mateix Nivell o inferiors
	for(var i=0; i<mTree.aNodes.length; i++){
		//Comprovem que l'id no sigui el del Node que ja està sel·leciontat
		//Que el nivell del id sigui superior (mes profund) o igual que el del node seleccionat
		//Que aquest node en concret sigui obert
		if(i!=id && 
		   mTree.aNodes[i].level >= mTree.aNodes[id].level && 
		   mTree.aNodes[i]._io) 
		   	mTree.aNodes[i]._io = false;
	}
	
	switch (id)
	{
		case "4":
			mTree.aNodes[id]._io =true;
			showSubmenu(5,d);
			mTree.buildMenuTree();
		break;
		case "15":
			mTree.aNodes[id]._io =true;
			showSubmenu(16,d);
			mTree.buildMenuTree();
		break;
		case "28":
			mTree.aNodes[id]._io =true;
			showSubmenu(29,d);
			mTree.buildMenuTree();
		break;
		default:
			mTree.aNodes[id]._io = !mTree.aNodes[id]._io;
			mTree.buildMenuTree();
			
	}	
};

function openSubmenu(id, mTree){
	
	mTree.aNodes[id]._io = true;
	var i = mTree.aNodes[id].pid;
	while(i!==0){
		mTree.aNodes[i]._io = true;
		i = mTree.aNodes[i].pid;
	}
	mTree.buildMenuTree();
};
//-->