codice:

var tableScroll = (function(){
   var global = this, finalise, tableList = {};
   var notOnScroll = true, notAbort = true;
   var overrideStyles = {
      margin:[{keys:['margin','marginBottom','marginLeft','marginRight','marginTop'],value:'0px'}],
      padding:[{keys:['padding','paddingBottom','paddingLeft','paddingRight','paddingTop'],value:'0px'}],
      border:[
         {keys:['border','borderBottom','borderLeft','borderRight','borderTop'],value:'0px none #FFFFFF'},
         {keys:['borderWidth','borderLeftWidth','borderRightWidth','borderBottomWidth','borderTopWidth'],value:'0px'},
         {keys:['borderStyle','borderRightStyle','borderLeftStyle','borderBottomStyle','borderTopStyle'],value:'none'}
      ],
      overflow:[{keys:['overflow'],value:'hidden'}],
      positionRel:[{keys:['position'],value:'relative'}],
      positionAbs:[{keys:['position'],value:'absolute'}],
      top:[{keys:['top'],value:'0px'}],
      left:[{keys:['left'],value:'0px'}],
      zIndex:[{keys:['zIndex'],value:2}]
   };
   function setStyleProps(styleObj){
      var data, dArray;
      for(var c = 1;c < arguments.length;c++){
         if((data = overrideStyles[arguments[c]])){
            for(var d = data.length;d--;){
               dArray = data[d].keys;
               for(var e = dArray.length;e--;){
                  styleObj[dArray[e]] = data[d].value;
               }
            }
         }
      }
      return true;
   }
   function setClass(el,val){
      if(el.setAttribute){el.setAttribute('class',val);}
      return (el.className = val);
   }
   function retFalse(){return false;}
   function TableScroll(id){
      var midAbsDiv, parent, vHeaderAbsStyle, vHeaderRelStyle, hHeaderAbsStyle, hHeaderRelStyle;
      var midAbsDivStyle, midAbsinerDivStyle, inRelDivStyle, outRelDivDim;
      var lastScrollTop = NaN, lastScrollLeft = NaN, lastWidth = NaN, lastHeight = NaN, tableDim, table = getElementWithId(id);
      var midRelinerDivStyle, midRelinerDiv, testCellDim;
      function position(){
            var nh,nw,size,th,tw,cellWidth,celHeight,st = midAbsDiv.scrollTop, sl = midAbsDiv.scrollLeft, h = outRelDivDim(true).h, w = outRelDivDim.w;
            if((size = ((w != lastWidth)||(h != lastHeight)))||(st != lastScrollTop)||(sl != lastScrollLeft)){
               hHeaderRelStyle.left = (((cellWidth = (testCellDim().x - tableDim().iX)) + (lastScrollLeft = sl)) * -1)+'px';//position
               vHeaderRelStyle.top = (((celHeight = (testCellDim.y - tableDim.iY)) + (lastScrollTop = st)) * -1)+'px';
               if(size){
                  vHeaderRelStyle.width = vHeaderAbsStyle.width = midAbsDivStyle.left = hHeaderAbsStyle.left = (cellWidth+'px');
                  hHeaderRelStyle.height = hHeaderAbsStyle.height = midAbsDivStyle.top = vHeaderAbsStyle.top = (celHeight+'px');
                  inRelDivStyle.left = (cellWidth * -1)+'px';
                  inRelDivStyle.top = (celHeight * -1)+'px';
                  midRelinerDivStyle.width = midAbsinerDivStyle.width = ((tw = tableDim.w) - cellWidth)+'px';
                  midRelinerDivStyle.height = midAbsinerDivStyle.height = ((th = tableDim.h) - celHeight)+'px';
                  midAbsDivStyle.height = vHeaderAbsStyle.height = (((nh = ((lastHeight = h) - celHeight)) > celHeight)?nh:celHeight)+'px';
                  midAbsDivStyle.width = hHeaderAbsStyle.width = (((nw = ((lastWidth = w) - cellWidth)) > cellWidth)?nw:cellWidth)+'px';
                  hHeaderRelStyle.width = inRelDivStyle.width = tw + 'px';
                  vHeaderRelStyle.height = inRelDivStyle.height = th + 'px';
               }
            }
            return notOnScroll;
      }
      function onScroll(){
         notOnScroll = false;
         position();
      }
      function onSize(){
         position();
         return true;
      }
      finalise.addItem(function(){
         testCellDim = midRelinerDivStyle = midRelinerDiv = 
         midAbsinerDivStyle =  tableDim = vHeaderAbsStyle = vHeaderRelStyle = hHeaderAbsStyle = hHeaderRelStyle = inRelDivStyle = outRelDivDim = midAbsDiv = parent = table = null;
         })
      if(
         table&&
         (typeof table.scrollTop == 'number')&&
         (typeof table.offsetHeight == 'number')&&
         table.tagName&&
         table.appendChild&&
         table.cloneNode&&
         table.getAttribute&&
         table.getElementsByTagName&&
         (parent = table.parentNode)&&
         parent.insertBefore
         ){
         InitializeMe(function(){
            var newTable, testCell;
            var vHeaderAbs, vHeaderRel, hHeaderAbs, hHeaderRel,outRelDiv, midAbsinerDiv, inRelDiv;
            if(
               (notAbort)&&
               (testCell = table.getElementsByTagName('td')[0])&&
               (newTable = table.cloneNode(true))&&
               (outRelDiv = document.createElement('DIV'))&&
               (setClass(outRelDiv, 'tableBoxOuter'))&&
               (midAbsDiv = document.createElement('DIV'))&&
               (midRelinerDiv = document.createElement('DIV'))&&
               (midAbsinerDiv = document.createElement('DIV'))&&
               (inRelDiv = document.createElement('DIV'))&&
               (vHeaderAbs = document.createElement('DIV'))&&
               (vHeaderRel = document.createElement('DIV'))&&
               (hHeaderAbs = document.createElement('DIV'))&&
               (hHeaderRel = document.createElement('DIV'))&&
               (setStyleProps(outRelDiv.style, 'positionRel', 'padding'))&&
               (midAbsDivStyle = midAbsDiv.style)&&
               (setStyleProps(midAbsDivStyle, 'positionAbs', 'padding', 'margin', 'border', 'zIndex'))&&
               (midRelinerDivStyle = midRelinerDiv.style)&&
               (setStyleProps(midRelinerDivStyle, 'positionRel', 'padding', 'margin', 'border', 'top', 'left'))&&
               (midAbsinerDivStyle = midAbsinerDiv.style)&&
               (setStyleProps(midAbsinerDivStyle, 'positionAbs', 'overflow', 'padding', 'margin', 'border', 'top', 'left'))&&
               (inRelDivStyle = inRelDiv.style)&&
               (setStyleProps(inRelDivStyle, 'positionRel', 'padding', 'margin', 'border', 'top', 'left'))&&
               (vHeaderAbsStyle = vHeaderAbs.style)&&
               (setStyleProps(vHeaderAbsStyle, 'positionAbs', 'overflow', 'padding', 'margin', 'border', 'top', 'left', 'zIndex'))&&
               (vHeaderRelStyle = vHeaderRel.style)&&
               (setStyleProps(vHeaderRelStyle, 'positionRel', 'padding', 'margin', 'border', 'top', 'left'))&&
               (hHeaderAbsStyle = hHeaderAbs.style)&&
               (setStyleProps(hHeaderAbsStyle, 'positionAbs', 'overflow', 'padding', 'margin', 'border', 'top', 'left', 'zIndex'))&&
               (hHeaderRelStyle = hHeaderRel.style)&&
               (setStyleProps(hHeaderRelStyle, 'positionRel', 'padding', 'margin', 'border', 'top', 'left'))&&
               (setStyleProps(table.style, 'margin'))&&
               (midAbsDiv.appendChild(midRelinerDiv))&&
               (midRelinerDiv.appendChild(midAbsinerDiv))&&
               (midAbsinerDiv.appendChild(inRelDiv))&&
               (outRelDiv.appendChild(midAbsDiv))&&
               (vHeaderAbs.appendChild(vHeaderRel))&&
               (hHeaderAbs.appendChild(hHeaderRel))&&
               (outRelDiv.appendChild(vHeaderAbs))&&
               (outRelDiv.appendChild(hHeaderAbs))&&
               (parent.insertBefore(outRelDiv, table))&&
               (!isNaN((outRelDivDim = getSimpleExtPxIn(outRelDiv)).w))&&
               (inRelDiv.appendChild(table))&&
               (!isNaN((testCellDim = getSimpleExtPxIn(testCell)).w))&&
               (!isNaN((tableDim = getSimpleExtPxIn(table)).w))&&
               (hHeaderRel.appendChild(newTable))&&
               (newTable = table.cloneNode(true))&&
               (vHeaderRel.appendChild(newTable))
               ){
               midAbsDivStyle.overflow = 'scroll';
               if(midAbsDiv.addEventListener){
                  midAbsDiv.addEventListener('scroll', onScroll, false);
               }else if(midAbsDiv.attachEvent){
                  midAbsDiv.attachEvent('onscroll', onScroll);
               }else{
                  midAbsDiv.onscroll = onScroll;
               }
               GlobalEventMonitor('resize', onSize);
               position();
               TimedQue(position);
            }else{
               notAbort = false;
            }
         });
      }else{
         notAbort = false;
      }
      return true;
   }
   function main(){
      var id;
      for(var c = 0;c < arguments.length;c++){
         id = arguments[c];
         if(notAbort&&!tableList[id]){
            tableList[id] = TableScroll(id);
         }
      }
   }
   if(
      (!global.queryStrings||!queryStrings['noTableScroll'])&&
      global.setTimeout&&
      global.document&&
      document.createElement
   ){
      finalizeMe((finalise = getNewFILCFncStac(function(){
         finalise = tableList = null;
      })));
      return main;
   }else{
      return retFalse;
   }
})();
</script>

</head>


<body>

<input type="button" value="nascondi riga 3" name="nascondi riga 3" onclick='modifica()'>

<table id="mainTable" class="scrolltable">
<thead>
<tr>
         <th>this column will not display</th>
         <th>COLUMN 1</th>
         <th>COLUMN 2</th>
         <th>COLUMN 3</th>
         <th>COLUMN 4</th>
         <th>COLUMN 5</th>
         <th>COLUMN 6</th>
         <th>COLUMN 7</th>
      </tr>
</thead>

<tbody>

<?php
	for($i=0;$i<30;$i++){
	
    echo"
    <tr id='a$i'>
<th>ROW HEADER $i</th>
<td>colonna 1 riga $i</td>
<td>colonna 2 riga $i</td>
<td>colonna 3 riga $i</td>
<td>colonna 4 riga $i</td>
<td>colonna 5 riga $i</td>
<td>colonna 6 riga $i</td>
<td>colonna 7 riga $i</td>

</tr>";
       
    }
?>

</tbody>
</table></center>

<script type="text/javascript">
if(typeof tableScroll == 'function'){tableScroll('mainTable');}
</script>



</body>
</html>