/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        WCH.js - Windowed Controls Hider v3.10
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        (c) Copyright 2003, Aleksandar Vacic, aleck@sezampro.yu, www.aplus.co.yu
        ## This work is licensed under the Creative Commons Attribution-ShareAlike License.
        ## To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Credits: Mike Foster for x functions (cross-browser.com)
        Credits: Tim Connor for short and sweet way of dealing with IE5.0 - dynamic creation of style rule (www.infosauce.com)
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        Based on idea presented by Joe King. Works with IE5.0+/Win
        IE 5.5+: place iFrame below the layer to hide windowed controls
        IE 5.0 : hide/show all elements that have "WCHhider" class
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
var WCH_Constructor = function() {
        //        exit point for anything but IE5.0+/Win
        if ( !(document.all && document.getElementById && !window.opera && navigator.userAgent.toLowerCase().indexOf("mac") == -1) ) {
                this.Apply = function() {};
                this.Discard = function() {};
                return;
        }

        //        private properties
        var _bIE55 = false;
        var _bIE6 = false;
        var _oRule = null;
        var _bSetup = true;
        var _oSelf = this;

        //        public: hides windowed controls
        this.Apply = function(vLayer, vContainer, bResize) {
                if (_bSetup) _Setup();

                if ( _bIE55 && (oIframe = _Hider(vLayer, vContainer, bResize)) ) {
                        oIframe.style.visibility = "visible";
                } else if(_oRule != null) {
                        _oRule.style.visibility = "hidden";
                }

        };

        //        public: shows windowed controls
        this.Discard = function(vLayer, vContainer) {
                if ( _bIE55 && (oIframe = _Hider(vLayer, vContainer, false)) ) {
                        oIframe.style.visibility = "hidden";
                } else if(_oRule != null) {
                        _oRule.style.visibility = "visible";
                }
        };

        //        private: returns iFrame reference for IE5.5+
        function _Hider(vLayer, vContainer, bResize) {
                var oLayer = _GetObj(vLayer);
                var oContainer = ( (oTmp = _GetObj(vContainer)) ? oTmp : document.getElementsByTagName("body")[0] );
                if (!oLayer || !oContainer) return;
                //        is it there already?
                var oIframe = document.getElementById("WCHhider" + oLayer.id);

                //        if not, create it
                if ( !oIframe ) {
                        //        IE 6 has this property, IE 5 not. IE 5.5(even SP2) crashes when filter is applied, hence the check
                        var sFilter = (_bIE6) ? "filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);" : "";
                        //        get z-index of the object
                        var zIndex = oLayer.style.zIndex;
                        if ( zIndex == "" ) zIndex = oLayer.currentStyle.zIndex;
                        zIndex = parseInt(zIndex);
                        //        if no z-index, do nothing
                        if ( isNaN(zIndex) ) return null;
                        //        if z-index is below 2, do nothing (no room for Hider)
                        if (zIndex < 2) return null;
                        //        go one step below for Hider
                        zIndex--;
                        var sHiderID = "WCHhider" + oLayer.id;
                        oContainer.insertAdjacentHTML("afterBegin", '<iframe class="WCHiframe" src="javascript:false;" id="' + sHiderID + '" scroll="no" frameborder="0" style="position:absolute;visibility:hidden;' + sFilter + 'border:0;top:0;left;0;width:0;height:0;background-color:#ccc;z-index:' + zIndex + ';"></iframe>');
                        oIframe = document.getElementById(sHiderID);
                        //        then do calculation
                        _SetPos(oIframe, oLayer);
                } else if (bResize) {
                        //        resize the iFrame if asked
                        _SetPos(oIframe, oLayer);
                }
                return oIframe;
        };

        //        private: set size and position of the Hider
        function _SetPos(oIframe, oLayer) {
                //        fetch and set size
                oIframe.style.width = oLayer.offsetWidth + "px";
                oIframe.style.height = oLayer.offsetHeight + "px";
                //        move to specified position
                oIframe.style.left = oLayer.offsetLeft + "px";
                oIframe.style.top = oLayer.offsetTop + "px";
        };

        //        private: returns object reference
        function _GetObj(vObj) {
                var oObj = null;
                switch( typeof(vObj) ) {
                        case "object":
                                oObj = vObj;
                                break;
                        case "string":
                                oObj = document.getElementById(vObj);
                                break;
                }
                return oObj;
        };

        //        private: setup properties on first call to Apply
        function _Setup() {
                _bIE55 = (typeof(document.body.contentEditable) != "undefined");
                _bIE6 = (typeof(document.compatMode) != "undefined");

                if (!_bIE55) {
                        if (document.styleSheets.length == 0)
                                document.createStyleSheet();
                        var oSheet = document.styleSheets[0];
                        oSheet.addRule(".WCHhider", "visibility:visible");
                        _oRule = oSheet.rules(oSheet.rules.length-1);
                }

                _bSetup = false;
        };
};
var WCH = new WCH_Constructor();
