// Global variables
var isCSS, isW3C, isIE4, isNN4, isIE6CSS;
var underLayer = 'under';

// 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;
    }
}

function getPageEventCoords(evt) {

	var coords = {left:1, top:0};

	if (evt.pageX) {

		coords.left = evt.pageX;
		coords.top = evt.pageY;
	} else if (evt.clientX) {

		coords.left =
		evt.clientX + document.body.scrollLeft - document.body.clientLeft;
		coords.top =
		evt.clientY + document.body.scrollTop - document.body.clientTop;
		// include html element space, if applicable
		if (document.body.parentElement && document.body.parentElement.clientLeft) {
			var bodParent = document.body.parentElement;
			coords.left += bodParent.scrollLeft - bodParent.clientLeft;
			coords.top += bodParent.scrollTop - bodParent.clientTop;
		}
	}

	coords.left += 10;
	return coords;
}

// Set event handler to initialize API
window.onload = initDHTMLAPI;

/*function makeBg(parentElm,childElm,addX,addY) {
	
	var width, height;
	var elem = document.getElementById(childElm);
	width = getObjectWidth(parentElm);
	height = getObjectHeight(parentElm);
	elem.style.width = width + addX + 'px';
	elem.style.height = height + addY + 'px';
}*/
   
// 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 {
        	theObj = document.getElementById(obj);
        }
    } else {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}

function getLeftPosElem(elemID, LP) {
    
    var ofLeft;
    var elem = getRawObject(elemID);
    if(document.images) {
        if(document.all) {
            ofLeft = elem.offsetLeft;
        }
        else {
            ofLeft = elem.offsetLeft;
        }
    }
    else {
        ofLeft = 0;
    }
    
    
    return ofLeft + LP;
}

function getTopPosElem(elemID, TP) {
    
    var ofTop;
    var elem = getRawObject(elemID);
    if(document.images) {
        if(document.all) {
            ofTop = elem.offsetTop;
        }
        else {
            ofTop = elem.offsetTop;
        }
    }
    else {
        ofTop = 0;
    }
    
    return ofTop + TP;
}

function toPos(elId, mstl, LP, TP) {
    var elem = getRawObject(mstl);
    
    var zind = getRawObject(elId).zIndex;
    if(!zind) {
        zind=0;
    }
    var leftPos = getLeftPosElem(elId, LP);
    var height = getObjectHeight(elId); /*alert(height);*/
    var topPos = getTopPosElem(elId, TP);
    
    elem.zIndex=zind+1;
    elem.style.left = leftPos+"px"; //alert(leftPos);
    elem.style.top = topPos+"px";
    //alert(topPos);
    /*if(document.all) {
        if(browser==2) elem.style.width = getObjectWidth(elId)-6;
        else elem.style.width = getObjectWidth(elId);
    }
    else {
        elem.style.width = getObjectWidth(elId)-6;
    }*/
}
   
// 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) { //alert(x);
//	(x<=10) ? x=20 : x=x;
    var theObj = getObject(obj);
    var underObj = getObject(underLayer);
    var objHeight = getObjectHeight(obj);
    var objWidth = getObjectWidth(obj) + 6;
    //document.body.setCapture();
    var topLimit = document.body.parentNode.scrollTop; //alert(topLimit+' - '+(y-objHeight));
    var rightLimit = document.body.offsetWidth - objWidth;
    
    ((y-objHeight)<=topLimit) ? y=(y+8) : y=(y-objHeight - 8);
    (x>=rightLimit) ? x=(x - objWidth-8) : x=x;
    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;
            
            underObj.left = x + 6 + units;
            underObj.top = y + 4 + units;
        } else if (isNN4) {
            theObj.moveTo(x,y);
            underObj.moveTo(x+6,y+4);
        }
    }
}
   
// 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); //alert(theObj);
    if (theObj) {
        theObj.visibility = "visible";
//        theObj.display = "block";
    }
}
   
// Set the visibility of an object to hidden
function hide(obj) {
	
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "hidden";
//        theObj.display = "none";
    }
}
   
// 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;
    }
     alert("left: "+result);
    return parseInt(result);
}
   
// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    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;
    }
    //alert(result);
    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;
    

}

