for( var h = 1; h < slotceiling; h++ ) { eval( 'var timer' + h + '=false' ); } var timerleft = false; function setPopup(slot, tall, high) { eval( "timer" + slot + "=setTimeout(\"showPopup(" + slot + ","+tall+","+high+")\",150);"); } function showPopup( slot, tall, high ){ // hide any other currently visible popups if( lastpopup ) { cancelTimer(lastpopup); hidePopup(lastpopup); } lastpopup = slot; // show current var ref = jQuery("#popup" + slot); var box = jQuery("#box" + slot); ref.html(getPopup(slot)); var vOffset, hOffset, hDisplace; if(tall + high < 0) vOffset = 0; else { vOffset = tall + high + pedborderwidth; var vDisplace = box.position().top + high + pedborderwidth + ref.height() - jQuery('#outer').height() + 20; //20 is for the scrollbar if(vDisplace > 0) vOffset -= vDisplace; } hDisplace = box.position().left + ref.width() - jQuery('#outer').width(); if(hDisplace > 0) { if(vDisplace > 0) { ref.offset({left: box.offset().left - ref.width() - pedborderwidth}); if(box.position().top < vOffset) vOffset = box.position().top; } else ref.offset({left: box.offset().left - hDisplace}); } else { if(vDisplace > 0) { hDisplace = box.position().left + box.width() + ref.width() - jQuery('#outer').width(); if(hDisplace > 0) ref.offset({left: box.offset().left - ref.width() - pedborderwidth}); else ref.offset({left: box.offset().left + box.width() + (2 * pedborderwidth)}); if(box.position().top < vOffset) vOffset = box.position().top; } } ref.css('top',vOffset); ref.css('z-index',8); ref.css('visibility','visible'); } function hidePopup(slot) { var ref = jQuery("#popup" + slot); if (ref.length) { ref.css('visibility','hidden'); } eval("timer" + slot + "=false;"); } function showBackPopup() { if( lastpopup ) { cancelTimer(lastpopup); hidePopup(lastpopup); } lastpopup = ''; var ref = jQuery("#popupleft"); ref.html(getBackPopup()); if ( ref.css('visibility') != "show" && ref.css('visibility') != "visible" ) { ref.css('z-index',8); ref.css('visibility','visible'); } } function setTimer(slot) { eval( "timer" + slot + "=setTimeout(\"hidePopup('" + slot + "')\",popuptimer);"); } function cancelTimer(slot) { eval( "clearTimeout(timer" + slot + ");" ); eval( "timer" + slot + "=false;" ); } function setFirstPerson(newperson) { if(newperson != firstperson) { firstperson = newperson; if( !tngprint ) { var params = 'personID=' + newperson + '&tree=' + tree + '&parentset=' + parentset + '&generations=' + generations; jQuery("#stdpedlnk").attr('href',pedigree_url + params + '&display=standard'); jQuery("#compedlnk").attr('href',pedigree_url + params + '&display=compact'); jQuery("#boxpedlnk").attr('href',pedigree_url + params + '&display=box'); jQuery("#textlnk").attr('href',pedigreetext_url + params); jQuery("#ahnlnk").attr('href',ahnentafel_url + params); jQuery("#extralnk").attr('href',extrastree_url + params + '&showall=1'); } } } function fetchData(famParams,newgens) { var loading = jQuery("#loading"); loading.show(); var strParams = "generations=" + newgens + "&tree=" + tree + '&display=' + display + famParams; var loader1 = new net.ContentLoader(pedjsonfile,FillChart,null,"POST",strParams); } function getNewChart(personID,newgens,newparentset) { setFirstPerson(personID); fetchData('&personID=' + personID + '&parentset=' + newparentset, newgens ); } function getNewFamilies(famParams,newgens,gender) { //set first person var nextfamily = people[firstperson].famc; if( gender == "F" ) setFirstPerson(families[nextfamily].wife); else setFirstPerson(families[nextfamily].husband); if( famParams ) fetchData(famParams,newgens); else DisplayChart(); } function goBack(backperson) { setFirstPerson( backperson ); DisplayChart(); } function addNewPeople(incoming) { var vars = eval('('+incoming+')'); if(vars.people) { for(var i=0; i < vars.people.length; i++) { //var p = new Person(vars.people[i]); var p = vars.people[i]; var pID = vars.people[i].personID; people[pID] = p; } } if(vars.families) { for(var i=0; i < vars.families.length; i++){ var family = vars.families[i]; var famID = vars.families[i].famID; families[famID] = family; } } } function getGenderIcon(gender) { var genderstr, icon = ""; var valign = display == "compact" ? -2 : -1; if(gender) { if(gender == "M") genderstr = "male"; else if(gender == "F") genderstr = "female"; if(genderstr) icon = " \"""; } return icon; } function FillChart() { addNewPeople(this.req.responseText); var loading = jQuery("#loading"); DisplayChart(); loading.hide(); } function DisplayChart() { toplinks = ""; botlinks = ""; endslotctr = 0; endslots = new Array(); var slot = 1; FillSlot(slot,firstperson,0); var offpage; var leftarrow = jQuery('#leftarrow'); if(people[firstperson].backperson) { leftarrow.html('' + leftarrowimg + ''); leftarrow.css('visibility','visible'); } else { var gotkids = 0; var activeperson = people[firstperson]; var spFamID; if( activeperson.spfams) { for( var i = 0; i < activeperson.spfams.length; i++ ) { spFamID = activeperson.spfams[i].spFamID; if( families[spFamID].children ) { gotkids = 1; break; } } } if( gotkids ) { leftarrow.html('' + leftarrowimg + ''); leftarrow.css('visibility','visible'); } else { leftarrow.html(''); leftarrow.css('visibility','hidden'); } } topparams = getParams( toplinks ); botparams = getParams( botlinks ); for( var i = 0; i < endslots.length; i++ ) { offpage = jQuery('#offpage'+endslots[i]); offpage.css('visibility','visible'); } } function FillSlot(slot,currperson,lastperson) { var currentBox = document.getElementById('box'+slot); var content = ""; var slotperson, husband, wife; if( people[currperson] ) slotperson = people[currperson]; else { slotperson = new Object; slotperson.famc = -1; slotperson.personID = 0; } slots[slot] = slotperson; var dnarrow = jQuery('#downarrow'+slot); var popup = jQuery('#popup'+slot); var popupcontent = ""; var shadow, border, icons = ""; if( slotperson.personID ) { //save primary marriage if( lastperson ) slotperson.famID = people[lastperson].famc; else slotperson.famID = ""; if( hideempty ) { currentBox.style.visibility = 'visible'; toggleLines(slot,slotperson.famc,'visible'); } if( slotperson.photosrc && slotperson.photosrc != "-1" ) { content = ''; if( slotperson.photolink && slotperson.photolink != "-1" ) content = '' + content + ''; content = '' + content + ''; } content += '' + namepad + '' + slotperson.name + ''; if( display == "standard" ) content += '
' + getGenderIcon(slotperson.gender) + ' ' + slotperson.years + ' '; else content += getGenderIcon(slotperson.gender); //put small pedigree link in every box except for primary individual if(!tngprint) { if( popupchartlinks && slotperson.famc != -1 && slotperson.personID != personID) icons += pedIcon(slotperson.personID); if(allow_edit) icons += editIcon('P',slot,slotperson.personID,'',slotperson.gender); if(display != "box") { var w = parseInt(currentBox.style.width) - 35; var h = parseInt(currentBox.style.height) - 15; icons = ''; } else { content += icons; icons = ""; } } if( display == "box" ) { var bmd = doBMD(slot,slotperson); if( bmd ) content += '' + bmd + '
'; } content += ''; currentBox.style.backgroundColor = currentBox.oldcolor; if( usepopups ) { if( slotperson.spfams || slotperson.bdate || slotperson.bplace || slotperson.ddate || slotperson.dplace || slotperson.parents ) { dnarrow.css('visibility','visible'); popup.html(popupcontent); } else dnarrow.css('visibility','hidden'); } } //no person else { if( hideempty ) { content = ''; currentBox.style.visibility = "hidden"; toggleLines(slot,0,'hidden'); } else { if( allow_edit && lastperson && people[lastperson].famc != -1 ) { var twoback = people[lastperson].backperson var twobackfam = people[twoback] ? people[twoback].famc : ""; content = '' + namepad + '' + txt_editfam + ''; } else if( allow_add && lastperson && people[lastperson].famc == -1 ) content = '' + namepad + '' + txt_addfam + ''; else content = '' + namepad + unknown + ''; currentBox.style.backgroundColor = emptycolor; } if( usepopups ) { dnarrow.css('visibility','hidden'); popup.html(""); } } currentBox.innerHTML = content ? icons + '' + content + '
' : ""; var nextslot = slot * 2; if( slotperson.famc != -1 && families[slotperson.famc] ) { husband = families[slotperson.famc].husband; wife = families[slotperson.famc].wife; } else { husband = 0; wife = 0; } if( nextslot < slotceiling ) { FillSlot(nextslot,husband,slotperson.personID); nextslot++; FillSlot(nextslot,wife,slotperson.personID); } else if( slotperson.famc != "-1" ) { if( slot < (slotceiling_minus1 * 3 / 2) ) toplinks = addToList(toplinks,slotperson.personID); else botlinks = addToList(botlinks,slotperson.personID); endslots[endslotctr] = slot; endslotctr++; } else { offpage = jQuery('#offpage'+slot); offpage.css('visibility','hidden'); } } function toggleLines(slot,nextperson,visibility) { var newvis; for( var i = 1; i <= 5; i++ ) { shadow = jQuery('#shadow'+slot+'_'+i); border = jQuery('#border'+slot+'_'+i); newvis = ( i == 3 && nextperson <= 0) ? "hidden" : visibility; if( shadow.length ) shadow.css('visibility',newvis); if( border.length ) border.css('visibility',newvis); } } function addToList(linklist,backperson) { var listarray = linklist.split(","); if(jQuery.inArray(backperson,listarray) < 0) { if( linklist ) linklist += ","; linklist += backperson; } return linklist; } function getParams( personstr ) { var params = "", currperson, nextfamily; if( personstr ) { var pers = personstr.split(","); ctr = 0; for( var i = 0; i < pers.length; i++ ) { currperson = pers[i]; nextfamily = people[currperson].famc; if( !families[nextfamily] || needspouses(nextfamily)) { ctr++; params += "&backpers" + ctr + "=" + currperson + "&famc" + ctr + "=" + people[currperson].famc; } } params += "&l=" + pers.length; } return params; } function needspouses( nextfamily ) { var husb = families[nextfamily].husband; var wife = families[nextfamily].wife; return (!husb || !wife || !people[husb] || !people[wife]) ? true : false; } var tdclasstxt = 'class="normal pboxpopup" valign="top"'; var divtxt = '
\n\n'; var tabletxt = '
\n'; function doRow(slot,slotabbr,slotevent1,slotevent2) { var rstr = ""; slotabbr += ":"; if( slotevent1 ) rstr += ''; if( slotevent2 ) { if( slotevent1 ) slotabbr = ' '; rstr += ''; } return rstr; } function getBackPerson(nxtpersonID) { hidePopup('left'); getNewChart(nxtpersonID, generations, 0); } function getBackPopup() { var popupcontent = "", spouselink, count, kidlink; var slotperson = slots[1]; if( slotperson.spfams ) { popupcontent += divtxt; for( var i = 0; i < slotperson.spfams.length; i++ ) { var fam = slotperson.spfams[i]; var children = families[fam.spFamID].children; count = i + 1; //do each spouse if( fam.spID && fam.spID != -1) spouselink = fam.spname; else spouselink = unknown; popupcontent += ''; popupcontent += ''; if( popupkids && children ) { //these might not need nowrap popupcontent += '\n'; for( var j = 0; j < children.length; j++ ) { var spchild = children[j]; kidlink = ''; popupcontent += ''; popupcontent += ''; } } } popupcontent += "
' + slotabbr + '' + slotevent1 + '
' + slotabbr + '' + slotevent2 + '
' + count + '' + spouselink + '
 ' + txt_children + ':
' + kidlink + '' + kidlink + spchild.name + '
\n"; } if( popupcontent ) popupcontent = '
' + popupcontent + '
\n'; return popupcontent; } function doBMD(slot,slotperson) { var famID = slotperson.famID != null ? slotperson.famID : false; var content = ""; var icons = ""; if( popupchartlinks && slotperson.famc != -1 && slotperson.personID != personID) icons += pedIcon(slotperson.personID); if(allow_edit) editIcon('P',slot,slotperson.personID,'',slotperson.gender); if(display == "standard") content += divtxt + ''+slotperson.name+''+icons+'\n'; else content += tabletxt; content += doRow(slot,slotperson.babbr,slotperson.bdate,slotperson.bplace); if( famID ) content += doRow(slot,families[famID].mabbr,families[famID].mdate,families[famID].mplace); content += doRow(slot,slotperson.dabbr,slotperson.ddate,slotperson.dplace); content += ''; if(display == "standard") content += ''; return content; } function getPopup(slot) { var popupcontent = "", spouselink, sppedlink, count, kidlink, kidpedlink, parpedlink, parentlink; var slotperson = slots[slot]; if( display == "standard" ) popupcontent += doBMD(slot,slotperson); if( slotperson.parents ) { if(popupcontent) popupcontent += '
\n'; popupcontent += divtxt; popupcontent += '' + txt_parents + ':\n'; for( var i = 0; i < slotperson.parents.length; i++ ) { var par = slotperson.parents[i]; count = i + 1; parentlink = ''; if( par.fatherID ) parentlink += '
' + par.fathername + ''; if( par.motherID ) { if( parentlink ) parentlink += ", "; parentlink += '' + par.mothername + ''; } if( par.famID != slotperson.famc ) parpedlink = '' + chartlink + ''; else parpedlink = ''; popupcontent += '' + count + ''; popupcontent += '' + parentlink + ''; popupcontent += ' ' + parpedlink + ''; } popupcontent += '\n'; } if( popupspouses && slotperson.spfams ) { for( var i = 0; i < slotperson.spfams.length; i++ ) { var fam = slotperson.spfams[i]; var children = families[fam.spFamID].children; count = i + 1; //this one might not need "nowrap" if(popupcontent) popupcontent += '
'; popupcontent += divtxt; popupcontent += '' + txt_family + ': [' + txt_groupsheet + ']'; if(allow_edit) popupcontent += editIcon('F',slot,slotperson.backperson,fam.spFamID,slotperson.gender); popupcontent += ''; //do each spouse sppedlink = ''; if( fam.spID && fam.spID != -1) { spouselink = '' + fam.spname + ''; if( popupchartlinks ) sppedlink = pedIcon(fam.spID); } else spouselink = unknown; popupcontent += '' + count + ''; popupcontent += '' + spouselink + ''; popupcontent += '' + sppedlink + ''; if( popupkids && children && children.length ) { popupcontent += ' ' + txt_children + ':\n'; for( var j = 0; j < children.length; j++ ) { var spchild = children[j]; kidlink = '' + spchild.name + ''; if( popupchartlinks ) kidpedlink = pedIcon(spchild.childID); else kidpedlink = ''; popupcontent += ' '; popupcontent += '' + pedbullet + ''; popupcontent += '' + kidlink + ''; popupcontent += '' + kidpedlink + ''; } } popupcontent += '\n'; } } if( popupcontent ) popupcontent = '
' + popupcontent + '
\n'; return popupcontent; } function editIcon(type,slot,personID,familyID,gender) { var iconlink; var editicon = ''; if(type == "P") iconlink = ' ' + editicon + ''; else { var famc = personID ? people[personID].famc : familyID; iconlink = ' ' + editicon + ''; } return iconlink; } function pedIcon(personID) { return ' ' + chartlink + ''; }