/** * This derivative version of subModal can be downloaded from http://gabrito.com/files/subModal/ * Original By Seth Banks (webmaster at subimage dot com) http://www.subimage.com/ * Contributions by Eric Angel (tab index code), Scott (hiding/showing selects for IE users), Todd Huss (submodal class on hrefs, moving div containers into javascript, phark method for putting close.gif into CSS), Thomas Risberg (safari fixes for scroll amount), Dave Campbell (improved parsing of submodal-width-height class) */ // Popup code var gPopupMask=null; var gPopupContainer=null; var gPopFrame=null; var gReturnFunc; var gPopupIsShown=false; var gHideSelects=false; var gLoading='/config/loading.html'; var gTabIndexes=new Array(); // Pre-defined list of tags we want to disable/enable tabbing into var gTabbableTags=new Array("A","BUTTON","TEXTAREA","INPUT","IFRAME"); // If using Mozilla or Firefox, use Tab-key trap. if (!document.all) { document.onkeypress=keyDownHandler; } /** * Override the loading page from loading.html to something else */ function setPopUpLoadingPage(loading) { gLoading=loading; } /** * Initializes popup code on load. */ function initPopUp() { var body; var popmask; var popcont; var brsVersion; var elms; var width; var height; var clazz; // Add the HTML to the body body=document.getElementsByTagName('body')[0]; popmask=document.createElement('div'); popmask.id='popupMask'; popcont=document.createElement('div'); popcont.id='popupContainer'; popcont.innerHTML = '' + '
' + '
' + '
' + '     ' + '
' + '
' + '
' + ' ' + '
'; body.appendChild(popmask); body.appendChild(popcont); gPopupMask=document.getElementById('popupMask'); gPopupContainer=document.getElementById('popupContainer'); gPopFrame=document.getElementById('popupFrame'); brsVersion=parseInt(window.navigator.appVersion.charAt(0), 10); if (brsVersion<=6 && window.navigator.userAgent.indexOf('MSIE')>=0) { gHideSelects=true; } // Add onclick handlers to 'a' elements of class submodal or submodal-width-height elms=document.getElementsByTagName('a'); for (i=0; i=0) { elms[i].onclick=function() { // default width and height width=400; height=200; // Parse out optional width and height from className var startIndex=this.className.indexOf('submodal'); var endIndex=this.className.indexOf(' ',startIndex); if (endIndex<0) { endIndex=this.className.length; } clazz=this.className.substring(startIndex,endIndex); params=clazz.split('-'); if (params.length==3) { width=parseInt(params[1]); height=parseInt(params[2]); } showPopWin(this.href,'',width,height,null); return false; } } } } addEvent(window, "load", initPopUp); /** * @argument width - int in pixels * @argument height - int in pixels * @argument url - url to display * @argument returnFunc - function to call when returning true from the window. */ function showPopWin(url, theTitle, width, height, returnFunc) { var titleBarHeight; gPopupIsShown=true; disableTabIndexes(); gPopupMask.style.display='block'; gPopupContainer.style.display='block'; centerPopWin(width,height); titleBarHeight=parseInt(document.getElementById('popupTitleBar').offsetHeight,10); /**/ gPopupContainer.style.width=width+'px'; gPopupContainer.style.height=(height+titleBarHeight)+'px'; gPopFrame.style.height=parseInt(document.getElementById('popupInner').offsetHeight,10)+'px'; gPopFrame.style.height=height+'px'; /**/ gPopFrame.src=url; gReturnFunc=returnFunc; // for IE if (gHideSelects) { hideSelectBoxes(); } document.getElementById('popupTitle').innerHTML=theTitle; } // var gi = 0; function centerPopWin(width, height) { if (gPopupIsShown) { if (width==null || isNaN(width)) { width=gPopupContainer.offsetWidth; } if (height==null) { height=gPopupContainer.offsetHeight; } var fullHeight=getViewportHeight(); var fullWidth=getViewportWidth(); // scLeft and scTop changes by Thomas Risberg var scLeft,scTop; if (self.pageYOffset) { scLeft=self.pageXOffset; scTop=self.pageYOffset; } else if (document.documentElement && document.documentElement.scrollTop) { scLeft=document.documentElement.scrollLeft; scTop=document.documentElement.scrollTop; } else if (document.body) { scLeft=document.body.scrollLeft; scTop=document.body.scrollTop; } gPopupMask.style.height=fullHeight+'px'; gPopupMask.style.width=fullWidth+'px'; gPopupMask.style.top=scTop+'px'; gPopupMask.style.left=scLeft+'px'; var titleBarHeight=parseInt(document.getElementById('popupTitleBar').offsetHeight,10); var topMargin=scTop+((fullHeight-(height+titleBarHeight))/2); if (topMargin<0) { topMargin=0; } gPopupContainer.style.top=topMargin+'px'; gPopupContainer.style.left=(scLeft+((fullWidth-width)/2))+'px'; } } addEvent(window,'resize',centerPopWin); window.onscroll=centerPopWin; /** * @argument callReturnFunc - bool - determines if we call the return function specified * @argument returnVal - anything - return value */ function hidePopWin(callReturnFunc) { gPopupIsShown=false; restoreTabIndexes(); if (gPopupMask==null) { return; } gPopupMask.style.display = "none"; gPopupContainer.style.display = "none"; if (callReturnFunc && gReturnFunc != null) { gReturnFunc(window.frames['popupFrame'].returnVal); } gPopFrame.src=gLoading; if (gHideSelects) { displaySelectBoxes(); } } /** * Sets the popup title based on the title of the html document it contains. * Also adds a base attribute so links and forms will jump out out of the iframe * unless a base or target is already explicitly set. * Uses a timeout to keep checking until the title is valid. */ function setPopTitleAndRewriteTargets() { var i; var aList; var fList; if (window.frames['popupFrame'].document.title==null) { window.setTimeout('setPopTitleAndRewriteTargets();',10); } else { var popupDocument=window.frames['popupFrame'].document; document.getElementById('popupTitle').innerHTML=popupDocument.title; if (popupDocument.getElementsByTagName('base').length<1) { aList=window.frames['popupFrame'].document.getElementsByTagName('a'); for (i=0; i