<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FGUI_Components%2FTree_Table</id>
		<title>JavaScript DHTML/GUI Components/Tree Table - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FGUI_Components%2FTree_Table"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/GUI_Components/Tree_Table&amp;action=history"/>
		<updated>2026-04-04T20:56:54Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/GUI_Components/Tree_Table&amp;diff=2550&amp;oldid=prev</id>
		<title> в 10:00, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/GUI_Components/Tree_Table&amp;diff=2550&amp;oldid=prev"/>
				<updated>2010-05-26T10:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 10:00, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/GUI_Components/Tree_Table&amp;diff=2551&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/GUI_Components/Tree_Table&amp;diff=2551&amp;oldid=prev"/>
				<updated>2010-05-26T07:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Tree table Demo==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Document sans titre&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- extendedArray.js --&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
function array_contains(obj)&lt;br /&gt;
{&lt;br /&gt;
  for (var i = 0; i &amp;lt; this.length; i++)&lt;br /&gt;
  {&lt;br /&gt;
     if (this[i] == obj) return i;&lt;br /&gt;
  }&lt;br /&gt;
  return -1;&lt;br /&gt;
}&lt;br /&gt;
Array.prototype.contains = array_contains;&lt;br /&gt;
function array_remove(obj)&lt;br /&gt;
{&lt;br /&gt;
    var index = this.contains(obj);&lt;br /&gt;
    if(index &amp;gt; -1)&lt;br /&gt;
        this.splice(index, 1);&lt;br /&gt;
}&lt;br /&gt;
Array.prototype.remove = array_remove;&lt;br /&gt;
// using this function ensure that you won&amp;quot;t add an element which already exists in the array&lt;br /&gt;
function array_add(obj)&lt;br /&gt;
{&lt;br /&gt;
    var index = this.contains(obj);&lt;br /&gt;
    if(index == -1)&lt;br /&gt;
        this.push(obj);&lt;br /&gt;
}&lt;br /&gt;
Array.prototype.add = array_add;&lt;br /&gt;
function array_to_string()&lt;br /&gt;
{&lt;br /&gt;
    var result = &amp;quot;&amp;quot;;&lt;br /&gt;
  for (var i = 0; i &amp;lt; this.length; i++)&lt;br /&gt;
  {&lt;br /&gt;
     result += this[i] + &amp;quot; ; &amp;quot;;&lt;br /&gt;
     //log(this[i]);&lt;br /&gt;
  }&lt;br /&gt;
  return result;&lt;br /&gt;
}&lt;br /&gt;
Array.prototype.to_string = array_to_string;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- treetable.js --&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
var open_nodes = new Array();&lt;br /&gt;
// ICONS&lt;br /&gt;
var FOLDER_CLSD_PIC = &amp;quot;treeTableImages/icon_arrowfolderclosed1_sml.gif&amp;quot;;&lt;br /&gt;
var FOLDER_OPEN_PIC = &amp;quot;treeTableImages/icon_arrowfolderopen2_sml.gif&amp;quot;;&lt;br /&gt;
var DOC_PIC = &amp;quot;treeTableImages/icon_doc_sml.gif&amp;quot;;&lt;br /&gt;
// highlighting&lt;br /&gt;
var normalColor = &amp;quot;#E6F2FF&amp;quot;;&lt;br /&gt;
var highlightColor = &amp;quot;#C6D2DF&amp;quot;;&lt;br /&gt;
// Regular Expressions&lt;br /&gt;
// specify how the id are encoded to represent the path of the tree&lt;br /&gt;
// ususally we just need to change TREE_PATH_SEP&lt;br /&gt;
var RE_PATH = &amp;quot;[0-9]+&amp;quot;; &lt;br /&gt;
var TREE_PATH_SEP  = &amp;quot;.&amp;quot;;&lt;br /&gt;
// This method should be called when a click occurs on the folder icon (or something equivalent!)&lt;br /&gt;
// e is the event and elm is the element on which the event occured&lt;br /&gt;
function toggleRows(e, elm)&lt;br /&gt;
{&lt;br /&gt;
    // first we check if we moved the mouse during the click as it signifies that it is a dnd and not a click&lt;br /&gt;
  if(mouseMoved(e))&lt;br /&gt;
    return;&lt;br /&gt;
    var toggledRow = find_ancestor(&amp;quot;tr&amp;quot;, elm);&lt;br /&gt;
    var id = toggledRow.id;  // the id of the row we are toggling (it contains the path)&lt;br /&gt;
    var name = toggledRow.getAttribute(&amp;quot;name&amp;quot;);&lt;br /&gt;
    var rows = find_ancestor(&amp;quot;table&amp;quot;, elm).getElementsByTagName(&amp;quot;TR&amp;quot;);&lt;br /&gt;
    // regular expression representing the id of the children of toggledRow&lt;br /&gt;
    var idToggledRE = id.slice(0, id.length) + RE_PATH;&lt;br /&gt;
    if(open_nodes.contains(name) &amp;gt; -1) // the element was opened -&amp;gt; closing&lt;br /&gt;
    {&lt;br /&gt;
        elm.style.backgroundImage = &amp;quot;url(&amp;quot;+FOLDER_CLSD_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
        for (var i = 0; i &amp;lt; rows.length; i++)&lt;br /&gt;
        {&lt;br /&gt;
          var currentRow = rows[i];&lt;br /&gt;
          if (matchStart(currentRow.id, idToggledRE, false)) // if currentRow is a child of toggledRow&lt;br /&gt;
          {&lt;br /&gt;
              currentRow.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      open_nodes.remove(name);&lt;br /&gt;
    }&lt;br /&gt;
    else // opening&lt;br /&gt;
    {&lt;br /&gt;
        // trick to avoid a problem of display after a restore when a folder become a doc as he is empty&lt;br /&gt;
        if(elm.getAttribute(&amp;quot;class&amp;quot;) != &amp;quot;folder&amp;quot;){&lt;br /&gt;
            open_nodes.remove(name);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        elm.style.backgroundImage = &amp;quot;url(&amp;quot;+FOLDER_OPEN_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
        for (var i = 0; i &amp;lt; rows.length; i++)&lt;br /&gt;
        {&lt;br /&gt;
          var currentRow = rows[i];&lt;br /&gt;
          var currentIconLink = currentRow.getElementsByTagName(&amp;quot;A&amp;quot;)[0];&lt;br /&gt;
          if (matchStart(currentRow.id, idToggledRE, true)) // if currentRow is a child of toggledRow&lt;br /&gt;
          {&lt;br /&gt;
              if (document.all)&lt;br /&gt;
                  currentRow.style.display = &amp;quot;block&amp;quot;; //IE4+ specific code&lt;br /&gt;
               else&lt;br /&gt;
                  currentRow.style.display = &amp;quot;table-row&amp;quot;;&lt;br /&gt;
                  &lt;br /&gt;
               // this is just to be sure that we have the right icon (maybe not necessary)&lt;br /&gt;
               if(currentIconLink.getAttribute(&amp;quot;class&amp;quot;) != &amp;quot;folder&amp;quot;)&lt;br /&gt;
                  currentIconLink.style.backgroundImage = &amp;quot;url(&amp;quot;+DOC_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
               &lt;br /&gt;
               // reopen the rows which where already opened &lt;br /&gt;
               if (open_nodes.contains(currentRow.getAttribute(&amp;quot;name&amp;quot;)) &amp;gt; -1)&lt;br /&gt;
               {&lt;br /&gt;
                  open_nodes.remove(currentRow.getAttribute(&amp;quot;name&amp;quot;));&lt;br /&gt;
                  toggleRows(null, currentIconLink);&lt;br /&gt;
               }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
      open_nodes.add(name);&lt;br /&gt;
    }&lt;br /&gt;
    // ignore the selectRow event as it was a toggling event&lt;br /&gt;
    ignoreSelectRowEvt = true;&lt;br /&gt;
}&lt;br /&gt;
// return the first element of the collection with an attribute &amp;quot;name&amp;quot; correponding to name&lt;br /&gt;
function findElementByName(collection, name)&lt;br /&gt;
{&lt;br /&gt;
    for (var i = 0; i &amp;lt; collection.length; i++)&lt;br /&gt;
    {&lt;br /&gt;
        if(collection[i].getAttribute(&amp;quot;name&amp;quot;) == name){&lt;br /&gt;
            return collection[i];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// pattern is a string containing a regular expression without the &amp;quot;/&amp;quot; at the beginning and the end&lt;br /&gt;
// returns true if target begin with pattern, false else. Moreover if matchDirectChildrenOnly=true&lt;br /&gt;
// we return false if the target is not a direct child.&lt;br /&gt;
function matchStart(target, pattern, matchDirectChildrenOnly)&lt;br /&gt;
{&lt;br /&gt;
   var patternObj = eval(&amp;quot;/^&amp;quot;+pattern+&amp;quot;/&amp;quot;);&lt;br /&gt;
   if (!target.match(patternObj)) return false;&lt;br /&gt;
   if (!matchDirectChildrenOnly) return true;&lt;br /&gt;
   var extendedPattern = eval(&amp;quot;/^&amp;quot;+pattern+&amp;quot;[&amp;quot;+TREE_PATH_SEP+&amp;quot;]&amp;quot;+RE_PATH+&amp;quot;/&amp;quot;);&lt;br /&gt;
   if (target.match(extendedPattern)) return false;&lt;br /&gt;
   return true;&lt;br /&gt;
}&lt;br /&gt;
function collapseAllRows()&lt;br /&gt;
{&lt;br /&gt;
   var rows = document.getElementsByTagName(&amp;quot;TR&amp;quot;);&lt;br /&gt;
   var pattern = eval(&amp;quot;/^[0-9]+[&amp;quot;+TREE_PATH_SEP+&amp;quot;]&amp;quot;+RE_PATH+&amp;quot;/&amp;quot;);&lt;br /&gt;
   var patternFirstLevel = eval(&amp;quot;/^&amp;quot;+RE_PATH+&amp;quot;[&amp;quot;+TREE_PATH_SEP+&amp;quot;]$/&amp;quot;);&lt;br /&gt;
   for (var j = 0; j &amp;lt; rows.length; j++)&lt;br /&gt;
   {&lt;br /&gt;
      var r = rows[j];&lt;br /&gt;
      if (r.id.match(pattern))&lt;br /&gt;
      {&lt;br /&gt;
         r.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
         if(r.getElementsByTagName(&amp;quot;A&amp;quot;)[0].getAttribute(&amp;quot;class&amp;quot;)==&amp;quot;folder&amp;quot;)&lt;br /&gt;
            r.getElementsByTagName(&amp;quot;A&amp;quot;)[0].style.backgroundImage = &amp;quot;url(&amp;quot;+FOLDER_CLSD_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
    else &lt;br /&gt;
      r.getElementsByTagName(&amp;quot;A&amp;quot;)[0].style.backgroundImage = &amp;quot;url(&amp;quot;+DOC_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
      }else if (r.id.match(patternFirstLevel))&lt;br /&gt;
      {&lt;br /&gt;
         r.getElementsByTagName(&amp;quot;A&amp;quot;)[0].style.backgroundImage = &amp;quot;url(&amp;quot;+FOLDER_CLSD_PIC+&amp;quot;)&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   open_nodes = new Array();&lt;br /&gt;
}&lt;br /&gt;
function openAllRows()&lt;br /&gt;
{&lt;br /&gt;
   var rows = document.getElementsByTagName(&amp;quot;TR&amp;quot;);&lt;br /&gt;
   var pattern = eval(&amp;quot;/^&amp;quot;+RE_PATH+&amp;quot;[&amp;quot;+TREE_PATH_SEP+&amp;quot;]/&amp;quot;);&lt;br /&gt;
   var patternFirstLevel = eval(&amp;quot;/^&amp;quot;+RE_PATH+&amp;quot;[&amp;quot;+TREE_PATH_SEP+&amp;quot;]$/&amp;quot;);&lt;br /&gt;
   var firstLevelRows = new Array();&lt;br /&gt;
   open_nodes = new Array();&lt;br /&gt;
   for (var i = 0; i &amp;lt; rows.length; i++)&lt;br /&gt;
   {&lt;br /&gt;
      var r = rows[i];&lt;br /&gt;
      if (r.id.match(patternFirstLevel))&lt;br /&gt;
      {&lt;br /&gt;
         firstLevelRows.push(r);&lt;br /&gt;
      }&lt;br /&gt;
      else if (r.id.match(pattern))&lt;br /&gt;
      {&lt;br /&gt;
         open_nodes.add(r.getAttribute(&amp;quot;name&amp;quot;));&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   for (var j = 0; j &amp;lt; firstLevelRows.length; j++)&lt;br /&gt;
      toggleRows(null,firstLevelRows[j].getElementsByTagName(&amp;quot;A&amp;quot;)[0]);&lt;br /&gt;
}&lt;br /&gt;
// restore the state of the tree depending on open_nodes&lt;br /&gt;
// take all the nodes of first level and for each reopen or close it depending on &lt;br /&gt;
// the open_nodes list. Moreover we call toggleRows to restore the state of the children nodes.&lt;br /&gt;
function restore(){&lt;br /&gt;
  var rows = document.getElementsByTagName(&amp;quot;TR&amp;quot;);&lt;br /&gt;
     var pattern = eval(&amp;quot;/^&amp;quot;+RE_PATH+&amp;quot;[&amp;quot;+TREE_PATH_SEP+&amp;quot;]$/&amp;quot;);&lt;br /&gt;
  for (var j = 0; j &amp;lt; rows.length; j++)&lt;br /&gt;
  {&lt;br /&gt;
     var r = rows[j];&lt;br /&gt;
     if (r.id.match(pattern)) // first level &lt;br /&gt;
     {&lt;br /&gt;
      // as toggleRows() will check open_nodes to know wheter it has to open or close the node, &lt;br /&gt;
      // we have to do the opposite before because we just want to restore the state and not to really toggle it&lt;br /&gt;
        if (open_nodes.contains(r.getAttribute(&amp;quot;name&amp;quot;)) &amp;gt; -1)&lt;br /&gt;
           open_nodes.remove(r.getAttribute(&amp;quot;name&amp;quot;));&lt;br /&gt;
        else&lt;br /&gt;
           open_nodes.add(r.getAttribute(&amp;quot;name&amp;quot;));&lt;br /&gt;
        toggleRows(null, r.getElementsByTagName(&amp;quot;A&amp;quot;)[0]);&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// This method should be used with an onclick event for your tables rows (TR)&lt;br /&gt;
// in order to have them visually selected&lt;br /&gt;
var selectedRow;&lt;br /&gt;
var ignoreSelectRowEvt = false; // set this variable to true if you want to ignore the next selectRow event&lt;br /&gt;
function selectRow(row)&lt;br /&gt;
{&lt;br /&gt;
    if(ignoreSelectRowEvt){&lt;br /&gt;
        ignoreSelectRowEvt = false;&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if(selectedRow)&lt;br /&gt;
        selectedRow.style.backgroundColor = normalColor;&lt;br /&gt;
    &lt;br /&gt;
    // if we are deselecting&lt;br /&gt;
    if(selectedRow &amp;amp;&amp;amp; selectedRow.id == row.id)&lt;br /&gt;
    {&lt;br /&gt;
        selectedRow = null;&lt;br /&gt;
    }else{&lt;br /&gt;
        selectedRow = row;&lt;br /&gt;
        row.style.backgroundColor = highlightColor;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- utils.js --&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
// return the first ancestor tag (tagAnc) of obj&lt;br /&gt;
function find_ancestor(tagAnc, obj)&lt;br /&gt;
{&lt;br /&gt;
   var exit = false;&lt;br /&gt;
   var parent = obj;&lt;br /&gt;
   while (!exit)&lt;br /&gt;
   {&lt;br /&gt;
      parent = parent.parentNode;&lt;br /&gt;
      if (parent.tagName == tagAnc.toLowerCase() || parent.tagName == tagAnc.toUpperCase())&lt;br /&gt;
         return parent;&lt;br /&gt;
      if (parent.tagName == &amp;quot;HTML&amp;quot; || parent.tagName == &amp;quot;html&amp;quot;)&lt;br /&gt;
         return null;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
function log(txt, divName)&lt;br /&gt;
{&lt;br /&gt;
   if (!divName) var divName = &amp;quot;console&amp;quot;;&lt;br /&gt;
   $(divName).innerHTML += &amp;quot;&amp;lt;br&amp;gt;&amp;quot; + txt;&lt;br /&gt;
}&lt;br /&gt;
var clicX = 0;&lt;br /&gt;
var clicY = 0;&lt;br /&gt;
function storeMouseXY(e)&lt;br /&gt;
{&lt;br /&gt;
   if (!e) var e = window.event; &lt;br /&gt;
  if (e.pageX || e.pageY)&lt;br /&gt;
  {&lt;br /&gt;
    clicX = e.pageX;&lt;br /&gt;
    clicY = e.pageY;&lt;br /&gt;
  }&lt;br /&gt;
  else if (e.clientX || e.clientY)&lt;br /&gt;
  {&lt;br /&gt;
    clicX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
    clicY = e.clientY + document.body.scrollTop;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// return true if the mouse moved more than 3 pixels in one direction between the beginning&lt;br /&gt;
// of the event and the end of the envent&lt;br /&gt;
// WARNING : in order to use this method you should use onmousedown=&amp;quot;storeMouseXY(event); in the &lt;br /&gt;
// element where is called mouseMoved...&lt;br /&gt;
function mouseMoved(e)&lt;br /&gt;
{&lt;br /&gt;
  if(e){&lt;br /&gt;
      var oldx = clicX, oldy = clicY;&lt;br /&gt;
      storeMouseXY(e);&lt;br /&gt;
      if(Math.abs(clicX-oldx) &amp;gt; 3 || Math.abs(clicY-oldy) &amp;gt; 3)&lt;br /&gt;
          return true;&lt;br /&gt;
    }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
// get the id of the obj, i.e. the corresponding id in the db&lt;br /&gt;
function getDB_ID(obj)&lt;br /&gt;
{&lt;br /&gt;
   // look for a parent TR&lt;br /&gt;
   var parentTR;&lt;br /&gt;
   if (obj.tagName == &amp;quot;tr&amp;quot; || obj.tagName == &amp;quot;TR&amp;quot;)&lt;br /&gt;
      parentTR = obj;&lt;br /&gt;
   else&lt;br /&gt;
      parentTR = find_ancestor(&amp;quot;tr&amp;quot;, obj);&lt;br /&gt;
  return parentTR.id;&lt;br /&gt;
   // look for a child with name ops&lt;br /&gt;
   var children = parentTR.getElementsByTagName(&amp;quot;td&amp;quot;);&lt;br /&gt;
   var ops = null;&lt;br /&gt;
   for (var i = 0; i &amp;lt; children.length; i++)&lt;br /&gt;
   {&lt;br /&gt;
      if (children[i].getAttribute(&amp;quot;name&amp;quot;) &amp;amp;&amp;amp; children[i].getAttribute(&amp;quot;name&amp;quot;).toUpperCase() == &amp;quot;OPS&amp;quot;)&lt;br /&gt;
      {&lt;br /&gt;
         ops = children[i];&lt;br /&gt;
         break;&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
   return ops.firstChild.value;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt; &lt;br /&gt;
&amp;lt;style media=&amp;quot;all&amp;quot; rel=&amp;quot;Stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
.folder { background: url(../treeTableImages/icon_arrowfolderclosed1_sml.gif)  no-repeat; float: left; height: 15px; width: 33px; padding-right: 3px; ! important}&lt;br /&gt;
.doc { background: url(../treeTableImages/icon_doc_sml.gif) no-repeat; float: left; height: 15px; width: 15px; padding-right: 3px; margin-left: 0px; ! important}&lt;br /&gt;
.tier0 {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.tier1 {&lt;br /&gt;
  margin-left: 1.5em;&lt;br /&gt;
}&lt;br /&gt;
.tier2 {&lt;br /&gt;
  margin-left: 3em;&lt;br /&gt;
}&lt;br /&gt;
.tier3 {&lt;br /&gt;
  margin-left: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
.tier4 {&lt;br /&gt;
  margin-left: 6em;&lt;br /&gt;
}&lt;br /&gt;
.tier5 {&lt;br /&gt;
  margin-left: 7.5em;&lt;br /&gt;
}&lt;br /&gt;
.tier6 {&lt;br /&gt;
  margin-left: 9em;&lt;br /&gt;
}&lt;br /&gt;
.tier7 {&lt;br /&gt;
  margin-left: 10.5em;&lt;br /&gt;
}&lt;br /&gt;
.tier8 {&lt;br /&gt;
  margin-left: 12em;&lt;br /&gt;
}&lt;br /&gt;
.tier9 {&lt;br /&gt;
  margin-left: 13.5em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body onload=&amp;quot;collapseAllRows();&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;0.&amp;quot; name=&amp;quot;r1&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;tier0&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;toggleRows(event, this)&amp;quot; onmousedown=&amp;quot;storeMouseXY(event); return false;&amp;quot; class=&amp;quot;folder&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;a4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;0.0.&amp;quot; name=&amp;quot;r2&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;div class=&amp;quot;tier1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;toggleRows(event, this)&amp;quot; onmousedown=&amp;quot;storeMouseXY(event); return false;&amp;quot; class=&amp;quot;folder&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;b4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;0.0.0.&amp;quot; name=&amp;quot;r3&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;div class=&amp;quot;tier2&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;toggleRows(event, this)&amp;quot; onmousedown=&amp;quot;storeMouseXY(event); return false;&amp;quot; class=&amp;quot;folder&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;c4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr id=&amp;quot;0.0.0.0.&amp;quot; name=&amp;quot;r4&amp;quot;&amp;gt; &lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;div class=&amp;quot;tier3&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;#&amp;quot; onclick=&amp;quot;toggleRows(event, this)&amp;quot; onmousedown=&amp;quot;storeMouseXY(event); return false;&amp;quot; class=&amp;quot;doc&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d1&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d2&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d3&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;d4&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&amp;lt;A href=&amp;quot;http://www.wbex.ru/Code/JavaScriptDownload/treetable.zip&amp;quot;&amp;gt;treetable.zip( 10 k)&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>