-/* ***********************************************************
-Example 4-3 (DHTMLapi.js)
-"Dynamic HTML:The Definitive Reference"
-2nd Edition
-by Danny Goodman
-Published by O'Reilly & Associates ISBN 1-56592-494-0
-http://www.oreilly.com
-Copyright 2002 Danny Goodman. All Rights Reserved.
-************************************************************ */
-// DHTMLapi.js custom API for cross-platform
-// object positioning by Danny Goodman (http://www.dannyg.com).
-// Release 2.0. Supports NN4, IE, and W3C DOMs.
-
-// Global variables
-var isCSS, isW3C, isIE4, isNN4;
-// initialize upon load to let all browsers establish content objects
-function initDHTMLAPI() {
- if (document.images) {
- isCSS = (document.body && document.body.style) ? true : false;
- isW3C = (isCSS && document.getElementById) ? true : false;
- isIE4 = (isCSS && document.all) ? true : false;
- isNN4 = (document.layers) ? true : false;
- isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
- }
-}
-// set event handler to initialize API
-//window.onload = initDHTMLAPI;
-addListener(window, 'load', initDHTMLAPI);
-//registerStartupFunction(initDHTMLAPI)
-
-// Seek nested NN4 layer from string name
-function seekLayer(doc, name) {
- var theObj;
- for (var i = 0; i < doc.layers.length; i++) {
- if (doc.layers[i].name == name) {
- theObj = doc.layers[i];
- break;
- }
- // dive into nested layers if necessary
- if (doc.layers[i].document.layers.length > 0) {
- theObj = seekLayer(document.layers[i].document, name);
- }
- }
- return theObj;
-}
-
-// Convert object name string or object reference
-// into a valid element object reference
-function getRawObject(obj) {
- var theObj;
- if (typeof obj == "string") {
- if (isW3C) {
- theObj = document.getElementById(obj);
- } else if (isIE4) {
- theObj = document.all(obj);
- } else if (isNN4) {
- theObj = seekLayer(document, obj);
- }
- } else {
- // pass through object reference
- theObj = obj;
- }
- return theObj;
-}
-
-// Convert object name string or object reference
-// into a valid style (or NN4 layer) reference
-function getObject(obj) {
- var theObj = getRawObject(obj);
- if (theObj && isCSS) {
- theObj = theObj.style;
- }
- return theObj;
-}
-
-// Position an object at a specific pixel coordinate
-function shiftTo(obj, x, y) {
- var theObj = getObject(obj);
- if (theObj) {
- if (isCSS) {
- // equalize incorrect numeric value type
- var units = (typeof theObj.left == "string") ? "px" : 0
- theObj.left = x + units;
- theObj.top = y + units;
- } else if (isNN4) {
- theObj.moveTo(x,y)
- }
- }
-}
-
-// Move an object by x and/or y pixels
-function shiftBy(obj, deltaX, deltaY) {
- var theObj = getObject(obj);
- if (theObj) {
- if (isCSS) {
- // equalize incorrect numeric value type
- var units = (typeof theObj.left == "string") ? "px" : 0
- theObj.left = getObjectLeft(obj) + deltaX + units;
- theObj.top = getObjectTop(obj) + deltaY + units;
- } else if (isNN4) {
- theObj.moveBy(deltaX, deltaY);
- }
- }
-}
-
-// Set the z-order of an object
-function setZIndex(obj, zOrder) {
- var theObj = getObject(obj);
- if (theObj) {
- theObj.zIndex = zOrder;
- }
-}
-
-// Set the background color of an object
-function setBGColor(obj, color) {
- var theObj = getObject(obj);
- if (theObj) {
- if (isNN4) {
- theObj.bgColor = color;
- } else if (isCSS) {
- theObj.backgroundColor = color;
- }
- }
-}
-
-// Set the visibility of an object to visible
-function show(obj) {
- var theObj = getObject(obj);
- if (theObj) {
- theObj.visibility = "visible";
- }
-}
-
-// Set the visibility of an object to hidden
-function hide(obj) {
- var theObj = getObject(obj);
- if (theObj) {
- theObj.visibility = "hidden";
- }
-}
-
-// Retrieve the x coordinate of a positionable object
-function getObjectLeft(obj) {
- var elem = getRawObject(obj);
- var result = 0;
- if (document.defaultView) {
- var style = document.defaultView;
- var cssDecl = style.getComputedStyle(elem, "");
- result = cssDecl.getPropertyValue("left");
- } else if (elem.currentStyle) {
- result = elem.currentStyle.left;
- } else if (elem.style) {
- result = elem.style.left;
- } else if (isNN4) {
- result = elem.left;
- }
- return parseInt(result);
-}
-
-// Retrieve the y coordinate of a positionable object
-function getObjectTop(obj) {
- var elem = getRawObject(obj);
- var result = 0;
- if (elem.offsetTop) {
- result = elem.offsetTop;
- } else if (document.defaultView) {
- var style = document.defaultView;
- var cssDecl = style.getComputedStyle(elem, "");
- result = cssDecl.getPropertyValue("top");
- } else if (elem.currentStyle) {
- result = elem.currentStyle.top;
- } else if (elem.style) {
- result = elem.style.top;
- } else if (isNN4) {
- result = elem.top;
- }
- return parseInt(result);
-}
-
-// Retrieve the rendered width of an element
-function getObjectWidth(obj) {
- var elem = getRawObject(obj);
- var result = 0;
- if (elem.offsetWidth) {
- result = elem.offsetWidth;
- } else if (elem.clip && elem.clip.width) {
- result = elem.clip.width;
- } else if (elem.style && elem.style.pixelWidth) {
- result = elem.style.pixelWidth;
- }
- return parseInt(result);
-}
-
-// Retrieve the rendered height of an element
-function getObjectHeight(obj) {
- var elem = getRawObject(obj);
- var result = 0;
- if (elem.offsetHeight) {
- result = elem.offsetHeight;
- } else if (elem.clip && elem.clip.height) {
- result = elem.clip.height;
- } else if (elem.style && elem.style.pixelHeight) {
- result = elem.style.pixelHeight;
- }
- return parseInt(result);
-}
-
-
-// Return the available content width space in browser window
-function getInsideWindowWidth() {
- if (window.innerWidth) {
- return window.innerWidth;
- } else if (isIE6CSS) {
- // measure the html element's clientWidth
- return document.body.parentElement.clientWidth
- } else if (document.body && document.body.clientWidth) {
- return document.body.clientWidth;
- }
- return 0;
-}
-// Return the available content height space in browser window
-function getInsideWindowHeight() {
- if (window.innerHeight) {
- return window.innerHeight;
- } else if (isIE6CSS) {
- // measure the html element's clientHeight
- return document.body.parentElement.clientHeight
- } else if (document.body && document.body.clientHeight) {
- return document.body.clientHeight;
- }
- return 0;
-}
-