// Index a la llista d'items
var _id = 0;

// Tamany del menu
var height, width;

// Posició del menu
var x,y;

// Variable global de listas
var _mMenus = new Array();

// Asigna a la variable menus del documento (nueva creación) el array de listas existentes
document.menus = _mMenus;

// Viewport de visitades i d'actuals
var _ac, _vi;

// Color de la línia, font
// var _colorLinia;
// var _font;

// nomMenu: Nom del menu que s'està creant.
// font: Font per tot el menu. En negreta les llistes
function menu(nomMenu, font, colLinia, imgopen, imgclose, imgdot) {
  this.addItem = _addItem;
  this.addMenu = _addMenu;
  this.write = _write;
  
  this.menus = new Array(); 			// subllistes de l'actual llista
  this.types = new Array(); 			// tipus de les llistes (o items o menus)
  this.strs = new Array();  			// contingut dels strings de l'actual llista
  this.colors = new Array(); 			// color de fons de l'element
  
  this.parent = null;             // Pare de la actual llista
  this.pid = 0;										// id del padre
  this.id = _id;									// id del actual menu
  this.nomMenu = nomMenu;					// Nom del menu, passsat com a paràmetre
  this.vi = _vi;									// Capa de visitades
  this.ac = _ac;									// Capa d'actuals
  this.font = font;								// Font a aplicar, passada com a paràmetre
  this.colorLinia = colLinia;  		// Color de la línia
  
  if (imgopen) this.imgopen=imgopen; else this.imgopen="/imgroot/shim.gif";
  if (imgclose)this.imgclose=imgclose; else this.imgclose="/imgroot/shim.gif";
  if (imgdot) this.imgdot=imgdot; else this.imgdot="/imgroot/shim.gif";
  
  // Afegim a la variable global de llistes existents a la plana el submenu que acabem de crear
  _mMenus[_id++] = this;
}

// Afegeix un item al contingut de la llista
function _addItem(str, color) {
  this.types[this.types.length] = "item";      					// Diem que és un item fulla
  this.strs[this.strs.length] = str;           					// Guardem el string
  if (color) this.colors[this.colors.length] = color; 	// Guardem el color de fons
}

// Afegeix un menu a l'actual
function _addMenu(menu, color) {
  this.menus[this.types.length] = menu ;          			// Afegim el menu passat com a paràmetre a la variable que teníem
  this.types[this.types.length] = "menu";         			// Fixem el tipus com a llista 
  this.strs[this.strs.length] = menu.nomMenu;         	// Fixem el contingut de l'element 
  if (color) this.colors[this.colors.length] = color; 	// Guardem el color de fons
  
  menu.parent = this;                             			// Li diem al menu que el seu pare som nosaltres
  menu.pid = this.id;																		// I també li posem el nostre identificador
}

// Execució de write a través de codi de menu
function executeWrite(id) {
  _mMenus[id].write();
}

// Escriu les planes visitades i actuals
function _write(visitades, actuals) {
	  
  var pad = 3, 							// Espai entre el final de la lletra i el final de la capa
  		contvis="", 					// Contingut de les visitades
  		contact="",   				// Contingut de les actuals
  		alturavisitades=800, 	// Alçada de les visitades
  		alturaactuals=1000;		// Alçada de les actuals
  		
  var vAux = new Array();		// Vector auxiliar
  var mAux;									// Variable menu auxiliar
  var imgvis;								// Variable que diu quina imatge mostrar a les actuals

  // Si ens donen els viewports, llavors els posem
  if (visitades) this.vi = visitades;
  if (actuals) this.ac = actuals;
  
  // Estructuració del contingut de visitades
  mAux = this;
  vAux[vAux.length] = this;
  while (mAux.parent!=null) {
    vAux[vAux.length] = mAux.parent;
    mAux = mAux.parent;
  }

	// Fem el contingut de les visitades
  contvis = '<table border="0" cellpadding="0" cellspacing="2" width="' + (this.vi.getWidth()-pad*2) + '">';
  for (i=vAux.length-1; i >= 0; i--) {
    vAux[i].vi = this.vi;
   	vAux[i].ac = this.ac;
    contvis = contvis + "<tr>";
    
	contvis = contvis + "<td height='16'>";
    contvis = contvis + '<a href="javascript:executeWrite(' + vAux[i].id + ');">';
	contvis = contvis + "<img src='"+this.imgopen+"' border='0'>";
	contvis = contvis + "</a>";
	contvis = contvis + "</td>";
		
    contvis = contvis + "<td width='100%'>";
    contvis = contvis + '<a href="javascript:executeWrite(' + vAux[i].id + ');"><b>' + this.font + vAux[i].nomMenu + '</font></b></a>';
    contvis = contvis + '</td>';
    contvis = contvis + '</tr>';
    contvis = contvis + '<tr>';
    contvis = contvis + '<td colspan=2 bgcolor="'+this.colorLinia+'">';
    contvis = contvis + '<img src="/imgroot/shim.gif" border="0">';
    contvis = contvis + '</td>';
    contvis = contvis + '</tr>';
  }
  contvis = contvis + '</table>';

  // Escribim les visitades
  vis = new Label(contvis);
  vis.setWrap(false);
  vis.setPadding(pad);
  vis.setSize(this.vi.getWidth(), alturavisitades);
  vis.moveTo(this.vi.getX(), this.vi.getY())
  //vis.setBgColor(this.vi.getBgColor());
  this.vi.setContent(vis);
	
  //Estructuració del contingut d'actuals
  contact = '<table border="0" cellpadding="0" cellspacing="0" width="' + (this.ac.getWidth()-pad*2) + '">';
  for(i=0; i<this.types.length; i++) {
		
	// Establim el menu
    if (this.types[i]=="menu") {
      this.menus[i].vi = this.vi;
      this.menus[i].ac = this.ac;
	}
				
	// Comencem la línia
    contact = contact + '<tr bgcolor="'+this.colors[i]+'">';

	// Establim la imatge a mostrar segons si es fulla o branca
	contact = contact + '<td bgcolor="'+this.colors[i]+'" height="16">';
    if (this.types[i]=="menu") {
	    contact = contact + '<a href="javascript:executeWrite(' + this.menus[i].id + ');">';
		contact = contact + "<img src='"+this.imgclose+"' border='0'>";
    	contact = contact + "</a>";
    } else {
		contact = contact + "<img src='"+this.imgdot+"' border='0'>";
    }
	contact = contact + "</td>";
    contact = contact + '<td bgcolor="'+this.colors[i]+'">';
    contact = contact + this.font;

    if (this.types[i]=="menu") {
      contact = contact + '<a href="javascript:executeWrite(' + this.menus[i].id + ');"><b>' + this.font + this.strs[i] + '</font></b></a>';
    } else {
      contact = contact + this.strs[i];
    }

    contact = contact + '</td>';
    contact = contact + '</tr>';
    contact = contact + '<tr>';
    contact = contact + '<td colspan="2" bgcolor="'+this.colorLinia+'">';
    contact = contact + '<img src="/imgroot/shim.gif" border="0">';
    contact = contact + '</td>';
    contact = contact + '</tr>';
	}
    
    contact = contact + '</table>';

    //Escribim les actuals
 	act = new Label(contact);
	act.setWrap(false);
	act.setPadding(pad);
	act.setSize(this.ac.getWidth(), alturaactuals);
	act.moveTo(this.ac.getX(), this.ac.getY())
	
	act.setBgColor(this.ac.getBgColor());
	this.ac.setContent(act);
}