function overlay_getScrollAmount() { var scrOfX = 0, scrOfY = 0; if ( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } return [scrOfX, scrOfY]; } function overlay_findPosition(obj, stopObjectId) { var curleft = 0, curtop = 0; curleft = obj.offsetLeft curtop = obj.offsetTop if (obj.offsetParent) { while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop if (obj.id == stopObjectId) return [curleft, curtop]; } } return [curleft, curtop]; } function overlay_findWindowPosition(obj) { var pos = overlay_findPosition(obj); var scroll = overlay_getScrollAmount() var x = 0, y = 0; if (isNaN(window.screenX)) { x = pos[0] - scroll[0] + window.screenLeft; y = pos[1] - scroll[1] + window.screenTop; } else { x = pos[0] + window.screenX + (window.outerWidth - window.innerWidth) - scroll[0]; y = pos[1] + window.screenY + (window.outerHeight - 24 - window.innerHeight) - scroll[1]; } return [x, y]; } //stopObjectId needed if a parent element has absolute or relative positioning function overlay_display(overlayObjID, anchorObj, offsetLeft, offsetTop, stopObjectId) { var pos = overlay_findPosition(anchorObj, stopObjectId); var popup = overlay_findObject(overlayObjID); var posX = pos[0] - offsetLeft var posY = pos[1] - offsetTop // if body is center aligned we need to know the position of the main div var startPos = 0; for (var i=0; i < document.body.childNodes.length; i++) { if (document.body.childNodes[i].tagName) { startPos = document.body.childNodes[i].offsetLeft; //NOTE: if the form tag is inside another tag then the positioning may not work properly if (document.body.childNodes[i].tagName == "FORM") break; } } posX -= startPos; popup.style.left = posX + 'px'; popup.style.top = posY + 'px'; popup.style.display = 'block'; } function overlay_displayFixed(overlayObjID, posX, posY) { var popup = overlay_findObject(overlayObjID); popup.style.left = posX + 'px'; popup.style.top = posY + 'px'; popup.style.display = 'block'; } function overlay_hide(overlayObjID) { var popup = overlay_findObject(overlayObjID); popup.style.display = 'none'; } function overlay_findObject( oName, oFrame, oDoc ) { /* if not working on a layer, document should be set to the document of the working frame if the working frame is not set, use the window object of the current document WARNING: - cross frame scripting will cause errors if your page is in a frameset from a different domain */ if( !oDoc ) { if( oFrame ) { oDoc = oFrame.document; } else { oDoc = window.document; } } //check for images, forms, layers if( oDoc[oName] ) { return oDoc[oName]; } //check for pDOM layers if( oDoc.all && oDoc.all[oName] ) { return oDoc.all[oName]; } //check for DOM layers if( oDoc.getElementById && oDoc.getElementById(oName) ) { return oDoc.getElementById(oName); } //check for form elements for( var x = 0; x < oDoc.forms.length; x++ ) { if( oDoc.forms[x][oName] ) { return oDoc.forms[x][oName]; } } //check for anchor elements //NOTE: only anchor properties will be available, //NOT link properties (in layers browsers) for( var x = 0; x < oDoc.anchors.length; x++ ) { if( oDoc.anchors[x].name == oName ) { return oDoc.anchors[x]; } } //check for any of the above within a layer in layers browsers for( var x = 0; document.layers && x < oDoc.layers.length; x++ ) { var theOb = overlay_findObject( oName, null, oDoc.layers[x].document ); if( theOb ) { return theOb; } } //check for frames, variables or functions if( !oFrame && window[oName] ) { return window[oName]; } if( oFrame && oFrame[oName] ) { return oFrame[oName]; } //if checking through frames, check for any of the above within //each child frame for( var x = 0; oFrame && oFrame.frames && x < oFrame.frames.length; x++ ) { var theOb = overlay_findObject( oName, oFrame.frames[x], oFrame.frames[x].document ); if( theOb ) { return theOb; } } return null; }