Event.observe
  (window, 'load', function() {
    var sorting;
    sorting={
      byName: function(a,b) {return a[0]-b[0]},
      byTime: function(a,b) {var i=a[2]-b[2]; return i==0 ? sorting.byName(a,b) : i},
      bySize: function(a,b) {var i=a[1]-b[1]; return i==0 ? sorting.byName(a,b) : i}
    };

    var f=function(event) {
      Event.stop(event);
      var el=Event.element(event);
      if( !el.match('span.l0sort') ) el=el.up('span.l0sort');
      if( !el ) return;

      var evenodd=false;
      var tbody=$(el.up('tr').parentNode);
      var nodes=tbody.childElements().select
        (function(el){
	  if( el.match('tr.l0frame') ) return false;
	  if( el.match('tr.l0parent') ) {
	    evenodd=true;
	    return false;
	  }
	  if( el.match('tr') ) {
	    tbody.removeChild(el);
	    if( !el.l0sort ) {
	      el.l0sort=$w(el.readAttribute('l0sort')).map
		(function(n){return parseInt(n)});
	    }
	    el.removeClassName('even');
	    el.removeClassName('odd');
	    return true;
	  }
	  return false;
	});

      var order=parseInt(el.readAttribute('l0order'));
      var sort=sorting[el.readAttribute('l0sort')];
      nodes.sort(function(a,b) {return order*sort(a.l0sort,b.l0sort)});

      for( var i=0; i<nodes.length; i++ ) {
	tbody.appendChild(nodes[i].addClassName(evenodd?'even':'odd'));
	evenodd=!evenodd;
      }
    };
    $$('span.l0sort').each(function(el) {el.observe('click', f)});
  });

