  function changeContraction(cellid,tblid,repid) {
    var rep=MM_findObj(repid);
    var cell= MM_findObj(cellid);
    var subElement = MM_findObj(tblid);
    if (subElement.getAttribute("status")=="contracted") {
      if (subElement.hasChildNodes()) {
        subElement=cell.appendChild(rep.removeChild(subElement));
        subElement.setAttribute("status","expanded");
      }  
    } 
    else {
      if (subElement.hasChildNodes()) {
        subElement=rep.appendChild(cell.removeChild(subElement));
        subElement.setAttribute("status","contracted");
      }  
    }   
  }

  function expand(cellid,tblid,repid,cpre,spre,rpre,level) {
    
    if (repid!=rpre+currexp[level]) {
      if (MM_findObj(repid)!=null) {                                          
        var rep=MM_findObj(repid);                                            
        var cell= MM_findObj(cellid);                                         
        var subElement = MM_findObj(tblid);                                   
        if (subElement.getAttribute("status")=="contracted") {                
          if (subElement.hasChildNodes()) {                                   
            subElement=cell.appendChild(rep.removeChild(subElement));         
            subElement.setAttribute("status","expanded");                     
          }                                                                   
        }                                                                     
      }                                                                       
      if (MM_findObj(rpre+currexp[level])!=null) {                                   
        var rep2=MM_findObj(rpre+currexp[level]);                                    
        var cell2= MM_findObj(cpre+currexp[level]);                                  
        var subElement2 = MM_findObj(spre+currexp[level]);                           
        if (subElement2.getAttribute("status")=="expanded") {                 
          if (subElement2.hasChildNodes()) {                                  
            subElement2=rep2.appendChild(cell2.removeChild(subElement2));     
            subElement2.setAttribute("status","contracted");                  
          }                                                                   
        }                                                                     
      }                                                                       
      currexp[level]=cellid.substring(cellid.indexOf("_"),cellid.lastIndexOf("_")+1);
    }
  }

  

  
  function contractAll(prefix,suffix)  {
    var i=1;
    if (MM_findObj("tb")) {
      changeContraction("td","tb","rep");
    }
    while (MM_findObj("td"+prefix+i+suffix)) {
      changeContraction("td"+prefix+i+suffix,"tb"+prefix+i+suffix,"rep"+prefix+i+suffix);
      i++;
    }
  } 
