int top = 0;
final HTMLElement offsetParent = getOffsetParent();
// Add the offset for this node.
DomNode node = getDomNodeOrDie();
HTMLElement element = (HTMLElement) node.getScriptObject();
top += element.jsxGet_currentStyle().getTop(true, false, false);
// If this node is absolutely positioned, we're done.
final String position = element.jsxGet_currentStyle().getPositionWithInheritance();
if ("absolute".equals(position)) {
return top;
}
// Add the offset for the ancestor nodes.
node = node.getParentNode();
while (node != null && node.getScriptObject() != offsetParent) {
if (node.getScriptObject() instanceof HTMLElement) {
element = (HTMLElement) node.getScriptObject();
top += element.jsxGet_currentStyle().getTop(false, true, true);
}
node = node.getParentNode();
}
if (offsetParent != null) {
final HTMLElement thiz = (HTMLElement) getDomNodeOrDie().getScriptObject();
final boolean thisElementHasTopMargin = (thiz.jsxGet_currentStyle().getMarginTop() != 0);