
var POSITIONING = {
    browserClass : new Object(),

    init : function () {
        this.browserClass.isCSS = ( ( document.body && document.body.style ) ? true : false );
        this.browserClass.isW3C = ( ( this.browserClass.isCSS && document.getElementById ) ? true : false );
        this.browserClass.isIE4 = ( ( this.browserClass.isCSS && document.all ) ? true : false );
        this.browserClass.isNN4 = ( ( document.layers ) ? true : false );
        this.browserClass.isIECSSCompat = ( ( document.compatMode && document.compatMode.indexOf( "Css1" ) >= 0 ) ? true : false );
    },

    seekLayer : function ( doc, name ) {
        var elem;
        for( var i = 0; i < doc.layers.length; i++ ) {
            if ( doc.layers[ i ].name == name ) {
                elem = doc.layers[ i ];
                break;
            }
            if ( doc.layers[ i ].document.layers.length > 0 ) {
                elem = this.seekLayer( doc.layers[ i ].document, name );
                if ( elem ) {
                    break;
                }
            }
        }
        return elem;
    },

    getRawObject : function ( elemRef ) {
        var elem;
        if ( typeof elemRef == "string" ) {
            if ( this.browserClass.isW3C ) {
                elem = document.getElementById( elemRef );
            } else if ( this.browserClass.isIE4 ) {
                elem = document.all( elemRef );
            } else if ( this.browserClass.isNN4 ) {
                elem = this.seekLayer( document, elementRef );
            }
        } else {
            elem = elemRef;
        }
        return elem;
    },

    getStyleObject : function ( elemRef ) {
        var elem = this.getRawObject( elemRef );
        if ( elem && this.browserClass.isCSS ) {
            elem = elem.style;
        }
        return elem;
    },

    moveTo : function ( elemRef, x, y ) {
        var elem = this.getStyleObject( elemRef );
        if ( elem ) {
            if ( this.browserClass.isCSS ) {
                var units = ( typeof elem.left == "string" ) ? "px" : 0;
                elem.left = x + units;
                elem.top = y + units;
            } else if ( this.browserClass.isNN4 ) {
                elem.moveTo( x, y );
            }
        }
    },

    moveBy : function ( elemRef, deltaX, deltaY ) {
        var elem = this.getStyleObject( elemRef );
        if ( elem ) {
            if ( this.browserClass.isCSS ) {
                var units = ( typeof elem.left == "string" ) ? "px" : 0;
                if ( !isNaN( this.getElementLeft( elemRef ) ) ) {
                    elem.left = this.getElementLeft( elemRef ) + deltaX + units;
                    elem.top = this.getElementTop( elemRef ) + deltaY + units;
                }
            } else if ( this.browserClass.isNN4 ) {
                elem.moveBy( deltaX, deltaY );
            }
        }
    },

    setZIndex : function ( obj, zOrder ) {
        var elem = this.getStyleObject( obj );
        if ( elem ) {
            elem.zIndex = zOrder;
        }
    },

    setBGColor : function ( obj, color ) {
        var elem = this.getStyleObject( obj );
        if ( elem ) {
            if ( this.browserClass.isCSS ) {
                elem.backgroundColor = color;
            } else if ( this.browserClass.isNN4 ) {
                elem.bgColor = color;
            }
        }
    },

    show : function ( obj ) {
        var elem = this.getStyleObject( obj );
        if ( elem ) {
            elem.visibility = "visible";
        }
    },

    hide : function ( obj ) {
        var elem = this.getStyleObject( obj );
        if ( elem ) {
            elem.visibility = "hidden";
        }
    },

    getComputedStyle : function ( elemRef, CSSStyleProp ) {
        var elem = this.getRawObject( elemRef );
        var styleValue, camel;
        if ( elem ) {
            if ( document.defaultView && document.defaultView.getComputedStyle ) {
                var compStyle = document.defaultView.getComputedStyle( elem, "" );
                styleValue = compStyle.getPropertyValue( CSSStyleProp );
            } else if ( elem.currentStyle ) {
                var IEStyleProp = CSSStyleProp;
                var re = /-\D/;
                while( re.test( IEStyleProp ) ) {
                    camel = IEStyleProp.match( re )[ 0 ].charAt( 1 ).toUpperCase();
                    IEStyleProp = IEStyleProp.replace( re, camel );
                }
                styleValue = elem.currentStyle[ IEStyleProp ];
            }
        }
        return (styleValue) ? styleValue : null;
    },

    getElementLeft : function ( elemRef ) {
        var elem = this.getRawObject( elemRef );
        var result = null;
        if ( this.browserClass.isCSS || this.browserClass.isW3C ) {
            result = parseInt( this.getComputedStyle( elem, "left" ) );
        } else if ( this.browserClass.isNN4 ) {
            result = elem.left;
        }
        return result;
    },

    getElementTop : function ( elemRef ) {
        var elem = this.getRawObject( elemRef );
        var result = null;
        if ( this.browserClass.isCSS || this.browserClass.isW3C ) {
            result = parseInt( this.getComputedStyle( elem, "top" ) );
        } else if ( this.browserClass.isNN4 ) {
            result = elem.top;
        }
        return result;
    },

    getElementWidth : function ( elemRef ) {
        var result = null;
        var elem = this.getRawObject( elemRef );
        if ( elem ) {
            if ( elem.offsetWidth ) {
                if ( elem.scrollWidth && ( elem.offsetWidth != elem.scrollWidth ) ) {
                    result = elem.scrollWidth;
                } else {
                    result = elem.offsetWidth;
                }
            } else if ( elem.clip && elem.clip.width ) {
                result = elem.clip.width;
            }
        }
        return result;
    },

    getElementHeight : function ( elemRef ) {
        var result = null;
        var elem = this.getRawObject( elemRef );
        if ( elem ) {
            if ( elem.offsetHeight ) {
                result = elem.offsetHeight;
            } else if ( elem.clip && elem.clip.height ) {
                result = elem.clip.height;
            }
        }
        return result;
    },

    getInsideWindowWidth : function () {
        if ( window.innerWidth ) {
            return window.innerWidth;
        } else if ( this.browserClass.isIECSSCompat ) {
            return document.body.parentElement.clientWidth;
        } else if ( document.body && document.body.clientWidth ) {
            return document.body.clientWidth;
        }
        return null;
    },

    getInsideWindowHeight : function () {
        if ( window.innerHeight ) {
            return window.innerHeight;
        } else {
            if ( document.body.clientHeight != document.body.parentNode.clientHeight ) {
                return document.body.parentNode.clientHeight;
            } else {
                return document.body.clientHeight;
            }
        }
    },

    centerOnWindow : function ( elemID ) {
        var obj = this.getRawObject( elemID );
        var scrollX = 0, scrollY = 0;
        if ( document.body && typeof document.body.scrollTop != "undefined" ) {
            scrollX += document.body.scrollLeft;
            scrollY += document.body.scrollTop;
            if ( document.body.parentNode && typeof document.body.parentNode.scrollTop != "undefined" &&
                 ( document.body.scrollTop != document.body.parentNode.scrollTop ) ) {
                scrollX += document.body.parentNode.scrollLeft;
                scrollY += document.body.parentNode.scrollTop;
            }
        } else if ( typeof window.pageXOffset != "undefined" ) {
            scrollX += window.pageXOffset;
            scrollY += window.pageYOffset;
        }
        var x = Math.round( ( this.getInsideWindowWidth() / 2 ) -
                              ( this.getElementWidth( obj ) / 2 ) ) + scrollX;
        x = Math.max( 0, x );
        this.moveTo( obj, x, 0 );
        this.show( obj );
    },

    fitToFillWindowHeight : function ( scaleObj ) {
        var windowHeight = this.getInsideWindowHeight();
        var origTop = this.getElementTop( scaleObj );
        scrollY = 0;
        if ( document.body && typeof document.body.scrollTop != "undefined" ) {
            scrollY += document.body.scrollTop;
            if ( document.body.parentNode && typeof document.body.parentNode.scrollTop != "undefined" &&
                 ( document.body.scrollTop != document.body.parentNode.scrollTop ) ) {
                scrollY += document.body.parentNode.scrollTop;
            }
        } else if ( typeof window.pageXOffset != "undefined" ) {
            scrollY += window.pageYOffset;
        }
        var deltaY = scrollY - origTop;
        document.getElementById( scaleObj ).style.height = windowHeight + "px";
        this.moveBy( scaleObj, 0, deltaY );
    }
}



//addOnLoadEvent( function() { POSITIONING.init() } );

