mtmcode.js.svn-base
上传用户:liangcc
上传日期:2019-05-24
资源大小:4412k
文件大小:35k
源码类别:

WEB邮件程序

开发平台:

Java

  1. // Morten's JavaScript Tree Menu
  2. // version 2.3.2-macfriendly, dated 2002-06-10
  3. // http://www.treemenu.com/
  4. // Copyright (c) 2001-2002, Morten Wang & contributors
  5. // All rights reserved.
  6. // This software is released under the BSD License which should accompany
  7. // it in the file "COPYING".  If you do not have this file you can access
  8. // the license through the WWW at http://www.treemenu.com/license.txt
  9. /******************************************************************************
  10. * Define the MenuItem object.                                                 *
  11. ******************************************************************************/
  12. function MTMenuItem(text, url, target, tooltip, icon, openIcon) {
  13. this.text = text;
  14. this.url = url ? url : "";
  15. this.target =  target ? target : (MTMDefaultTarget ? MTMDefaultTarget : "");
  16. this.tooltip = tooltip;
  17. this.icon = icon ? icon : "";
  18. this.openIcon = openIcon ? openIcon : ""; // used for addSubItem
  19. this.number = MTMNumber++;
  20. this.parentNode  = null;
  21. this.submenu     = null;
  22. this.expanded    = false;
  23. this.MTMakeSubmenu = MTMakeSubmenu;
  24. this.makeSubmenu = MTMakeSubmenu;
  25. this.addSubItem = MTMAddSubItem;
  26. MTMLastItem = this;
  27. }
  28. function MTMakeSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
  29. this.submenu = menu;
  30. this.expanded = isExpanded;
  31. this.collapseIcon = collapseIcon ? collapseIcon : "menu_folder_closed.gif";
  32. this.expandIcon = expandIcon ? expandIcon : "menu_folder_open.gif";
  33. var i;
  34. for(i = 0; i < this.submenu.items.length; i++) {
  35. this.submenu.items[i].parentNode = this;
  36. if(this.submenu.items[i].expanded) {
  37. this.expanded = true;
  38. }
  39. }
  40. }
  41. function MTMakeLastSubmenu(menu, isExpanded, collapseIcon, expandIcon) {
  42. this.items[this.items.length-1].makeSubmenu(menu, isExpanded, collapseIcon, expandIcon);
  43. }
  44. function MTMAddSubItem(item) {
  45. if(this.submenu == null){
  46. this.MTMakeSubmenu(new MTMenu(), false, this.icon, this.openIcon);
  47. }
  48. this.submenu.MTMAddItem(item);
  49. }
  50. /******************************************************************************
  51. * Define the Menu object.                                                     *
  52. ******************************************************************************/
  53. function MTMenu() {
  54. this.items   = new Array();
  55. this.MTMAddItem = MTMAddItem;
  56. this.addItem = MTMAddItem;
  57. this.makeLastSubmenu = MTMakeLastSubmenu;
  58. }
  59. function MTMAddItem() {
  60. if(arguments[0].toString().indexOf("[object Object]") != -1) {
  61. this.items[this.items.length] = arguments[0];
  62. } else {
  63. this.items[this.items.length] = new MTMenuItem(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
  64. }
  65. }
  66. /******************************************************************************
  67. * Define the icon list, addIcon function and MTMIcon item.                    *
  68. ******************************************************************************/
  69. function IconList() {
  70. this.items = new Array();
  71. this.addIcon = addIcon;
  72. }
  73. function addIcon(item) {
  74. this.items[this.items.length] = item;
  75. }
  76. function MTMIcon(iconfile, match, type) {
  77. this.file = iconfile;
  78. this.match = match;
  79. this.type = type;
  80. }
  81. /******************************************************************************
  82. * Define the stylesheet rules objects and methods.                            *
  83. ******************************************************************************/
  84. function MTMstyleRuleSet() {
  85. this.rules = new Array();
  86. this.addRule = MTMaddStyleRule;
  87. }
  88. function MTMaddStyleRule(thisSelector, thisStyle) {
  89. this.rules[this.rules.length] = new MTMstyleRule(thisSelector, thisStyle);
  90. }
  91. function MTMstyleRule(thisSelector, thisStyle) {
  92. this.selector = thisSelector;
  93. this.style = thisStyle;
  94. }
  95. /******************************************************************************
  96. * The MTMBrowser object.  A custom "user agent" that'll define the browser    *
  97. * seen from the menu's point of view.                                         *
  98. ******************************************************************************/
  99. function MTMBrowser() {
  100. // default properties and values
  101. this.cookieEnabled = false;
  102. this.preHREF = "";
  103. this.MTMable = false;
  104. this.cssEnabled = true;
  105. this.browserType = "other";
  106. this.majVersion = null;
  107. this.DOMable = null;
  108. // properties concerning output document
  109. this.menuFrame = null;
  110. this.document = null;
  111. this.head = null;
  112. this.menuTable = null;
  113. // methods
  114. this.setDocument = MTMsetDocument;
  115. this.getFrames = MTMgetFrames;
  116. this.appendElement = MTMappendElement;
  117. this.resolveURL = MTMresolveURL;
  118. if(navigator.userAgent.indexOf("Opera") != -1) {
  119. if(navigator.appName == "Opera") {
  120. this.majVersion = parseInt(navigator.appVersion);
  121. } else {
  122. this.majVersion = parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("Opera")+6));
  123. }
  124. if(this.majVersion >= 5) {
  125. this.MTMable = true;
  126. this.browserType = "O";
  127. }
  128. } else if(navigator.appName == "Netscape" && navigator.userAgent.indexOf("WebTV") == -1) {
  129. this.MTMable = true;
  130. this.browserType = "NN";
  131. if(parseInt(navigator.appVersion) == 3) {
  132. this.majVersion = 3;
  133. this.cssEnabled = false;
  134. } else if(parseInt(navigator.appVersion) >= 4) {
  135. this.majVersion = parseInt(navigator.appVersion) == 4 ? 4 : 5;
  136. if(this.majVersion >= 5) {
  137. this.DOMable = true;
  138. }
  139. }
  140. } else if(navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) >= 4) {
  141. this.MTMable = true;
  142. if(navigator.userAgent.toLowerCase().indexOf("mac") != -1) {
  143. this.browserType = "NN";
  144. this.majVersion = 4;
  145. this.DOMable = false;
  146. } else {
  147. this.browserType = "IE";
  148. this.majVersion = navigator.appVersion.indexOf("MSIE 6.") != -1 ? 6 : (navigator.appVersion.indexOf("MSIE 5.") != -1 ? 5 : 4);
  149. if(this.majVersion >= 5) {
  150. this.DOMable = true;
  151. }
  152. }
  153. }
  154. this.preHREF = location.href.substring(0, location.href.lastIndexOf("/") +1)
  155. }
  156. function MTMsetDocument(menuFrame) {
  157. // called by function MTMgetFrames and sets
  158. // properties .menuFrame and .document, and for DOMable browsers also .head
  159. this.menuFrame = menuFrame;
  160. this.document = menuFrame.document;
  161. if(this.DOMable) {
  162. this.head = this.browserType == "IE" ? this.document.all.tags('head')[0] : this.document.getElementsByTagName('head').item(0);
  163. }
  164. }
  165. /****************************************
  166.   add by qiuchun to split every javascript function in link
  167.  功能:分隔出链接中每个JS函数,并加上引用前缀 
  168.  作者: 仇春
  169. *****************************/
  170. function MTMSplitFunc(thisURL){
  171.    var strTmp = thisURL;
  172.    //将javascript:去掉
  173.    strTmp = strTmp.substring(11,strTmp.length);
  174.    var prefix = "parent.frames['" + MTMCodeFrame + "'].";
  175.    var sary = strTmp.split(";");
  176.    var tempString  = "";
  177.    for(var x=0;x< sary.length;x++){
  178.       if (sary[x]!="")
  179.          tempString += prefix + sary[x]+";"; 
  180.    }
  181.    return "javascript:" + tempString;
  182. }
  183. function MTMresolveURL(thisURL, testLocal) {
  184. // resolves 'thisURL' against this.preHREF depending on whether it's an absolute
  185. // or relative URL.  if 'testLocal' is set it'll return true for local (relative) URLs.
  186. var absoluteArray = new Array("http://", "https://", "mailto:", "ftp://", "telnet:", "news:", "gopher:", "nntp:", "javascript:", "file:");
  187. var tempString = "", i;
  188. for(i = 0; i < absoluteArray.length; i++) {
  189. if(thisURL.indexOf(absoluteArray[i]) == 0) {
  190. //javascript is especial
  191.     if (thisURL.indexOf("javascript:") == 0) {
  192.     tempString = MTMSplitFunc(thisURL);
  193. } else {
  194.     tempString = thisURL;
  195. }
  196. break;
  197. }
  198. }
  199. if(testLocal) {
  200. return(tempString == "" ? true : false);
  201. }
  202. if(!tempString) {
  203. if(thisURL.indexOf("/") == 0) {
  204. tempString = location.protocol + "//" + location.hostname + thisURL;
  205. } else if(thisURL.indexOf("../") == 0) {
  206. tempString = this.preHREF;
  207. do {
  208. thisURL = thisURL.substr(3);
  209. tempString = tempString.substr(0, tempString.lastIndexOf("/", tempString.length-2) +1);
  210. } while(thisURL.indexOf("../") == 0);
  211. tempString += thisURL;
  212. } else {
  213. tempString = this.preHREF + thisURL;
  214. }
  215. }
  216. return(tempString);
  217. }
  218. /******************************************************************************
  219. * Default values of all user-configurable options.                            *
  220. ******************************************************************************/
  221. var MTMLinkedJSURL, MTMLinkedSS, MTMSSHREF, MTMLinkedInitFunction, MTMDOCTYPE, MTMcontentType, MTMHeader, MTMFooter, MTMrightClickMessage, MTMDefaultTarget, MTMTimeOut = 5;
  222. var MTMuseScrollbarCSS, MTMscrollbarBaseColor, MTMscrollbarFaceColor, MTMscrollbarHighlightColor, MTMscrollbarShadowColor, MTMscrollbar3dLightColor, MTMscrollbarArrowColor, MTMscrollbarTrackColor, MTMscrollbarDarkShadowColor;
  223. var MTMUseCookies, MTMCookieName, MTMCookieDays, MTMTrackedCookieName;
  224. var MTMCodeFrame = "code", MTMenuFrame = "menu", MTMTableWidth = "100%", MTMenuImageDirectory = "menu-images/";
  225. var MTMUseToolTips = true, MTMEmulateWE, MTMAlwaysLinkIfWE = true, MTMSubsGetPlus = "Submenu", MTMSubsAutoClose;
  226. var MTMBackground = "", MTMBGColor = "#ffffff", MTMTextColor = "#000000", MTMLinkColor = "#330099", MTMTrackColor = "#000000", MTMAhoverColor = "#990000", MTMSubExpandColor = "#666699", MTMSubClosedColor = "#666699", MTMSubTextColor = "#000000" ,MTMSelectedItemColor = "";
  227. var MTMenuText = "", MTMRootIcon = "menu_new_root.gif", MTMRootColor = "#000000";
  228. var MTMRootFont = MTMenuFont = "Arial, Helvetica, sans-serif";
  229. var MTMRootCSSize = MTMenuCSSize = "84%";
  230. var MTMRootFontSize = MTMenuFontSize = "-1";
  231. /******************************************************************************
  232. * Global variables.  Not to be altered unless you know what you're doing.     *
  233. * User-configurable options are found in code.html                            *
  234. ******************************************************************************/
  235. var MTMLoaded = false;
  236. var MTMLevel;
  237. var MTMBar = new Array();
  238. var MTMIndices = new Array();
  239. var MTMUA = new MTMBrowser();
  240. var MTMExtraCSS = new MTMstyleRuleSet();
  241. var MTMstyleRules;
  242. var MTMLastItem; // last item added to a menu
  243. var MTMClickedItem = false;
  244. var MTMExpansion = false;
  245. var MTMPreviousClickItem = null;
  246. var MTMNumber = 1;
  247. var MTMTrackedItem;
  248. var MTMTrack = false;
  249. var MTMFrameNames;
  250. var MTMFirstRun = true;
  251. var MTMCurrentTime = 0;
  252. var MTMUpdating = false;
  253. var MTMWinSize, MTMyval, MTMxval;
  254. var MTMOutputString = "";
  255. var MTMCookieString = "";
  256. var MTMCookieCharNum = 0;
  257. var MTMTCArray, MTMTrackedCookie;
  258. /******************************************************************************
  259. * Code that picks up frame names of frames in the parent frameset.            *
  260. ******************************************************************************/
  261. function MTMgetFrames() {
  262. if(this.MTMable) {
  263. MTMFrameNames = new Array();
  264. for(i = 0; i < parent.frames.length; i++) {
  265. MTMFrameNames[i] = parent.frames[i].name;
  266. if(parent.frames[i].name == MTMenuFrame) {
  267. this.setDocument(parent.frames[i]);
  268. }
  269. }
  270. }
  271. }
  272. /******************************************************************************
  273. * Functions to draw the menu.                                                 *
  274. ******************************************************************************/
  275. function MTMSubAction(SubItem) {
  276. SubItem.expanded = (SubItem.expanded) ? false : true;
  277. if(SubItem.expanded) {
  278. MTMExpansion = true;
  279. }
  280. MTMClickedItem = SubItem;
  281. if(MTMTrackedItem && MTMTrackedItem != SubItem.number) {
  282. MTMTrackedItem = false;
  283. }
  284. if(MTMEmulateWE || SubItem.url == "" || !SubItem.expanded) {
  285. setTimeout("MTMDisplayMenu()", 10);
  286. return false;
  287. } else {
  288. if(SubItem.target == "_blank" || !MTMUA.resolveURL(SubItem.url, true) || (SubItem.target.indexOf("_") != 0 && MTMTrackTarget(SubItem.target) == false)) {
  289. setTimeout("MTMDisplayMenu()", 10);
  290. }
  291. return true;
  292. }
  293. }
  294. function MTMStartMenu(thisEvent) {
  295. if(MTMUA.browserType == "O" && MTMUA.majVersion == 5) {
  296. parent.onload = MTMStartMenu;
  297. if(thisEvent) {
  298. return;
  299. }
  300. }
  301. MTMLoaded = true;
  302. if((navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 3 && navigator.userAgent.indexOf("Opera") == -1) || (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) >= 4) || (navigator.appName == "Opera" && parseInt(navigator.appVersion) >= 5)) {
  303. MTMTrack = true;
  304.     }
  305. if(MTMFirstRun) {
  306. if(MTMCurrentTime++ == MTMTimeOut) { // notice the post-increment
  307. setTimeout("MTMDisplayMenu()",10);
  308. } else {
  309. setTimeout("MTMStartMenu()",100);
  310. }
  311. }
  312. function MTMDisplayMenu() {
  313. if(MTMUA.MTMable && !MTMUpdating) {
  314. MTMUpdating = true;
  315. MTMLevel = 0;
  316. if(MTMFirstRun) {
  317. MTMUA.getFrames();
  318. if(MTMUseCookies) { 
  319. MTMFetchCookies();
  320. if(MTMTrackedCookie) {
  321. MTMTCArray = MTMTrackedCookie.split("::");
  322. MTMTrackedItem = MTMTCArray[0];
  323. if(parent.frames[MTMTCArray[1]]) {
  324. parent.frames[MTMTCArray[1]].location = MTMTCArray[2];
  325. }
  326. MTMTCArray = null;
  327. }
  328. }
  329. }
  330. if(MTMTrack) {
  331.  MTMTrackedItem = MTMTrackExpand(menu); 
  332. }
  333. if(MTMExpansion && MTMSubsAutoClose) { MTMCloseSubs(menu); }
  334. if(MTMUA.DOMable) {
  335. if(MTMFirstRun) {
  336. MTMinitializeDOMDocument();
  337. }
  338. } else if(MTMFirstRun || MTMUA.browserType != "IE") {
  339. MTMUA.document.open("text/html", "replace");
  340. MTMOutputString = (MTMDOCTYPE ? (MTMDOCTYPE + "n") : '') + "<html><head>n";
  341. if(MTMcontentType) {
  342. MTMOutputString += '<meta http-equiv="Content-Type" content="' + MTMcontentType + '">n';
  343. }
  344. if(MTMLinkedSS) {
  345. MTMOutputString += '<link rel="stylesheet" type="text/css" href="' + MTMUA.preHREF + MTMSSHREF + '">n';
  346. } else {
  347. MTMUA.document.writeln(MTMOutputString);
  348. MTMOutputString = "";
  349. MTMcreateStyleSheet();
  350. }
  351. if(MTMUA.browserType == "IE" && MTMrightClickMessage) {
  352. MTMOutputString += '<scr' + 'ipt type="text/javascript">nfunction MTMcatchRight() {nif(event && (event.button == 2 || event.button == 3)) {nalert("' + MTMrightClickMessage + '");nreturn false;n}nreturn true;n}nndocument.onmousedown = MTMcatchRight;n';
  353. MTMOutputString += '</scr' + 'ipt>n';
  354. }
  355. MTMOutputString += '</head>n<body ';
  356. if(MTMBackground != "") {
  357. MTMOutputString += 'background="' + MTMUA.preHREF + MTMenuImageDirectory + MTMBackground + '" ';
  358. }
  359. MTMOutputString += 'bgcolor="' + MTMBGColor + '" text="' + MTMTextColor + '" link="' + MTMLinkColor + '" vlink="' + MTMLinkColor + '" alink="' + MTMLinkColor + '">n';
  360. MTMUA.document.writeln(MTMOutputString + (MTMHeader ? MTMHeader : "") + 'n<table style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px;PADDING-BOTTOM: 10px; PADDING-TOP: 10px; " border="0" cellpadding="0" cellspacing="0" width="' + MTMTableWidth + '" id="mtmtable">n');
  361. }
  362. if(!MTMFirstRun && (MTMUA.DOMable || MTMUA.browserType == "IE")) {
  363. if(!MTMUA.menuTable) {
  364. MTMUA.menuTable = MTMUA.document.all('mtmtable');
  365. }
  366. while(MTMUA.menuTable.rows.length > 1) {
  367. MTMUA.menuTable.deleteRow(1);
  368. }
  369. }
  370. MTMOutputString = '<img src="' + MTMUA.preHREF + MTMenuImageDirectory + MTMRootIcon + '" align="absmiddle" border="0" vspace="0" hspace="0">';
  371. if(MTMUA.cssEnabled) {
  372. MTMOutputString += '<span id="root">&nbsp;' + MTMenuText + '&nbsp;</span>';
  373. } else {
  374. MTMOutputString += '<font size="' + MTMRootFontSize + '" face="' + MTMRootFont + '" color="' + MTMRootColor + '">' + MTMenuText + '</font>';
  375. }
  376. if(MTMFirstRun || (!MTMUA.DOMable && MTMUA.browserType != "IE")) {
  377. MTMAddCell(MTMOutputString);
  378. }
  379. MTMListItems(menu);
  380. if(!MTMUA.DOMable && (MTMFirstRun || MTMUA.browserType != "IE")) {
  381. MTMUA.document.writeln('</table>n' + (MTMFooter ? MTMFooter : "") + 'n');
  382. if(MTMLinkedJSURL && MTMUA.browserType != "IE") {
  383. MTMUA.document.writeln('<scr' + 'ipt defer type="text/javascript" src="' + MTMUA.preHREF + MTMLinkedJSURL + '"></scr' + 'ipt>');
  384. }
  385. MTMUA.document.writeln('n</body>n</html>');
  386. MTMUA.document.close();
  387. }
  388. if((MTMClickedItem || MTMTrackedItem) && !(MTMUA.browserType == "NN" && MTMUA.majVersion == 3)) {
  389. MTMItemName = "sub" + (MTMClickedItem ? MTMClickedItem.number : MTMTrackedItem);
  390. if(document.layers && MTMUA.menuFrame.scrollbars) {
  391. var i;
  392. for(i = 0; i < MTMUA.document.anchors.length; i++) {
  393. if(MTMUA.document.links[i].name == MTMItemName) {
  394. MTMyval = MTMUA.document.links[i].y;
  395. MTMUA.document.links[i].focus();
  396. break;
  397. }
  398. }
  399. MTMWinSize = MTMUA.menuFrame.innerHeight;
  400. } else if(MTMUA.browserType != "O") {
  401. if(MTMUA.browserType == "NN" && MTMUA.majVersion == 5) {
  402. MTMUA.document.all = MTMUA.document.getElementsByTagName("*");
  403. }
  404. MTMyval = MTMGetYPos(MTMUA.document.all[MTMItemName]);
  405. MTMUA.document.all[MTMItemName].focus();
  406. MTMWinSize = MTMUA.browserType == "IE" ? MTMUA.document.body.offsetHeight : MTMUA.menuFrame.innerHeight;
  407. }
  408. if(MTMyval > (MTMWinSize - 60)) {
  409. MTMUA.menuFrame.scrollTo(0, parseInt(MTMyval - (MTMWinSize * 1/3)));
  410. }
  411. }
  412. if(!MTMFirstRun && MTMUA.cookieEnabled) { 
  413. if(MTMCookieString != "") {
  414. setCookie(MTMCookieName, MTMCookieString.substring(0,4000), MTMCookieDays);
  415. if(MTMTrackedCookieName) {
  416. if(MTMTCArray) {
  417. setCookie(MTMTrackedCookieName, MTMTCArray.join("::"), MTMCookieDays);
  418. } else {
  419. setCookie(MTMTrackedCookieName, "", -1);
  420. }
  421. }
  422. } else {
  423. setCookie(MTMCookieName, "", -1);
  424. }
  425. }
  426. if(MTMLinkedJSURL && MTMLinkedInitFunction && !(MTMUA.browserType == "IE" && MTMUA.majVersion == 4)) {
  427. setTimeout('MTMUA.menuFrame.' + MTMLinkedInitFunction + '()', 10);
  428. }
  429. MTMFirstRun = false;
  430. MTMClickedItem = false;
  431. MTMExpansion = false;
  432. MTMTrack = false;
  433. MTMCookieString = "";
  434. }
  435. MTMUpdating = false;
  436. //alert(document.body.innerHTML);
  437. }
  438. function MTMinitializeDOMDocument() {
  439. var newElement;
  440. if(MTMcontentType) {
  441. MTMUA.appendElement('head', 'meta', 'httpEquiv', 'Content-Type', 'content', MTMcontentType);
  442. }
  443. MTMdisableStyleSheets();
  444. if(MTMLinkedSS) {
  445. MTMUA.appendElement('head', 'link', 'rel', 'stylesheet', 'type', 'text/css', 'href', (MTMUA.preHREF + MTMSSHREF));
  446. } else {
  447. MTMcreateStyleSheet();
  448. }
  449. if(MTMLinkedJSURL) {
  450. MTMUA.appendElement('head', 'script', 'src', (MTMUA.preHREF + MTMLinkedJSURL), 'type', 'text/javascript', 'defer', true);
  451. }
  452. while(MTMUA.document.body.childNodes.length > 0) {
  453. MTMUA.document.body.removeChild(MTMUA.document.body.firstChild);
  454. }
  455. if(MTMHeader) {
  456. if(MTMUA.browserType == "IE") {
  457. MTMUA.document.body.insertAdjacentHTML("afterBegin", MTMHeader);
  458. } else {
  459. var myRange = MTMUA.document.createRange();
  460. myRange.setStart(MTMUA.document.body, 0);
  461. var parsedHTML = myRange.createContextualFragment(MTMHeader);
  462. MTMUA.document.body.appendChild(parsedHTML);
  463. }
  464. }
  465. MTMUA.appendElement('body', 'table', 'border', '0', 'cellPadding', '0', 'cellSpacing', '0', 'width', MTMTableWidth, 'id', 'mtmtable');
  466. MTMUA.menuTable = MTMUA.document.getElementById('mtmtable');
  467. if(MTMFooter) {
  468. if(MTMUA.browserType == "IE") {
  469. MTMUA.document.body.insertAdjacentHTML("beforeEnd", MTMFooter);
  470. } else {
  471. var myRange = MTMUA.document.createRange();
  472. myRange.setStart(MTMUA.document.body, 0);
  473. var parsedHTML = myRange.createContextualFragment(MTMFooter);
  474. MTMUA.document.body.appendChild(parsedHTML);
  475. }
  476. }
  477. }
  478. function MTMappendElement() {
  479. var newElement = this.document.createElement(arguments[1]);
  480. var j, newProperty;
  481. for(j = 2; j < arguments.length; j+=2) {
  482. newElement.setAttribute(arguments[j], arguments[j+1]);
  483. }
  484. if(arguments[0] == 'head') {
  485.    this.head.appendChild(newElement);
  486. } else if(arguments[0] == 'body') {
  487. this.document.body.appendChild(newElement);
  488. }
  489. }
  490. function MTMListItems(menu) {
  491. var i, isLast;
  492. for (i = 0; i < menu.items.length; i++) {
  493. MTMIndices[MTMLevel] = i;
  494. isLast = (i == menu.items.length -1);
  495. MTMDisplayItem(menu.items[i], isLast);
  496. if(menu.items[i].submenu && menu.items[i].expanded) {
  497. MTMBar[MTMLevel] = (isLast) ? false : true;
  498. MTMLevel++;
  499. MTMListItems(menu.items[i].submenu);
  500. MTMLevel--;
  501. } else {
  502. MTMBar[MTMLevel] = false;
  503. }
  504. }
  505. function MTMDisplayItem(item, last) {
  506. var i, img, subNoLink;
  507. var MTMfrm = "parent.frames['" + MTMCodeFrame + "']";
  508. var MTMref = '.menu.items[' + MTMIndices[0] + ']';
  509. if(MTMLevel > 0) {
  510. for(i = 1; i <= MTMLevel; i++) {
  511. MTMref += ".submenu.items[" + MTMIndices[i] + "]";
  512. }
  513. }
  514. if(MTMUA.cookieEnabled) {
  515. if(MTMFirstRun && MTMCookieString != "") {
  516. item.expanded = (MTMCookieString.charAt(MTMCookieCharNum++) == "1") ? true : false;
  517. } else {
  518. MTMCookieString += (item.expanded) ? "1" : "0";
  519. }
  520. }
  521. if(item.submenu) {
  522. var usePlusMinus = false;
  523. if(MTMSubsGetPlus.toLowerCase() == "always" || MTMEmulateWE) {
  524. usePlusMinus = true;
  525. } else if(MTMSubsGetPlus.toLowerCase() == "submenu") {
  526. for(i = 0; i < item.submenu.items.length; i++) {
  527. if(item.submenu.items[i].submenu) {
  528. usePlusMinus = true; break;
  529. }
  530. }
  531. }
  532. var MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ");";
  533. var MTMouseOverCmd = "parent.status='" + (item.expanded ? "折叠 " : "展开 ") + (item.text.indexOf("'") != -1 ? MTMEscapeQuotes(item.text) : item.text) + "';return true;";
  534. var MTMouseOutCmd = "parent.status=parent.defaultStatus;return true;";
  535. }
  536. MTMOutputString = "";
  537. if(MTMLevel > 0) {
  538. for (i = 0; i < MTMLevel; i++) {
  539. MTMOutputString += (MTMBar[i]) ? MTMakeImage("menu_bar.gif") : MTMakeImage("menu_pixel.gif");
  540. }
  541. }
  542. if(item.submenu && usePlusMinus) {
  543. if(item.url == "") {
  544. MTMOutputString += MTMakeLink(item, true, true, true, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
  545. } else {
  546. if(MTMEmulateWE) {
  547. MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
  548. } else {
  549. if(!item.expanded) {
  550. MTMOutputString += MTMakeLink(item, false, true, true, MTMClickCmd);
  551. } else {
  552. MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
  553. }
  554. }
  555. }
  556. if(item.expanded) {
  557. img = (last) ? "menu_corner_minus.gif" : "menu_tee_minus.gif";
  558. } else {
  559. img = (last) ? "menu_corner_plus.gif" : "menu_tee_plus.gif";
  560. }
  561. } else {
  562. img = (last) ? "menu_corner.gif" : "menu_tee.gif";
  563. }
  564. MTMOutputString += MTMakeImage(img);
  565. if(item.submenu) {
  566. if(MTMEmulateWE) {
  567. if(item.url != "") {
  568. MTMOutputString += '</a>' + MTMakeLink(item, false, false, true);
  569. } else if(!MTMAlwaysLinkIfWE) {
  570. subNoLink = true;
  571. MTMOutputString += '</a><span class="subtext">';
  572. }
  573. } else if(!usePlusMinus) {
  574. if(item.url == "") {
  575. MTMOutputString += MTMakeLink(item, true, true, true, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
  576. } else if(!item.expanded) {
  577. MTMOutputString += MTMakeLink(item, false, true, true, MTMClickCmd);
  578. } else {
  579. MTMOutputString += MTMakeLink(item, true, true, false, MTMClickCmd, MTMouseOverCmd, MTMouseOutCmd);
  580. }
  581. }
  582. img = (item.expanded) ? item.expandIcon : item.collapseIcon;
  583. } else {
  584. MTMOutputString += MTMakeLink(item, false, true, true);
  585. img = (item.icon != "") ? item.icon : MTMFetchIcon(item.url);
  586. }
  587. MTMOutputString += MTMakeImage(img);
  588. if(item.submenu && item.url != "" && item.expanded && !MTMEmulateWE) {
  589. MTMOutputString += '</a>' + MTMakeLink(item, false, false, true);
  590. }
  591. if(MTMUA.browserType == "NN" && MTMUA.majVersion == 3 && !MTMLinkedSS) {
  592. var stringColor;
  593. if(item.submenu && (item.url == "") && (item.number == MTMClickedItem.number)) {
  594. stringColor = (item.expanded) ? MTMSubExpandColor : MTMSubClosedColor;
  595. } else if(MTMTrackedItem && MTMTrackedItem == item.number) {
  596. stringColor = MTMTrackColor;
  597. } else {
  598. stringColor = MTMLinkColor;
  599. }
  600. MTMOutputString += '<font color="' + stringColor + '" size="' + MTMenuFontSize + '" face="' + MTMenuFont + '">';
  601. }
  602. MTMOutputString += '&nbsp;' + item.text + ((MTMUA.browserType == "NN" && MTMUA.majVersion == 3 && !MTMLinkedSS) ? '&nbsp;</font>' : '&nbsp;');
  603. MTMOutputString += subNoLink ? '</span>' : '</a>';
  604. MTMAddCell(MTMOutputString);
  605. }
  606. function MTMEscapeQuotes(myString) {
  607. var newString = "";
  608. var cur_pos = myString.indexOf("'");
  609. var prev_pos = 0;
  610. while (cur_pos != -1) {
  611. if(cur_pos == 0) {
  612. newString += "\";
  613. } else if(myString.charAt(cur_pos-1) != "\") {
  614. newString += myString.substring(prev_pos, cur_pos) + "\";
  615. } else if(myString.charAt(cur_pos-1) == "\") {
  616. newString += myString.substring(prev_pos, cur_pos);
  617. }
  618. prev_pos = cur_pos++;
  619. cur_pos = myString.indexOf("'", cur_pos);
  620. }
  621. return(newString + myString.substring(prev_pos, myString.length));
  622. }
  623. function MTMTrackExpand(thisMenu) {
  624. var i, targetPath, targetLocation;
  625. var foundNumber = false;
  626. for(i = 0; i < thisMenu.items.length; i++) {
  627. if(thisMenu.items[i].url != "" && MTMTrackTarget(thisMenu.items[i].target)) {
  628. targetLocation = parent.frames[thisMenu.items[i].target].location;
  629. targetHREF = targetLocation.href;
  630. if(targetHREF.indexOf("#") != -1) {
  631. targetHREF = targetHREF.substr(0, targetHREF.indexOf("#"));
  632. }
  633. if(MTMUA.browserType == "IE" && targetLocation.protocol == "file:") {
  634. var regExp = /\/g;
  635. targetHREF = targetHREF.replace(regExp, "/");
  636. }
  637. if(targetHREF == MTMUA.resolveURL(thisMenu.items[i].url)) {
  638. return(thisMenu.items[i].number);
  639. }
  640. }
  641. if(thisMenu.items[i].submenu) {
  642. foundNumber = MTMTrackExpand(thisMenu.items[i].submenu);
  643. if(foundNumber) {
  644. if(!thisMenu.items[i].expanded) {
  645. thisMenu.items[i].expanded = true;
  646. if(!MTMClickedItem) { MTMClickedItem = thisMenu.items[i]; }
  647. MTMExpansion = true;
  648. }
  649. return(foundNumber);
  650. }
  651. }
  652. }
  653. return(foundNumber);
  654. }
  655. function MTMCloseSubs(thisMenu) {
  656. var i, j;
  657. var foundMatch = false;
  658. for(i = 0; i < thisMenu.items.length; i++) {
  659. if(thisMenu.items[i].submenu && thisMenu.items[i].expanded) {
  660. if(thisMenu.items[i].number == MTMClickedItem.number) {
  661. foundMatch = true;
  662. for(j = 0; j < thisMenu.items[i].submenu.items.length; j++) {
  663. if(thisMenu.items[i].submenu.items[j].expanded) {
  664. thisMenu.items[i].submenu.items[j].expanded = false;
  665. }
  666. }
  667. } else {
  668. if(foundMatch) {
  669. thisMenu.items[i].expanded = false; 
  670. } else {
  671. foundMatch = MTMCloseSubs(thisMenu.items[i].submenu);
  672. if(!foundMatch) {
  673. thisMenu.items[i].expanded = false;
  674. }
  675. }
  676. }
  677. }
  678. }
  679. return(foundMatch);
  680. }
  681. function MTMFetchIcon(testString) {
  682. var i;
  683. for(i = 0; i < MTMIconList.items.length; i++) {
  684. if((MTMIconList.items[i].type == 'any') && (testString.indexOf(MTMIconList.items[i].match) != -1)) {
  685. return(MTMIconList.items[i].file);
  686. } else if((MTMIconList.items[i].type == 'pre') && (testString.indexOf(MTMIconList.items[i].match) == 0)) {
  687. return(MTMIconList.items[i].file);
  688. } else if((MTMIconList.items[i].type == 'post') && (testString.indexOf(MTMIconList.items[i].match) != -1)) {
  689. if((testString.lastIndexOf(MTMIconList.items[i].match) + MTMIconList.items[i].match.length) == testString.length) {
  690. return(MTMIconList.items[i].file);
  691. }
  692. }
  693. }
  694. return("menu_link_default.gif");
  695. }
  696. function MTMGetYPos(myObj) {
  697. return(myObj.offsetTop + ((myObj.offsetParent) ? MTMGetYPos(myObj.offsetParent) : 0));
  698. }
  699. //add by qiuchun to change the selected item's style
  700. function MTMakeSelectedStyle(o){
  701.  if (!o) return "";
  702.  if (MTMPreviousClickItem!=null && MTMPreviousClickItem!=o){
  703.     MTMPreviousClickItem.className = "";
  704. MTMPreviousClickItem.style.color = "";
  705.  }
  706.  if (MTMLinkedSS) {
  707.     o.className = "selecteditem";
  708. o.blur();
  709.  } else{
  710.     o.style.color = MTMSelectedItemColor; o.blur();
  711.  }
  712.  MTMPreviousClickItem = o;
  713. }
  714. function MTMakeLink(thisItem, voidURL, addName, addTitle, clickEvent, mouseOverEvent, mouseOutEvent) {
  715. var tempString = '<a href="' + (voidURL ? 'javascript:;' : MTMUA.resolveURL(thisItem.url)) + '" ';
  716. if(MTMUseToolTips && addTitle && thisItem.tooltip) {
  717. tempString += 'title="' + thisItem.tooltip + '" ';
  718. }
  719. if(addName) {
  720. tempString += 'name="sub' + thisItem.number + '" ';
  721. }
  722. if(clickEvent) {
  723. tempString += 'onclick="' + clickEvent + '" ';
  724. }else{
  725.     tempString += 'onclick='+MTMUA.resolveURL("javascript:MTMakeSelectedStyle(this)")+' ';  
  726. }
  727. if(mouseOverEvent && mouseOverEvent != "") {
  728. tempString += 'onmouseover="' + mouseOverEvent + '" ';
  729. }
  730. if(mouseOutEvent && mouseOutEvent != "") {
  731. tempString += 'onmouseout="' + mouseOutEvent + '" ';
  732. }
  733. if(thisItem.submenu && MTMClickedItem && thisItem.number == MTMClickedItem.number) {
  734.     tempString += 'class="' + (thisItem.expanded ? "subexpanded" : "subclosed") + '" ';
  735. } else if(MTMTrackedItem && thisItem.number == MTMTrackedItem) {
  736. if(MTMTrackedCookieName) {
  737. MTMTCArray = new Array(thisItem.number, thisItem.target, thisItem.url);
  738. }
  739. tempString += 'class="tracked"';
  740. }
  741. if(thisItem.target != "") {
  742. tempString += 'target="' + thisItem.target + '" ';
  743. }
  744. return(tempString + '>');
  745. }
  746. function MTMakeImage(thisImage) {
  747. return('<img src="' + MTMUA.preHREF + MTMenuImageDirectory + thisImage + '" align="absmiddle" border="0" vspace="0" hspace="0" width="18" height="18">');
  748. }
  749. function MTMakeSVG(thisImage) {
  750. return('<object type="image/svg+xml" data="' + thisImage + '" NAME="Main" width="18" height="18" ></object>');
  751. }
  752. function MTMTrackTarget(thisTarget) {
  753. if(thisTarget.charAt(0) == "_") {
  754. return false;
  755. } else {
  756. for(i = 0; i < MTMFrameNames.length; i++) {
  757. if(thisTarget == MTMFrameNames[i]) {
  758. return true;
  759. }
  760. }
  761. }
  762. return false;
  763. }
  764. function MTMAddCell(thisHTML) {
  765. if(MTMUA.DOMable || (MTMUA.browserType == "IE" && !MTMFirstRun)) {
  766. var myRow = MTMUA.menuTable.insertRow(MTMUA.menuTable.rows.length);
  767. myRow.vAlign = "top";
  768. var myCell = myRow.insertCell(myRow.cells.length);
  769. myCell.noWrap = true;
  770. myCell.innerHTML = thisHTML;
  771. } else {
  772. MTMUA.document.writeln('<tr valign="top"><td  nowrap>' + thisHTML + '</td></tr>');
  773. }
  774. }
  775. function MTMcreateStyleSheet() {
  776. var i;
  777. if(!MTMstyleRules) {
  778. MTMstyleRules = new MTMstyleRuleSet();
  779. with(MTMstyleRules) {
  780. addRule('body', 'color:' + MTMTextColor + ';');
  781. if(MTMuseScrollbarCSS && MTMUA.browserType != "NN") {
  782. 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 + ';');
  783. }
  784. addRule('#root', 'color:' + MTMRootColor + ';background:transparent;font-family:' + MTMRootFont + ';font-size:' + MTMRootCSSize + ';');
  785. addRule('.subtext', 'font-family:' + MTMenuFont + ';font-size:' + MTMenuCSSize + ';color:' + MTMSubTextColor + ';background: transparent;');
  786. addRule('a', 'font-family:' + MTMenuFont + ';font-size:' + MTMenuCSSize + ';text-decoration:none;color:' + MTMLinkColor + ';background:transparent;');
  787. addRule('a:hover', 'color:' + MTMAhoverColor + ';background:transparent;');
  788. addRule('a.tracked', 'color:' + MTMTrackColor + ';background:transparent;');
  789. addRule('a.subexpanded', 'color:' + MTMSubExpandColor + ';background:transparent;');
  790. addRule('a.subclosed', 'color:' + MTMSubClosedColor + ';background:transparent;');
  791. }
  792. }
  793. if(MTMUA.DOMable) {
  794. if(MTMUA.browserType == "IE") {
  795. MTMUA.document.createStyleSheet();
  796. var newStyleSheet = MTMUA.document.styleSheets(MTMUA.document.styleSheets.length-1);
  797. } else if(MTMUA.browserType == "NN") {
  798. var newStyleSheet = MTMUA.document.getElementById('mtmsheet');
  799. if(newStyleSheet) {
  800. newStyleSheet.disabled = false;
  801. }
  802. }
  803. } else {
  804. var outputHTML = '<style type="text/css">n';
  805. }
  806. for(i = 0; i < MTMstyleRules.rules.length; i++) {
  807. if(MTMUA.DOMable && MTMUA.browserType == "IE") {
  808. newStyleSheet.addRule(MTMstyleRules.rules[i].selector, MTMstyleRules.rules[i].style);
  809. } else if(MTMUA.DOMable && MTMUA.browserType == "NN" && newStyleSheet) {
  810. newStyleSheet.sheet.insertRule((MTMstyleRules.rules[i].selector + " { " + MTMstyleRules.rules[i].style + " } "), newStyleSheet.sheet.cssRules.length);
  811. } else {
  812. outputHTML += MTMstyleRules.rules[i].selector + ' {n' + MTMstyleRules.rules[i].style + 'n}n';
  813. }
  814. }
  815. for(i = 0; i < MTMExtraCSS.rules.length; i++) {
  816. if(MTMUA.DOMable && MTMUA.browserType == "IE") {
  817. newStyleSheet.addRule(MTMExtraCSS.rules[i].selector, MTMExtraCSS.rules[i].style);
  818. } else if(MTMUA.DOMable && MTMUA.browserType == "NN" && newStyleSheet) {
  819. newStyleSheet.sheet.insertRule((MTMExtraCSS.rules[i].selector + "{" + MTMExtraCSS.rules[i].style + "}"), newStyleSheet.sheet.cssRules.length);
  820. } else {
  821. outputHTML += MTMExtraCSS.rules[i].selector + ' {n' + MTMExtraCSS.rules[i].style + 'n}n';
  822. }
  823. }
  824. if(MTMFirstRun && MTMUA.DOMable) {
  825. with(MTMUA.document.body) {
  826. bgColor = MTMBGColor;
  827. text = MTMTextColor;
  828. link = MTMLinkColor;
  829. vLink = MTMLinkColor;
  830. aLink = MTMLinkColor;
  831. if(MTMBackground) {
  832. background = MTMUA.preHREF + MTMenuImageDirectory + MTMBackground;
  833. }
  834. }
  835. } else if(!MTMUA.DOMable) {
  836. MTMUA.document.writeln(outputHTML + '</style>');
  837. }
  838. }
  839. function MTMdisableStyleSheets() {
  840. if(MTMUA.browserType == "IE") {
  841. for(i = 0; i < MTMUA.document.styleSheets.length; i++) {
  842. MTMUA.document.styleSheets(i).disabled = true;
  843. }
  844. } else if(MTMUA.browserType == "NN") {
  845. var myCollection = MTMUA.document.getElementsByTagName('style');
  846. for(i = 0; i < myCollection.length; i++) {
  847. myCollection.item(i).disabled = true;
  848. }
  849. var myCollection = MTMUA.document.getElementsByTagName('link');
  850. for(i = 0; i < myCollection.length; i++) {
  851. if(myCollection.item(i).getAttribute('type') == "text/css") {
  852. myCollection.item(i).disabled = true;
  853. }
  854. }
  855. }
  856. }
  857. function MTMFetchCookies() {
  858. var cookieString = getCookie(MTMCookieName);
  859. if(cookieString == null) {
  860. setCookie(MTMCookieName, "Say-No-If-You-Use-Confirm-Cookies");
  861. cookieString = getCookie(MTMCookieName);
  862. MTMUA.cookieEnabled = (cookieString == null) ? false : true;
  863. return;
  864. }
  865. MTMCookieString = cookieString;
  866. if(MTMTrackedCookieName) { MTMTrackedCookie = getCookie(MTMTrackedCookieName); }
  867. MTMUA.cookieEnabled = true;
  868. }
  869. // These are from Netscape's Client-Side JavaScript Guide.
  870. // setCookie() is altered to make it easier to set expiry.
  871. function getCookie(Name) {
  872. var search = Name + "="
  873. if (document.cookie.length > 0) { // if there are any cookies
  874. offset = document.cookie.indexOf(search)
  875. if (offset != -1) { // if cookie exists
  876. offset += search.length
  877. // set index of beginning of value
  878. end = document.cookie.indexOf(";", offset)
  879. // set index of end of cookie value
  880. if (end == -1)
  881. end = document.cookie.length
  882. return unescape(document.cookie.substring(offset, end))
  883. }
  884. }
  885. }
  886. function setCookie(name, value, daysExpire) {
  887. if(daysExpire) {
  888. var expires = new Date();
  889. expires.setTime(expires.getTime() + 1000*60*60*24*daysExpire);
  890. }
  891. document.cookie = name + "=" + escape(value) + (daysExpire == null ? "" : (";expires=" + expires.toGMTString())) + ";path=/";
  892. }