function addEvent(obj, evType, fn) { if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent) { var r = obj.attachEvent("on" + evType, fn); return r; } else { return false; } }
function removeEvent(obj, evType, fn, useCapture) { if (obj.removeEventListener) { obj.removeEventListener(evType, fn, useCapture); return true; } else if (obj.detachEvent) { var r = obj.detachEvent("on" + evType, fn); return r; } else { alert("Handler could not be removed"); } }
function getViewportHeight() { if (window.innerHeight != window.undefined) return window.innerHeight; if (document.compatMode == 'CSS1Compat') return document.documentElement.clientHeight; if (document.body) return document.body.clientHeight; return window.undefined; }
function getViewportWidth() { var offset = 17; var width = null; if (window.innerWidth != window.undefined) return window.innerWidth; if (document.compatMode == 'CSS1Compat') return document.documentElement.clientWidth; if (document.body) return document.body.clientWidth; }
function getScrollTop() {
    if (self.pageYOffset)
    { return self.pageYOffset; }
    else if (document.documentElement && document.documentElement.scrollTop)
    { return document.documentElement.scrollTop; }
    else if (document.body)
    { return document.body.scrollTop; } 
}
function getScrollLeft() {
    if (self.pageXOffset)
    { return self.pageXOffset; }
    else if (document.documentElement && document.documentElement.scrollLeft)
    { return document.documentElement.scrollLeft; }
    else if (document.body)
    { return document.body.scrollLeft; } 
}
