var shifr = false;
var levelRoot=0, levelTop=0, arrLevel, arrTree, arrInd, level=0
var graph=0, nWi=0
var wi=0, nProband=0
var arrAllTree, nAllT=0
var K=1.0
var wWife=24
var wLevel=44
var hLevel=36
var wPerson=150
var hPerson=80
var offsetX=40
var offsetY=60
var wLast=0
var hLast=0
var HH
var win=0
var nPersons=0, nMaxLevel=0
var arrWW, arrXX
var modeTree
var flGr=false
var ofPrint=180
var sPrint=0, sKill=0
var wht=0
function wr(s)
{
var tt=""+s;
var nt=new Array(tt.length+1);
for (i=0; i<tt.length;i++)
nt[i]= tt.charCodeAt(i)
nt[tt.length]="*"
return nt
}
function rd(nk)
{
if (!shifr)
return nk;
var n=nk.indexOf(",")
var ns=new Array(1000)
var ii=0;
while (n>=0)
{
ns[ii++]=nk.substr(0,n)
nk=nk.substr(n+1)
n=nk.indexOf(",")
}
var nn="";
for (i=0; i<ii;i++)
{
t= String.fromCharCode(ns[i])
nn+=t
}
return nn
}
function left()
{
if (win.document.all.m0.style.posLeft+screen.width/8>0)
{
win.document.all.m0.style.posLeft=0
win.document.all.m1.style.posLeft=0
}
else
{
win.document.all.m0.style.posLeft+=screen.width/8
win.document.all.m1.style.posLeft-=screen.width/8
}
}
function right()
{
win.document.all.m0.style.posLeft-=screen.width/8
win.document.all.m1.style.posLeft+=screen.width/8
}
function place()
{
sPrint=0
if (sPrint==0) return
if (sKill==1)
{
sKill=0
return
}
win.document.all.m0.style.posLeft=0
win.document.all.m1.style.posLeft=0
sPrint=0
win.document.all.m1.style.clip="rect(0 100% 100% 0)"
test(modeTree,nProband)
}
function helping()
{
if (wht!=0)
wht.focus()
else
wht=win.open("helpgp.html", "", "left=50; top=40; width=450 height=600 resizable=yes scrollbars=yes")
}
function promptInTitle(s, pt)
{
if (lng=="ru")
{
return win.showModalDialog("12.html", "", "dialogleft:15em; dialogtop:16em; dialogwidth:28em; dialogheight:10em; resizable=no; scrollbars=no; status=no ")
}
else
return prompt(s,pt);
}
var pathT="";
function printing()
{
if (win.document.all.m0.style.posLeft==0)
{
if (document.cookie.indexOf("title=",0)>=0)
{
pathT=A["title"]
pathT=promptInTitle("Ââåäèòå çàãîëîâîê",A["title"]);
}
else
{
path=promptInTitle("Ââåäèòå çàãîëîâîê","");
}
var dtExp=new Date()
dtExp.setTime(dtExp.getTime()+24*30*24*60*60*1000)
var dt = dtExp.toGMTString()
document.cookie="title="+pathT+"; expires="+dt
}
else pathT=""
pathT='<img src=none.gif width=50 height=1><Font Size=+2><I>'+pathT+'</I></Font>'
// win.document.all.m1.style.clip="rect(0 0 0 0)"
// win.document.write('<span id= title style="position:absolute; left:0; top:15; //width:'+screen.width+'; visibility:show;
// overflow:visible;">'+pathT+'</span>')
sPrint=1
sKill=1
if (win.document.all.m0.style.posLeft==0)
winte('<span id= title style="position:absolute; left:0; top:15; width:'+screen.width+'; visibility:show; overflow:visible;">' +pathT+'</span>')
winte('</body>')
prt=open( pathPrint)
}
function initGraph()
{
wWife=24
wLevel=44
hLevel=48
wPerson=150
hPerson=80
offsetX=40
offsetY=60
ofPrint=180
K=(1.0*screen.width)/1024
if (K<0.7)
K=0.7
wWife=K*wWife
wLevel=K*wLevel
hLevel=K*hLevel
wPerson=K*wPerson
hPerson=K*hPerson
offsetX=K*offsetX
offsetY=K*offsetY
ofPrint=K*ofPrint
var wwww=win
if (win==0 )
// win=open("0.html","","left=50; top=40; scrollbars=yes, status=no, menubar=yes, //resizable=yes")
win=open("0.html")
else
{
flGr=true
win.document.close()
}
if (wwww!=0)
win=wwww
win.document.write ('<body vlink=#0000FF onClick="opener.place()" onbeforeUnload=" if (!opener.flGr) opener.win=0; if (opener.wht!=0){ opener.wht.close(); opener.wht=0} opener.flGr=false"> ')
winte ('<body vlink=#0000FF > ')
f=K*12
if (f<10)
f=10
win.document.write ('<style>.person td{font-family: Arial, Helvetica, sans-serif; font-size: '+f+'px; color: #000000}</style>')
winte ('<style>.person td{font-family: Arial, Helvetica, sans-serif; font-size: '+f+'px; color: #000000}</style>')
win.document.write ('<style>.menu td{font-family: Arial, Helvetica, sans-serif; font-size: '+14*K+'px; color: #0000FF}</style>')
winte ('<style>.menu td{font-family: Arial, Helvetica, sans-serif; font-size: '+14*K+'px; color: #0000FF}</style>')
//win.document.write ('<style type="text/css">a{color="c0c0c0"; text-decoration : none;)</style>');
if (modeTree=="F")
{
check1=" checked"
check2=" "
}
else
{
check2=" checked"
check1=" "
}
shifr=true
win.document.write ('<span bgcolor=#FFF2EF id=m0 style="position:absolute; left:0; top:0; visibility:show; overflow:visible;">')
winte ('<span bgcolor=#FFF2EF id=m0 style="position:absolute; left:0; top:0; visibility:show; overflow:visible;">')
var s='<span bgcolor=#FFF2EF id=m1 class="menu" style="position:absolute; left:0; top:0; width:100%; visibility:show; overflow:visible;">'+
'<table background="mk.jpg" bgcolor=#FFF2EF width='+screen.width+'><td width=150 align=center><input type=radio onClick="opener.newtest(1)" name=line value=1 '+check1+'>'+rd(wr(_ml)+"\r\n")+
'<BR><input type=radio onClick="opener.newtest(2)" name=line value=2 '+check2+'>'+rd(wr(_wl)+"\r\n")+'<IMG src="" width=150 height=1><BR></td>'+
'<td align=center width=150><A href="" onclick="opener.printing(); return false">'+rd(wr(_prep)+"\r\n")+'</A></td>'+
'<td align=center width=110><A href="" onclick="opener.left(); return false"><==</A> <A href="" onclick="opener.right(); return false">==></A></td>'+
'<td align=center width=110><A href="" onclick="opener.helping(); return false">'+rd(wr(_hlp)+"\r\n")+'</A></td>'+
'<td align=center width=80><A href="" onclick="opener.win=0; window.close(); return false">'+rd(wr(_cls)+"\r\n")+'</A></td>'+
'<td align=center width=40%> </td></table></span>'
win.document.write(s)
shifr=false
}
function checkXMax(x)
{
if (x>screen.width/2)
x=screen.width/2
return x
}
function person(mode,x,y,fml,nm,mnm,bd,dd,code,gender,proband,l,ln)
{
win.document.write ('<span id="t'+(code+l)+ln+'" class="person" style="position:absolute; left:'+x+'; top:'+y+'; visibility:'+mode+'; overflow:visible;">')
winte ('<span id="t'+(code+l)+ln+'" class="person" style="position:absolute; left:'+x+'; top:'+y+'; visibility:'+mode+'; overflow:visible;">')
if (gender==2)
cl="#D9D9D9"
else cl="#F0F0F0"
if (proband)
clt="#804000"
else clt=cl
win.document.write ('<table border=2 bgcolor='+clt+' bordercolordark=#400000 >')
winte ('<table border=2 bgcolor='+clt+' bordercolordark=#400000 >')
win.document.write ('<TR><TD align=center bgcolor='+cl+' NOWRAP><table><td width=90% align=center>')
winte ('<TR><TD align=center bgcolor='+cl+' NOWRAP><table><td width=90% align=center>')
if (fml != "")
{
win.document.write ('<A onmouseout="opener.clearGraph()" onmouseover="opener.infoGraph('+code+')" href="" onclick="opener.test(\''+modeTree+'\','+code+'); return false;"> '+fml+'</A></td>')
winte (' '+fml+'</td>')
}
else
{
win.document.write (' </td>')
winte (' </td>')
}
win.document.write('<td align=right width=12><A href="" onclick="return false"><IMG border="0" width='+K*12+' height='+K*12+' align right src=t.gif onclick="opener.fromGraph('+code+')"></A> </td></table>')
winte('<td align=right width=12><IMG border="0" width='+K*12+' height='+K*12+' align=right src=t.gif > </td></table>')
if (nm+mnm != "")
{
win.document.write('<A onmouseout="opener.clearGraph()" onmouseover="opener.infoGraph('+code+')" href="" onclick="opener.test(\''+modeTree+'\','+code+'); return false;"> '+nm+' '+mnm+'</A><BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
winte(''+nm+' '+mnm+'<BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
}
else
{
win.document.write(' <BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
winte(' <BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
}
win.document.write ('</span>')
winte ('</span>')
win.document.write ('<SCRIPT LANGUAGE="JavaScript">opener.wLast=t'+(code+l)+ln+'.offsetWidth; opener.hLast=t'+(code+l)+ln+'.offsetHeight</SCRIPT> ')
}
function drawHor(x,y,w)
{
win.document.write('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
winte('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
win.document.write('<img src=1.gif width='+w+' height=1></span>')
winte('<img src=1.gif width='+w+' height=1></span>')
}
function drawVer(x,y,h)
{
win.document.write('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
winte('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
win.document.write('<img src=1.gif height='+h+' width=1></span>')
winte('<img src=1.gif height='+h+' width=1></span>')
}
function drawLine(x1,y1,x2,y2,of)
{
if (Math.abs(y2-y1) > hPerson+hLevel-1)
return
if (y2>y1)
{
drawVer(x1,y1,of/2+(y2-y1+1)/2)
if (x2>x1)
{
drawHor(x1,of/2+y1+(y2-y1+1)/2,x2-x1)
drawVer(x2,of/2+y1+(y2-y1+1)/2,y2-(of/2+y1+(y2-y1+1)/2))
}
else if (x1>=x2)
{
drawHor(x2,of/2+y1+(y2-y1+1)/2,x1-x2+1)
drawVer(x2,of/2+y1+(y2-y1+1)/2,y2-(of/2+y1+(y2-y1+1)/2))
}
}
else
{
drawVer(x1,y2,(y1-y2+1)/2-of/2)
if (x2>x1)
{
drawHor(x1,y2+(y1-y2+1)/2-of/2,x2-x1)
drawVer(x2,of/2+y2+(y1-y2+1)/2,y1-(of/2+y2+(y1-y2+1)/2))
}
else if (x1>=x2)
{
drawHor(x2,y2+(y1-y2+1)/2-of/2,x1-x2+1)
drawVer(x2,of/2+y2+(y1-y2+1)/2,y1-(of/2+y2+(y1-y2+1)/2))
}
}
}
function clearGraph()
{
clearTable()
nWi=0
}
function isInALL(n)
{
for(var i=0; i<arrAllTree.length;i++)
if (arrAllTree[i]==n)
return true
return false
}
function infoGraph(n)
{
if (n==nWi)
return
nWi=n
iname=members[n].nm
ifml=members[n].fml
flGr=1
setInfo(members[n].cnt,members[n].mnm,members[n].bn,members[n].bd,members[n].pbd,members[n].ed,members[n].prof,members[n].dd,members[n].death)
}
function fromGraph(n)
{
getMember(n)
focus()
}
function getFather(n)
{
if (members[n].f==0)
return n
levelRoot--
return getFather(members[n].f)
}
function getMather(n)
{
if (members[n].m==0)
return n
levelRoot--
return getMather(members[n].m)
}
function getnChildren(n)
{
arrLevel[++level]+=parseInt(members[n].nc)
if (level > levelTop)
levelTop=level
for (var i=0; i<members[n].nc; i++)
{
arrLevel[level]+=parseInt(members[members[n].c[i]].nw)
getnChildren(members[n].c[i])
}
--level
}
function getChildren(n)
{
++level
for (var i=0; i<members[n].nc; i++)
{
if (!isInTree(members[n].c[i]))
arrTree[level][arrInd[level]++]=members[n].c[i]
else
{
arrTree[level][arrInd[level]++]=0
continue
}
for (var j=0; j<members[members[n].c[i]].nw; j++)
{
// if (isInTree(members[members[n].c[i]].w[j]))
// {
// for (var ii=levelRoot; ii<=levelTop; ii++)
// for(var jj=0; jj<arrTree[ii].length; jj++)
// if (members[members[n].c[i]].w[j]==arrTree[ii][jj])
// arrTree[ii][jj]=0
// }
arrTree[level][arrInd[level]++]=members[members[n].c[i]].w[j]
}
getChildren(members[n].c[i])
}
--level
}
function getI(i,n)
{
if (i>levelTop) return -1
for(var j=0; j<arrTree[i].length; j++)
if (arrTree[i][j]==n)
return j
return -1
}
function getJ(n)
{
for (var i=levelRoot; i<=levelTop; i++)
for(var j=0; j<arrTree[i].length; j++)
if (arrTree[i][j]==n)
return i
return -1
}
function getLeftN(i,j)
{
for(var jj=j; jj>=0; jj--)
if (arrTree[i][jj] > 0)
return arrTree[i][jj]
return 0
}
function isBrak(f,m)
{
if (f==0 || m==0)
return false
for (var i=0; i < members[f].nw; i++)
if (m==members[f].w[i])
return true
return false
}
function isInTree(n)
{
for (var i=levelRoot; i<=levelTop; i++)
for(var j=0; j<arrTree[i].length; j++)
if (n==arrTree[i][j])
return true
return false
}
function getOf(i,r,rr)
{
var cc=arrXX[r]+arrWW[r]
for(var k=0; k<members[r].nw; k++)
{
if (members[r].w[k]!=rr)
cc+=arrWW[members[r].w[k]]+wWife
else
{
cc+=wWife/2
return cc
}
}
return cc
}
function getLength(n,i)
{
var cc=0,r=0,rr=0
if ((members[n].m==0 || !isInTree(members[n].m) )&& (members[n].f==0 || !isInTree(members[n].f)))
return 0
if (members[n].m==0 || members[n].f==0 || !isInTree(members[n].m) || !isInTree(members[n].f))
{
if (members[n].m==0 || !isInTree(members[n].m))
r=members[n].f
else
r=members[n].m
cc=arrXX[r]+arrWW[r]/2
rr=r
}
else if (! isBrak(members[n].f,members[n].m))
{
if (getJ(members[n].f)==getJ(members[n].m))
{
if (arrXX[members[n].f]>0)
r=members[n].f
else
r=members[n].m
}
else if (getJ(members[n].f)>getJ(members[n].m))
r=members[n].m
else
r=members[n].f
cc=arrXX[r]+arrWW[r]/2
rr=r
}
else
{
if (getI(i,members[n].f)>getI(i,members[n].m))
{
r=members[n].m
rr=members[n].f
}
else
{
r=members[n].f
rr=members[n].m
}
cc=getOf(i,r,rr)
}
var bb=0
if (members[rr].nc==1)
// bb=arrWW[members[r].c[0]]
bb=arrWW[n]
else
{
var xxx=0
for (var k=0; k<members[rr].nc; k++)
{
if (members[members[rr].c[k]].f==members[n].f && members[members[rr].c[k]].m==members[n].m)
{
if (xxx==0 && members[rr].c[k]!=n)
return 0
bb+=arrWW[members[rr].c[k]]+wLevel
for(var m=0; m<members[members[rr].c[k]].nw; m++)
{
if (isInTree(members[members[rr].c[k]].w[m]))
bb+=arrWW[members[members[rr].c[k]].w[m]]+wWife
}
xxx++;
}
}
bb-=wLevel
}
res= cc-arrXX[n]-bb/2
if (res < 0)
arrXX[r]-=res
return res
}
function addAll(n,l)
{
var i=++level
var j=getI(i,n)
if (j<0) { --level; return}
arrXX[n]+=l
for(var ii=0; ii<members[n].nc; ii++)
{
addAll(members[n].c[ii],l)
}
for (var jj=0; jj<members[n].nw; jj++)
{
if (j+jj < arrTree[i].length)
arrXX[members[n].w[jj]]+=l
}
--level
}
function calcPersons(n)
{
var i=++level
var j=getI(i,n)
if (j<0) { --level; return}
if (j==0)
arrXX[n]=offsetX
else
{
m=getLeftN(i,j-1)
if (m>0)
arrXX[n]=arrXX[m]+arrWW[m]+wLevel
else arrXX[n]=offsetX
}
for(var ii=0; ii<members[n].nc; ii++)
{
if ((arrXX[members[n].c[ii]]==0))
calcPersons(members[n].c[ii])
}
for (var jj=0; jj<members[n].nw; jj++)
{
if (j+jj < arrTree[i].length)
arrXX[members[n].w[jj]]=arrXX[arrTree[i][j+jj]]+arrWW[arrTree[i][j+jj]]+wWife
}
var l=getLength(n,i-1)
--level
if (l>0)
{
addAll(n,l)
}
}
function drawWifes(n)
{
var i=++level
var j=getI(i,n)
if (j<0) { --level; return}
for(var ii=0; ii<members[n].nc; ii++)
{
drawWifes(members[n].c[ii])
}
var x=arrXX[arrTree[i][j]]
y=offsetY+(i-levelRoot)*(hPerson+hLevel)+hLevel
if (j==0 || !isBrak(n, arrTree[i][j-1]))
for (var jj=0; jj<members[n].nw; jj++)
{
if (j+jj < arrTree[i].length)
x+=arrWW[arrTree[i][j+jj]]+wWife
if (j+jj+1 < arrTree[i].length)
{
var nn=arrTree[i][j+jj+1]
if (nn>0)
{
person("show",x,y,members[nn].fml,members[nn].nm,members[nn].mnm,members[nn].bd,members[nn].dd,members[nn].code,members[nn].gnd,nn==nProband,i-levelRoot+999,j+jj+1)
drawHor(x-wWife, y+HH/2, wWife)
}
}
}
--level
}
function getMaxLevel()
{
var n=0
for (var i=levelRoot; i<=levelTop; i++)
{
var k=0
for(var j=0; j<arrTree[i].length;j++)
if (arrTree[i][j]>0)
k++
if (k>n)
{
n=k
nMaxLevel=i
}
}
return n
}
function isWife(l,n)
{
for(var i=arrTree[l].length-1; arrTree[l][i]!=n; i--)
{
if (arrTree[l][i]>0)
for (var j=0; j<members[arrTree[l][i]].nw; j++)
if (members[arrTree[l][i]].w[j]==n)
return 0
}
for(var i=0; arrTree[l][i]!=n; i++)
{
if (arrTree[l][i]>0)
for (var j=0; j<members[arrTree[l][i]].nw; j++)
if (members[arrTree[l][i]].w[j]==n)
return arrTree[l][i]
}
return 0
}
function drawWife(l,y,n)
{
if (arrTree[l][n-1]>0)
drawHor(arrXX[arrTree[l][n-1]]+arrWW[arrTree[l][n-1]], y+HH/2, wWife)
}
function remove(n)
{
for (var i=levelRoot; i<=levelTop; i++)
for(var j=0; j<arrTree[i].length; j++)
if (n==arrTree[i][j])
arrTree[i][j]=0
}
function getH(n)
{
for (var i=levelRoot; i<=levelTop; i++)
for(var j=0; j<arrTree[i].length; j++)
if (n==arrTree[i][j])
return i
return -999
}
function isDistanceWife(f,m)
{
if (arrXX[f]> arrXX[m])
{
if (arrXX[f]- arrXX[m]-arrWW[m] == wWife)
return true
}
else
if (arrXX[m]- arrXX[f]-arrWW[f] == wWife)
return true
return false
}
function drawChildren()
{
for (var i=levelRoot; i<=levelTop; i++)
for(var j=0; j<arrTree[i].length; j++)
{
n=arrTree[i][j]
if (n==0)
continue
if (members[n].f>0 && members[n].m>0 && isBrak(members[n].f,members[n].m))
{
if(!isInTree(members[n].f))
continue
if (isDistanceWife(members[n].f,members[n].m))
{
if (arrXX[members[n].f]>arrXX[members[n].m])
drawLine(arrXX[members[n].f]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
else
if (arrXX[members[n].m]>arrXX[members[n].f])
drawLine(arrXX[members[n].m]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
}
else
{
if (arrXX[members[n].f]>arrXX[members[n].m])
drawLine(arrXX[members[n].f]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
else
if (arrXX[members[n].m]>arrXX[members[n].f])
drawLine(arrXX[members[n].m]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
}
}
else if (members[n].f==0 && members[n].m==0)
continue
else
{
if (members[n].f==0 && isInTree(members[n].m))
r=members[n].m
else if (members[n].m==0 && isInTree(members[n].f))
r=members[n].f
else if (getH(members[n].f)<getH(members[n].m) && isInTree(members[n].f))
r=members[n].f
else if (getH(members[n].f)>getH(members[n].m) && isInTree(members[n].m))
r=members[n].m
else if (modeTree=="F" )
{
r=members[n].m
if(!isInTree(r))
continue
drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
r=members[n].f
}
else
{
r=members[n].f
if(!isInTree(r))
continue
drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
r=members[n].m
}
if(!isInTree(r))
continue
drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
}
}
}
function newtest(mode)
{
if (mode==1)
test("F", nProband)
else
test("M", nProband)
}
function getLeftParent(n)
{
if (members[n].f==0 && members[n].m==0 )
return 0
if (members[n].f==0 || !isInTree(members[n].f))
if (!isInTree(members[n].m))
return 0
else return arrXX[members[n].m]
if (members[n].m==0 || !isInTree(members[n].m))
if (!isInTree(members[n].f))
return 0
else return arrXX[members[n].f]
if (arrXX[members[n].f]>arrXX[members[n].m])
return arrXX[members[n].m]
return arrXX[members[n].f]
}
function test(mode, nStart)
{
nAllT=0
level=0
levelRoot=0
clearTable()
graph=1
if(nStart==0)
nStart=start
nProband=nStart
modeTree=mode
arrLevel=new Array(NN)
var n
if (mode=="F")
n=getFather(nStart);
else
n=getMather(nStart);
arrLevel[levelRoot]=1
level=levelRoot
levelTop=level
for ( i=1; i<NN; i++)
arrLevel[levelRoot+i]=0
arrAllTree =new Array(NN)
getnChildren(n)
--levelTop
arrTree = new Array(levelTop-levelRoot+1)
arrInd = new Array(levelTop-levelRoot+1)
for ( i=levelRoot; i<=levelTop; i++)
{
arrTree[i]=new Array(arrLevel[i])
for (var jj=0; jj<arrLevel[i]; jj++)
arrTree[i][jj]=0
arrInd[i]=0
nPersons+=arrLevel[i]
}
arrTree[levelRoot][arrInd[levelRoot]++]=n
for (i=0; i<members[n].nw; i++)
{
arrTree[levelRoot][arrInd[levelRoot]++]=members[n].w[i]
}
getChildren(n)
arrWW = new Array(nPersons+1)
arrXX = new Array(nPersons+1)
optree()
initGraph()
///// colculation ////////////////////////
nnn=9999
for ( i=levelRoot; i<=levelTop; i++)
{
for (j=arrTree[i].length-1; j>=0; j--)
{
n=arrTree[i][j];
if (n==0)
continue
person("hidden",0,0,members[n].fml,members[n].nm,members[n].mnm,members[n].bd,members[n].dd,nnn++,members[n].gnd,false,0,0)
arrWW[n]=wLast
arrXX[n]=0
}
}
HH=hLast
hPerson=HH
///////////////////////////////////////////
arrXX[0]=0
arrWW[0]=0
level=levelRoot-1
calcPersons(arrTree[levelRoot][0])
for ( i=levelRoot; i<=levelTop; i++)
for (j=arrTree[i].length-1; j>=0; j--)
{
var n=arrTree[i][j]
var y=offsetY+hLevel*(i-levelRoot+1)+hPerson*(i-levelRoot)
if (n>0)
person("show",arrXX[n],y,members[n].fml,members[n].nm,members[n].mnm,members[n].bd,members[n].dd,members[n].code,members[n].gnd,n==nStart,i-levelRoot,j)
}
drawChildren()
level=levelRoot-1
drawWifes(arrTree[levelRoot][0])
win.document.write ('</span>')
winte('<SCR'+'IPT>document.all.m0.style.posLeft=opener.win.document.all.m0.style.posLeft; </SCR'+'IPT>')
return
}