var stammlaueft=0;
function StammtafelHide(aid)
{
    if (stammlaueft!=0) return;
    stammlaueft=1;
    var obenaus=0;
    var anode;
    var rownode;
    var tmpid;
    var tmpnode;
    var summen=new Array();
    var summe;
    
    
    if (aid.length>=3)
    {
        anode=document.getElementById('TD'+aid);
        // wenn ...001 dann Feld ausblenden und vorheriges verlängern
        if (aid.substr(aid.length-3,3)=='001')
        {
            // Nur hitere Felder ausblenden
            obenaus=0;
            anode.style.display = "none";
            subsumme(aid,summen);
        }
        else 
        {
            // Zeile ausblenden    
            obenaus=1;
            anode.style.display = "none";
            rownode=anode.parentNode;
            rownode.style.display = "none";
            subsumme(aid,summen);
        }

        // Unterbaum ausblenden
        obenaus+=untenaus(aid,summen);
        obenaus+=rechtsaus(aid,summen);
    
        // und rowspan oben reduzieren
        if(obenaus>0)
        {
            tmpid=aid;
            while (tmpid.length>3)
            {
                tmpid=tmpid.substr(0,tmpid.length-3);
                tmpnode=document.getElementById('TD'+tmpid);
                tmpnode.setAttribute('rowspan',tmpnode.getAttribute('rowspan')-obenaus);
            }
        }
    }
    
    for(var a=1;a<summen.length;a++)
    {
        // Nur wenn Summe gefuellt ist
        if(summen[a])
        {
            // Summe suchen
            tmpnode=document.getElementById('SUM'+a);
            if(tmpnode)
            {
                summe=tmpnode.innerHTML.slice(2);
                summe=summe-summen[a]
                if(summe>0)
                {
                    tmpnode.innerHTML='&sum; '+summe
                }
                else
                {
                    tmpnode.style.display = "none";
                    tmpnode.innerHTML=''
                }
            }
        }
    }
    
    // ggf. colspan setzen
    tdcolspan(aid);
    stammlaueft=0;
}

function format0(wert,anz)
{
    var erg=''+wert;
    while (anz>erg.length)
    {
        erg='0'+erg;
    }
    return erg; 
}

// Unterbaum ausblenden
// Rückgabe Anzahl Zeilen
function untenaus(aid,summen)
{
    var anz=0;
    var idx=2;
    var rownode;
    var tmpnode;

    while(tmpnode=document.getElementById('TD'+aid+format0(idx,3)))
    {
        rownode=tmpnode.parentNode;
        if(rownode.style.display!="none")
        {
            subsumme(aid+format0(idx,3),summen);
            tmpnode.style.display = "none";
            rownode.style.display = "none";
            anz++;
        }
        // unterbaum ausblenden
        anz+=untenaus(aid+format0(idx,3),summen);
        anz+=rechtsaus(aid+format0(idx,3),summen);
        idx++;
        if(idx>300) break;
    } 
    return anz;
}

function rechtsaus(aid,summen)
{
    var anz=0;
    var tmpid=aid+format0(1,3)
    var anode;

    while(anode=document.getElementById('TD'+tmpid))
    {
        if(anode.style.display!="none")
        {
            subsumme(tmpid,summen);
            anode.style.display = "none";        
            anz+=untenaus(tmpid,summen);
        }
        tmpid=tmpid+format0(1,3)
    }
    return anz;
} 

function subsumme(aid,summen)
{
    var len=aid.length;
    if (len>0)
    {
        len=len/3;
        if (!summen[len]) summen[len]=0;
        summen[len]++;    
    }
}

function tdcolspan(aid)
{
    var idx=1;
    var tmpnode;
    var stufe;
    var previd;
    var tmpid;
    
    if(aid.length<6) return;
    
    stufe=aid.length/3;
    previd=aid.substr(0,aid.length-3);
    
    // Spaltenanzahl bestimmen
    while(tmpnode=document.getElementById('SUM'+idx))
    {
        if(tmpnode.style.display=="none") break;
        // nur wenn angezeigt weiter nach hinten
        idx++;
        if(idx>300) return;
    }
    
    if(idx>stufe)
    {
        // suchen nach weiteren Zeilen
        for(var x=1;x<300;x++)
        {
            tmpid=previd+format0(x,3);
            tmpnode=document.getElementById('TD'+tmpid);
            if(tmpnode)
            {
                if(tmpnode.style.display!="none")
                {
                    tdsetheight(tmpid,tmpnode,x);
                    return;
                }
            }
            else break;
        }
        // Keine weitere Zeile, colspan LOESCHEN und NEU eintragen
        tmpnode=document.getElementById('TD'+previd);
        tmpnode.removeAttribute("colspan");

        var ColSpan = document.createAttribute("colspan");
        ColSpan.nodeValue = 1+idx-stufe;
        tmpnode.setAttributeNode(ColSpan);
    }
}

function tdsetheight(aid,anode,anr)
{
    anode.removeAttribute("height");
    var akth=anode.offsetHeight;
    var sumh=0;
    var previd='TD'+aid.substr(0,aid.length-3);
    var topnode=document.getElementById(previd);
    var toph=topnode.offsetHeight;
    var tmpid;
    
    // Resthöhe bestimmen
    for(var x=anr+1;x<300;x++)
    {
        tmpid=previd+format0(x,3);
        tmpnode=document.getElementById(tmpid);
        if(tmpnode)
        {
            if(tmpnode.style.display!="none")
            {
                // Hoehe summieren
                sumh+=tmpnode.offsetHeight;
            }
        }
        else break;
    }
    
    // zu klein
    if(akth+sumh<toph)
    {
        anode.setAttribute('height',toph-sumh);
    }
}
