| 
// Tree Menu class for IE and NS 6+
// Version 1.0
 // copyright (c) 2002 by Carlos Falo Hervás for BiS iNTERACTiVE SL
 
 // Class Definition
 
 TreeMenu = {
 
 initialized : false ,                        // Initialization flag
 levels            : 0 ,                                // Current menu length
 closedimg        : new Image() ,            // Closed Node image
 closedimgs    : new Image() ,            // Closed Node image (sublevel)
 openimg            : new Image() ,            // Open Node image
 openimgs        : new Image() ,            // Open Node image (sublevel)
 blankimg        : new Image() ,            // Blank Node image (only FIRST level)
 options            : [] ,                            // Array for the subelements
 width                : 200 ,                            // Menu total width
 gfxwidth        : 15 ,                            // Icon size (square)
 elemstyle        : "" ,                            // Style name for the texts
 indent            : 0 ,                                // Total indent levels (1 based - 1 => 1 level)
 target            : "_blank" ,                // Destination frame for menu links
 
 // SET_INDENT
 // REQUIRED - defines max menu indentation
 set_indent : function(val) {
 TreeMenu.indent = val ;
 } ,
 
 // SET_TARGET
 // DEFAULTS - Set the target window for the links
 set_target : function(val) {
 TreeMenu.target = val ;
 } ,
 
 // SET_WIDTH:
 // DEFAULTS - defines global width for the menu and the size of icons
 set_width : function(wd,wdg) {
 TreeMenu.width = wd ;
 TreeMenu.gfxwidth = wdg ;
 } ,
 
 // SET_STYLE:
 // REQUIRED - defines text styles... unique for now, 1st level gets BOLD
 set_style : function(estilo) {
 TreeMenu.elemstyle = estilo ;
 } ,
 
 // SET_IMAGES
 // REQUIRED - defines NODE graphics, lines are for now STATIC
 set_images : function(cimg,cimgs,oimg,oimgs,bimg) {
 TreeMenu.closedimg.src = cimg ;
 TreeMenu.closedimgs.src = cimgs ;
 TreeMenu.openimg.src = oimg ;
 TreeMenu.openimgs.src = oimgs ;
 TreeMenu.blankimg.src = bimg ;
 } ,
 
 // ADD_OPTION
 // Adds menu options, VARARGS lvl, sublvl, subsublvl... , value, length
 add_option : function() {
 a = TreeMenu.add_option.arguments ;
 args = a.length ;
 cobj = TreeMenu ;
 for (i=0;i<args-3;i++) {
 cobj = cobj.options[a[i]] ;
 }
 if (cobj.levels == cobj.lg) {
 alert("Error: demasiadas opciones para el nivel " + cobj.valor) ;
 } else {
 cobj.options[cobj.levels] = {} ;
 cobj.options[cobj.levels].valor = a[args-3] ;
 cobj.options[cobj.levels].lg = a[args-2] ;
 cobj.options[cobj.levels].lnk = a[args-1] ;
 cobj.options[cobj.levels].options = [] ;
 cobj.options[cobj.levels].levels = 0 ;
 cobj.options[cobj.levels].closed = 1 ;
 cobj.levels++ ;
 }
 return (cobj.levels) ;
 },
 
 // PRINT_MENU
 // Show the menu on screen on the FIRST level only
 print_menu: function() {
 document.write('<table width="' + TreeMenu.width + '" cellpadding="0" cellspacing="0" border="0">') ;
 size = TreeMenu.width - TreeMenu.indent*TreeMenu.gfxwidth ;
 document.write('<tr><td width="' + TreeMenu.gfxwidth + '"></td><td width="' + TreeMenu.gfxwidth + '"></td><td width="' + size + '"></td></tr>') ;
 for (i=0;i<TreeMenu.levels;i++) {
 document.write('<tr><td align="left" width="' + TreeMenu.gfxwidth + '">') ;
 if (TreeMenu.options[i].lnk=="") lnk = "#" ;
 else lnk = TreeMenu.options[i].lnk + '" target="' + TreeMenu.target ;
 if (TreeMenu.options[i].lg==0) {
 document.write('<img src="' + TreeMenu.blankimg.src + '" alt="" border="0">') ;
 } else {
 document.write('<a href="' + lnk +'" onClick="javascript:menu_action(' + i + ',\'elem' + i + '\');"><img border="0" name="imgelem' + i + '" src="' + TreeMenu.closedimg.src + '" alt="" border="0"></a>') ;
 }
 document.write('</td><td width="99%" colspan="' + TreeMenu.indent + '" align="left">') ;
 document.write('<img border="0" src="/images/menuicon/trans.gif" width="2" height="1">') ;
 document.write('<a href="' + lnk + '" onClick="javascript:menu_action(' + i + ',\'elem' + i + '\');" class="' + TreeMenu.elemstyle + '"><b>' + TreeMenu.options[i].valor+"</b></a>") ;
 document.write('</td></tr>') ;
 if (TreeMenu.options[i].lg!=0) {
 // Place to unfold the menu
 size = TreeMenu.indent + 1 ;
 document.write('<tr><td colspan="' + size + '" id="elem' + i + '"></td></tr>') ;
 }
 }
 document.write('</table>') ;
 }
 } ;
 
 // Interface function to fold/unfold menus:
 
 function menu_action() {
 
 a         = menu_action.arguments ;
 args     = a.length ;
 cobj     = TreeMenu ;
 c         = TreeMenu.indent ;
 prefix = "sub" + a[0] ;
 lng       = [] ;
 
 for (i=0;i<args-2;i++) {
 cobj = cobj.options[a[i]] ;
 if ((cobj.lg-1)==a[i+1]) lng[i] = 0 ;
 else lng[i] = 1 ;
 c-- ;
 prefix += "sub" + a[i+1] ;
 }
 
 elem = a[args-1] ;
 idx = a[args-2] ;
 
 contenido = '<table width="' + TreeMenu.width + '" cellpadding="0" cellspacing="0" border="0">' ;
 if (is.ie) {
 // Internet Explorer
 obj = document.all[elem] ;
 img = document.all["img"+elem] ;
 } else {
 // Netscape Navigator
 if (is.ns5) {
 // Versions 6+
 obj = document.getElementById(elem) ;
 img = document.images["img"+elem] ;
 }
 }
 
 if (obj) {
 if (cobj.options[idx].closed) {
 cobj.options[idx].closed = 0 ;
 if (cobj.options[idx].lg > 0) {
 if (c==TreeMenu.indent) {
 img.src = TreeMenu.openimg.src ;
 } else {
 img.src = TreeMenu.openimgs.src ;
 }
 n = 0 ;
 for (i=0;i<cobj.options[idx].lg;i++) {
 contenido += '<tr><td width="' + TreeMenu.gfxwidth + '">' ;
 for (j=0;j<lng.length;j++) {
 if (lng[j]==1) {
 contenido += '<img src="/images/menuicon/line_b.gif"></td><td width="' + TreeMenu.gfxwidth + '">' ;
 } else {
 contenido += '<img src="/images/menuicon/trans.gif" width="' + TreeMenu.gfxwidth + '" height="1"></td><td width="' + TreeMenu.gfxwidth + '">' ;
 }
 }
 if (i==cobj.options[idx].lg-1) {
 contenido += '<img src="/images/menuicon/line_l.gif" alt="">' ;
 } else {
 contenido += '<img src="/images/menuicon/line_t.gif" alt="">' ;
 }
 contenido += '</td>' ;
 // Now check for this node length
 if (cobj.options[idx].options[i].lnk=="") lnk = "#" ;
 else lnk = cobj.options[idx].options[i].lnk + '" target="' + TreeMenu.target ;
 l = cobj.options[idx].options[i].lg ;
 if (l==0) {
 n = 0 ;
 contenido += '<td colspan="' + c + '" align="left">' ;
 contenido += '<img src="/images/menuicon/trans.gif" width="2" height="1">' ;
 if (lnk=="#") {
 contenido += '<span class="' + TreeMenu.elemstyle + '">' + cobj.options[idx].options[i].valor + '</span></td>' ;
 } else {
 contenido += '<a href="' + lnk + '" class="' + TreeMenu.elemstyle + '">' + cobj.options[idx].options[i].valor + '</a></td>' ;
 }
 } else {
 n = 1 ;
 parms = "" ;
 for (j=0;j<args-1;j++) {
 parms += a[j] + "," ;
 }
 parms += i ;
 contenido += '<td width="' + TreeMenu.gfxwidth + '"><a href="' + lnk + '" onClick="javascript:menu_action(' + parms + ',\'' + prefix + 'elem' + i +'\');"><img border="0" name="img' + prefix + 'elem' + i + '" src="' + TreeMenu.closedimgs.src + '" alt=""></a></td>' ;
 contenido += '<td width="99%" colspan="' + eval(c-1) + '" align="left">' ;
 contenido += '<img src="/images/menuicon/trans.gif" width="2" height="1">' ;
 contenido += '<a href="' + lnk + '" onClick="javascript:menu_action(' + parms + ',\'' + prefix + 'elem' + i +'\');" class="' + TreeMenu.elemstyle + '">' + cobj.options[idx].options[i].valor + '</a></td>' ;
 }
 contenido += '</tr>' ;
 if (n!=0) {
 contenido += '<tr><td id="' + prefix + "elem" + i + '" colspan="' + eval(TreeMenu.indent+1) + '">' ;
 // Must create here the indentation arrays...
 to = TreeMenu ;
 ln = [] ;
 for (m=0;m<args-1;m++) {
 to = to.options[a[m]] ;
 if (m!=args-2) {
 if ((to.lg-1)==a[m+1]) ln[m] = 0 ;
 else ln[m] = 1 ;
 } else {
 if (to.lg-1==i) ln[m] = 0 ;
 else ln[m] = 1 ;
 }
 }
 for (k=0;k<ln.length;k++) {
 if (ln[k]==1) {
 contenido += '<img src="/images/menuicon/line_s.gif">' ;
 } else {
 contenido += '<img src="/images/menuicon/trans.gif" width="' + TreeMenu.gfxwidth + '" height="1">' ;
 }
 }
 contenido += '</td></td></tr>' ;
 }
 }
 contenido += '</table>' ;
 obj.innerHTML = contenido ;
 }
 } else {
 cascade_close(cobj.options[idx]) ;
 // Create dots where needed
 contenido = "" ;
 for (j=0;j<lng.length;j++) {
 if (lng[j]==1) {
 contenido += '<img src="/images/menuicon/line_s.gif">' ;
 } else {
 contenido += '<img src="/images/menuicon/trans.gif" width="' + TreeMenu.gfxwidth + '" height="1">' ;
 }
 }
 obj.innerHTML = contenido ;
 if (c!=TreeMenu.indent) {
 img.src = TreeMenu.closedimgs.src ;
 } else {
 img.src = TreeMenu.closedimg.src ;
 }
 }
 }
 }
 
 // FIXED IE 6.X BUG WITH RECURSIVITY
 function cascade_close(start) {
 var z ;
 for (z=0;z<start.lg;z++) {
 if (start.options[z].lg!=0) cascade_close(start.options[z]) ;
 }
 start.closed = 1 ;
 return ;
 }
 |