// JavaScript Document function findPosX(obj){ var curleft = 0; if(obj){ if (obj.offsetParent){ while (obj.offsetParent){ curleft += obj.offsetLeft; obj = obj.offsetParent; } } else if (obj.x){ curleft += obj.x; } } return curleft; } function findPosY(obj){ var curtop = 0; if(obj){ if (obj.offsetParent){ while (obj.offsetParent){ curtop += obj.offsetTop obj = obj.offsetParent; } } else if (obj.y){ curtop += obj.y; } } return curtop; } var timerlen = 3; var slideAniLen = 500; var timerID = new Array(); var startTime = new Array(); var obj = new Array(); var endHeight = new Array(); var moving = new Array(); var dir = new Array(); function startslide(objname){ obj[objname] = document.getElementById(objname); endHeight[objname] = parseInt(obj[objname].style.height); startTime[objname] = (new Date()).getTime(); if(dir[objname] == "down"){ obj[objname].style.height = "1px"; } obj[objname].style.display = "block"; timerID[objname] = setInterval("slidetick(" + objname + ");",timerlen); } function slidedown(objname){ if(moving[objname]) return; if(document.getElementById(objname).style.display != "none") return; moving[objname] = true; dir[objname] = "down"; startslide(objname); } function slideup(objname){ if(moving[objname]) { return; } if(document.getElementById(objname).style.display == "none") { return; } moving[objname] = true; dir[objname] = "up"; startslide(objname); } function slidetick(objname){ var elapsed = (new Date()).getTime() - Number(startTime[objname]); if (elapsed > slideAniLen) { endSlide(objname); } else { var d =Math.round(elapsed / slideAniLen * endHeight[objname]); if(dir[objname] == "up") { d = endHeight[objname] - d; } obj[objname].style.height = d + "px"; } return; } function endSlide(objname){ clearInterval(timerID[objname]); if(dir[objname] == "up") { obj[objname].style.display = "none"; } obj[objname].style.height = endHeight[objname] + "px"; delete(moving[objname]); delete(timerID[objname]); delete(startTime[objname]); delete(endHeight[objname]); delete(obj[objname]); delete(dir[objname]); return; } function toggle(id, withSlide){ section = document.getElementById(id); sectionImage = document.getElementById("img_"+id); main = document.getElementById("main_"+id); if (section.style.display == 'none'){ if(withSlide) { slidedown(id);} else { section.style.display = "block"; } sectionImage.src = "/images/minus.gif"; main_Ypos = findPosY(main); // If expanding the bio will result in it spilling off the page, reset the page scroll // so the bottom of the bio lands on the bottom of the page. Like so... // If the (Y position of the bio + bio height) > (Y position of the window + window height) // then, set Y scroll = bottom of the bio - window height. if(document.all){ if(ie7) { scrollTop = document.documentElement.scrollTop; offsetHeight = document.documentElement.offsetHeight; } else { scrollTop = document.body.scrollTop; offsetHeight = document.body.offsetHeight; } if((main_Ypos+main.offsetHeight)>=(scrollTop+offsetHeight)){ window.scrollTo(0,main_Ypos+main.offsetHeight-offsetHeight+20); } }else { if((main_Ypos+main.offsetHeight)>=(window.pageYOffset+window.innerHeight)){ window.scrollTo(0,main_Ypos+main.offsetHeight-window.innerHeight+20); } } // or... if you want to just point to the top of the bio, add a named anchor above each // bio, and uncomment the assignment below to set the browser position to the hash. //location.hash = 'a_'+id; }else{ if(withSlide) { slideup(id); } else { section.style.display = "none"; } sectionImage.src = "/images/plus.gif"; } }