function getObjectById(id) {
    if (document.getElementById) {
        return document.getElementById(id);
    }
    else if (document.all) {
        return document.all[id];
    }
    else if (document.layers) {
        return document.layers[id];
    }
}

function getStyleById(id) {
    var element=getObjectById(id);
    
    if (element!=null && element.style) {
        return element.style;
    }
    else {
        return element;
    }
}

function findPosX(obj) {
    var curleft = 0;
    
    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.offsetParent) {
        while (obj.offsetParent) {
            curtop+=obj.offsetTop;
            obj=obj.offsetParent;
        }
    }
    else if (obj.y) {
        curtop+=obj.y;
    }
    
    return curtop;
}

function getViewportTop() {
    var node;
    
    if (document.body) {
        node=document.body;
    }
    
    if (node) {
        while (node.scrollTop>=0) {
            if (node.scrollTop > 0) {
                return node.scrollTop;
            }
            
            node=node.parentNode;
        }
    }
    
    return 0;
}

/* Moves an object over another object using absolute positioning */
function moveToObjectById(objectId, moveToId) {
    var objectStyle=getStyleById(objectId);
    var moveToObject=getObjectById(moveToId);
    
    var x=findPosX(moveToObject);
    var y=findPosY(moveToObject);
    
    objectStyle.position="absolute";
    objectStyle.top=y + "px";
    objectStyle.left=x + "px";
    objectStyle.width=moveToObject.offsetWidth + "px";
    objectStyle.height=moveToObject.offsetHeight + "px";
    objectStyle.display="block";
}

function openCenteredWindow(url,target,width,height) {
    var attr='toolbar=no,location=no,directories=no,status=no,menubar=0,scrollbars=1,resizable=1,width='+width+',height='+height;
    
    // attempt to center
    if (screen.width) {
        // internet explorer
        attr+=',left='+(screen.width-width)/2;
        attr+=',top='+(screen.height-height)/2;
    }
    else {
        // netscape
        attr+=',screenX='+(window.screenX+((window.outerWidth-width)/2));
        attr+=',screenY='+(window.screenY+((window.outerHeight-height)/2));
    }
    
    var popUpWin=window.open(url,target,attr);
    
    if (popUpWin.focus) {
        popUpWin.focus();
    }
}

