home *** CD-ROM | disk | FTP | other *** search
/ Namo WebEditor 3 / Namo WebEditor 3.iso / WebEditor 3 / lib / Script / namoscriptwizard.js < prev    next >
Encoding:
JavaScript  |  1999-02-24  |  26.6 KB  |  824 lines

  1. // javascript source for namo script wizard
  2.  
  3. function namosw_exchange_src() 
  4.   str = namosw_exchange_src.arguments[0];
  5.   str = (navigator.appName == 'Netscape') ? 'document.' + str : 'document.all.' + str;
  6.   img = eval(str);
  7.   if (img) {
  8.     if (img.ori_src == null) {
  9.       img.ori_src = img.src;
  10.       img.src     = namosw_exchange_src.arguments[1];
  11.     } else {
  12.       var temp    = img.src;
  13.       img.src     = img.ori_src;
  14.       img.ori_src = temp;
  15.     }
  16.   } 
  17. }
  18.  
  19. function namosw_preload_img()
  20.   var img_list = namosw_preload_img.arguments;
  21.   if (document.preloadlist == null) 
  22.     document.preloadlist = new Array();
  23.   var top = document.preloadlist.length;
  24.   for (var i=0; i < img_list.length; i++) {
  25.     document.preloadlist[top+i]     = new Image;
  26.     document.preloadlist[top+i].src = img_list[i];
  27.   } 
  28. }
  29.  
  30. function namosw_page_left(element) 
  31. {
  32.   if (navigator.appName == 'Netscape') {
  33.     x = element.pageX;
  34.   } else {
  35.     x = element.offsetLeft;
  36.     for (el = element.offsetParent; el; el = el.offsetParent)
  37.       x += el.offsetLeft;
  38.   }
  39.   return x;
  40. }
  41.  
  42. function namosw_page_top(element) 
  43. {
  44.   if (navigator.appName == 'Netscape') {
  45.     y = element.pageY;
  46.   } else {
  47.     y = element.offsetTop;
  48.     for (el = element.offsetParent; el; el = el.offsetParent)
  49.       y += el.offsetTop;
  50.   }
  51.   return y;
  52. }
  53.  
  54. function namosw_page_right(el) {
  55.   wid =  (navigator.appName == 'Netscape') ? window.innerWidth : document.body.offsetWidth;
  56.   return wid - namosw_page_left(el);
  57. }
  58.  
  59. function namosw_page_bottom(el) {
  60.   hei =  (navigator.appName == 'Netscape') ? window.innerHeight : document.body.offsetHeight;
  61.   return hei - namosw_page_top(el);
  62. }
  63.  
  64. function namosw_set_visible(el, flag) {
  65.   if (navigator.appName == 'Netscape') {
  66.     el.visibility = flag ? 'show' : 'hide';
  67.   } else {
  68.     el.style.visibility = flag ? 'visible' : 'hidden';
  69.   }
  70. }
  71.  
  72. function namosw_set_pos(el, x, y)
  73. {
  74.   if (navigator.appName == 'Netscape') {
  75.     el.left = x;
  76.     el.top  = y;
  77.   } else {
  78.     el.style.pixelLeft = x;
  79.     el.style.pixelTop  = y;
  80.   }
  81. }
  82.  
  83. function namosw_left(el) {
  84.   return (navigator.appName == 'Netscape') ? el.left : el.style.pixelLeft;
  85. }
  86.  
  87. function namosw_top(el) {
  88.   return (navigator.appName == 'Netscape') ? el.top : el.style.pixelTop;
  89. }
  90.  
  91. function namosw_is_relative(el) {
  92.   return (navigator.appName == 'Netscape') ? el.position == 'relative' : 
  93.                                              el.style.position == 'relative';
  94. }
  95.  
  96. function namosw_new_animation_object(name, obj, time, xpos, ypos, path, byword, zoom, stepNum) 
  97. {
  98.   var str = (navigator.appName == 'Netscape') ? 'document.'+name : 'document.all[\''+name+'\']';
  99.   var object;
  100.   object               = eval(str);
  101.   object.name     = name;
  102.   object.startCondObj  = obj;
  103.   object.startCondTime = time;
  104.   object.startXPos     = xpos;     // left, center, right
  105.   object.startYPos     = ypos;     // top,  center, bottom
  106.   object.pathType      = path;     // line, arc, spiral
  107.   object.byword        = byword;   // true, false
  108.   object.zoom          = zoom;
  109.   object.stepNum       = stepNum;
  110.   return object;
  111. }
  112.  
  113. function namosw_is_space(c)
  114. {
  115.   return (c == ' ' || c == '\t' || c == '\r' || c == '\n');
  116. }
  117.  
  118. function namosw_process_byword(list, index)
  119. {
  120.   var el = list[index];
  121.   if (navigator.appName == 'Netscape')
  122.     return;
  123.   if (el.byword == false && el.zoom == null)
  124.     return;
  125.  
  126.   var dest = "";
  127.   var src = el.innerHTML;
  128.   var objNum = document.NamoAnimationObjects.length;
  129.   var wordi = 0, i = 0, mark;
  130.   while (i < src.length) {
  131.     mark = i;
  132.     while (i < src.length) {
  133.       while (i < src.length && namosw_is_space(src.charAt(i))) i++;
  134.       if    (i < src.length && src.charAt(i) != '<') break;
  135.       while (i < src.length && src.charAt(i) != '>') i++;
  136.       if    (i < src.length && src.charAt(i) == '>') i++;
  137.     }
  138.     dest += src.substring(mark, i);
  139.     if (i >= src.length) break;
  140.     dest += '<span id=\"' + el.name + 'word' + (wordi+1) + '\" style=\"position:relative\">';
  141.     mark = i;
  142.     while (i < src.length && !namosw_is_space(src.charAt(i)) && src.charAt(i) != '<') i++;
  143.     while (i < src.length && namosw_is_space(src.charAt(i)) == ' ') i++;
  144.     if (el.byword == false) while (i < src.length && src.charAt(i) != '<') i++;
  145.     dest += src.substring(mark, i);
  146.     dest += '</span>';
  147.     wordi++;
  148.   }
  149.   el.innerHTML = dest;
  150.   el.posLeft   = 0;
  151.   el.style.visibility = 'visible';
  152.  
  153.   list[index] = namosw_new_animation_object(el.name+'word1', el.startCondObj, el.startCondTime, 
  154. el.startXPos, el.startYPos, el.pathType, false, el.zoom, el.stepNum);
  155.   for (i = 1; i < wordi; i++) {
  156.     list[objNum+i-1] = namosw_new_animation_object(el.name+'word'+(i+1), (el.byword ? (el.name+'word'+i) : el.startCondObj), (el.byword ? 0 : el.startCondTime), el.startXPos, el.startYPos, el.pathType, false, el.zoom, el.stepNum);
  157.     list[objNum+i-1].style.posLeft = 0;
  158.     list[objNum+i-1].style.visibility = 'visible';
  159.   }
  160.   el.startCondTime = -1;
  161. }
  162.  
  163. function namosw_init_animation()
  164. {
  165.   // ║»╝÷ ├╩▒Γ╚¡
  166.   var i    = 0;
  167.   var list = new Array;
  168.  
  169.   // animation object creation
  170.   document.NamoAnimationObjects = list;
  171.  
  172.   // by word ├│╕«
  173.   var length = list.length;
  174.   for (i = 0; i < length; i++)
  175.     namosw_process_byword(list, i);
  176.  
  177.   // ╛╓┤╧╕▐└╠╝╟ ├╩▒Γ╚¡
  178.   for (i = 0; i < list.length; i++) {
  179.     list[i].countDown = (list[i].startCondObj == null) ? list[i].startCondTime : -1;
  180.     list[i].step      = 0;
  181.     list[i].sx        = (list[i].startXPos == 'left')  ? -namosw_page_left(list[i])  :
  182.                (list[i].startXPos == 'right') ?  namosw_page_right(list[i]) : 0;
  183.     list[i].sy        = (list[i].startYPos == 'top')   ? -namosw_page_top(list[i])   :
  184.                (list[i].startYPos == 'bottom')?  namosw_page_bottom(list[i]): 0;
  185.     list[i].ex      = 0;
  186.     list[i].ey       = 0;
  187.     if (!namosw_is_relative(list[i])) {
  188.       list[i].sx += namosw_left(list[i]);
  189.       list[i].sy += namosw_top(list[i]);
  190.       list[i].ex += namosw_left(list[i]);
  191.       list[i].ey += namosw_top(list[i]);
  192.     }
  193.     if (list[i].pathType == 'spiral') {
  194.       list[i].sx = Math.max(-200+list[i].ex, Math.min(200+list[i].ex, list[i].sx));
  195.       list[i].sy = Math.max(-200+list[i].ey, Math.min(200+list[i].ey, list[i].sy));
  196.     }
  197.     namosw_set_pos(list[i], list[i].sx, list[i].sy);
  198.     namosw_set_visible(list[i], false);
  199.   }
  200.   window.setTimeout("namosw_animate();", 10);
  201. }
  202.  
  203. function namosw_animate(str) 
  204. {
  205.   // ║╗ ╖τ╞╛
  206.   var live_object_num = 0;
  207.   for (var i = 0; i < document.NamoAnimationObjects.length; i++) {
  208.     var el = document.NamoAnimationObjects[i];
  209.     if (el.countDown > 0) {
  210.       el.countDown = (0 < el.countDown-10) ? el.countDown-10 : 0;
  211.       live_object_num++;
  212.       continue;
  213.     }
  214.     if (el.countDown < 0)
  215.       continue;
  216.  
  217.     if (el.pathType == 'line') {
  218.       newx = el.sx + el.step * (el.ex - el.sx) / el.stepNum;
  219.       newy = el.sy + el.step * (el.ey - el.sy) / el.stepNum;
  220.     } else if (el.pathType == 'arc') {
  221.       linex = el.sx + el.step * (el.ex - el.sx) / el.stepNum;
  222.       liney = el.sy + el.step * (el.ey - el.sy) / el.stepNum;
  223.  
  224.       x = (el.ex + el.sx) / 2;
  225.       y = (el.ey + el.sy) / 2;
  226.       sinv = Math.sin(Math.PI*el.step/el.stepNum*(el.ex-el.sx > 0 ? -1:1));
  227.       cosv = Math.cos(Math.PI*el.step/el.stepNum);
  228.       newx = ((cosv*(el.sx-x) - sinv*(el.sy-y) + x) + linex) / 2;
  229.       newy = ((sinv*(el.sx-x) + cosv*(el.sy-y) + y) + liney) / 2;
  230.     } else if (el.pathType == 'spiral') {
  231.       sinv = Math.sin(2*Math.PI*el.step/el.stepNum);
  232.       cosv = Math.cos(2*Math.PI*el.step/el.stepNum);
  233.       r = (el.stepNum-el.step)/el.stepNum;
  234.       newx = el.ex + (cosv*(el.sx-el.ex) - sinv*(el.sy-el.ey))*r;
  235.       newy = el.ey + (sinv*(el.sx-el.ex) + cosv*(el.sy-el.ey))*r;
  236.     }
  237.     if (el.zoom == 'zoomin' && navigator.appName != 'Netscape')
  238.       el.style.fontSize = 50+50*el.step/el.stepNum + '%';
  239.     else if (el.zoom == 'zoomout' && navigator.appName != 'Netscape')
  240.       el.style.fontSize = 200-100*el.step/el.stepNum + '%';
  241.     namosw_set_pos(el, newx, newy);
  242.     namosw_set_visible(el, true);
  243.  
  244.     if (el.step++ == el.stepNum) {
  245.       namosw_set_pos(el, el.ex, el.ey);
  246.       el.step = 0;
  247.       el.countDown = -1;
  248.       // trigger other object(self can be trigger)
  249.       for (var j = 0; j < document.NamoAnimationObjects.length; j++) {
  250.         var obj = document.NamoAnimationObjects[j];
  251.         if (obj.countDown < 0 && obj.startCondObj == el.name) {
  252.           obj.countDown = obj.startCondTime;
  253.           live_object_num++;
  254.           if (i < j) {
  255.             obj.countDown += 10;
  256.             live_object_num--;
  257.           }
  258.         }
  259.       }
  260.     } else {
  261.       live_object_num++;
  262.     }
  263.   }
  264.   if (live_object_num > 0)
  265.     window.setTimeout("namosw_animate();", 10);
  266. }
  267.  
  268. function namosw_goto_byselect(sel, targetstr)
  269. {
  270.   var index = sel.selectedIndex;
  271.   if (sel.options[index].value != null) {
  272.     var frameobj = eval(targetstr);
  273.     frameobj.location = sel.options[index].value;
  274.   }
  275. }
  276.  
  277. function namosw_goto(url, targetstr)
  278. {
  279.   if (url == 'backward')
  280.     history.back(1);
  281.   else if (url == 'forward')
  282.     history.forward(1);
  283.   else {
  284.     var frameobj = eval(targetstr);
  285.     frameobj.location = url;
  286.   }
  287. }
  288.  
  289. function namosw_infotext()
  290. {
  291.   var username;
  292.   var type, i, top, obj;
  293.   for (i = 1, top = 0; i < namosw_infotext.arguments.length; i += 2) {
  294.     obj = eval('document.'+namosw_infotext.arguments[i]);
  295.     if (obj == null) continue;
  296.     type = namosw_infotext.arguments[i+1];
  297.     if (type == 'username') {
  298.       if (username == null) 
  299.         username = prompt(namosw_infotext.arguments[0], "");
  300.       username = (username == null) ? '' : username;
  301.       obj.value = username;
  302.     } else if (type == 'moddate') {
  303.       obj.value = document.lastModified;
  304.     } else if (type == 'ipaddr' || type == 'hostname') {
  305.       if (navigator.appName == 'Netscape') {
  306.         var host  = java.net.InetAddress.getLocalHost();
  307.         obj.value = (type == 'ipaddr') ? host.getHostAddress() : host.getHostName();
  308.       } else {
  309.         obj.value = '';
  310.       }
  311.     }
  312.   }
  313. }
  314.  
  315. function namosw_init_clock()
  316. {
  317.   var type, i, top, obj, clocks;
  318.   clocks = new Array();
  319.   for (i = 0, top = 0; i < namosw_init_clock.arguments.length; i += 2) {
  320.     obj = eval('document.'+namosw_init_clock.arguments[i]);
  321.     if (obj == null) continue;
  322.     if ((type = namosw_init_clock.arguments[i+1]) < 1 && 11 < type) continue;
  323.     clocks[top++] = obj;
  324.     clocks[top++] = type;
  325.   }
  326.   clocks.months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July',
  327.                             'August', 'September', 'October', 'November', 'December');
  328.   clocks.days   = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday',
  329.                             'Thursday', 'Friday', 'Saturday');
  330.   clocks.k_days = new Array('└╧', '┐∙', '╚¡', '╝÷', '╕±', '▒▌', '┼Σ');
  331.   clocks.ampm_str   = new Array('AM', 'PM');
  332.   clocks.k_ampm_str = new Array('┐└└ⁿ', '┐└╚─');
  333.  
  334.   if (top > 0) {
  335.     document.namosw_clocks = clocks;
  336.     namosw_clock();
  337.   }
  338. }
  339.  
  340. function namosw_clock()
  341. {
  342.   var i, type, clocks, next_call, str, hour, ampm, now, year;
  343.   clocks = document.namosw_clocks;
  344.   if (clocks == null) return;
  345.   next_call = false;
  346.   for (i = 0; i < clocks.length; i += 2) {
  347.     obj  = clocks[i];
  348.     type = clocks[i+1];
  349.     now  = new Date();
  350.     year = now.getYear();
  351.     if (year < 100) year = '19' + year;
  352.     if (type == 1 || type == 2) {
  353.       obj.value = clocks.months[now.getMonth()] + ' ' + now.getDate() + ', ' + year;
  354.       if (type == 2) 
  355.         obj.value = clocks.days[now.getDay()] + ', ' + obj.value;
  356.     } else if (type == 3 || type == 4) {
  357.       obj.value = year + '/' + (now.getMonth()+1) + '/' + now.getDate();
  358.     } else if (type == 5 || type == 6) {
  359.       obj.value = now.getDate() + '/' + (now.getMonth()+1) + '/' + now.getYear();
  360.     } else if (type == 8 || type == 9 || type == 10 || type == 11) {
  361.       obj.value = year + '│Γ ' + (now.getMonth()+1) + '┐∙ ' + now.getDate() + '└╧';
  362.       if (type == 9)
  363.         obj.value += ' ' + clocks.k_days[now.getDay()] + '┐Σ└╧';
  364.     }
  365.     if (type == 4 || type == 6 || type == 7 || type == 10 || type == 11) {
  366.       hour = now.getHours();
  367.       ampm = 0;
  368.       if (hour >= 12) {
  369.     if (hour > 12) hour -= 12;
  370.     ampm = 1;
  371.       }
  372.       if (type == 10 || type == 11) {
  373.     str = clocks.k_ampm_str[ampm] +' '+ hour+'╜├ '+ now.getMinutes() +'║╨';
  374.     if (type == 11) str += ' ' + now.getSeconds() +'├╩';
  375.       } else {
  376.     str = hour +':'+ ((now.getMinutes() < 10) ? '0'+now.getMinutes():now.getMinutes()) +':'+ ((now.getSeconds() < 10) ? '0'+now.getSeconds():now.getSeconds()) +' '+ clocks.ampm_str[ampm];
  377.       }
  378.       if (type == 7) obj.value  = str;
  379.       else           obj.value += ' ' + str;
  380.     }
  381.     if (type == 4 || type == 6 || type == 7 || type == 10 || type == 11)
  382.       next_call = true;
  383.   }
  384.   if (next_call)
  385.     window.setTimeout("namosw_clock();", 1000);
  386. }
  387.  
  388. function namosw_init_scrolltext()
  389. {
  390.   list = new Array();
  391.   for (var i = 0, top = 0; i < namosw_init_scrolltext.arguments.length; i += 2) {
  392.     obj = eval('document.'+namosw_init_scrolltext.arguments[i]);
  393.     if (obj == null) continue;
  394.     list[top++] = obj;
  395.     for (str = '', j = 0; j < namosw_init_scrolltext.arguments[i+1]; j++)
  396.       str += ' ';
  397.     str += obj.value;
  398.     obj.value = str;
  399.   }
  400.   if (top > 0) {
  401.     document.namosw_scrolltext_list = list;
  402.     setTimeout('namosw_scrolltext()', 100);
  403.   }
  404. }
  405.  
  406. function namosw_scrolltext()
  407. {
  408.   for (i = 0; i < document.namosw_scrolltext_list.length; i++) {
  409.     obj   = document.namosw_scrolltext_list[i];
  410.     str   = obj.value.substring(1, obj.value.length);
  411.     str  += obj.value.substring(0, 1);
  412.     obj.value = str;
  413.   }
  414.   setTimeout('namosw_scrolltext()', 100);
  415. }
  416.  
  417. function namosw_scrollstatus()
  418. {
  419.   var str = '';
  420.   if (namosw_scrollstatus.arguments.length > 0) {
  421.     var i;
  422.     for (str = '', i = 0; i < 100; i++)
  423.       str += ' ';
  424.     for (i = 0; i < namosw_scrollstatus.arguments.length; i++)
  425.       str += namosw_scrollstatus.arguments[i] + ' ';
  426.     document.namosw_scrollstatus = str;
  427.   } else {
  428.     var src_str = document.namosw_scrollstatus;
  429.     str  = src_str.substring(1, src_str.length);
  430.     str += src_str.substring(0, 1);
  431.     document.namosw_scrollstatus = str;
  432.   }
  433.   window.status = str;
  434.   setTimeout('namosw_scrollstatus()', 100);
  435. }
  436.  
  437. function namosw_init_list(top_layer)
  438. {
  439.   if(parseInt(navigator.appVersion) < 4) {
  440.     alert("Sorry, a 4.0+ browser is required to view this demo.");
  441.     return;
  442.   }
  443.  
  444.   document.namosw_lists     = new Array();
  445.   document.namosw_lists.lid = 0;
  446.  
  447.   var layer;
  448.   if (navigator.appName == 'Netscape')
  449.     layer = document.layers[top_layer];
  450.   else
  451.     layer = document.all[top_layer];
  452.  
  453. }
  454.  
  455. function namosw_list(parlayer, visible, width, height, font, size, fgColor, bgColor, indent, hbgColor) {
  456.  
  457.   this.additem = namosw_l_additem;
  458.   this.addlist = namosw_l_addlist;
  459.   this.build = namosw_l_build;
  460.   this.rebuild = namosw_l_rebuild;
  461.   this._writeList = namosw_l_writelist;
  462.   this._showList = namosw_l_showlist;
  463.   this._updateList = namosw_l_updatelist;
  464.   this._updateParent = namosw_l_updateparent;
  465.   this.lists = new Array(); // sublists
  466.   this.items = new Array(); // layers
  467.   this.types = new Array(); // type
  468.   this.strs = new Array();  // content
  469.   this.x = 0;
  470.   this.y = 0;
  471.   this.visible = visible;
  472.   this.id = document.namosw_lists.length;
  473.   this.i = indent;
  474.   this.space = true;
  475.   this.pid = 0;
  476.   this.fontIntro = '<font color=' + fgColor;
  477.   if (font != '') this.fontIntro += ' face=\"' + font + '\"';
  478.   if (size != '')   this.fontIntro += ' size=' + size;
  479.   this.fontIntro += '>';
  480.   this.fontOutro = '</font>';
  481.   this.width = width || 350;
  482.   this.height = height || 22;
  483.   this.parLayer = parlayer;
  484.   this.built = false;
  485.   this.shown = false;
  486.   this.needsUpdate = false;
  487.   this.needsRewrite = false;
  488.   this.parent = null;
  489.   this.l = 0;
  490.   if (bgColor) this.bgColor = bgColor;
  491.   else this.bgColor = null;
  492.   if (hbgColor) this.hbgColor = hbgColor;
  493.   else this.hbgColor = null;
  494.  
  495.   document.namosw_lists[document.namosw_lists.length] = this;
  496. }
  497.  
  498. function namosw_l_setclip(layer, l, r, t, b) {
  499.   if(navigator.appName == "Netscape") {
  500.     layer.clip.left = l; layer.clip.right = r;
  501.     layer.clip.top = t;  layer.clip.bottom = b;
  502.   } else {
  503.     layer.style.pixelWidth = r-l;
  504.     layer.style.pixelHeight = b-t;
  505.     layer.style.clip = "rect("+t+","+r+","+b+","+l+")";
  506.   }
  507. }
  508.  
  509. function namosw_l_writelist() {
  510.   self.status = "List: Writing list...";
  511.   var layer, str, clip;
  512.   for(var i = 0; i < this.types.length; i++) { 
  513.     layer = this.items[i];
  514.     if(navigator.appName == "Netscape") layer.visibility = "hidden";
  515.     else layer.style.visibility = "hidden";
  516.     str = "";
  517.     if(navigator.appName == "Netscape") layer.document.open();
  518.     str += "<TABLE WIDTH="+this.width+" NOWRAP BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>";
  519.     if(this.i>0) str += "<TD WIDTH="+this.i+" NOWRAP> </TD>";
  520.     if(this.types[i] == "list") {
  521.       str += "<TD WIDTH=15 NOWRAP VALIGN=MIDDLE><A HREF=\"javascript:namosw_l_expand("+this.lists[i].id+");\"><IMG BORDER=0 SRC=\"collapsed.gif\" NAME=\"_img"+this.lists[i].id+"\"></A></TD>";
  522.     } else if(this.space)
  523.       str += "<TD WIDTH=15 NOWRAP> </TD>";
  524.     str += "<TD HEIGHT="+(this.height-3)+" WIDTH="+(this.width-15-this.i)+" VALIGN=MIDDLE ALIGN=LEFT>";
  525.     if(this.fontIntro) str += this.fontIntro;
  526.     str += this.strs[i];
  527.     if(this.fontOutro) str += this.fontOutro;
  528.     str += "</TD></TABLE>";
  529.     if(navigator.appName == "Netscape") {
  530.       layer.document.writeln(str);
  531.       layer.document.close();
  532.     } else 
  533.       layer.innerHTML = str;
  534.     if(this.types[i] == "list" && this.lists[i].visible)
  535.       this.lists[i]._writeList();
  536.   }
  537.   this.built = true;
  538.   this.needsRewrite = false;
  539.   self.status = '';
  540. }
  541.  
  542. function namosw_l_showlist() {
  543.   var layer;
  544.   for(var i = 0; i < this.types.length; i++) { 
  545.     layer = this.items[i];
  546.     namosw_l_setclip(layer, 0, this.width, 0, this.height-1);
  547.     if(navigator.appName == 'Netscape') {
  548.       if(layer.oBgColor) layer.document.bgColor = layer.oBgColor;
  549.       else layer.document.bgColor = this.bgColor;
  550.     } else {
  551.       if(layer.oBgColor) layer.style.backgroundColor = layer.oBgColor;
  552.       else layer.style.backgroundColor = this.bgColor;
  553.     }
  554.     if(this.types[i] == "list" && this.lists[i].visible)
  555.       this.lists[i]._showList();
  556.   }
  557.   this.shown = true;
  558.   this.needsUpdate = false;
  559. }
  560.  
  561. function namosw_l_updatelist(pVis, x, y) {
  562.   var currTop = y, layer;
  563.   for(var i = 0; i < this.types.length; i++) { 
  564.     layer = this.items[i];
  565.     if(this.visible && pVis) {
  566.       if(navigator.appName == "Netscape") {
  567.     layer.visibility = "visible";
  568.     layer.top = currTop;
  569.     layer.left = x;
  570.       } else {
  571.     layer.style.visibility = "visible";
  572.     layer.style.pixelTop = currTop;
  573.     layer.style.pixelLeft = x;
  574.       }
  575.       currTop += this.height;
  576.     } else {
  577.       if(navigator.appName == "Netscape") layer.visibility = "hidden";
  578.       else layer.style.visibility = "hidden";
  579.     }
  580.     if(this.types[i] == "list") {
  581.       if(this.lists[i].visible) {
  582.         if(!this.lists[i].built || this.lists[i].needsRewrite) this.lists[i]._writeList();
  583.         if(!this.lists[i].shown || this.lists[i].needsUpdate) this.lists[i]._showList();
  584.         if(navigator.appName == "Netscape") layer.document.images[0].src = "collapsed.gif";
  585.     else eval('document.images._img'+this.lists[i].id+'.src = "collapsed.gif"');
  586.       } else {
  587.     if(navigator.appName == "Netscape") layer.document.images[0].src = "expanded.gif";
  588.     else eval('document.images._img'+this.lists[i].id+'.src = "expanded.gif"');
  589.       }
  590.       if(this.lists[i].built)
  591.         currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop);
  592.     }
  593.   }
  594.   return currTop;
  595. }
  596.  
  597. function namosw_l_updateparent(pid, l) {
  598.   var layer;
  599.   if(!l) l = 0;
  600.   this.pid = pid;
  601.   this.l = l;
  602.   for(var i = 0; i < this.types.length; i++)
  603.     if(this.types[i] == "list")
  604.       this.lists[i]._updateParent(pid, l+1);
  605. }
  606.  
  607. function namosw_l_expand(i) {
  608.   document.namosw_lists[i].visible = !document.namosw_lists[i].visible;
  609.   document.namosw_lists[document.namosw_lists[i].pid].rebuild();
  610. }
  611.  
  612. function namosw_l_build(x, y) {
  613.   this._updateParent(this.id);
  614.   this._writeList();
  615.   this._showList();
  616.   this._updateList(true, x, y);
  617.   this.x = x; this.y = y;
  618. }
  619.  
  620. function namosw_l_rebuild() { 
  621.   this._updateList(true, this.x, this.y); 
  622. }
  623.  
  624. function namosw_l_additem(str, url, frame) {
  625.   var testLayer = false;
  626.  
  627.   if (navigator.appName.indexOf("Microsoft") != -1 || !this.parLayer) {
  628.     testLayer = eval('document.all.namoswlistitem'+document.namosw_lists.lid);
  629.   } else {
  630.     testLayer = eval('this.parLayer.document.layers.namoswlistitem'+document.namosw_lists.lid);
  631.   }
  632.   if (testLayer) {
  633.     layer = testLayer;
  634.   } else {
  635.     if(navigator.appName == "Netscape") {
  636.       layer = this.parLayer ? new Layer(this.width, this.parLayer) :
  637.                   new Layer(this.width);
  638.     } else {
  639.       return;
  640.     }
  641.   }
  642.  
  643.   if (url)   layer.url   = url;
  644.   if (frame) layer.frame = frame;
  645.   this.items[this.items.length] = layer;
  646.   this.types[this.types.length] = "item";
  647.   this.strs[this.strs.length] = str;
  648.   if (this.hbgColor) layer.hbgColor = this.hbgColor;
  649.   if (this.bgColor)  layer.oBgColor = this.bgColor;
  650.   namosw_l_set_layer_action(layer);
  651.   document.namosw_lists.lid++;
  652. }
  653.  
  654. function namosw_l_addlist(list, str, url, frame) {
  655.   var testLayer = false;
  656.  
  657.   if (navigator.appName.indexOf("Microsoft") != -1 || !this.parLayer) {
  658.     testLayer = eval('document.all.namoswlistitem'+document.namosw_lists.lid);
  659.   } else {
  660.     testLayer = eval('this.parLayer.document.layers.namoswlistitem'+document.namosw_lists.lid);
  661.   }
  662.   if (testLayer) {
  663.     layer = testLayer;
  664.   } else {
  665.     if(navigator.appName == "Netscape") {
  666.       layer = this.parLayer ? new Layer(this.width, this.parLayer) :
  667.                   new Layer(this.width);
  668.     } else {
  669.       return;
  670.     }
  671.   }
  672.   if (url)   layer.url   = url;
  673.   if (frame) layer.frame = frame;
  674.   this.lists[this.items.length] = list;
  675.   this.items[this.items.length] = layer;
  676.   this.types[this.types.length] = "list";
  677.   this.strs[this.strs.length]   = str;
  678.   list.parent = this;
  679.   if (this.hbgColor) layer.hbgColor = this.hbgColor;
  680.   if (this.bgColor)  layer.oBgColor = this.bgColor;
  681.   namosw_l_set_layer_action(layer);
  682.   document.namosw_lists.lid++;
  683. }
  684.  
  685. function namosw_l_lite()
  686. {
  687.   if (this.over) return;
  688.   if (this.hbgColor) {
  689.     this.over = true;
  690.     if (navigator.appName == "Netscape")
  691.       this.bgColor = this.hbgColor;
  692.     else
  693.       this.style.backgroundColor = this.hbgColor;
  694.   }
  695.   if (this.url) self.status = this.url;
  696. }
  697.  
  698. function namosw_l_unlite()
  699. {
  700.   if (this.hbgColor) {
  701.     this.over = false;
  702.     if (navigator.appName == "Netscape") this.bgColor = this.oBgColor;
  703.     else this.style.backgroundColor = this.oBgColor;
  704.   }
  705.   if (this.url) self.status = '';
  706. }
  707.  
  708. function namosw_l_go()
  709. {
  710.   if (this.url) {
  711.     if (this.url.indexOf('layer:') == 0) {
  712.       var str   = '';
  713.       if (this.frame) str = this.frame + '.';
  714.       var layer = null;
  715.       if (navigator.appName == "Netscape") {
  716.         str += 'document.' + this.url.substring(6, this.url.length);
  717.         layer = eval(str);
  718.         layer.visibility = 'show';
  719.         if (document.namosw_visible_layer && layer != document.namosw_visible_layer)
  720.           document.namosw_visible_layer.visibility = 'hide';
  721.       } else {
  722.         str += 'document.all.' + this.url.substring(6, this.url.length);
  723.         layer = eval(str);
  724.         layer.style.visibility = 'visible';
  725.         if (document.namosw_visible_layer && layer != document.namosw_visible_layer)
  726.           document.namosw_visible_layer.style.visibility = 'hidden';
  727.       }
  728.       document.namosw_visible_layer = layer;
  729.     } else if (this.frame) {
  730.       if (this.frame == 'blank') {
  731.         window.open(this.url, 'remote');
  732.       } else {
  733.         var frame_obj = eval(this.frame);
  734.         frame_obj.location = this.url;
  735.       }
  736.     }
  737.   }
  738. }
  739.  
  740. function namosw_l_set_layer_action(layer)
  741. {
  742.   if (layer.captureEvents)
  743.     layer.captureEvents(Event.MOUSEOVER|Event.MOUSEOUT|Event.MOUSEUP);
  744.   layer.onmouseover = namosw_l_lite;
  745.   layer.onmouseout  = namosw_l_unlite;
  746.   layer.onmouseup   = namosw_l_go;
  747. }
  748.  
  749. function namosw_add_layer_action(layer_str, event_str, action_str, arg1)
  750. {
  751.   var layer = (navigator.appName == 'Netscape') ? document.layers[layer_str] : document.all[layer_str];
  752.   if (layer.namosw_action_array == null) 
  753.     layer.namosw_action_array = new Array;
  754.   var actions = layer.namosw_action_array;
  755.   var i       = actions.length;
  756.   actions[i]            = new String(event_str);
  757.   actions[i].action_str = action_str;
  758.   if (action_str == 'showlayer' || action_str == 'hidelayer') {
  759.     actions[i].target_layer = (navigator.appName == 'Netscape') ? document.layers[arg1] : document.all[arg1];
  760.   } else if (action_str == 'activatetimeline') {
  761.     actions[i].timeline_name = arg1;
  762.   }
  763.   if (layer.captureEvents)
  764.     layer.captureEvents(Event.MOUSEUP);
  765.   layer.onmouseup   = namosw_a_click;
  766.   layer.onmouseover = namosw_a_mouseover;
  767.   layer.onmouseout  = namosw_a_mouseout;
  768. }
  769.  
  770. function namosw_a_mouseover()
  771. {
  772.   var actions = this.namosw_action_array;
  773.   for (var i = 0; i < actions.length; i++) {
  774.     if (actions[i] == 'onmouseover') {
  775.       if (actions[i].action_str == 'showlayer' || actions[i].action_str == 'hidelayer') {
  776.         namosw_show_layer(actions[i].target_layer, actions[i].action_str == 'showlayer');
  777.       }
  778.       else if (actions[i].action_str == 'activatetimeline')
  779.         NamoTime_Play(actions[i].timeline_name);
  780.     }
  781.   }
  782. }
  783.  
  784. function namosw_a_mouseout()
  785. {
  786.   var actions = this.namosw_action_array;
  787.   for (var i = 0; i < actions.length; i++) {
  788.     if (actions[i] == 'onmouseout') {
  789.       if (actions[i].action_str == 'showlayer' || actions[i].action_str == 'hidelayer')
  790.         namosw_show_layer(actions[i].target_layer, actions[i].action_str == 'showlayer');
  791.       else if (actions[i].action_str == 'activatetimeline')
  792.         NamoTime_Play(actions[i].timeline_name);
  793.     }
  794.   }
  795. }
  796.  
  797. function namosw_a_click()
  798. {
  799.   var actions = this.namosw_action_array;
  800.   for (var i = 0; i < actions.length; i++) {
  801.     if (actions[i] == 'onclick') {
  802.       if (actions[i].action_str == 'showlayer' || actions[i].action_str == 'hidelayer')
  803.         namosw_show_layer(actions[i].target_layer, actions[i].action_str == 'showlayer');
  804.       else if (actions[i].action_str == 'activatetimeline')
  805.         NamoTime_Play(actions[i].timeline_name);
  806.     }
  807.   }
  808. }
  809.  
  810. function namosw_show_layer(layer, flag)
  811. {
  812.   if (navigator.appName == 'Netscape')
  813.     layer.visibility = flag ? 'show' : 'hide';
  814.   else
  815.     layer.style.visibility = flag ? 'visible' : 'hidden';
  816. }
  817.  
  818. function namosw_init_layer_action()
  819. {
  820. }
  821.  
  822.