/************************************************************************************************************ Floating window with tabs Copyright (C) October 2005 DTHMLGoodies.com, Alf Magne Kalleland This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Dhtmlgoodies.com., hereby disclaims all copyright interest in this script written by Alf Magne Kalleland. Alf Magne Kalleland, 2006 Owner of DHTMLgoodies.com ************************************************************************************************************/ var floating_window_skin = 1; var activeFloatingWindow = false; var activeFloatingWindowContent = false; var activeFloatingWindowTabDiv = false; var activeFloatingWindowStatusDiv = false; var activeFloatingWindowMoveBar = false; var currentZIndex = 1000; var floatingWindowMaxZIndex = 1000; var floatingWindowMinimumWidth = new Array(); var floatingWindowTabDivs = new Array(); var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false; var navigatorVersion = navigator.appVersion.replace(/.*?MSIE (\d\.\d).*/g,'$1')/1; var floatingWindowMoveCounter = -1; var floatingWindowResizeCounter = -1; var initEventX = false; var initEventY = false; var window_posX = false; var window_posY = false; var window_height = false; var window_width = false; var floatingWindowStates = new Array(); switch(floating_window_skin){ case 2: document.getElementById('cssRef').href = extChatRoot + '/extChat/floating_window_with_tabs-skin2.css'; /*var tabRightInActive = extChatRoot + "/images/skin2_tab_right_inactive.gif"; var tabRightActive = extChatRoot + "/images/skin2_tab_right_active.gif";*/ var tabImagePrefix = extChatRoot + "/images/skin2_tab_right_"; var closeButtonMouseOverColor = '#006BF8'; break; default: /*var tabRightInActive = extChatRoot + "/images/tab_right_inactive.gif"; var tabRightActive = extChatRoot + "/images/tab_right_active.gif";*/ var tabImagePrefix = extChatRoot + "/images/tab_right_"; var closeButtonMouseOverColor = '#317082'; break; } /* These cookie functions are downloaded from http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm */ function Get_Cookie(name) { var start = document.cookie.indexOf(name+"="); var len = start+name.length+1; if ((!start) && (name != document.cookie.substring(0,name.length))) return null; if (start == -1) return null; var end = document.cookie.indexOf(";",len); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(len,end)); } // This function has been slightly modified function Set_Cookie(name,value,expires,path,domain,secure) { expires = expires * 60*60*24*1000; var today = new Date(); var expires_date = new Date( today.getTime() + (expires) ); var cookieString = name + "=" +escape(value) + ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + ( (path) ? ";path=" + path : "") + ( (domain) ? ";domain=" + domain : "") + ( (secure) ? ";secure" : ""); document.cookie = cookieString; } function cancelWindowEvent() { return (floatingWindowMoveCounter==-1 && floatingWindowResizeCounter==-1 && this.tagName!='IMG')?true:false; } function showHideWindowTab() { var parentEl = this.parentNode; if(!activeFloatingWindow)activeFloatingWindow = parentEl.parentNode; var windowIndex = parentEl.parentNode.id.replace(/[^\d]/g,''); var subDiv = parentEl.getElementsByTagName('DIV')[0]; counter=0; var contentDiv = contentDivs[windowIndex][0]; var tabFound = false; do{ if(subDiv.tagName=='DIV' && subDiv.className!='floatingWindowCloseButton'){ if(!tabFound)zIndex = counter;else zIndex = 100-counter; if(subDiv!=this){ subDiv.className = 'floatingWindowTab_inactive'; var img = subDiv.getElementsByTagName('IMG')[0]; /*img.src = tabRightInActive*/ subDiv.style.zIndex = zIndex; contentDiv.style.display='none'; }else{ this.className='floatingWindowTab_active'; this.style.zIndex = 500; var img = this.getElementsByTagName('IMG')[0]; /*img.src = tabRightActive; */ if(floatingWindowStates[activeFloatingWindow.id.replace(/[^0-9]/gi,'')]) contentDiv.style.display=floatingWindowStates[activeFloatingWindow.id.replace(/[^0-9]/gi,'')]; else contentDiv.style.display='block' tabFound = true; Set_Cookie('floating_window_activeTab' + windowIndex,counter,100); } counter++; } subDiv = subDiv.nextSibling; if(contentDiv.nextSibling)contentDiv = contentDiv.nextSibling; }while(subDiv); } function toggleCloseButton() { this.style.color='#FFF'; this.style.backgroundColor = closeButtonMouseOverColor; } function toggleOffCloseButton() { this.style.color=''; this.style.backgroundColor = ''; } function closeFloatingWindow() { this.parentNode.parentNode.style.display='none'; } function minimizeFloatingWindow() { var action = this.getAttribute('action'); var aTag = this.getElementsByTagName('SPAN')[0]; if(action=='minimize'){ this.setAttribute('action','maximize'); activeFloatingWindowContent.style.display='none'; aTag.style.top = '-10px'; }else{ this.setAttribute('action','minimize'); activeFloatingWindowContent.style.display='block'; aTag.style.top = '0px'; } floatingWindowStates[activeFloatingWindow.id.replace(/[^0-9]/gi,'')] = activeFloatingWindowContent.style.display; } function initFloatingWindowResize(e) { if(document.all)e = event; floatingWindowResizeCounter = 0; if (null !== this.parentNode && this.parentNode != undefined) { if (null !== this.parentNode.parentNode) bringFloatingWindowToFront(false,this.parentNode.parentNode,0); } if (e != undefined) { initEventX = e.clientX; initEventY = e.clientY; } window_height = activeFloatingWindowContent.offsetHeight; window_width = activeFloatingWindow.offsetWidth; window.document.getElementById('extChatCover').style.display = 'block'; timerFloatingWindowMove(); return false; } function stopFloatingWindowResize(e) { window.document.getElementById('extChatCover').style.display = 'none'; } function initFloatingWindowMove(e) { if(document.all)e = event; floatingWindowMoveCounter = 0; bringFloatingWindowToFront(false,this.parentNode,1); initEventX = e.clientX; initEventY = e.clientY; window_posX = activeFloatingWindow.style.left.replace('px','')/1; window_posY = activeFloatingWindow.style.top.replace('px','')/1; timerFloatingWindowMove(); return false; } function timerFloatingWindowMove() { if(floatingWindowMoveCounter>=0 && floatingWindowMoveCounter<10){ floatingWindowMoveCounter = floatingWindowMoveCounter + 1; setTimeout('timerFloatingWindowMove()',10); } if(floatingWindowResizeCounter>=0 && floatingWindowResizeCounter<10){ floatingWindowResizeCounter = floatingWindowResizeCounter + 1; setTimeout('timerFloatingWindowMove()',10); } } var allowFloatingResize = true; var windowMoveInProgress = false; function floatingWindowMove(e) { if(windowMoveInProgress)return; windowMoveInProgress = true; if(document.all)e = event; if(floatingWindowMoveCounter>=10){ var leftPos = window_posX + e.clientX - initEventX; var topPos = window_posY + e.clientY - initEventY; if(topPos<0)topPos=0; if(leftPos<0)leftPos=0; activeFloatingWindow.style.left = leftPos + 'px'; activeFloatingWindow.style.top = topPos + 'px'; windowMoveInProgress = false; return; } if(floatingWindowResizeCounter>=10 && allowFloatingResize){ var width = window_width + e.clientX - initEventX; var height = window_height + e.clientY - initEventY; if(width=0){ floatingWindowMoveCounter = -1; if(activeFloatingWindow)Set_Cookie(activeFloatingWindow.id,activeFloatingWindow.style.left.replace('px','') + '_' + activeFloatingWindow.style.top.replace('px',''),100); } if(floatingWindowResizeCounter>=0){ floatingWindowResizeCounter = -1; Set_Cookie('floating_window_size' + activeFloatingWindow.id.replace(/[^\d]/g,''),activeFloatingWindow.style.width.replace('px','') + '_' + activeFloatingWindowContent.style.height.replace('px',''),100); } } function addMovingBar(inputObj,noMove) { var div = document.createElement('DIV'); div.className='floatingWindow_moveBar'; div.style.zIndex = 1000; div.style.position = 'relative'; div.innerHTML = ''; if(!noMove)div.onmousedown = initFloatingWindowMove; inputObj.appendChild(div); } function addTabs(inputObj,tabs,noCloseButton,noMinimizeButton) { var div = document.createElement('DIV'); div.className='floatingWindow_topRow'; div.style.zIndex = 1000; div.style.position = 'relative'; floatingWindowMinimumWidth[inputObj.id] = 0; inputObj.appendChild(div); floatingWindowTabDivs[inputObj.id] = div; var currentWidth = 0; var activeTabIndexCookie = Get_Cookie('floating_window_activeTab' + inputObj.id.replace(/[^\d]/g,'')); if(!activeTabIndexCookie)activeTabIndexCookie=0; for(var no=0;no=0)currentWidth = currentWidth + 22; floatingWindowMinimumWidth[inputObj.id] = floatingWindowMinimumWidth[inputObj.id] + tabSpan.offsetWidth + 22 - 11; if(navigator.userAgent.indexOf('Opera')>=0){ currentWidth = currentWidth - 22; floatingWindowMinimumWidth[inputObj.id] = floatingWindowMinimumWidth[inputObj.id] - 22; } } floatingWindowMinimumWidth[inputObj.id] = floatingWindowMinimumWidth[inputObj.id] + 14; if(!noCloseButton){ floatingWindowMinimumWidth[inputObj.id]+=18; var closeButton = document.createElement('DIV'); closeButton.className='floatingWindowCloseButton'; closeButton.innerHTML = ''; //closeButton.onclick = closeFloatingWindow; closeButton.onclick = closeFloatChat; closeButton.onmouseover = toggleCloseButton; closeButton.style.top = '1px'; closeButton.onmouseout = toggleOffCloseButton; div.appendChild(closeButton); if(navigatorVersion<6 && MSIE){ closeButton.style.top = '1px'; } } if(!noMinimizeButton){ floatingWindowMinimumWidth[inputObj.id]+=18; var minimizeButton = document.createElement('DIV'); minimizeButton.className='floatingWindowCloseButton'; minimizeButton.setAttribute('action','minimize'); minimizeButton.action = 'minimize'; minimizeButton.id = 'minimize_' + inputObj.id; minimizeButton.innerHTML = '_'; minimizeButton.style.overflow = 'hidden'; minimizeButton.onclick = minimizeFloatingWindow; minimizeButton.onmousedown = bringFloatingWindowToFront; minimizeButton.onmouseover = toggleCloseButton; minimizeButton.onmouseout = toggleOffCloseButton; div.appendChild(minimizeButton); minimizeButton.style.top = '1px'; if(!noCloseButton)minimizeButton.style.right = '18px'; } } function createStatusBar(inputObj,noResize) { var div = document.createElement('DIV'); div.style.position = 'relative'; div.className='floatingWindow_statusBar'; var innerSpan = document.createElement('SPAN'); innerSpan.id = 'floatingWindow_statusBarTxt'; div.appendChild(innerSpan); inputObj.appendChild(div); if(noResize){ return; } var img = document.createElement('IMG'); img.src = extChatRoot + '/images/floating_window_resize.gif'; img.onmousedown = initFloatingWindowResize; img.onmouseup = stopFloatingWindowResize; img.ondragstart = cancelWindowEvent; div.appendChild(img); } var contentDivs = new Array(); var countWindows = 0; function bringFloatingWindowToFront(e,inputObj, move) { if(floatingWindowMaxZIndex>currentZIndex)currentZIndex = floatingWindowMaxZIndex/1 + 1; if(!inputObj)inputObj = this; activeFloatingWindow = inputObj; if(move && move == 1) activeFloatingWindow.style.zIndex = currentZIndex+1; var numericID = activeFloatingWindow.id.replace(/[^\d]/g,''); var subDivs = new Array(); if(floatingWindowTabDivs[activeFloatingWindow.id])subDivs = floatingWindowTabDivs[activeFloatingWindow.id].getElementsByTagName('DIV'); for(var no=0;no0 && cookieValue!='null'){ var cookieItems = cookieValue.split('_'); leftPos = cookieItems[0]; topPos = cookieItems[1]; } try{ el.style.left = leftPos + 'px'; el.style.top = topPos + 'px'; }catch(e){ } el.style.zIndex = currentZIndex; var contentDiv = el.getElementsByTagName('DIV')[0]; contentDivs[countWindows].push(contentDiv); while(contentDiv.nextSibling){ contentDiv = contentDiv.nextSibling; if(contentDiv.className=='floatingWindowContent'){ contentDivs[countWindows].push(contentDiv); } } addMovingBar(el,noMove); if(tabs)addTabs(el,tabs,noCloseButton,noMinimizeButton);else floatingWindowMinimumWidth[el.id] = 40; var activeTabIndexCookie = Get_Cookie('floating_window_activeTab' + countWindows); if(!activeTabIndexCookie)activeTabIndexCookie=0; for(var no=0;no=0 && !noScrollbars){ contentDivs[countWindows][no].style.overflow = 'scroll'; } contentDivs[countWindows][no].style.zIndex = 100; contentDivs[countWindows][no].style.position = 'relative'; } if(MSIE){ var iframe = document.createElement('