/* Todo:
 * - make more standards compliant in event handler and .className code
 */

function addCollapsibleTables( ) {
  if( document.getElementsByTagName ) {
    var tables = document.getElementsByTagName("table");
    var collapseAllAdded = false;
    for( var i = 0; i < tables.length; ++i ) {
      var tbodys = tables[ i ].getElementsByTagName("tbody");
      var collapsibleChildren = false;

      for( var j = 0; j < tbodys.length; ++j ) {
        if( hasClass( tbodys[ j ].className, "collapsible" ) && tbodys[ j ].addEventListener ) {
          collapsibleChildren = true;
          var trs = tbodys[ j ].getElementsByTagName("tr");

          for( var k = 0; k < trs.length; ++k ) {
            if( hasClass( trs[ k ].className, "header-row" ) && hasClass( trs[ k ].className, "no-collapse" ) ) {
              var button = document.createElement( "input" );
              button.setAttribute( "type", "button" );
              button.setAttribute( "value", " - " );
              button.setAttribute( "class", "collapse-button noprint" );
              button.onclick = collapseTable;
              var th = trs[ k ].getElementsByTagName("th")[0];
              th.insertBefore( button, th.firstChild );
            }
          }
        }
      }

      if( collapsibleChildren && !collapseAllAdded ) {
        var p = document.createElement( "p" );

        var collapseAll = document.createElement( "input" );
        collapseAll.setAttribute( "type", "button" );
        collapseAll.setAttribute( "value", "Collapse All" );
        collapseAll.setAttribute( "class", "noprint" );
        collapseAll.onclick = collapseAllTables;
        p.appendChild( collapseAll );
        p.appendChild( document.createTextNode( "\xA0" ) );

        var expandAll = document.createElement( "input" );
        expandAll.setAttribute( "type", "button" );
        expandAll.setAttribute( "value", "Expand All" );
        expandAll.setAttribute( "class", "noprint" );
        expandAll.onclick = expandAllTables;
        p.appendChild( expandAll );

        tables[ i ].parentNode.insertBefore( p, tables[ i ] );
        collapseAllAdded = true;
      }
    }
  }
}
windowLoad.functions[ windowLoad.functions.length ] = addCollapsibleTables;

function collapseTable( event ) {
  // this will only be called if document.getElementsByTagName is defined

  var button = event.target;
  // tbody.tr.th.button
  var tbody = button.parentNode.parentNode.parentNode;
  tbody.className += " collapse-children";
  button.value = " + ";
  button.onclick = expandTable;
}

function expandTable( event ) {
  // this will only be called if document.getElementsByTagName is defined

  var button = event.target;
  // tbody.tr.th.button
  var tbody = button.parentNode.parentNode.parentNode;
  tbody.className = removeClass( tbody.className, "collapse-children" );
  button.value = " - ";
  button.onclick = collapseTable;
}

function collapseAllTables( ) {
  var tbodys = document.getElementsByTagName("tbody");
  for( var i = 0; i < tbodys.length; ++i ) {
    if( hasClass( tbodys[ i ].className, "collapsible" ) ) {
      tbodys[ i ].className += " collapse-children";
      var buttons = tbodys[ i ].getElementsByTagName("input");
      for( var j = 0; j < buttons.length; ++j ) {
        if( hasClass( buttons[ j ].className, "collapse-button" ) ) {
          buttons[ j ].value = " + ";
          buttons[ j ].onclick = expandTable;
        }
      }
    }
  }
}

function expandAllTables( ) {
  var tbodys = document.getElementsByTagName("tbody");
  for( var i = 0; i < tbodys.length; ++i ) {
    if( hasClass( tbodys[ i ].className, "collapse-children" ) ) {
      tbodys[ i ].className = removeClass( tbodys[ i ].className, "collapse-children" );
      var buttons = tbodys[ i ].getElementsByTagName("input");
      for( var j = 0; j < buttons.length; ++j ) {
        if( hasClass( buttons[ j ].className, "collapse-button" ) ) {
          buttons[ j ].value = " - ";
          buttons[ j ].onclick = collapseTable;
        }
      }
    }
  }
}
