// Javascript code based on the freeware version of Tigra Menu // URL: http://www.softcomplex.com/products/tigra_menu/ // -------------------------------------------------------------------------------- // global collection containing all menus on current page var A_MENUS = []; // -------------------------------------------------------------------------------- // menu class function menu (a_items, a_tpl) { // browser check if (!document.body || !document.body.style) return; // store items structure this.a_config = a_items; // store template structure this.a_tpl = a_tpl; // get menu id this.n_id = -1; // declare collections this.a_index = []; this.a_children = []; // default level scope description structure this.a_tpl_def = { 'block_top' : 16, 'block_left' : 16, 'top' : 20, 'left' : 4, 'width' : 120, 'height' : 22, 'hide_delay' : 0, 'expd_delay' : 0, 'css' : { 'inner' : '', 'outer' : '' } }; // assign methods and properties required to imulate parent item this.getprop = function (s_key) { return this.a_tpl_def[s_key]; }; this.o_root = this; this.n_depth = -1; this.n_x = 0; this.n_y = 0; // Navigation div around menu document.write(''); document.write(''); // register self in global collection A_MENUS[this.n_id] = this; } // -------------------------------------------------------------------------------- // menu item Class function menu_item (o_parent, n_order) { // store parameters passed to the constructor this.n_depth = o_parent.n_depth + 1; this.a_config = o_parent.a_config[n_order + (this.n_depth ? 3 : 0)]; // return if required parameters are missing if (!this.a_config) return; // store info from parent item this.o_root = o_parent.o_root; this.o_parent = o_parent; this.n_order = n_order; // register in global and parent's collections this.n_id = this.o_root.a_index.length; this.o_root.a_index[this.n_id] = this; o_parent.a_children[n_order] = this; // calculate item's coordinates var o_root = this.o_root, a_tpl = this.o_root.a_tpl; // assign methods this.getprop = mitem_getprop; this.getstyle = mitem_getstyle; this.upstatus = mitem_upstatus; this.n_x = n_order ? o_parent.a_children[n_order - 1].n_x + this.getprop('left') : o_parent.n_x + this.getprop('block_left'); this.n_y = n_order ? o_parent.a_children[n_order - 1].n_y + this.getprop('top') : o_parent.n_y + this.getprop('block_top'); if (!this.a_config[2]['act']) strHTML = '
  • ' + this.a_config[0] + '
  • '; else strHTML = '
  • ' + this.a_config[0] + '
  • '; document.write (strHTML); this.e_ielement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'i'); this.e_oelement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o'); this.b_visible = !this.n_depth; // no more initialization if leaf if (this.a_config.length < 4) return; // node specific methods and properties this.a_children = []; // init downline recursively for (var n_order = 0; n_order < this.a_config.length - 3; n_order++) new menu_item(this, n_order); } // -------------------------------------------------------------------------------- // menu root Class function menu_root (o_parent, n_order) { // store parameters passed to the constructor this.n_depth = o_parent.n_depth + 1; this.a_config = o_parent.a_config[n_order + (this.n_depth ? 3 : 0)]; // return if required parameters are missing if (!this.a_config) return; // store info from parent item this.o_root = o_parent.o_root; this.o_parent = o_parent; this.n_order = n_order; // register in global and parent's collections this.n_id = this.o_root.a_index.length; this.o_root.a_index[this.n_id] = this; o_parent.a_children[n_order] = this; // calculate item's coordinates var o_root = this.o_root, a_tpl = this.o_root.a_tpl; // assign methods this.getprop = mitem_getprop; this.getstyle = mitem_getstyle; this.upstatus = mitem_upstatus; this.n_x = n_order ? o_parent.a_children[n_order - 1].n_x + this.getprop('left') : o_parent.n_x + this.getprop('block_left'); this.n_y = n_order ? o_parent.a_children[n_order - 1].n_y + this.getprop('top') : o_parent.n_y + this.getprop('block_top'); strHTML = '' + '' + '' + this.a_config[0] + '' + ''; document.write(strHTML); this.b_visible = !this.n_depth; // MODIFICATION: do not return if leaf: add