// This function is used to define if the browser supports the needed // features function hasSupport() { if (typeof hasSupport.support != "undefined") return hasSupport.support; var ie5 = /msie 5\.[0-9]/i.test( navigator.userAgent ); hasSupport.support = ( typeof document.implementation != "undefined" && document.implementation.hasFeature( "html", "1.0" ) || ie5 ) /* Original code // IE5 has a serious DOM1 bug... Patch it! if ( ie5 ) { document._getElementsByTagName = document.getElementsByTagName; document.getElementsByTagName = function ( sTagName ) { if ( sTagName == "*" ) return document.all; else return document._getElementsByTagName( sTagName ); }; } */ /* Patch for the bug with IE55 and NT4 if ( ie55 ) { document._getElementsByTagName = document.getElementsByTagName; document.getElementsByTagName = function ( sTagName ) { if ( sTagName == "*" ) return document.all; else return document._getElementsByTagName( sTagName ); }; } */ // will cause bug when ie55 patched, so rewrite above if ( ie5 ) { document._getAllElements = function () { return document.all; } } else { document._getAllElements = function () { return document.getElementsByTagName("*"); } } return hasSupport.support; } var groups = new Array() ; var ieMac = navigator.appVersion.indexOf("MSIE") >= 0 && navigator.appVersion.indexOf("Mac") >= 0 ; /////////////////////////////////////////////////////////////////////////////////// // The constructor for tab panes // // el : HTMLElement The html element used to represent the tab pane // bUseCookie : Boolean Optional. Default is true. Used to determine whether to us // persistance using cookies or not // function WebFXTabPane( el, bUseCookie ) { if ( !hasSupport() || el == null ) return; this.element = el; this.element.tabPane = this; var cn = this.element.className ; this.group = cn.length>8 ? cn.substring(9,cn.length) : null; if (this.group) { if (!groups[this.group]) groups[this.group] = new Array() ; groups[this.group][groups[this.group].length]=this.element.id ; } this.pages = []; this.selectedIndex = null; this.useCookie = false; // :OD:NOTE: bug-jcms-4.0-148 (Form with many tabs may logout the user). bUseCookie != null ? bUseCookie : true; // add class name tag to class name this.element.className = this.classNameTag + " " + this.element.className; // add tab row this.tabRow = document.createElement( "div" ); this.tabRow.className = "tab-row"; if (ieMac) this.tabRow.style.height = "1px"; el.insertBefore( this.tabRow, el.firstChild ); var tabIndex = 0; // if ( this.useCookie ) { // :OD:NOTE: bug-jcms-4.0-148 vs. force tab to open (setSelectedTab()) tabIndex = Number( WebFXTabPane.getCookie( "webfxtab_" + this.element.id ) ); if ( isNaN( tabIndex )) tabIndex = 0; // } this.selectedIndex = tabIndex; // loop through child nodes and add them var n; var cs = el.childNodes; for (var i = 0; i < cs.length; i++) { if (cs[i].nodeType == 1 && cs[i].className == "tab-page") { this.addTabPage( cs[i] ); } } if (this.selectedIndex >= this.pages.length) this.setSelectedIndex(0); } WebFXTabPane.prototype.classNameTag = "dynamic-tab-pane-control"; WebFXTabPane.prototype.setSelectedIndex = function ( n ) { if (n > this.pages.length) n = 0; if (this.selectedIndex != n) { if (this.selectedIndex != null && this.pages[ this.selectedIndex ] != null ) this.pages[ this.selectedIndex ].hide(); this.selectedIndex = n; this.pages[ this.selectedIndex ].show(); // Find all hooks under the current tab being displayed WebFXTabPane.callHooks(this.pages[this.selectedIndex].element); if ( this.useCookie ) WebFXTabPane.setCookie( "webfxtab_" + this.element.id, n ); // session cookie } }; WebFXTabPane.prototype.getSelectedIndex = function () { return this.selectedIndex; }; WebFXTabPane.prototype.addTabPage = function ( oElement ) { if ( !hasSupport() ) return; if ( oElement.tabPage == this ) // already added return oElement.tabPage; var n = this.pages.length; var tp = this.pages[n] = new WebFXTabPage( oElement, this, n ); tp.tabPane = this; // move the tab out of the box this.tabRow.appendChild( tp.tab ); if ( n == this.selectedIndex ) tp.show(); else tp.hide(); return tp; }; WebFXTabPane.prototype.dispose = function () { this.element.tabPane = null; this.element = null; this.tabRow = null; for (var i = 0; i < this.pages.length; i++) { this.pages[i].dispose(); this.pages[i] = null; } this.pages = null; }; // Cookie handling WebFXTabPane.setCookie = function ( sName, sValue, nDays ) { var expires = ""; if ( nDays ) { var d = new Date(); d.setTime( d.getTime() + nDays * 24 * 60 * 60 * 1000 ); expires = "; expires=" + d.toGMTString(); } document.cookie = sName + "=" + sValue + expires + "; path=/"; }; WebFXTabPane.getCookie = function (sName) { var re = new RegExp( "(\;|^)[^;]*(" + sName + ")\=([^;]*)(;|$)" ); var res = re.exec( document.cookie ); return res != null ? res[3] : null; }; WebFXTabPane.removeCookie = function ( name ) { setCookie( name, "", -1 ); }; WebFXTabPane.callHooks = function ( rootElement ) { // Find all hooks under the specified root element var hookElms = $( rootElement ).getElementsByClassName('tab-pane-hook'); hookElms.each( function (hookElm) { // Make sure the hook JS function is available on the hook DOM element if (!hookElm.tabPaneHook) { return; // (continue) } // Determine if the hook is in a visible tab (as it may be in a hidden in a sub tab not opened) var hookElmIsVisible = true; hookElm.ancestors().each(function (ancestor) { if (!ancestor.visible()) { hookElmIsVisible = false; } }); if (hookElmIsVisible) { // Call the hook hookElm.tabPaneHook(); } }); } /////////////////////////////////////////////////////////////////////////////////// // The constructor for tab pages. This one should not be used. // Use WebFXTabPage.addTabPage instead // // el : HTMLElement The html element used to represent the tab pane // tabPane : WebFXTabPane The parent tab pane // nindex : Number The index of the page in the parent pane page array // function WebFXTabPage( el, tabPane, nIndex ) { if ( !hasSupport() || el == null ) return; this.element = el; this.element.tabPage = this; this.index = nIndex; this.group = tabPane.group ; var cs = el.childNodes; for (var i = 0; i < cs.length; i++) { if (cs[i].nodeType == 1 && cs[i].className == "tab") { this.tab = cs[i]; break; } } // insert a tag around content to support keyboard navigation var a = document.createElement( "A" ); this.aElement = a; a.href = "#"; a.onclick = function () { return false; }; a.hideFocus = true ; while ( this.tab.hasChildNodes() ) a.appendChild( this.tab.firstChild ); this.tab.appendChild( a ); // hook up events, using DOM0 var oThis = this; this.tab.onclick = function () { oThis.select(oThis.group); }; /* JALIOS: Commented to reduce jumper tab this.tab.onmouseover = function () { WebFXTabPage.tabOver( oThis ); }; this.tab.onmouseout = function () { WebFXTabPage.tabOut( oThis ); }; */ } WebFXTabPage.prototype.show = function () { var el = this.tab; el.className = "tab_selected"; this.element.style.display = "block"; }; WebFXTabPage.prototype.hide = function () { var el = this.tab; el.className = "tab"; this.element.style.display = "none"; }; WebFXTabPage.prototype.select = function (group) { if (group) { var g=groups[group]; for(var i=0 ; i= 0; i--) { tabPanes[i].dispose(); tabPanes[i] = null; } } function setSelectedTab(tabPaneId, index) { document.cookie = "webfxtab_" + tabPaneId + "=" + index + "; path=/"; var elt = $(tabPaneId); if (!elt){ return; } var tabpane = elt.tabPane; if (!tabpane){ return; } tabpane.setSelectedIndex(index); } function setSelectedLanguageTab(langIndex) { // Defer to setupAllTabs if tabpane has no yet been initialized if ( !document.TabPaneSetupAllTabsDone ) { document.TabPaneLanguageTab = langIndex; return; } var g = groups["lang"]; if (g == null || g == "undefined") { return; } for(var i=0 ; i