var PositionUtils = {
    /*
        Get a css property for a DOM object
        prop1 - the JS like naming (backgroundImage)
        prop2 - the CSS like naming (background-image)
    */
    getStyleProperty: function (obj, prop1, prop2) {
        if (obj.currentStyle)
            return obj.currentStyle[prop1];
        if (window.getComputedStyle)
            return document.defaultView.getComputedStyle(obj,null).getPropertyValue(prop2);
        return obj.style[prop1];
    },
    /*
        Calculate absolute positioning of an object
        if absRel is true the position returned is absolute relative to the viewport
        else the position is absolute relative to the first parent with non-static position
    */
    getObjectPosition: function (/*DOM Object*/obj,/*boolean*/absRel) {
        var x=0,y=0;
        var objSrc = obj;
        if (obj.offsetParent) {
            do {
                if (!absRel && objSrc != obj && this.getStyleProperty(obj,'position','position')!='static')
                    break;
                x += obj.offsetLeft;
                y += obj.offsetTop;
            } while (obj = obj.offsetParent);
        }
        return {x:x,y:y};
    },
    /* get page scrolling position */
    getScrollingPosition: function () {
        var pos = [0,0];
        if (typeof window.pageYOffset != 'undefined') {
            pos = [window.pageXOffset, window.pageYOffset];
        } else
        if (typeof document.documentElement.scrollTop != 'undefined' && document.documentElement.scrollTop > 0) {
            pos = [document.documentElement.scrollLeft, document.documentElement.scrollTop];
        } else
        if (typeof document.body.scrollTop != 'undefined') {
            pos = [document.body.scrollLeft, document.body.scrollTop];
        }
        return pos;
    },
    /* get the viewport (what you see in the window) size */
    getViewportSize: function () {
        var size = [0, 0];
        if (typeof window.innerWidth != 'undefined'){
            size = [window.innerWidth, window.innerHeight];
        } else
        if (typeof document.documentElement != 'undefined' &&
            typeof document.documentElement.clientWidth != 'undefined' &&
            document.documentElement.clientWidth != 0) {
            size = [document.documentElement.clientWidth, document.documentElement.clientHeight];
        } else {
            size = [document.getElementsByTagName('body')[0].clientWidth, document.getElementsByTagName('body')[0].clientHeight];
        }
        return size;
    },
    /* get the document size */
    getDocumentSize: function () {
        var size = [0, 0];
        if (document.body.scrollWidth && document.body.scrollHeight){
            size = [document.body.scrollWidth, document.body.scrollHeight];
        } else {
            size = [document.documentElement.offsetWidth, document.documentElement.offsetHeight];
        }
        return size;
    },
    /* maximize an element to document size */
    maximize: function (obj){
        var docSize = this.getDocumentSize();
        obj.style.top = '0px';
        obj.style.left = '0px';
        obj.style.width = docSize[0]+'px';
        obj.style.height = docSize[1]+'px';
    },
    /* center an element on the viewport */
    center: function (obj){
        var vpSize = this.getViewportSize();
        var scrl = this.getScrollingPosition();
        var objSize = [obj.offsetWidth, obj.offsetHeight];
        obj.style.left = scrl[0] + Math.round((vpSize[0] - objSize[0])/2) + 'px';
        //obj.style.left = Math.round((100 - (objSize[0]*100)/(vpSize[0]+scrl[0]))/2) + '%';
        obj.style.top = scrl[1] + Math.round((vpSize[1] - objSize[1])/2) + 'px';
        //obj.style.top = Math.round((100 - (objSize[1]*100)/(vpSize[1]+scrl[1]))/2) + '%';
    }
};