Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:54

0001 // Morten's JavaScript Tree Menu
0002 // version 2.3.2-macfriendly, dated 2002-06-10
0003 // http://www.treemenu.com/
0004 
0005 // Copyright (c) 2001-2002, Morten Wang & contributors
0006 // All rights reserved.
0007 
0008 // This software is released under the BSD License which should accompany
0009 // it in the file "COPYING".  If you do not have this file you can access
0010 // the license through the WWW at http://www.treemenu.com/license.txt
0011 
0012 /******************************************************************************
0013 * Define the MenuItem object.                                                 *
0014 ******************************************************************************/
0015 function MTMenuItem(text, url, target, tooltip, icon, openIcon) {
0016         this.text = text;
0017         this.url = url ? url : "";
0018         this.target =  target ? target : (MTMDefaultTarget ? MTMDefaultTarget : "");
0019         this.tooltip = tooltip;
0020         this.icon = icon ? icon : "";
0021         this.openIcon = openIcon ? openIcon : ""; // used for addSubItem
0022 
0023         this.number = MTMNumber++;
0024 
0025         this.parentNode  = null;
0026         this.submenu     = null;
0027         this.expanded    = false;
0028         this.MTMakeSubmenu = MTMakeSubmenu;
0029         this.makeSubmenu = MTMakeSubmenu;
0030         this.addSubItem = MTMAddSubItem;
0031         MTMLastItem = this;
0032 }
0033 
0034 function MTMakeSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
0035         this.submenu = menu;
0036         this.expanded = isExpanded;
0037         this.collapseIcon = collapseIcon ? collapseIcon : "menu_folder_closed.gif";
0038         this.expandIcon = expandIcon ? expandIcon : "menu_folder_open.gif";
0039 
0040         var i;
0041         for(i = 0; i < this.submenu.items.length; i++) {
0042                 this.submenu.items[i].parentNode = this;
0043                 if(this.submenu.items[i].expanded) {
0044                         this.expanded = true;
0045                 }
0046         }
0047 }
0048 
0049 function MTMakeLastSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
0050         this.items[this.items.length-1].makeSubmenu(menu, isExpanded, collapseIcon, expandIcon);
0051 }
0052 
0053 function MTMAddSubItem(item) {
0054         if(this.submenu == null){
0055                 this.MTMakeSubmenu(new MTMenu(), false, this.icon, this.openIcon);
0056         }
0057         this.submenu.MTMAddItem(item);
0058 }
0059 
0060 /******************************************************************************
0061 * Define the Menu object.                                                     *
0062 ******************************************************************************/
0063 
0064 function MTMenu() {
0065         this.items   = new Array();
0066         this.MTMAddItem = MTMAddItem;
0067         this.addItem = MTMAddItem;
0068         this.makeLastSubmenu = MTMakeLastSubmenu;
0069 }
0070 
0071 function MTMAddItem() {
0072         if(arguments[0].toString().indexOf("[object Object]") != -1) {
0073                 this.items[this.items.length] = arguments[0];
0074         } else {
0075                 this.items[this.items.length] = new MTMenuItem(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
0076         }
0077 }
0078 
0079 /******************************************************************************
0080 * Define the icon list, addIcon function and MTMIcon item.                    *
0081 ******************************************************************************/
0082 
0083 function IconList() {
0084         this.items = new Array();
0085         this.addIcon = addIcon;
0086 }
0087 
0088 function addIcon(item) {
0089         this.items[this.items.length] = item;
0090 }
0091 
0092 function MTMIcon(iconfile, match, type) {
0093         this.file = iconfile;
0094         this.match = match;
0095         this.type = type;
0096 }
0097 
0098 /******************************************************************************
0099 * Define the stylesheet rules objects and methods.                            *
0100 ******************************************************************************/
0101 
0102 function MTMstyleRuleSet() {
0103         this.rules = new Array();
0104         this.addRule = MTMaddStyleRule;
0105 }
0106 
0107 function MTMaddStyleRule(thisSelector, thisStyle) {
0108         this.rules[this.rules.length] = new MTMstyleRule(thisSelector, thisStyle);
0109 }
0110 
0111 function MTMstyleRule(thisSelector, thisStyle) {
0112         this.selector = thisSelector;
0113         this.style = thisStyle;
0114 }
0115 
0116 /******************************************************************************
0117 * The MTMBrowser object.  A custom "user agent" that'll define the browser    *
0118 * seen from the menu's point of view.                                         *
0119 ******************************************************************************/
0120 
0121 function MTMBrowser() {
0122         // default properties and values
0123         this.cookieEnabled = false;
0124         this.preHREF = "";
0125         this.MTMable = false;
0126         this.cssEnabled = true;
0127         this.browserType = "other";
0128         this.majVersion = null;
0129         this.DOMable = null;
0130 
0131         // properties concerning output document
0132         this.menuFrame = null;
0133         this.document = null;
0134         this.head = null;
0135         this.menuTable = null;
0136 
0137         // methods
0138         this.setDocument = MTMsetDocument;
0139         this.getFrames = MTMgetFrames;
0140         this.appendElement = MTMappendElement;
0141         this.resolveURL = MTMresolveURL;
0142 
0143         if(navigator.userAgent.indexOf("Opera") != -1) {
0144                 if(navigator.appName == "Opera") {
0145                         this.majVersion = parseInt(navigator.appVersion);
0146                 } else {
0147                         this.majVersion = parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("Opera")+6));
0148                 }
0149                 if(this.majVersion >= 5) {
0150                         this.MTMable = true;
0151                         this.browserType = "O";
0152                 }
0153         } else if(navigator.appName == "Netscape" && navigator.userAgent.indexOf("WebTV") == -1) {
0154                 this.MTMable = true;
0155                 this.browserType = "NN";
0156                 if(parseInt(navigator.appVersion) == 3) {
0157                         this.majVersion = 3;
0158                         this.cssEnabled = false;
0159                 } else if(parseInt(navigator.appVersion) >= 4) {
0160                         this.majVersion = parseInt(navigator.appVersion) == 4 ? 4 : 5;
0161                         if(this.majVersion >= 5) {
0162                                 this.DOMable = true;
0163                         }
0164                 }
0165         } else if(navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) >= 4) {
0166                 this.MTMable = true;
0167                 if(navigator.userAgent.toLowerCase().indexOf("mac") != -1) {
0168                         this.browserType = "NN";
0169                         this.majVersion = 4;
0170                         this.DOMable = false;
0171                 } else {
0172                         this.browserType = "IE";
0173                         this.majVersion = navigator.appVersion.indexOf("MSIE 6.") != -1 ? 6 : (navigator.appVersion.indexOf("MSIE 5.") != -1 ? 5 : 4);
0174                         if(this.majVersion >= 5) {
0175                                 this.DOMable = true;
0176                         }
0177                 }
0178         }
0179         this.preHREF = location.href.substring(0, location.href.lastIndexOf("/") +1)
0180 }
0181 
0182 function MTMsetDocument(menuFrame) {
0183         // called by function MTMgetFrames and sets
0184         // properties .menuFrame and .document, and for DOMable browsers also .head
0185         this.menuFrame = menuFrame;
0186         this.document = menuFrame.document;
0187 
0188         if(this.DOMable) {
0189                 this.head = this.browserType == "IE" ? this.document.all.tags('head')[0] : this.document.getElementsByTagName('head').item(0);
0190         }
0191 }
0192 
0193 function MTMresolveURL(thisURL, testLocal) {
0194         // resolves 'thisURL' against this.preHREF depending on whether it's an absolute
0195         // or relative URL.  if 'testLocal' is set it'll return true for local (relative) URLs.
0196         var absoluteArray = new Array("http://", "https://", "mailto:", "ftp://", "telnet:", "news:", "gopher:", "nntp:", "javascript:", "file:");
0197 
0198         var tempString = "", i;
0199         for(i = 0; i < absoluteArray.length; i++) {
0200                 if(thisURL.indexOf(absoluteArray[i]) == 0) {
0201                         tempString = thisURL;
0202                         break;
0203                 }
0204         }
0205         if(testLocal) {
0206                 return(tempString == "" ? true : false);
0207         }
0208 
0209         if(!tempString) {
0210                 if(thisURL.indexOf("/") == 0) {
0211                         tempString = location.protocol + "//" + location.hostname + thisURL;
0212                 } else if(thisURL.indexOf("../") == 0) {
0213                         tempString = this.preHREF;
0214                         do {
0215                                 thisURL = thisURL.substr(3);
0216                                 tempString = tempString.substr(0, tempString.lastIndexOf("/", tempString.length-2) +1);
0217                         } while(thisURL.indexOf("../") == 0);
0218                         tempString += thisURL;
0219                 } else {
0220                         tempString = this.preHREF + thisURL;
0221                 }
0222         }
0223         return(tempString);
0224 }
0225 
0226 /******************************************************************************
0227 * Default values of all user-configurable options.                            *
0228 ******************************************************************************/
0229 
0230 var MTMLinkedJSURL, MTMLinkedSS, MTMSSHREF, MTMLinkedInitFunction, MTMDOCTYPE, MTMcontentType, MTMHeader, MTMFooter, MTMrightClickMessage, MTMDefaultTarget, MTMTimeOut = 5;
0231 var MTMuseScrollbarCSS, MTMscrollbarBaseColor, MTMscrollbarFaceColor, MTMscrollbarHighlightColor, MTMscrollbarShadowColor, MTMscrollbar3dLightColor, MTMscrollbarArrowColor, MTMscrollbarTrackColor, MTMscrollbarDarkShadowColor;
0232 var MTMUseCookies, MTMCookieName, MTMCookieDays, MTMTrackedCookieName;
0233 var MTMCodeFrame = "code", MTMenuFrame = "menu", MTMTableWidth = "100%", MTMenuImageDirectory = "icons/";
0234 var MTMUseToolTips = true, MTMEmulateWE, MTMAlwaysLinkIfWE = true, MTMSubsGetPlus = "Submenu", MTMSubsAutoClose;
0235 var MTMBackground = "", MTMBGColor = "#ffffff", MTMTextColor = "#000000", MTMLinkColor = "#330099", MTMTrackColor = "#000000", MTMAhoverColor = "#990000", MTMSubExpandColor = "#666699", MTMSubClosedColor = "#666699", MTMSubTextColor = "#000000";
0236 var MTMenuText = "Site contents:", MTMRootIcon = "menu_new_root.gif", MTMRootColor = "#000000";
0237 var MTMRootFont = MTMenuFont = "Arial, Helvetica, sans-serif";
0238 var MTMRootCSSize = MTMenuCSSize = "84%";
0239 var MTMRootFontSize = MTMenuFontSize = "-1";
0240 
0241 /******************************************************************************
0242 * Global variables.  Not to be altered unless you know what you're doing.     *
0243 * User-configurable options are found in code.html                            *
0244 ******************************************************************************/
0245 
0246 var MTMLoaded = false;
0247 var MTMLevel;
0248 var MTMBar = new Array();
0249 var MTMIndices = new Array();
0250 
0251 var MTMUA = new MTMBrowser();
0252 
0253 var MTMExtraCSS = new MTMstyleRuleSet();
0254 var MTMstyleRules;
0255 
0256 var MTMLastItem; // last item added to a menu
0257 var MTMClickedItem = false;
0258 var MTMExpansion = false;
0259 
0260 var MTMNumber = 1;
0261 var MTMTrackedItem;
0262 var MTMTrack = false;
0263 var MTMFrameNames;
0264 
0265 var MTMFirstRun = true;
0266 var MTMCurrentTime = 0;
0267 var MTMUpdating = false;
0268 var MTMWinSize, MTMyval, MTMxval;
0269 var MTMOutputString = "";
0270 
0271 var MTMCookieString = "";
0272 var MTMCookieCharNum = 0;
0273 var MTMTCArray, MTMTrackedCookie;
0274 
0275 /******************************************************************************
0276 * Code that picks up frame names of frames in the parent frameset.            *
0277 ******************************************************************************/
0278 
0279 function MTMgetFrames() {
0280         if(this.MTMable) {
0281                 MTMFrameNames = new Array();
0282                 for(i = 0; i < parent.frames.length; i++) {
0283                         MTMFrameNames[i] = parent.frames[i].name;
0284                         if(parent.frames[i].name == MTMenuFrame) {
0285                                 this.setDocument(parent.frames[i]);
0286                         }
0287                 }
0288         }
0289 }
0290 
0291 /******************************************************************************
0292 * Functions to draw the menu.                                                 *
0293 ******************************************************************************/
0294 
0295 function MTMSubAction(SubItem) {
0296 
0297         SubItem.expanded = (SubItem.expanded) ? false : true;
0298         if(SubItem.expanded) {
0299                 MTMExpansion = true;
0300         }
0301 
0302         MTMClickedItem = SubItem;
0303 
0304         if(MTMTrackedItem && MTMTrackedItem != SubItem.number) {
0305                 MTMTrackedItem = false;
0306         }
0307 
0308         if(MTMEmulateWE || SubItem.url == "" || !SubItem.expanded) {
0309                 setTimeout("MTMDisplayMenu()", 10);
0310                 return false;
0311         } else {
0312                 if(SubItem.target == "_blank" || !MTMUA.resolveURL(SubItem.url, true) || (SubItem.target.indexOf("_") != 0 && MTMTrackTarget(SubItem.target) == false)) {
0313                         setTimeout("MTMDisplayMenu()", 10);
0314                 }
0315                 return true;
0316         }
0317 }
0318 
0319 function MTMStartMenu(thisEvent) {
0320         if(MTMUA.browserType == "O" && MTMUA.majVersion == 5) {
0321                 parent.onload = MTMStartMenu;
0322                 if(thisEvent) {
0323                         return;
0324                 }
0325         }
0326         MTMLoaded = true;
0327         if(MTMFirstRun) {
0328                 if(MTMCurrentTime++ == MTMTimeOut) { // notice the post-increment
0329                         setTimeout("MTMDisplayMenu()",10);
0330                 } else {
0331                         setTimeout("MTMStartMenu()",100);
0332                 }
0333         } 
0334 }
0335 
0336 function MTMDisplayMenu() {
0337         if(MTMUA.MTMable && !MTMUpdating) {
0338                 MTMUpdating = true;
0339                 MTMLevel = 0;
0340 
0341                 if(MTMFirstRun) {
0342                         MTMUA.getFrames();
0343 
0344                         if(MTMUseCookies) { 
0345                                 MTMFetchCookies();
0346                                 if(MTMTrackedCookie) {
0347                                         MTMTCArray = MTMTrackedCookie.split("::");
0348                                         MTMTrackedItem = MTMTCArray[0];
0349                                         if(parent.frames[MTMTCArray[1]]) {
0350                                                 parent.frames[MTMTCArray[1]].location = MTMTCArray[2];
0351                                         }
0352                                         MTMTCArray = null;
0353                                 }
0354                         }
0355                 }
0356                 if(MTMTrack) { MTMTrackedItem = MTMTrackExpand(menu); }
0357 
0358                 if(MTMExpansion && MTMSubsAutoClose) { MTMCloseSubs(menu); }
0359 
0360                 if(MTMUA.DOMable) {
0361                         if(MTMFirstRun) {
0362                                 MTMinitializeDOMDocument();
0363                         }
0364                 } else if(MTMFirstRun || MTMUA.browserType != "IE") {
0365                         MTMUA.document.open("text/html", "replace");
0366                         MTMOutputString = (MTMDOCTYPE ? (MTMDOCTYPE + "\n") : '') + "<html><head>\n";
0367                         if(MTMcontentType) {
0368                                 MTMOutputString += '<meta http-equiv="Content-Type" content="' + MTMcontentType + '">\n';
0369                         }
0370                         if(MTMLinkedSS) {
0371                                 MTMOutputString += '<link rel="stylesheet" type="text/css" href="' + MTMUA.preHREF + MTMSSHREF + '">\n';
0372                         } else {
0373                                 MTMUA.document.writeln(MTMOutputString);
0374                                 MTMOutputString = "";
0375                                 MTMcreateStyleSheet();
0376                         }
0377                         if(MTMUA.browserType == "IE" && MTMrightClickMessage) {
0378                                 MTMOutputString += '<scr' + 'ipt type="text/javascript">\nfunction MTMcatchRight() {\nif(event && (event.button == 2 || event.button == 3)) {\nalert("' + MTMrightClickMessage + '");\nreturn false;\n}\nreturn true;\n}\n\ndocument.onmousedown = MTMcatchRight;\n';
0379                                 MTMOutputString += '<\/scr' + 'ipt>\n';
0380                         }
0381                         MTMOutputString += '</head>\n<body ';
0382                         if(MTMBackground != "") {
0383                                 MTMOutputString += 'background="' + MTMUA.preHREF + MTMenuImageDirectory + MTMBackground + '" ';
0384                         }
0385                         MTMOutputString += 'bgcolor="' + MTMBGColor + '" text="' + MTMTextColor + '" link="' + MTMLinkColor + '" vlink="' + MTMLinkColor + '" alink="' + MTMLinkColor + '">\n';
0386                         MTMUA.document.writeln(MTMOutputString + (MTMHeader ? MTMHeader : "") + '\n<table border="0" cellpadding="0" cellspacing="0" width="' + MTMTableWidth + '" id="mtmtable">\n');
0387                 }
0388 
0389                 if(!MTMFirstRun && (MTMUA.DOMable || MTMUA.browserType == "IE")) {
0390                         if(!MTMUA.menuTable) {
0391                                 MTMUA.menuTable = MTMUA.document.all('mtmtable');
0392                         }
0393 
0394                         while(MTMUA.menuTable.rows.length > 1) {
0395                                 MTMUA.menuTable.deleteRow(1);
0396                         }
0397                 }
0398 
0399                 MTMOutputString = '<img src="' + MTMUA.preHREF + MTMenuImageDirectory + MTMRootIcon + '" align="left" border="0" vspace="0" hspace="0">';
0400                 if(MTMUA.cssEnabled) {
0401                         MTMOutputString += '<span id="root">&nbsp;' + MTMenuText + '</span>';
0402                 } else {
0403                         MTMOutputString += '<font size="' + MTMRootFontSize + '" face="' + MTMRootFont + '" color="' + MTMRootColor + '">' + MTMenuText + '</font>';
0404                 }
0405                 if(MTMFirstRun || (!MTMUA.DOMable && MTMUA.browserType != "IE")) {
0406                         MTMAddCell(MTMOutputString);
0407                 }
0408 
0409                 MTMListItems(menu);
0410 
0411                 if(!MTMUA.DOMable && (MTMFirstRun || MTMUA.browserType != "IE")) {
0412                         MTMUA.document.writeln('</table>\n' + (MTMFooter ? MTMFooter : "") + '\n');
0413                         if(MTMLinkedJSURL && MTMUA.browserType != "IE") {
0414                                 MTMUA.document.writeln('<scr' + 'ipt defer type="text/javascript" src="' + MTMUA.preHREF + MTMLinkedJSURL + '"></scr' + 'ipt>');
0415                         }
0416                         MTMUA.document.writeln('\n</body>\n</html>');
0417                         MTMUA.document.close();
0418                 }
0419 
0420                 if((MTMClickedItem || MTMTrackedItem) && !(MTMUA.browserType == "NN" && MTMUA.majVersion == 3)) {
0421                         MTMItemName = "sub" + (MTMClickedItem ? MTMClickedItem.number : MTMTrackedItem);
0422                         if(document.layers && MTMUA.menuFrame.scrollbars) {
0423                                 var i;
0424                                 for(i = 0; i < MTMUA.document.anchors.length; i++) {
0425                                         if(MTMUA.document.links[i].name == MTMItemName) {
0426                                                 MTMyval = MTMUA.document.links[i].y;
0427                                                 MTMUA.document.links[i].focus();
0428                                                 break;
0429                                         }
0430                                 }
0431                                 MTMWinSize = MTMUA.menuFrame.innerHeight;
0432                         } else if(MTMUA.browserType != "O") {
0433                                 if(MTMUA.browserType == "NN" && MTMUA.majVersion == 5) {
0434                                         MTMUA.document.all = MTMUA.document.getElementsByTagName("*");
0435                                 }
0436                                 MTMyval = MTMGetYPos(MTMUA.document.all[MTMItemName]);
0437                                 MTMUA.document.all[MTMItemName].focus();
0438                                 MTMWinSize = MTMUA.browserType == "IE" ? MTMUA.document.body.offsetHeight : MTMUA.menuFrame.innerHeight;
0439                         }
0440                         if(MTMyval > (MTMWinSize - 60)) {
0441                                 MTMUA.menuFrame.scrollTo(0, parseInt(MTMyval - (MTMWinSize * 1/3)));
0442                         }
0443                 }
0444 
0445                 if(!MTMFirstRun && MTMUA.cookieEnabled) { 
0446                         if(MTMCookieString != "") {
0447                                 setCookie(MTMCookieName, MTMCookieString.substring(0,4000), MTMCookieDays);
0448                                 if(MTMTrackedCookieName) {
0449                                         if(MTMTCArray) {
0450                                                 setCookie(MTMTrackedCookieName, MTMTCArray.join("::"), MTMCookieDays);
0451                                         } else {
0452                                                 setCookie(MTMTrackedCookieName, "", -1);
0453                                         }
0454                                 }
0455                         } else {
0456                                 setCookie(MTMCookieName, "", -1);
0457                         }
0458                 }
0459                 if(MTMLinkedJSURL && MTMLinkedInitFunction && !(MTMUA.browserType == "IE" && MTMUA.majVersion == 4)) {
0460                         setTimeout('MTMUA.menuFrame.' + MTMLinkedInitFunction + '()', 10);
0461                 }
0462 
0463                 MTMFirstRun = false;
0464                 MTMClickedItem = false;
0465                 MTMExpansion = false;
0466                 MTMTrack = false;
0467                 MTMCookieString = "";
0468         }
0469 MTMUpdating = false;
0470 }
0471 
0472 function MTMinitializeDOMDocument() {
0473         var newElement;
0474         if(MTMcontentType) {
0475                 MTMUA.appendElement('head', 'meta', 'httpEquiv', 'Content-Type', 'content', MTMcontentType);
0476         }
0477         MTMdisableStyleSheets();
0478 
0479         if(MTMLinkedSS) {
0480                 MTMUA.appendElement('head', 'link', 'rel', 'stylesheet', 'type', 'text/css', 'href', (MTMUA.preHREF + MTMSSHREF));
0481         } else {
0482                 MTMcreateStyleSheet();
0483         }
0484         if(MTMLinkedJSURL) {
0485                 MTMUA.appendElement('head', 'script', 'src', (MTMUA.preHREF + MTMLinkedJSURL), 'type', 'text/javascript', 'defer', true);
0486         }
0487         while(MTMUA.document.body.childNodes.length > 0) {
0488                 MTMUA.document.body.removeChild(MTMUA.document.body.firstChild);
0489         }
0490 
0491         if(MTMHeader) {
0492                 if(MTMUA.browserType == "IE") {
0493                         MTMUA.document.body.insertAdjacentHTML("afterBegin", MTMHeader);
0494                 } else {
0495                         var myRange = MTMUA.document.createRange();
0496                         myRange.setStart(MTMUA.document.body, 0);
0497                         var parsedHTML = myRange.createContextualFragment(MTMHeader);
0498                         MTMUA.document.body.appendChild(parsedHTML);
0499                 }
0500         }
0501         MTMUA.appendElement('body', 'table', 'border', '0', 'cellPadding', '0', 'cellSpacing', '0', 'width', MTMTableWidth, 'id', 'mtmtable');
0502         MTMUA.menuTable = MTMUA.document.getElementById('mtmtable');
0503         if(MTMFooter) {
0504                 if(MTMUA.browserType == "IE") {
0505                         MTMUA.document.body.insertAdjacentHTML("beforeEnd", MTMFooter);
0506                 } else {
0507                         var myRange = MTMUA.document.createRange();
0508                         myRange.setStart(MTMUA.document.body, 0);
0509                         var parsedHTML = myRange.createContextualFragment(MTMFooter);
0510                         MTMUA.document.body.appendChild(parsedHTML);
0511                 }
0512         }
0513 }
0514 
0515 function MTMappendElement() {
0516         var newElement = this.document.createElement(arguments[1]);
0517         var j, newProperty;
0518         for(j = 2; j < arguments.length; j+=2) {
0519                 newElement.setAttribute(arguments[j], arguments[j+1]);
0520         }
0521         if(arguments[0] == 'head') {
0522                 this.head.appendChild(newElement);
0523         } else if(arguments[0] == 'body') {
0524                 this.document.body.appendChild(newElement);
0525         }
0526 }
0527 
0528 function MTMListItems(menu) {
0529         var i, isLast;
0530         for (i = 0; i < menu.items.length; i++) {
0531                 MTMIndices[MTMLevel] = i;
0532                 isLast = (i == menu.items.length -1);
0533                 MTMDisplayItem(menu.items[i], isLast);
0534 
0535                 if(menu.items[i].submenu && menu.items[i].expanded) {
0536                         MTMBar[MTMLevel] = (isLast) ? false : true;
0537                         MTMLevel++;
0538                         MTMListItems(menu.items[i].submenu);
0539                         MTMLevel--;
0540                 } else {
0541                         MTMBar[MTMLevel] = false;
0542                 } 
0543         }
0544 }
0545 
0546 function MTMDisplayItem(item, last) {
0547         var i, img, subNoLink;
0548 
0549         var MTMfrm = "parent.frames['" + MTMCodeFrame + "']";
0550         var MTMref = '.menu.items[' + MTMIndices[0] + ']';
0551 
0552         if(MTMLevel > 0) {
0553                 for(i = 1; i <= MTMLevel; i++) {
0554                         MTMref += ".submenu.items[" + MTMIndices[i] + "]";
0555                 }
0556         }
0557 
0558         if(MTMUA.cookieEnabled) {
0559                 if(MTMFirstRun && MTMCookieString != "") {
0560                         item.expanded = (MTMCookieString.charAt(MTMCookieCharNum++) == "1") ? true : false;
0561                 } else {
0562                         MTMCookieString += (item.expanded) ? "1" : "0";
0563                 }
0564         }
0565 
0566         if(item.submenu) {
0567                 var usePlusMinus = false;
0568                 if(MTMSubsGetPlus.toLowerCase() == "always" || MTMEmulateWE) {
0569                         usePlusMinus = true;
0570                 } else if(MTMSubsGetPlus.toLowerCase() == "submenu") {
0571                         for(i = 0; i < item.submenu.items.length; i++) {
0572                                 if(item.submenu.items[i].submenu) {
0573                                         usePlusMinus = true; break;
0574                                 }
0575                         }
0576                 }
0577 
0578                 var MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ");";
0579                 var MTMouseOverCmd = "parent.status='" + (item.expanded ? "Collapse " : "Expand ") + (item.text.indexOf("'") != -1 ? MTMEscapeQuotes(item.text) : item.text) + "';return true;";
0580                 var MTMouseOutCmd = "parent.status=parent.defaultStatus;return true;";
0581         }
0582 
0583         MTMOutputString = "";
0584         if(MTMLevel > 0) {
0585                 for (i = 0; i < MTMLevel; i++) {
0586                         MTMOutputString += (MTMBar[i]) ? MTMakeImage("menu_bar.gif") : MTMakeImage("menu_pixel.gif");
0587                 }
0588         }
0589 
0590         if(item.submenu && usePlusMinus) {
0591                 if(item.url == "") {
0592                         MTMOutputString += MTMakeLink(item, true, true, true, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
0593                 } else {
0594                         if(MTMEmulateWE) {
0595                                 MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
0596                         } else {
0597                                 if(!item.expanded) {
0598                                         MTMOutputString += MTMakeLink(item, false, true, true, MTMClickCmd);
0599                                 } else {
0600                                         MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
0601                                 }
0602                         }
0603                 }
0604 
0605                 if(item.expanded) {
0606                         img = (last) ? "menu_corner_minus.gif" : "menu_tee_minus.gif";
0607                 } else {
0608                         img = (last) ? "menu_corner_plus.gif" : "menu_tee_plus.gif";
0609                 }
0610         } else {
0611                 img = (last) ? "menu_corner.gif" : "menu_tee.gif";
0612         }
0613         MTMOutputString += MTMakeImage(img);
0614 
0615         if(item.submenu) {
0616                 if(MTMEmulateWE) {
0617                         if(item.url != "") {
0618                                 MTMOutputString += '</a>' + MTMakeLink(item, false, false, true);
0619                         } else if(!MTMAlwaysLinkIfWE) {
0620                                 subNoLink = true;
0621                                 MTMOutputString += '</a><span class="subtext">';
0622                         }
0623                 } else if(!usePlusMinus) {
0624                         if(item.url == "") {
0625                                 MTMOutputString += MTMakeLink(item, true, true, true, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
0626                         } else if(!item.expanded) {
0627                                 MTMOutputString += MTMakeLink(item, false, true, true, MTMClickCmd);
0628                         } else {
0629                                 MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
0630                         }
0631                 }
0632 
0633                 img = (item.expanded) ? item.expandIcon : item.collapseIcon;
0634         } else {
0635                 MTMOutputString += MTMakeLink(item, false, true, true);
0636                 img = (item.icon != "") ? item.icon : MTMFetchIcon(item.url);
0637         }
0638 
0639         MTMOutputString += MTMakeImage(img);
0640 
0641         if(item.submenu && item.url != "" && item.expanded && !MTMEmulateWE) {
0642                 MTMOutputString += '</a>' + MTMakeLink(item, false, false, true);
0643         }
0644 
0645         if(MTMUA.browserType == "NN" && MTMUA.majVersion == 3 && !MTMLinkedSS) {
0646                 var stringColor;
0647                 if(item.submenu && (item.url == "") && (item.number == MTMClickedItem.number)) {
0648                         stringColor = (item.expanded) ? MTMSubExpandColor : MTMSubClosedColor;
0649                 } else if(MTMTrackedItem && MTMTrackedItem == item.number) {
0650                         stringColor = MTMTrackColor;
0651                 } else {
0652                         stringColor = MTMLinkColor;
0653                 }
0654                 MTMOutputString += '<font color="' + stringColor + '" size="' + MTMenuFontSize + '" face="' + MTMenuFont + '">';
0655         }
0656         MTMOutputString += '&nbsp;' + item.text + ((MTMUA.browserType == "NN" && MTMUA.majVersion == 3 && !MTMLinkedSS) ? '</font>' : '');
0657         MTMOutputString += subNoLink ? '</span>' : '</a>';
0658         MTMAddCell(MTMOutputString);
0659 }
0660 
0661 function MTMEscapeQuotes(myString) {
0662         var newString = "";
0663         var cur_pos = myString.indexOf("'");
0664         var prev_pos = 0;
0665         while (cur_pos != -1) {
0666                 if(cur_pos == 0) {
0667                         newString += "\\";
0668                 } else if(myString.charAt(cur_pos-1) != "\\") {
0669                         newString += myString.substring(prev_pos, cur_pos) + "\\";
0670                 } else if(myString.charAt(cur_pos-1) == "\\") {
0671                         newString += myString.substring(prev_pos, cur_pos);
0672                 }
0673                 prev_pos = cur_pos++;
0674                 cur_pos = myString.indexOf("'", cur_pos);
0675         }
0676         return(newString + myString.substring(prev_pos, myString.length));
0677 }
0678 
0679 function MTMTrackExpand(thisMenu) {
0680         var i, targetPath, targetLocation;
0681         var foundNumber = false;
0682         for(i = 0; i < thisMenu.items.length; i++) {
0683                 if(thisMenu.items[i].url != "" && MTMTrackTarget(thisMenu.items[i].target)) {
0684                         targetLocation = parent.frames[thisMenu.items[i].target].location;
0685                         targetHREF = targetLocation.href;
0686                         if(targetHREF.indexOf("#") != -1) {
0687                                 targetHREF = targetHREF.substr(0, targetHREF.indexOf("#"));
0688                         }
0689                         if(MTMUA.browserType == "IE" && targetLocation.protocol == "file:") {
0690                                 var regExp = /\\/g;
0691                                 targetHREF = targetHREF.replace(regExp, "\/");
0692                         }
0693                         if(targetHREF == MTMUA.resolveURL(thisMenu.items[i].url)) {
0694                                 return(thisMenu.items[i].number);
0695                         }
0696                 }
0697                 if(thisMenu.items[i].submenu) {
0698                         foundNumber = MTMTrackExpand(thisMenu.items[i].submenu);
0699                         if(foundNumber) {
0700                                 if(!thisMenu.items[i].expanded) {
0701                                         thisMenu.items[i].expanded = true;
0702                                         if(!MTMClickedItem) { MTMClickedItem = thisMenu.items[i]; }
0703                                         MTMExpansion = true;
0704                                 }
0705                                 return(foundNumber);
0706                         }
0707                 }
0708         }
0709 return(foundNumber);
0710 }
0711 
0712 function MTMCloseSubs(thisMenu) {
0713         var i, j;
0714         var foundMatch = false;
0715         for(i = 0; i < thisMenu.items.length; i++) {
0716                 if(thisMenu.items[i].submenu && thisMenu.items[i].expanded) {
0717                         if(thisMenu.items[i].number == MTMClickedItem.number) {
0718                                 foundMatch = true;
0719                                 for(j = 0; j < thisMenu.items[i].submenu.items.length; j++) {
0720                                         if(thisMenu.items[i].submenu.items[j].expanded) {
0721                                                 thisMenu.items[i].submenu.items[j].expanded = false;
0722                                         }
0723                                 }
0724                         } else {
0725                                 if(foundMatch) {
0726                                         thisMenu.items[i].expanded = false; 
0727                                 } else {
0728                                         foundMatch = MTMCloseSubs(thisMenu.items[i].submenu);
0729                                         if(!foundMatch) {
0730                                                 thisMenu.items[i].expanded = false;
0731                                         }
0732                                 }
0733                         }
0734                 }
0735         }
0736         return(foundMatch);
0737 }
0738 
0739 function MTMFetchIcon(testString) {
0740         var i;
0741         for(i = 0; i < MTMIconList.items.length; i++) {
0742                 if((MTMIconList.items[i].type == 'any') && (testString.indexOf(MTMIconList.items[i].match) != -1)) {
0743                         return(MTMIconList.items[i].file);
0744                 } else if((MTMIconList.items[i].type == 'pre') && (testString.indexOf(MTMIconList.items[i].match) == 0)) {
0745                         return(MTMIconList.items[i].file);
0746                 } else if((MTMIconList.items[i].type == 'post') && (testString.indexOf(MTMIconList.items[i].match) != -1)) {
0747                         if((testString.lastIndexOf(MTMIconList.items[i].match) + MTMIconList.items[i].match.length) == testString.length) {
0748                                 return(MTMIconList.items[i].file);
0749                         }
0750                 }
0751         }
0752         return("menu_link_default.gif");
0753 }
0754 
0755 function MTMGetYPos(myObj) {
0756         return(myObj.offsetTop + ((myObj.offsetParent) ? MTMGetYPos(myObj.offsetParent) : 0));
0757 }
0758 
0759 function MTMakeLink(thisItem, voidURL, addName, addTitle, clickEvent, mouseOverEvent, mouseOutEvent) {
0760         var tempString = '<a href="' + (voidURL ? 'javascript:;' : MTMUA.resolveURL(thisItem.url)) + '" ';
0761         if(MTMUseToolTips && addTitle && thisItem.tooltip) {
0762                 tempString += 'title="' + thisItem.tooltip + '" ';
0763         }
0764         if(addName) {
0765                 tempString += 'name="sub' + thisItem.number + '" ';
0766         }
0767         if(clickEvent) {
0768                 tempString += 'onclick="' + clickEvent + '" ';
0769         }
0770         if(mouseOverEvent && mouseOverEvent != "") {
0771                 tempString += 'onmouseover="' + mouseOverEvent + '" ';
0772         }
0773         if(mouseOutEvent && mouseOutEvent != "") {
0774                 tempString += 'onmouseout="' + mouseOutEvent + '" ';
0775         }
0776         if(thisItem.submenu && MTMClickedItem && thisItem.number == MTMClickedItem.number) {
0777                 tempString += 'class="' + (thisItem.expanded ? "subexpanded" : "subclosed") + '" ';
0778         } else if(MTMTrackedItem && thisItem.number == MTMTrackedItem) {
0779                 if(MTMTrackedCookieName) {
0780                         MTMTCArray = new Array(thisItem.number, thisItem.target, thisItem.url);
0781                 }
0782                 tempString += 'class="tracked"';
0783         }
0784         if(thisItem.target != "") {
0785                 tempString += 'target="' + thisItem.target + '" ';
0786         }
0787         return(tempString + '>');
0788 }
0789 
0790 function MTMakeImage(thisImage) {
0791         return('<img src="' + MTMUA.preHREF + MTMenuImageDirectory + thisImage + '" align="left" border="0" vspace="0" hspace="0" width="18" height="18">');
0792 }
0793 
0794 function MTMakeSVG(thisImage) {
0795         return('<object type="image/svg+xml" data="' + thisImage + '" NAME="Main" width="18" height="18" ><\/object>');
0796 }
0797 
0798 function MTMTrackTarget(thisTarget) {
0799         if(thisTarget.charAt(0) == "_") {
0800                 return false;
0801         } else {
0802                 for(i = 0; i < MTMFrameNames.length; i++) {
0803                         if(thisTarget == MTMFrameNames[i]) {
0804                                 return true;
0805                         }
0806                 }
0807         }
0808         return false;
0809 }
0810 
0811 function MTMAddCell(thisHTML) {
0812         if(MTMUA.DOMable || (MTMUA.browserType == "IE" && !MTMFirstRun)) {
0813                 var myRow = MTMUA.menuTable.insertRow(MTMUA.menuTable.rows.length);
0814                 myRow.vAlign = "top";
0815                 var myCell = myRow.insertCell(myRow.cells.length);
0816                 myCell.noWrap = true;
0817                 myCell.innerHTML = thisHTML;
0818         } else {
0819                 MTMUA.document.writeln('<tr valign="top"><td nowrap>' + thisHTML + '<\/td><\/tr>');
0820         }
0821 }
0822 
0823 function MTMcreateStyleSheet() {
0824         var i;
0825 
0826         if(!MTMstyleRules) {
0827                 MTMstyleRules = new MTMstyleRuleSet();
0828                 with(MTMstyleRules) {
0829                         addRule('body', 'color:' + MTMTextColor + ';');
0830                         if(MTMuseScrollbarCSS && MTMUA.browserType != "NN") {
0831                                 addRule('body', 'scrollbar-3dlight-color:' + MTMscrollbar3dLightColor + ';scrollbar-arrow-color:' + MTMscrollbarArrowColor + ';scrollbar-base-color:' + MTMscrollbarBaseColor + ';scrollbar-darkshadow-color:' + MTMscrollbarDarkShadowColor + ';scrollbar-face-color:' + MTMscrollbarFaceColor + ';scrollbar-highlight-color:' + MTMscrollbarHighlightColor + ';scrollbar-shadow-color:' + MTMscrollbarShadowColor + ';scrollbar-track-color:' + MTMscrollbarTrackColor + ';');
0832                         }
0833                         addRule('#root', 'color:' + MTMRootColor + ';background:transparent;font-family:' + MTMRootFont + ';font-size:' + MTMRootCSSize + ';');
0834                         addRule('.subtext', 'font-family:' + MTMenuFont + ';font-size:' + MTMenuCSSize + ';color:' + MTMSubTextColor + ';background: transparent;');
0835                         addRule('a', 'font-family:' + MTMenuFont + ';font-size:' + MTMenuCSSize + ';text-decoration:none;color:' + MTMLinkColor + ';background:transparent;');
0836                         addRule('a:hover', 'color:' + MTMAhoverColor + ';background:transparent;');
0837                         addRule('a.tracked', 'color:' + MTMTrackColor + ';background:transparent;');
0838                         addRule('a.subexpanded', 'color:' + MTMSubExpandColor + ';background:transparent;');
0839                         addRule('a.subclosed', 'color:' + MTMSubClosedColor + ';background:transparent;');
0840 
0841                 }
0842         }
0843 
0844         if(MTMUA.DOMable) {
0845                 if(MTMUA.browserType == "IE") {
0846                         MTMUA.document.createStyleSheet();
0847                         var newStyleSheet = MTMUA.document.styleSheets(MTMUA.document.styleSheets.length-1);
0848                 } else if(MTMUA.browserType == "NN") {
0849                         var newStyleSheet = MTMUA.document.getElementById('mtmsheet');
0850                         if(newStyleSheet) {
0851                                 newStyleSheet.disabled = false;
0852                         }
0853                 }
0854         } else {
0855                 var outputHTML = '<style type="text/css">\n';
0856         }
0857         for(i = 0; i < MTMstyleRules.rules.length; i++) {
0858                 if(MTMUA.DOMable && MTMUA.browserType == "IE") {
0859                         newStyleSheet.addRule(MTMstyleRules.rules[i].selector, MTMstyleRules.rules[i].style);
0860                 } else if(MTMUA.DOMable && MTMUA.browserType == "NN" && newStyleSheet) {
0861                         newStyleSheet.sheet.insertRule((MTMstyleRules.rules[i].selector + " { " + MTMstyleRules.rules[i].style + " } "), newStyleSheet.sheet.cssRules.length);
0862                 } else {
0863                         outputHTML += MTMstyleRules.rules[i].selector + ' {\n' + MTMstyleRules.rules[i].style + '\n}\n';
0864                 }
0865         }
0866         
0867         for(i = 0; i < MTMExtraCSS.rules.length; i++) {
0868                 if(MTMUA.DOMable && MTMUA.browserType == "IE") {
0869                         newStyleSheet.addRule(MTMExtraCSS.rules[i].selector, MTMExtraCSS.rules[i].style);
0870                 } else if(MTMUA.DOMable && MTMUA.browserType == "NN" && newStyleSheet) {
0871                         newStyleSheet.sheet.insertRule((MTMExtraCSS.rules[i].selector + "{" + MTMExtraCSS.rules[i].style + "}"), newStyleSheet.sheet.cssRules.length);
0872                 } else {
0873                         outputHTML += MTMExtraCSS.rules[i].selector + ' {\n' + MTMExtraCSS.rules[i].style + '\n}\n';
0874                 }
0875         }
0876         if(MTMFirstRun && MTMUA.DOMable) {
0877                 with(MTMUA.document.body) {
0878                         bgColor = MTMBGColor;
0879                         text = MTMTextColor;
0880                         link = MTMLinkColor;
0881                         vLink = MTMLinkColor;
0882                         aLink = MTMLinkColor;
0883                         if(MTMBackground) {
0884                                 background = MTMUA.preHREF + MTMenuImageDirectory + MTMBackground;
0885                         }
0886                 }
0887         } else if(!MTMUA.DOMable) {
0888                 MTMUA.document.writeln(outputHTML + '</style>');
0889         }
0890 }
0891 
0892 function MTMdisableStyleSheets() {
0893         if(MTMUA.browserType == "IE") {
0894                 for(i = 0; i < MTMUA.document.styleSheets.length; i++) {
0895                         MTMUA.document.styleSheets(i).disabled = true;
0896                 }
0897         } else if(MTMUA.browserType == "NN") {
0898                 var myCollection = MTMUA.document.getElementsByTagName('style');
0899                 for(i = 0; i < myCollection.length; i++) {
0900                         myCollection.item(i).disabled = true;
0901                 }
0902                 var myCollection = MTMUA.document.getElementsByTagName('link');
0903                 for(i = 0; i < myCollection.length; i++) {
0904                         if(myCollection.item(i).getAttribute('type') == "text/css") {
0905                                 myCollection.item(i).disabled = true;
0906                         }
0907                 }
0908         }
0909 }
0910 
0911 function MTMFetchCookies() {
0912         var cookieString = getCookie(MTMCookieName);
0913         if(cookieString == null) {
0914                 setCookie(MTMCookieName, "Say-No-If-You-Use-Confirm-Cookies");
0915                 cookieString = getCookie(MTMCookieName);
0916                 MTMUA.cookieEnabled = (cookieString == null) ? false : true;
0917                 return;
0918         }
0919 
0920         MTMCookieString = cookieString;
0921         if(MTMTrackedCookieName) { MTMTrackedCookie = getCookie(MTMTrackedCookieName); }
0922         MTMUA.cookieEnabled = true;
0923 }
0924 
0925 // These are from Netscape's Client-Side JavaScript Guide.
0926 // setCookie() is altered to make it easier to set expiry.
0927 
0928 function getCookie(Name) {
0929         var search = Name + "="
0930         if (document.cookie.length > 0) { // if there are any cookies
0931                 offset = document.cookie.indexOf(search)
0932                 if (offset != -1) { // if cookie exists
0933                         offset += search.length
0934                         // set index of beginning of value
0935                         end = document.cookie.indexOf(";", offset)
0936                         // set index of end of cookie value
0937                         if (end == -1)
0938                                 end = document.cookie.length
0939                         return unescape(document.cookie.substring(offset, end))
0940                 }
0941         }
0942 }
0943 
0944 function setCookie(name, value, daysExpire) {
0945         if(daysExpire) {
0946                 var expires = new Date();
0947                 expires.setTime(expires.getTime() + 1000*60*60*24*daysExpire);
0948         }
0949         document.cookie = name + "=" + escape(value) + (daysExpire == null ? "" : (";expires=" + expires.toGMTString())) + ";path=/";
0950 }