// This file is copied to the lcms/wdk/include folder
// as part of the install/patch process - overwriting the DCTM version of the file.
//
// This file sets the scrolling attribute to "auto" when resizing the page
// frames (line 162) - this is to fix scrollbar issues in the Firefox browser.

if (typeof(getTopLevelWnd().modalWnd) == "undefined")
{
getTopLevelWnd().modalWnd = null;
}
function beginModal()
{
var topLevelWnd = getTopLevelWnd();
// We're Initiating modality if this is the first window to call beginModal [ since the last endModal ]
var bInitiatingModality = (topLevelWnd.modalWnd == null);
// We're Maintaining modality when another window has already called beginModal but this window has been removed.
var bMaintainingModality = ((topLevelWnd.modalWnd != null) && doesWindowExist(topLevelWnd.modalWnd) == false);
if (bInitiatingModality || bMaintainingModality)
{
topLevelWnd.modalWnd = window;
// Only resize if we're Initiating modality. If we try to resize while maintaining
if (bInitiatingModality)
{
if (topLevelWnd.document.body.tagName == 'FRAMESET')
{
if (g_clientInfo.isBrowser(ClientInfo.SAFARI))
{
g_frameMap.fill(topLevelWnd);
}
resizeFrameset(topLevelWnd.document.body);
if (g_clientInfo.isBrowser(ClientInfo.SAFARI))
{
g_frameMap.clear();
}
}
}
window.focus();
}
}
function endModal(bForced)
{
var topLevelWnd = getTopLevelWnd();
var bAllowEndModal = (doesWindowExist(topLevelWnd.modalWnd) == false || bForced);
if (topLevelWnd.modalWnd != null && bAllowEndModal)
{
topLevelWnd.modalWnd = null;
if (g_clientInfo.isBrowser(ClientInfo.SAFARI))
{
g_frameMap.fill(topLevelWnd);
}
restoreFrameset(topLevelWnd.document.body);
if (g_clientInfo.isBrowser(ClientInfo.SAFARI))
{
g_frameMap.clear();
}
}
}
function FrameMap()
{
this.prefix = "DCTM_FRAME";
this.map = new Array();
this.fill = function(win)
{
if (win.frames.length > 0)
{
for (var j=0; j < win.frames.length; j++)
{
var frame = win.frames[j];
if (isAccessibleWindow(frame))
{
this.addFrame(frame);
if (frame.frames.length > 0)
{
this.fill(frame);
}
}
}
}
};
this.getWindow = function(frame)
{
var lookup = null;
try
{
lookup = frame.document.lookup;
}
catch(e)
{
}
return (lookup == null) ? null : this.map[lookup];
};
this.clear = function()
{
this.map = new Array();
};
this.addFrame = function(frame)
{
var uniqueName = this.generateUniqueLookup(frame.name);
frame.document.lookup = uniqueName;
if (Trace_MODAL) modal_trace("Adding - " + frame.document.lookup + "," + frame.name);
this.map[uniqueName] = frame;
};
this.generateUniqueLookup = function(frameName)
{
var idx = 0;
var noName = false;
var uniqueName = frameName;
// The check for "<!--" is a Safari 1.2 issue
// If you don't have a frame name, or you have duplicate names,
if (!uniqueName || uniqueName.indexOf("<!--") != -1)
{
noName = true;
uniqueName = this.prefix + "_" + idx;
}
while (typeof this.map[uniqueName] != 'undefined')
{
if (noName)
{
uniqueName = this.prefix + "_" + (idx++)
}
else
{
uniqueName = frameName + "_" + (idx++);
}
}
return uniqueName;
};
}
var g_frameMap = new FrameMap();
function resizeFrameset(frameset)
{
var framesetSize = null;
// get the frameset's rows/cols
var rowsCols;
if (frameset.rows != null && frameset.rows != "")
{
rowsCols = frameset.rows;
}
else
{
rowsCols = frameset.cols;
}
var rowsColsArray = rowsCols.split(',');
var newRowsCols = "";
var bCollapseAll = true;
var childFrames = getChildFrames(frameset);
for (var i = 0; i < childFrames.length; i++)
{
var size = rowsColsArray[i];
var childFrame = childFrames[i];
if (childFrame.tagName == 'FRAME')
{
if (Trace_MODAL) modal_trace("Resizing Frame : " + childFrame.name);
setCustomAttribute(childFrame, 'resized', true);
setCustomAttribute(childFrame, 'prev_noResize', childFrame.noResize);
setCustomAttribute(childFrame, 'prev_marginHeight', childFrame.marginHeight);
setCustomAttribute(childFrame, 'prev_marginWidth', childFrame.marginWidth);
setCustomAttribute(childFrame, 'prev_scrolling', childFrame.scrolling);
childFrame.noResize     = false;
childFrame.marginHeight = 0;
childFrame.marginWidth  = 0;
childFrame.scrolling    = 'auto';
var childWnd = getWindowReference(childFrame);
if (childWnd && isAccessibleWindow(childWnd) == true)
{
if (childWnd.document.body && childWnd.document.body.tagName == 'FRAMESET')
{
childFrame = childWnd.document.body;
}
else
{
if (childWnd == getTopLevelWnd().modalWnd)
{
size = "100%";
framesetSize = "100%";
}
else if (typeof(childWnd.ignoreModal) == "undefined")
{
size = "0";
blockKeyboardAccess(childFrame);
}
else
{
bCollapseAll = false;
}
}
}
}
if (childFrame.tagName == 'FRAMESET')
{
var newsize = resizeFrameset(childFrame);
if (newsize != null)
{
size = newsize;
if (size == "100%")
{
framesetSize = "100%";
}
}
}
if (newRowsCols != "")
{
newRowsCols += ',';
}
newRowsCols += size;
}
if (frameset.rows != null && frameset.rows != "")
{
setCustomAttribute(frameset, 'prev_rows', frameset.rows);
frameset.rows = newRowsCols;
}
else
{
setCustomAttribute(frameset, 'prev_cols', frameset.cols);
frameset.cols = newRowsCols;
}
setCustomAttribute(frameset, 'resized', true);
setCustomAttribute(frameset, 'prev_border', frameset.border);
setCustomAttribute(frameset, 'prev_frameBorder', frameset.frameBorder);
setCustomAttribute(frameset, 'prev_frameSpacing', frameset.frameSpacing);
frameset.border       = 0;
frameset.frameBorder  = 0;
frameset.frameSpacing = 0;
if (bCollapseAll && framesetSize == null)
{
framesetSize = "0";
}
return framesetSize;
}
function restoreFrameset(frameset)
{
var childFrames = getChildFrames(frameset);
for (var i = 0; i < childFrames.length; i++)
{
var childFrame = childFrames[i];
if (childFrame.tagName == 'FRAME')
{
if (childFrame.resized)
{
if (Trace_MODAL) modal_trace("Restoring Frame :" + childFrame.name);
childFrame.noResize     = childFrame.prev_noResize;
childFrame.marginHeight = childFrame.prev_marginHeight;
childFrame.marginWidth  = childFrame.prev_marginWidth;
childFrame.scrolling    = childFrame.prev_scrolling;
setCustomAttribute(childFrame, 'resized', false);
}
var childWnd = getWindowReference(childFrame);
if (childWnd && isAccessibleWindow(childWnd) == true)
{
restoreKeyboardAccess(childFrame);
if (childWnd.frames.length > 0)
{
childFrame = childWnd.document.body;
}
}
}
if (childFrame && childFrame.tagName == 'FRAMESET')
{
restoreFrameset(childFrame);
}
}
if (frameset.resized)
{
frameset.border = frameset.prev_border;
frameset.frameBorder = frameset.prev_frameBorder;
frameset.frameSpacing = frameset.prev_frameSpacing;
if (frameset.rows != null && frameset.rows != "")
{
frameset.rows = frameset.prev_rows;
}
else
{
frameset.cols = frameset.prev_cols;
}
setCustomAttribute(frameset, 'resized', false);
}
}
function getChildFrames(frameset)
{
var childFrames = [];
var iChildFrames = 0;
for (var iChild = 0; iChild < frameset.childNodes.length; iChild++)
{
var child = frameset.childNodes[iChild];
if (child.tagName == 'FRAME' || child.tagName == 'FRAMESET')
{
childFrames[iChildFrames++] = child;
}
}
return childFrames;
}
function getWindowReference(frame)
{
var win = (frame.contentWindow) ? frame.contentWindow : g_frameMap.getWindow(frame);
return win;
}
function setCustomAttribute(frame, attrName, attrValue)
{
if (frame && attrName)
{
frame[attrName] = attrValue;
}
}
function blockKeyboardAccess(frame)
{
if (g_clientInfo.isBrowser(ClientInfo.MSIE))
{
frame.prev_tabIndex = frame.tabIndex;
frame.tabIndex = -1;
}
else
{
var frameWnd = getWindowReference(frame);
if (frameWnd)
{
frameWnd.prev_onfocus = frameWnd.onfocus;
frameWnd.onfocus = function() {
if (getTopLevelWnd().modalWnd)
{
getTopLevelWnd().modalWnd.focus();
}
};
}
}
}
function restoreKeyboardAccess(frame)
{
if (g_clientInfo.isBrowser(ClientInfo.MSIE))
{
frame.tabIndex = (frame.prev_tabIndex) ? frame.prev_tabIndex : null;
}
else
{
var frameWnd = getWindowReference(frame);
if (frameWnd)
{
frameWnd.onfocus = (frameWnd.prev_onfocus) ? frameWnd.prev_onfocus : null;
}
}
}
function isModal()
{
var topLevelWnd = getTopLevelWnd();
return (topLevelWnd.modalWnd != null);
}
function doesWindowExist(wnd)
{
return _doesWindowExist(getTopLevelWnd(), wnd);
}
function _doesWindowExist(parentWnd, wnd)
{
for (var i = 0; i < parentWnd.frames.length; i++)
{
var childWnd = parentWnd.frames[i];
if (childWnd == wnd || _doesWindowExist(childWnd, wnd) == true)
{
return true;
}
}
return false;
}
function modal_trace(msg)
{
Trace_println("modal.js: " + msg);
}
