/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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", ''); 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();