home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 July / Chip_2000-07_cd.bin / servis / tipy / web / list.js < prev    next >
Text File  |  2000-04-03  |  8KB  |  233 lines

  1. var _id = 0, _pid = 0, _lid = 0, _pLayer;
  2. var _mLists = new Array();
  3. document.lists = _mLists;
  4. var isNav4, isIE4;
  5. if (parseInt(navigator.appVersion.charAt(0)) >= 4) {
  6.   isNav4 = (navigator.appName == "Netscape") ? true : false;
  7.   isIE4 = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
  8. }
  9.  
  10. function List(visible, width, height, bgColor) {
  11.   this.setIndent = setIndent;
  12.   this.addItem = addItem;
  13.   this.addList = addList;
  14.   this.build = build;
  15.   this.rebuild = rebuild;
  16.   this.setFont = _listSetFont;
  17.   this._writeList = _writeList;
  18.   this._showList = _showList;
  19.   this._updateList = _updateList;
  20.   this._updateParent = _updateParent;
  21.   this.onexpand = null; this.postexpand = null;
  22.   this.lists = new Array(); // sublists
  23.   this.items = new Array(); // layers
  24.   this.types = new Array(); // type
  25.   this.strs = new Array();  // content
  26.   this.x = 0;
  27.   this.y = 0;
  28.   this.visible = visible;
  29.   this.id = _id;
  30.   this.i = 14;
  31.   this.space = false;
  32.   this.pid = 0;
  33.   this.fontIntro = false;
  34.   this.fontOutro = false;
  35.   this.width = 100;
  36.   this.height = 22;
  37.   this.parLayer = false;
  38.   this.built = false;
  39.   this.shown = false;
  40.   this.needsUpdate = false;
  41.   this.needsRewrite = false;
  42.   this.parent = null;
  43.   this.l = 0;
  44.   if(bgColor) this.bgColor = bgColor;
  45.   else this.bgColor = null;
  46.   _mLists[_id++] = this;
  47. }
  48.  
  49. function _listSetFont(i,j) {
  50.   this.fontIntro = i;
  51.   this.fontOutro = j;
  52. }
  53.  
  54. function setIndent(indent) { this.i = indent; if(this.i < 0) 
  55.                 { this.i = 0; this.space = false; } }
  56.  
  57. function setClip(layer, l, r, t, b) {
  58.   if(isNav4) {
  59.     layer.clip.left = l; layer.clip.right = r;
  60.     layer.clip.top = t;  layer.clip.bottom = b;
  61.   } else {
  62.     layer.style.pixelWidth = r-l;
  63.     layer.style.pixelHeight = b-t;
  64.     layer.style.clip = "rect("+t+","+r+","+b+","+l+")";
  65.   }
  66. }
  67.  
  68. function _writeList() {
  69.   self.status = "List: Writing list...";
  70.   var layer, str, clip;
  71.   for(var i = 0; i < this.types.length; i++) { 
  72.     layer = this.items[i];
  73.     if(isNav4) layer.visibility = "hidden";
  74.     else layer.style.visibility = "hidden";
  75.     str = "";
  76.     if(isNav4) layer.document.open();
  77.     str += "<TABLE WIDTH="+this.width+" NOWRAP BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>";
  78.     if(this.types[i] == "list") {
  79.       str += "<TD WIDTH=15 NOWRAP VALIGN=MIDDLE><A TARGET='_self' onmouseover=\"window.status='"+this.strs[i]+"'; return true;\" HREF=\"javascript:expand("+this.lists[i].id+");\"> <IMG WIDTH=9 HEIGHT=9 BORDER=0 SRC=\"true.gif\" NAME=\"_img"+this.lists[i].id+"\"></A></TD>";
  80.       _pid++;
  81.     } else if(this.space)
  82.       str += "<TD WIDTH=15 NOWRAP> </TD>";
  83.     if(this.l>0 && this.i>0) str += "<TD WIDTH="+this.l*this.i+" NOWRAP> </TD>";
  84.     str += "<TD HEIGHT="+(this.height-3)+" WIDTH="+(this.width-15-this.l*this.i)+" VALIGN=MIDDLE ALIGN=LEFT>";
  85.     if(this.fontIntro) str += this.fontIntro;
  86.       if(this.types[i] == "list") 
  87.         str += "<A TARGET='_self' onmouseover=\"window.status='"+this.strs[i]+"'; return true;\" HREF=\"javascript:expand("+(i+1)+");\">"+this.strs[i]+"</A>"
  88.       else
  89.         str += "<A TARGET='obsah' onmouseover=\"window.status=''; return true;\" HREF='./obsah.html'>"+this.strs[i]+"</A>";
  90.     if(this.fontOutro) str += this.fontOutro;
  91.     str += "</TD></TABLE>";
  92.     if(isNav4) {
  93.       layer.document.writeln(str);
  94.       layer.document.close();
  95.     } else layer.innerHTML = str;
  96.     if(this.types[i] == "list" && this.lists[i].visible)
  97.       this.lists[i]._writeList();
  98.   }
  99.   this.built = true;
  100.   this.needsRewrite = false;
  101.   self.status = '';
  102. }
  103.  
  104. function _showList() {
  105.   var layer;
  106.   for(var i = 0; i < this.types.length; i++) { 
  107.     layer = this.items[i];
  108.     setClip(layer, 0, this.width, 0, this.height-1);
  109.     var bg = layer.oBgColor || this.bgColor;
  110.     if(isIE4) {
  111.       if((bg == null) || (bg == "null")) bg = "";
  112.       layer.style.backgroundColor = bg;
  113.     } else layer.document.bgColor = "";//bg;
  114.     if(this.types[i] == "list" && this.lists[i].visible)
  115.       this.lists[i]._showList();
  116.   }
  117.   this.shown = true;
  118.   this.needsUpdate = false;
  119. }
  120.  
  121. function _updateList(pVis, x, y) {
  122.   var currTop = y, layer;
  123.   for(var i = 0; i < this.types.length; i++) { 
  124.     layer = this.items[i];
  125.     if(this.visible && pVis) {
  126.       if(isNav4) {
  127.         layer.visibility = "visible";
  128.         layer.top = currTop;
  129.         layer.left = x;
  130.       } else {
  131.         layer.style.visibility = "visible";
  132.         layer.style.pixelTop = currTop;
  133.         layer.style.pixelLeft = x;
  134.       }
  135.       currTop += this.height;
  136.     } else {
  137.       if(isNav4) layer.visibility = "hidden";
  138.       else layer.style.visibility = "hidden";
  139.     }
  140.     if(this.types[i] == "list") {
  141.       if(isNav4) layer.document.images[0].src = "false.gif";
  142.       else eval('document.images._img'+this.lists[i].id+'.src = "false.gif"');
  143.       if(this.lists[i].visible) {
  144.         if(!this.lists[i].built || this.lists[i].needsRewrite) this.lists[i]._writeList();
  145.         if(!this.lists[i].shown || this.lists[i].needsUpdate) this.lists[i]._showList();
  146.         if(isNav4) layer.document.images[0].src = "true.gif";
  147.         else eval('document.images._img'+this.lists[i].id+'.src = "true.gif"');
  148.       } else {
  149.         if(isNav4) layer.document.images[0].src = "false.gif";
  150.         else eval('document.images._img'+this.lists[i].id+'.src = "false.gif"');
  151.       }
  152.       if(this.lists[i].built)
  153.         currTop = this.lists[i]._updateList(this.visible && pVis, x, currTop);
  154.     }
  155.   }
  156.   return currTop;
  157. }
  158.  
  159. function _updateParent(pid, l) {
  160.   var layer;
  161.   if(!l) l = 0;
  162.   this.pid = pid;
  163.   this.l = l;
  164.   for(var i = 0; i < this.types.length; i++)
  165.     if(this.types[i] == "list")
  166.       this.lists[i]._updateParent(pid, l+1);
  167. }
  168.  
  169. function expand(i) {
  170.   _mLists[i].visible = !_mLists[i].visible;
  171.   if(_mLists[i].onexpand != null) _mLists[i].onexpand(_mLists[i].id);
  172.   _mLists[_mLists[i].pid].rebuild();
  173.   if(_mLists[i].postexpand != null) _mLists[i].postexpand(_mLists[i].id);
  174. }
  175.  
  176. function build(x, y) {
  177.   this._updateParent(this.id);
  178.   this._writeList();
  179.   this._showList();
  180.   this._updateList(true, x, y);
  181.   this.x = x; this.y = y;
  182. }
  183.  
  184. function rebuild() { this._updateList(true, this.x, this.y); }
  185. function addItem(str, bgColor, layer) {
  186.   var testLayer = false;
  187.   if(!document.all) document.all = document.layers;
  188.   if(!layer) {
  189.     if(isIE4 || !this.parLayer) testLayer = eval('document.all.lItem'+_lid);
  190.     else {
  191.       _pLayer = this.parLayer;
  192.       testLayer = eval('_pLayer.document.layers.lItem'+_lid);
  193.     }
  194.     if(testLayer) layer = testLayer;
  195.     else {
  196.       if(isNav4) {
  197.         if(this.parLayer) layer = new Layer(this.width, this.parLayer);
  198.         else layer = new Layer(this.width);
  199.       } else return;
  200.     }
  201.   }
  202.   if(bgColor) layer.oBgColor = bgColor;
  203.   this.items[this.items.length] = layer;
  204.   this.types[this.types.length] = "item";
  205.   this.strs[this.strs.length] = str;
  206.   _lid++;
  207. }
  208.  
  209. function addList(list, str, bgColor, layer) {
  210.   var testLayer = false;
  211.   if(!document.all) document.all = document.layers;
  212.   if(!layer) {
  213.     if(isIE4 || !this.parLayer) testLayer = eval('document.all.lItem'+_lid);
  214.     else {
  215.       _pLayer = this.parLayer;
  216.       testLayer = eval('_pLayer.document.layers.lItem'+_lid);
  217.     }
  218.     if(testLayer) layer = testLayer;
  219.     else {
  220.       if(isNav4) {
  221.         if(this.parLayer) layer = new Layer(this.width, this.parLayer);
  222.         else layer = new Layer(this.width);
  223.       } else return;
  224.     }
  225.   }
  226.   if(bgColor) layer.oBgColor = bgColor;
  227.   this.lists[this.items.length] = list;
  228.   this.items[this.items.length] = layer;
  229.   this.types[this.types.length] = "list";
  230.   this.strs[this.strs.length] = str;
  231.   list.parent = this;
  232.   _lid++;
  233. }