fork download
  1. var shifr = false;
  2. var levelRoot=0, levelTop=0, arrLevel, arrTree, arrInd, level=0
  3. var graph=0, nWi=0
  4. var wi=0, nProband=0
  5. var arrAllTree, nAllT=0
  6. var K=1.0
  7. var wWife=24
  8. var wLevel=44
  9. var hLevel=36
  10. var wPerson=150
  11. var hPerson=80
  12. var offsetX=40
  13. var offsetY=60
  14. var wLast=0
  15. var hLast=0
  16. var HH
  17. var win=0
  18. var nPersons=0, nMaxLevel=0
  19. var arrWW, arrXX
  20. var modeTree
  21. var flGr=false
  22. var ofPrint=180
  23. var sPrint=0, sKill=0
  24. var wht=0
  25. function wr(s)
  26. {
  27. var tt=""+s;
  28. var nt=new Array(tt.length+1);
  29. for (i=0; i<tt.length;i++)
  30. nt[i]= tt.charCodeAt(i)
  31. nt[tt.length]="*"
  32. return nt
  33. }
  34.  
  35. function rd(nk)
  36. {
  37. if (!shifr)
  38. return nk;
  39. var n=nk.indexOf(",")
  40. var ns=new Array(1000)
  41. var ii=0;
  42. while (n>=0)
  43. {
  44. ns[ii++]=nk.substr(0,n)
  45. nk=nk.substr(n+1)
  46. n=nk.indexOf(",")
  47. }
  48. var nn="";
  49. for (i=0; i<ii;i++)
  50. {
  51. t= String.fromCharCode(ns[i])
  52. nn+=t
  53. }
  54. return nn
  55. }
  56.  
  57. function left()
  58. {
  59. if (win.document.all.m0.style.posLeft+screen.width/8>0)
  60. {
  61. win.document.all.m0.style.posLeft=0
  62. win.document.all.m1.style.posLeft=0
  63. }
  64. else
  65. {
  66. win.document.all.m0.style.posLeft+=screen.width/8
  67. win.document.all.m1.style.posLeft-=screen.width/8
  68. }
  69. }
  70. function right()
  71. {
  72. win.document.all.m0.style.posLeft-=screen.width/8
  73. win.document.all.m1.style.posLeft+=screen.width/8
  74.  
  75. }
  76. function place()
  77. {
  78. sPrint=0
  79. if (sPrint==0) return
  80. if (sKill==1)
  81. {
  82. sKill=0
  83. return
  84. }
  85. win.document.all.m0.style.posLeft=0
  86. win.document.all.m1.style.posLeft=0
  87. sPrint=0
  88. win.document.all.m1.style.clip="rect(0 100% 100% 0)"
  89. test(modeTree,nProband)
  90. }
  91. function helping()
  92. {
  93. if (wht!=0)
  94. wht.focus()
  95. else
  96. wht=win.open("helpgp.html", "", "left=50; top=40; width=450 height=600 resizable=yes scrollbars=yes")
  97. }
  98.  
  99. function promptInTitle(s, pt)
  100. {
  101. if (lng=="ru")
  102. {
  103. return win.showModalDialog("12.html", "", "dialogleft:15em; dialogtop:16em; dialogwidth:28em; dialogheight:10em; resizable=no; scrollbars=no; status=no ")
  104. }
  105. else
  106. return prompt(s,pt);
  107. }
  108.  
  109. var pathT="";
  110.  
  111. function printing()
  112. {
  113.  
  114. if (win.document.all.m0.style.posLeft==0)
  115. {
  116. if (document.cookie.indexOf("title=",0)>=0)
  117. {
  118. pathT=A["title"]
  119. pathT=promptInTitle("Ââåäèòå çàãîëîâîê",A["title"]);
  120. }
  121. else
  122. {
  123. path=promptInTitle("Ââåäèòå çàãîëîâîê","");
  124. }
  125. var dtExp=new Date()
  126. dtExp.setTime(dtExp.getTime()+24*30*24*60*60*1000)
  127. var dt = dtExp.toGMTString()
  128. document.cookie="title="+pathT+"; expires="+dt
  129. }
  130. else pathT=""
  131.  
  132. pathT='<img src=none.gif width=50 height=1><Font Size=+2><I>'+pathT+'</I></Font>'
  133. // win.document.all.m1.style.clip="rect(0 0 0 0)"
  134. // win.document.write('<span id= title style="position:absolute; left:0; top:15; //width:'+screen.width+'; visibility:show;
  135. // overflow:visible;">'+pathT+'</span>')
  136. sPrint=1
  137. sKill=1
  138. if (win.document.all.m0.style.posLeft==0)
  139. winte('<span id= title style="position:absolute; left:0; top:15; width:'+screen.width+'; visibility:show; overflow:visible;">' +pathT+'</span>')
  140. winte('</body>')
  141. prt=open( pathPrint)
  142. }
  143.  
  144. function initGraph()
  145. {
  146. wWife=24
  147. wLevel=44
  148. hLevel=48
  149. wPerson=150
  150. hPerson=80
  151. offsetX=40
  152. offsetY=60
  153. ofPrint=180
  154. K=(1.0*screen.width)/1024
  155. if (K<0.7)
  156. K=0.7
  157. wWife=K*wWife
  158. wLevel=K*wLevel
  159. hLevel=K*hLevel
  160. wPerson=K*wPerson
  161. hPerson=K*hPerson
  162. offsetX=K*offsetX
  163. offsetY=K*offsetY
  164. ofPrint=K*ofPrint
  165. var wwww=win
  166.  
  167. if (win==0 )
  168. // win=open("0.html","","left=50; top=40; scrollbars=yes, status=no, menubar=yes, //resizable=yes")
  169. win=open("0.html")
  170. else
  171. {
  172. flGr=true
  173. win.document.close()
  174. }
  175.  
  176. if (wwww!=0)
  177. win=wwww
  178.  
  179. 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"> ')
  180. winte ('<body vlink=#0000FF > ')
  181. f=K*12
  182. if (f<10)
  183. f=10
  184. win.document.write ('<style>.person td{font-family: Arial, Helvetica, sans-serif; font-size: '+f+'px; color: #000000}</style>')
  185. winte ('<style>.person td{font-family: Arial, Helvetica, sans-serif; font-size: '+f+'px; color: #000000}</style>')
  186. win.document.write ('<style>.menu td{font-family: Arial, Helvetica, sans-serif; font-size: '+14*K+'px; color: #0000FF}</style>')
  187. winte ('<style>.menu td{font-family: Arial, Helvetica, sans-serif; font-size: '+14*K+'px; color: #0000FF}</style>')
  188.  
  189.  
  190. //win.document.write ('<style type="text/css">a{color="c0c0c0"; text-decoration : none;)</style>');
  191. if (modeTree=="F")
  192. {
  193. check1=" checked"
  194. check2=" "
  195. }
  196. else
  197. {
  198. check2=" checked"
  199. check1=" "
  200. }
  201. shifr=true
  202. win.document.write ('<span bgcolor=#FFF2EF id=m0 style="position:absolute; left:0; top:0; visibility:show; overflow:visible;">')
  203. winte ('<span bgcolor=#FFF2EF id=m0 style="position:absolute; left:0; top:0; visibility:show; overflow:visible;">')
  204. var s='<span bgcolor=#FFF2EF id=m1 class="menu" style="position:absolute; left:0; top:0; width:100%; visibility:show; overflow:visible;">'+
  205. '<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")+
  206. '<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>'+
  207. '<td align=center width=150><A href="" onclick="opener.printing(); return false">'+rd(wr(_prep)+"\r\n")+'</A></td>'+
  208. '<td align=center width=110><A href="" onclick="opener.left(); return false"><==</A>&nbsp;&nbsp;&nbsp;<A href="" onclick="opener.right(); return false">==></A></td>'+
  209. '<td align=center width=110><A href="" onclick="opener.helping(); return false">'+rd(wr(_hlp)+"\r\n")+'</A></td>'+
  210. '<td align=center width=80><A href="" onclick="opener.win=0; window.close(); return false">'+rd(wr(_cls)+"\r\n")+'</A></td>'+
  211. '<td align=center width=40%>&nbsp;</td></table></span>'
  212. win.document.write(s)
  213. shifr=false
  214. }
  215.  
  216. function checkXMax(x)
  217. {
  218. if (x>screen.width/2)
  219. x=screen.width/2
  220. return x
  221. }
  222.  
  223. function person(mode,x,y,fml,nm,mnm,bd,dd,code,gender,proband,l,ln)
  224. {
  225. win.document.write ('<span id="t'+(code+l)+ln+'" class="person" style="position:absolute; left:'+x+'; top:'+y+'; visibility:'+mode+'; overflow:visible;">')
  226. winte ('<span id="t'+(code+l)+ln+'" class="person" style="position:absolute; left:'+x+'; top:'+y+'; visibility:'+mode+'; overflow:visible;">')
  227. if (gender==2)
  228. cl="#D9D9D9"
  229. else cl="#F0F0F0"
  230. if (proband)
  231. clt="#804000"
  232. else clt=cl
  233. win.document.write ('<table border=2 bgcolor='+clt+' bordercolordark=#400000 >')
  234. winte ('<table border=2 bgcolor='+clt+' bordercolordark=#400000 >')
  235. win.document.write ('<TR><TD align=center bgcolor='+cl+' NOWRAP><table><td width=90% align=center>')
  236. winte ('<TR><TD align=center bgcolor='+cl+' NOWRAP><table><td width=90% align=center>')
  237. if (fml != "")
  238. {
  239. win.document.write ('<A onmouseout="opener.clearGraph()" onmouseover="opener.infoGraph('+code+')" href="" onclick="opener.test(\''+modeTree+'\','+code+'); return false;"> '+fml+'</A></td>')
  240. winte (' '+fml+'</td>')
  241.  
  242. }
  243. else
  244. {
  245. win.document.write ('&nbsp;</td>')
  246. winte ('&nbsp;</td>')
  247. }
  248. 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>&nbsp;</td></table>')
  249. winte('<td align=right width=12><IMG border="0" width='+K*12+' height='+K*12+' align=right src=t.gif >&nbsp;</td></table>')
  250. if (nm+mnm != "")
  251. {
  252. 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>')
  253. winte(''+nm+' '+mnm+'<BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
  254. }
  255. else
  256. {
  257. win.document.write(' &nbsp;<BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
  258. winte(' &nbsp;<BR>'+bd+' - '+dd+'</TD></TR></TABLE>')
  259. }
  260. win.document.write ('</span>')
  261. winte ('</span>')
  262. win.document.write ('<SCRIPT LANGUAGE="JavaScript">opener.wLast=t'+(code+l)+ln+'.offsetWidth; opener.hLast=t'+(code+l)+ln+'.offsetHeight</SCRIPT> ')
  263. }
  264.  
  265.  
  266. function drawHor(x,y,w)
  267. {
  268. win.document.write('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
  269. winte('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
  270. win.document.write('<img src=1.gif width='+w+' height=1></span>')
  271. winte('<img src=1.gif width='+w+' height=1></span>')
  272. }
  273.  
  274. function drawVer(x,y,h)
  275. {
  276. win.document.write('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
  277. winte('<span style="position:absolute; left:'+x+'; top:'+y+'; visibility:show">')
  278. win.document.write('<img src=1.gif height='+h+' width=1></span>')
  279. winte('<img src=1.gif height='+h+' width=1></span>')
  280. }
  281.  
  282. function drawLine(x1,y1,x2,y2,of)
  283. {
  284.  
  285. if (Math.abs(y2-y1) > hPerson+hLevel-1)
  286. return
  287. if (y2>y1)
  288. {
  289. drawVer(x1,y1,of/2+(y2-y1+1)/2)
  290. if (x2>x1)
  291. {
  292. drawHor(x1,of/2+y1+(y2-y1+1)/2,x2-x1)
  293. drawVer(x2,of/2+y1+(y2-y1+1)/2,y2-(of/2+y1+(y2-y1+1)/2))
  294. }
  295. else if (x1>=x2)
  296. {
  297. drawHor(x2,of/2+y1+(y2-y1+1)/2,x1-x2+1)
  298. drawVer(x2,of/2+y1+(y2-y1+1)/2,y2-(of/2+y1+(y2-y1+1)/2))
  299. }
  300. }
  301. else
  302. {
  303. drawVer(x1,y2,(y1-y2+1)/2-of/2)
  304. if (x2>x1)
  305. {
  306. drawHor(x1,y2+(y1-y2+1)/2-of/2,x2-x1)
  307. drawVer(x2,of/2+y2+(y1-y2+1)/2,y1-(of/2+y2+(y1-y2+1)/2))
  308. }
  309. else if (x1>=x2)
  310. {
  311. drawHor(x2,y2+(y1-y2+1)/2-of/2,x1-x2+1)
  312. drawVer(x2,of/2+y2+(y1-y2+1)/2,y1-(of/2+y2+(y1-y2+1)/2))
  313. }
  314. }
  315. }
  316.  
  317.  
  318. function clearGraph()
  319. {
  320. clearTable()
  321. nWi=0
  322. }
  323.  
  324. function isInALL(n)
  325. {
  326. for(var i=0; i<arrAllTree.length;i++)
  327. if (arrAllTree[i]==n)
  328. return true
  329. return false
  330. }
  331.  
  332.  
  333. function infoGraph(n)
  334. {
  335. if (n==nWi)
  336. return
  337. nWi=n
  338. iname=members[n].nm
  339. ifml=members[n].fml
  340. flGr=1
  341. 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)
  342.  
  343. }
  344.  
  345. function fromGraph(n)
  346. {
  347. getMember(n)
  348. focus()
  349. }
  350.  
  351. function getFather(n)
  352. {
  353. if (members[n].f==0)
  354. return n
  355. levelRoot--
  356. return getFather(members[n].f)
  357. }
  358. function getMather(n)
  359. {
  360. if (members[n].m==0)
  361. return n
  362. levelRoot--
  363. return getMather(members[n].m)
  364. }
  365. function getnChildren(n)
  366. {
  367. arrLevel[++level]+=parseInt(members[n].nc)
  368. if (level > levelTop)
  369. levelTop=level
  370. for (var i=0; i<members[n].nc; i++)
  371. {
  372. arrLevel[level]+=parseInt(members[members[n].c[i]].nw)
  373. getnChildren(members[n].c[i])
  374. }
  375. --level
  376. }
  377.  
  378. function getChildren(n)
  379. {
  380. ++level
  381. for (var i=0; i<members[n].nc; i++)
  382. {
  383. if (!isInTree(members[n].c[i]))
  384. arrTree[level][arrInd[level]++]=members[n].c[i]
  385. else
  386. {
  387. arrTree[level][arrInd[level]++]=0
  388. continue
  389. }
  390. for (var j=0; j<members[members[n].c[i]].nw; j++)
  391. {
  392. // if (isInTree(members[members[n].c[i]].w[j]))
  393. // {
  394. // for (var ii=levelRoot; ii<=levelTop; ii++)
  395. // for(var jj=0; jj<arrTree[ii].length; jj++)
  396. // if (members[members[n].c[i]].w[j]==arrTree[ii][jj])
  397. // arrTree[ii][jj]=0
  398. // }
  399. arrTree[level][arrInd[level]++]=members[members[n].c[i]].w[j]
  400. }
  401. getChildren(members[n].c[i])
  402. }
  403. --level
  404. }
  405.  
  406. function getI(i,n)
  407. {
  408. if (i>levelTop) return -1
  409. for(var j=0; j<arrTree[i].length; j++)
  410. if (arrTree[i][j]==n)
  411. return j
  412. return -1
  413. }
  414.  
  415. function getJ(n)
  416. {
  417. for (var i=levelRoot; i<=levelTop; i++)
  418. for(var j=0; j<arrTree[i].length; j++)
  419. if (arrTree[i][j]==n)
  420. return i
  421. return -1
  422. }
  423.  
  424.  
  425. function getLeftN(i,j)
  426. {
  427. for(var jj=j; jj>=0; jj--)
  428. if (arrTree[i][jj] > 0)
  429. return arrTree[i][jj]
  430. return 0
  431. }
  432.  
  433. function isBrak(f,m)
  434. {
  435. if (f==0 || m==0)
  436. return false
  437. for (var i=0; i < members[f].nw; i++)
  438. if (m==members[f].w[i])
  439. return true
  440. return false
  441. }
  442.  
  443. function isInTree(n)
  444. {
  445. for (var i=levelRoot; i<=levelTop; i++)
  446. for(var j=0; j<arrTree[i].length; j++)
  447. if (n==arrTree[i][j])
  448. return true
  449. return false
  450. }
  451.  
  452. function getOf(i,r,rr)
  453. {
  454.  
  455. var cc=arrXX[r]+arrWW[r]
  456. for(var k=0; k<members[r].nw; k++)
  457. {
  458. if (members[r].w[k]!=rr)
  459. cc+=arrWW[members[r].w[k]]+wWife
  460. else
  461. {
  462. cc+=wWife/2
  463. return cc
  464. }
  465. }
  466.  
  467. return cc
  468. }
  469.  
  470. function getLength(n,i)
  471. {
  472. var cc=0,r=0,rr=0
  473. if ((members[n].m==0 || !isInTree(members[n].m) )&& (members[n].f==0 || !isInTree(members[n].f)))
  474. return 0
  475. if (members[n].m==0 || members[n].f==0 || !isInTree(members[n].m) || !isInTree(members[n].f))
  476. {
  477. if (members[n].m==0 || !isInTree(members[n].m))
  478. r=members[n].f
  479. else
  480. r=members[n].m
  481. cc=arrXX[r]+arrWW[r]/2
  482. rr=r
  483. }
  484. else if (! isBrak(members[n].f,members[n].m))
  485. {
  486. if (getJ(members[n].f)==getJ(members[n].m))
  487. {
  488. if (arrXX[members[n].f]>0)
  489. r=members[n].f
  490. else
  491. r=members[n].m
  492. }
  493. else if (getJ(members[n].f)>getJ(members[n].m))
  494. r=members[n].m
  495. else
  496. r=members[n].f
  497. cc=arrXX[r]+arrWW[r]/2
  498. rr=r
  499. }
  500. else
  501. {
  502. if (getI(i,members[n].f)>getI(i,members[n].m))
  503. {
  504. r=members[n].m
  505. rr=members[n].f
  506. }
  507. else
  508. {
  509. r=members[n].f
  510. rr=members[n].m
  511. }
  512. cc=getOf(i,r,rr)
  513. }
  514.  
  515. var bb=0
  516. if (members[rr].nc==1)
  517. // bb=arrWW[members[r].c[0]]
  518. bb=arrWW[n]
  519. else
  520. {
  521. var xxx=0
  522. for (var k=0; k<members[rr].nc; k++)
  523. {
  524. if (members[members[rr].c[k]].f==members[n].f && members[members[rr].c[k]].m==members[n].m)
  525. {
  526. if (xxx==0 && members[rr].c[k]!=n)
  527. return 0
  528. bb+=arrWW[members[rr].c[k]]+wLevel
  529. for(var m=0; m<members[members[rr].c[k]].nw; m++)
  530. {
  531. if (isInTree(members[members[rr].c[k]].w[m]))
  532. bb+=arrWW[members[members[rr].c[k]].w[m]]+wWife
  533. }
  534. xxx++;
  535. }
  536. }
  537. bb-=wLevel
  538. }
  539. res= cc-arrXX[n]-bb/2
  540. if (res < 0)
  541. arrXX[r]-=res
  542.  
  543. return res
  544. }
  545.  
  546. function addAll(n,l)
  547. {
  548. var i=++level
  549. var j=getI(i,n)
  550. if (j<0) { --level; return}
  551. arrXX[n]+=l
  552. for(var ii=0; ii<members[n].nc; ii++)
  553. {
  554. addAll(members[n].c[ii],l)
  555. }
  556. for (var jj=0; jj<members[n].nw; jj++)
  557. {
  558. if (j+jj < arrTree[i].length)
  559. arrXX[members[n].w[jj]]+=l
  560. }
  561. --level
  562. }
  563.  
  564. function calcPersons(n)
  565. {
  566. var i=++level
  567. var j=getI(i,n)
  568. if (j<0) { --level; return}
  569. if (j==0)
  570. arrXX[n]=offsetX
  571. else
  572. {
  573. m=getLeftN(i,j-1)
  574. if (m>0)
  575. arrXX[n]=arrXX[m]+arrWW[m]+wLevel
  576. else arrXX[n]=offsetX
  577. }
  578. for(var ii=0; ii<members[n].nc; ii++)
  579. {
  580. if ((arrXX[members[n].c[ii]]==0))
  581. calcPersons(members[n].c[ii])
  582. }
  583. for (var jj=0; jj<members[n].nw; jj++)
  584. {
  585. if (j+jj < arrTree[i].length)
  586. arrXX[members[n].w[jj]]=arrXX[arrTree[i][j+jj]]+arrWW[arrTree[i][j+jj]]+wWife
  587. }
  588.  
  589. var l=getLength(n,i-1)
  590. --level
  591. if (l>0)
  592. {
  593. addAll(n,l)
  594. }
  595. }
  596.  
  597. function drawWifes(n)
  598. {
  599. var i=++level
  600. var j=getI(i,n)
  601. if (j<0) { --level; return}
  602.  
  603. for(var ii=0; ii<members[n].nc; ii++)
  604. {
  605. drawWifes(members[n].c[ii])
  606. }
  607.  
  608. var x=arrXX[arrTree[i][j]]
  609. y=offsetY+(i-levelRoot)*(hPerson+hLevel)+hLevel
  610. if (j==0 || !isBrak(n, arrTree[i][j-1]))
  611. for (var jj=0; jj<members[n].nw; jj++)
  612. {
  613. if (j+jj < arrTree[i].length)
  614. x+=arrWW[arrTree[i][j+jj]]+wWife
  615. if (j+jj+1 < arrTree[i].length)
  616. {
  617. var nn=arrTree[i][j+jj+1]
  618.  
  619. if (nn>0)
  620. {
  621. 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)
  622. drawHor(x-wWife, y+HH/2, wWife)
  623. }
  624. }
  625. }
  626. --level
  627. }
  628.  
  629.  
  630.  
  631. function getMaxLevel()
  632. {
  633. var n=0
  634. for (var i=levelRoot; i<=levelTop; i++)
  635. {
  636. var k=0
  637. for(var j=0; j<arrTree[i].length;j++)
  638. if (arrTree[i][j]>0)
  639. k++
  640. if (k>n)
  641. {
  642. n=k
  643. nMaxLevel=i
  644. }
  645. }
  646. return n
  647. }
  648.  
  649. function isWife(l,n)
  650. {
  651. for(var i=arrTree[l].length-1; arrTree[l][i]!=n; i--)
  652. {
  653. if (arrTree[l][i]>0)
  654. for (var j=0; j<members[arrTree[l][i]].nw; j++)
  655. if (members[arrTree[l][i]].w[j]==n)
  656. return 0
  657. }
  658. for(var i=0; arrTree[l][i]!=n; i++)
  659. {
  660. if (arrTree[l][i]>0)
  661. for (var j=0; j<members[arrTree[l][i]].nw; j++)
  662. if (members[arrTree[l][i]].w[j]==n)
  663. return arrTree[l][i]
  664. }
  665. return 0
  666.  
  667. }
  668.  
  669. function drawWife(l,y,n)
  670. {
  671. if (arrTree[l][n-1]>0)
  672. drawHor(arrXX[arrTree[l][n-1]]+arrWW[arrTree[l][n-1]], y+HH/2, wWife)
  673. }
  674.  
  675. function remove(n)
  676. {
  677. for (var i=levelRoot; i<=levelTop; i++)
  678. for(var j=0; j<arrTree[i].length; j++)
  679. if (n==arrTree[i][j])
  680. arrTree[i][j]=0
  681. }
  682.  
  683.  
  684.  
  685.  
  686.  
  687. function getH(n)
  688. {
  689. for (var i=levelRoot; i<=levelTop; i++)
  690. for(var j=0; j<arrTree[i].length; j++)
  691. if (n==arrTree[i][j])
  692. return i
  693. return -999
  694. }
  695.  
  696. function isDistanceWife(f,m)
  697. {
  698. if (arrXX[f]> arrXX[m])
  699. {
  700. if (arrXX[f]- arrXX[m]-arrWW[m] == wWife)
  701. return true
  702. }
  703. else
  704. if (arrXX[m]- arrXX[f]-arrWW[f] == wWife)
  705. return true
  706.  
  707. return false
  708. }
  709.  
  710. function drawChildren()
  711. {
  712. for (var i=levelRoot; i<=levelTop; i++)
  713. for(var j=0; j<arrTree[i].length; j++)
  714. {
  715. n=arrTree[i][j]
  716. if (n==0)
  717. continue
  718. if (members[n].f>0 && members[n].m>0 && isBrak(members[n].f,members[n].m))
  719. {
  720. if(!isInTree(members[n].f))
  721. continue
  722. if (isDistanceWife(members[n].f,members[n].m))
  723. {
  724. if (arrXX[members[n].f]>arrXX[members[n].m])
  725. drawLine(arrXX[members[n].f]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
  726. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
  727. else
  728. if (arrXX[members[n].m]>arrXX[members[n].f])
  729. drawLine(arrXX[members[n].m]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
  730. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
  731. }
  732. else
  733. {
  734. if (arrXX[members[n].f]>arrXX[members[n].m])
  735. drawLine(arrXX[members[n].f]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
  736. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
  737. else
  738. if (arrXX[members[n].m]>arrXX[members[n].f])
  739. drawLine(arrXX[members[n].m]-wWife/2, offsetY+(getH(members[n].f)+1-levelRoot)*hLevel+(getH(members[n].f)-levelRoot)*hPerson+HH/2,
  740. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,HH/2)
  741.  
  742. }
  743. }
  744. else if (members[n].f==0 && members[n].m==0)
  745. continue
  746. else
  747. {
  748. if (members[n].f==0 && isInTree(members[n].m))
  749. r=members[n].m
  750. else if (members[n].m==0 && isInTree(members[n].f))
  751. r=members[n].f
  752. else if (getH(members[n].f)<getH(members[n].m) && isInTree(members[n].f))
  753. r=members[n].f
  754. else if (getH(members[n].f)>getH(members[n].m) && isInTree(members[n].m))
  755. r=members[n].m
  756. else if (modeTree=="F" )
  757. {
  758. r=members[n].m
  759. if(!isInTree(r))
  760. continue
  761. drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
  762. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
  763. r=members[n].f
  764. }
  765. else
  766. {
  767. r=members[n].f
  768. if(!isInTree(r))
  769. continue
  770. drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
  771. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
  772. r=members[n].m
  773. }
  774. if(!isInTree(r))
  775. continue
  776. drawLine(arrXX[r]+arrWW[r]/2, offsetY+(getH(r)+1-levelRoot)*hLevel+(getH(r)-levelRoot)*hPerson+HH,
  777. arrXX[n]+arrWW[n]/2, offsetY+(i-levelRoot+1)*hLevel+(i-levelRoot)*hPerson,0)
  778.  
  779. }
  780. }
  781. }
  782.  
  783. function newtest(mode)
  784. {
  785. if (mode==1)
  786. test("F", nProband)
  787. else
  788. test("M", nProband)
  789. }
  790.  
  791. function getLeftParent(n)
  792. {
  793. if (members[n].f==0 && members[n].m==0 )
  794. return 0
  795. if (members[n].f==0 || !isInTree(members[n].f))
  796. if (!isInTree(members[n].m))
  797. return 0
  798. else return arrXX[members[n].m]
  799. if (members[n].m==0 || !isInTree(members[n].m))
  800. if (!isInTree(members[n].f))
  801. return 0
  802. else return arrXX[members[n].f]
  803. if (arrXX[members[n].f]>arrXX[members[n].m])
  804. return arrXX[members[n].m]
  805. return arrXX[members[n].f]
  806. }
  807.  
  808.  
  809. function test(mode, nStart)
  810. {
  811. nAllT=0
  812. level=0
  813. levelRoot=0
  814. clearTable()
  815. graph=1
  816. if(nStart==0)
  817. nStart=start
  818. nProband=nStart
  819. modeTree=mode
  820. arrLevel=new Array(NN)
  821. var n
  822. if (mode=="F")
  823. n=getFather(nStart);
  824. else
  825. n=getMather(nStart);
  826. arrLevel[levelRoot]=1
  827. level=levelRoot
  828. levelTop=level
  829. for ( i=1; i<NN; i++)
  830. arrLevel[levelRoot+i]=0
  831. arrAllTree =new Array(NN)
  832. getnChildren(n)
  833.  
  834. --levelTop
  835. arrTree = new Array(levelTop-levelRoot+1)
  836. arrInd = new Array(levelTop-levelRoot+1)
  837. for ( i=levelRoot; i<=levelTop; i++)
  838. {
  839. arrTree[i]=new Array(arrLevel[i])
  840. for (var jj=0; jj<arrLevel[i]; jj++)
  841. arrTree[i][jj]=0
  842. arrInd[i]=0
  843. nPersons+=arrLevel[i]
  844. }
  845. arrTree[levelRoot][arrInd[levelRoot]++]=n
  846. for (i=0; i<members[n].nw; i++)
  847. {
  848. arrTree[levelRoot][arrInd[levelRoot]++]=members[n].w[i]
  849. }
  850. getChildren(n)
  851. arrWW = new Array(nPersons+1)
  852. arrXX = new Array(nPersons+1)
  853. optree()
  854. initGraph()
  855.  
  856. ///// colculation ////////////////////////
  857. nnn=9999
  858. for ( i=levelRoot; i<=levelTop; i++)
  859. {
  860. for (j=arrTree[i].length-1; j>=0; j--)
  861. {
  862. n=arrTree[i][j];
  863. if (n==0)
  864. continue
  865. 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)
  866. arrWW[n]=wLast
  867. arrXX[n]=0
  868. }
  869. }
  870. HH=hLast
  871. hPerson=HH
  872.  
  873. ///////////////////////////////////////////
  874. arrXX[0]=0
  875. arrWW[0]=0
  876. level=levelRoot-1
  877. calcPersons(arrTree[levelRoot][0])
  878. for ( i=levelRoot; i<=levelTop; i++)
  879. for (j=arrTree[i].length-1; j>=0; j--)
  880. {
  881. var n=arrTree[i][j]
  882. var y=offsetY+hLevel*(i-levelRoot+1)+hPerson*(i-levelRoot)
  883. if (n>0)
  884. 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)
  885. }
  886. drawChildren()
  887. level=levelRoot-1
  888. drawWifes(arrTree[levelRoot][0])
  889. win.document.write ('</span>')
  890. winte('<SCR'+'IPT>document.all.m0.style.posLeft=opener.win.document.all.m0.style.posLeft; </SCR'+'IPT>')
  891. return
  892.  
  893. }
  894.  
  895.  
Success #stdin #stdout 1.42s 62220KB
stdin
Standard input is empty
stdout
Standard output is empty