// 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 = []; // assigh methods and event handlers // this.expand = menu_expand; // this.collapse = menu_collapse; // this.onclick = menu_onclick; // this.onmouseout = menu_onmouseout; // this.onmouseover = menu_onmouseover; // this.onmousedown = menu_onmousedown; // this.root_onclick = root_onclick; // 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('
'); // 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'); var strHTML = '