var WDK_TREENODE_EXPAND_ID = "__wdk_tree_node_expand";
if (g_clientInfo.isBrowser(ClientInfo.NETSCAPE) || g_clientInfo.isBrowser(ClientInfo.MOZILLA))
{
function disableTextSelection(event)
{
var node = event.target;
while (node != null)
{
if (node.className == 'tree')
{
return false;
}
node = node.parentNode;
}
return true;
}
function enableTextSelection(event)
{
return true;
}
document.onmousedown=disableTextSelection;
document.onclick=enableTextSelection;
}
function TreeConfig(strTreeElementName, strFormElementName,
strHiddenFieldSel, strHiddenFieldFocus, strHiddenFieldCollapse,
bMultiselect, multiselectDepth,
strStyleNormal, strStyleSelected,
strClassNormal, strClassSelected,
bInIFrame, strInlineExpandUrl, expandImgs, collapseImgs, loadingImgs)
{
this.m_strTreeElementName = strTreeElementName;
this.m_strFormElementName = strFormElementName;
this.m_strHiddenFieldSel      = strHiddenFieldSel;
this.m_strHiddenFieldFocus    = strHiddenFieldFocus;
this.m_strHiddenFieldCollapse = strHiddenFieldCollapse;
this.m_bMultiselect     = bMultiselect;
this.m_multiselectDepth = multiselectDepth;
this.m_strStyleNormal   = strStyleNormal;
this.m_strStyleSelected = strStyleSelected;
this.m_strClassNormal   = strClassNormal;
this.m_strClassSelected = strClassSelected;
this.m_bInIFrame = bInIFrame;
this.m_strInlineExpandUrl = strInlineExpandUrl;
this.m_expandImgs   = expandImgs;
this.m_collapseImgs = collapseImgs;
this.m_loadingImgs  = loadingImgs;
}
TreeConfig.prototype.getSelHiddenField = function()
{
return eval("document." + this.m_strFormElementName + "." + this.m_strHiddenFieldSel);
}
TreeConfig.prototype.getFocusHiddenField = function()
{
return eval("document." + this.m_strFormElementName + "." + this.m_strHiddenFieldFocus);
}
TreeConfig.prototype.getCollapseHiddenField = function()
{
return eval("document." + this.m_strFormElementName + "." + this.m_strHiddenFieldCollapse);
}
TreeConfig.prototype.getForm = function()
{
return eval("document." + this.m_strFormElementName);
}
function getNodeId(nodeDiv)
{
var i = nodeDiv.id.indexOf(".");
return nodeDiv.id.substring(i + 1);
}
function getTreeId(nodeDiv)
{
var i = nodeDiv.id.indexOf(".");
return nodeDiv.id.substring(0, i);
}
function getNodeDiv(config, id)
{
var doc = document;
if (config.m_bInIFrame)
{
doc = window.frames[config.m_strTreeElementName].document;
}
return doc.getElementById(id);
}
function onSelectTreeNode(nodeId, nodeDiv, event)
{
// check request here, so that we don't highlight node, if we can't post
if (isEventPostingLocked())
{
return;
}
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
var focusHiddenField = config.getFocusHiddenField();
focusHiddenField.value = nodeId;
var multiselectDepth = config.m_multiselectDepth;
if (config.m_bMultiselect == false)
{
multiselectDepth = 9999;
}
var nodeDepth = getNodeDepth(nodeDiv);
if (nodeDepth < multiselectDepth)
{
treeSetSelection(nodeId, nodeDiv, config);
}
else if ((event == null || event.ctrlKey == true))
{
treeToggleSelection(nodeId, nodeDiv, event, config);
}
else if (event.shiftKey == true)
{
treeExtendSeletion(nodeId, nodeDiv, event, config);
}
else
{
treeSetSelection(nodeId, nodeDiv, config);
}
}
function onExpandTreeNode(nodeId, nodeDiv)
{
if (acquireEventPostingLock() == false)
{
return;
}
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
var focusHiddenField = config.getFocusHiddenField();
focusHiddenField.value = nodeId;
replaceImage(nodeDiv, config.m_expandImgs, config.m_loadingImgs);
replaceImage(nodeDiv, config.m_collapseImgs, config.m_loadingImgs);
var iframe = document.createElement("IFRAME");
var strUniqueIFrameId = WDK_TREENODE_EXPAND_ID + new Date().getTime();
iframe.id = strUniqueIFrameId;
iframe.name = strUniqueIFrameId;
iframe.src = g_virtualRoot + "/wdk/blank.htm";
with (iframe.style)
{
position = 'absolute';
visibility = 'hidden';
overflow = 'hidden';
zIndex = 0;
left = 0;
top = 0;
width = 1;
height = 1;
}
document.body.appendChild(iframe);
var selHiddenField = config.getSelHiddenField();
var collapseHiddenField = config.getCollapseHiddenField();
var strHtml = "<html><body><form action='" + config.m_strInlineExpandUrl + "' method='post'>";
strHtml += "<input type='hidden' name='WDK_TREENODE_EXPAND_ID' id='WDK_TREENODE_EXPAND_ID' value='" + strUniqueIFrameId + "'/>";
strHtml += renderHiddenInputHtml(selHiddenField);
strHtml += renderHiddenInputHtml(focusHiddenField);
strHtml += renderHiddenInputHtml(collapseHiddenField);
var form = config.getForm();
var inputElms = form.getElementsByTagName("input");
if (inputElms)
{
for (var i = 0; i < inputElms.length; i++)
{
var element = inputElms[i];
if (element.type.toLowerCase() == "hidden" &&
element.name.indexOf("__dmf") == 0 &&
element.value != "")
{
strHtml += renderHiddenInputHtml(element);
}
}
}
strHtml += "</form></body></html>";
iframe.setAttribute("expansionForm", strHtml);
if (g_clientInfo.isBrowser(ClientInfo.SAFARI) == true)
{
setTimeout("getExpandedContents('" + strUniqueIFrameId + "');", 100);
}
else
{
getExpandedContents(strUniqueIFrameId);
}
}
function getExpandedContents(strUniqueIFrameId)
{
var iframe = document.getElementById(strUniqueIFrameId);
var doc = (iframe.contentDocument) ? iframe.contentDocument : window.frames[strUniqueIFrameId].document;
if (typeof doc == 'undefined')
{
// Keep trying until Frame's DOM is finally built
setTimeout("getExpandedContents('" + strUniqueIFrameId + "');", 10);
}
else
{
doc.write(iframe.getAttribute("expansionForm"));
doc.close();
doc.forms[0].submit();
}
}
function onCollapseTreeNode(nodeId, nodeDiv)
{
// check here, so that we don't collapse node, if we can't select it (which requires a post)
if (isEventPostingLocked())
{
return false;
}
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
var focusHiddenField = config.getFocusHiddenField();
focusHiddenField.value = nodeId;
var collapseHiddenField = config.getCollapseHiddenField();
if (collapseHiddenField.value.length != 0) collapseHiddenField.value += "..";
collapseHiddenField.value += nodeId;
var node = nodeDiv.nextSibling;
while (node != null)
{
if (node.tagName == 'DIV' && node.id.indexOf(nodeDiv.id + '.') != 0)
{
break;
}
var tmp = node;
node = node.nextSibling;
nodeDiv.parentNode.removeChild(tmp);
}
replaceImage(nodeDiv, config.m_collapseImgs, config.m_expandImgs);
var html = nodeDiv.innerHTML;
html = replaceString(html, "Collapse(this)", "Expand(this)");
nodeDiv.innerHTML = compressHtml(html);
var selHiddenField = config.getSelHiddenField();
var curSelIds = selHiddenField.value.split("..");
var newSelIds = "";
var bSelectNode = false;
for (var i = 0; i < curSelIds.length; i++)
{
var selId = curSelIds[ i ];
if (selId.indexOf(nodeId + '.') != 0)
{
if (newSelIds != "") newSelIds += "..";
newSelIds += selId;
}
else
{
bSelectNode = true;
}
}
if (newSelIds == "")
{
bSelectNode = true;
}
if (bSelectNode)
{
if (newSelIds != "")
{
newSelIds = nodeId + ".." + newSelIds;
}
else
{
newSelIds = nodeId;
}
setSelectedClassStyle(config, nodeDiv);
}
selHiddenField.value = newSelIds;
return bSelectNode;
}
function getNodeDepth(nodeDiv)
{
return nodeDiv.id.split(".").length - 1;
}
function treeSetSelection(nodeId, nodeDiv, config)
{
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
setSelectedClassStyle(config, nodeDiv);
var selHiddenField = config.getSelHiddenField();
var curSelIds = selHiddenField.value.split("..");
for (var i = 0; i < curSelIds.length; i++)
{
var selId = curSelIds[ i ];
if (selId != nodeId)
{
var node = getNodeDiv(config, treeId + "." + selId);
if (node != null)
{
setNormalClassStyle(config, node);
}
}
}
var nodeId = getNodeId(nodeDiv);
selHiddenField.value = nodeId;
}
function treeToggleSelection(nodeId, nodeDiv, event, config)
{
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
var selHiddenField = config.getSelHiddenField();
var curSelIds = selHiddenField.value.split("..");
var newSelIds = "";
var bAddNode = true;
for (var i = 0; i < curSelIds.length; i++)
{
var selId = curSelIds[ i ];
var node = getNodeDiv(config, treeId + "." + selId);
if (selId != nodeId)
{
if (nodeId.indexOf(selId + '.') != 0 && selId.indexOf(nodeId + '.') != 0)
{
if (newSelIds != "") newSelIds += "..";
newSelIds += selId;
}
else
{
setNormalClassStyle(config, node);
}
}
else
{
setNormalClassStyle(config, node);
bAddNode = false;
}
}
if (bAddNode || newSelIds.length == 0)
{
if (newSelIds.length == 0)
{
newSelIds = nodeId;
}
else
{
newSelIds = nodeId + ".." + newSelIds;
}
setSelectedClassStyle(config, nodeDiv);
}
selHiddenField.value = newSelIds;
}
function treeExtendSeletion(nodeId, nodeDiv, event, config)
{
var treeId = getTreeId(nodeDiv);
var config = wdkTreeConfig[treeId];
var selHiddenField = config.getSelHiddenField();
var curSelIds = selHiddenField.value.split("..");
var curSelId = curSelIds[ 0 ];
var curSelPath = "";
var i = curSelId.lastIndexOf(".");
if (i != -1)
{
curSelPath = curSelId.substring(0, i);
}
// get first selected node's div id and path
var curSelDivId = treeId + "." + curSelId;
var curSelDivPath = treeId + "." + curSelPath;
var node = nodeDiv.parentNode.firstChild;
while ((node.tagName != 'DIV') || (node.id != curSelDivId && node.id != nodeDiv.id))
{
node = node.nextSibling;
}
for (var i = 1; i < curSelIds.length; i++)
{
var n = getNodeDiv(config, treeId + "." + curSelIds[ i ]);
setNormalClassStyle(config, n);
}
var newSelIds = "";
if (node.id == curSelDivId)
{
newSelIds = curSelId;
if (node.id != nodeDiv.id)
{
do
{
node = node.nextSibling;
if (node.tagName == 'DIV' && node.id.indexOf(curSelDivPath + '.') == 0 && node.id.lastIndexOf(".") == curSelDivPath.length)
{
newSelIds = newSelIds + ".." + getNodeId(node);
setSelectedClassStyle(config, node);
}
} while (node.tagName != 'DIV' || node.id != nodeDiv.id);
}
}
else if (node.id == nodeDiv.id)
{
while (node.tagName != 'DIV' || node.id != curSelDivId)
{
if (node.tagName == 'DIV' && node.id.indexOf(curSelDivPath + '.') == 0 && node.id.lastIndexOf(".") == curSelDivPath.length)
{
if (newSelIds.length == 0)
{
newSelIds = getNodeId(node);
}
else
{
newSelIds = getNodeId(node) + ".." + newSelIds;
}
setSelectedClassStyle(config, node);
}
node = node.nextSibling;
}
if (newSelIds.length == 0)
{
newSelIds = curSelId;
}
else
{
newSelIds = curSelId + '..' + newSelIds;
}
}
selHiddenField.value = newSelIds;
}
function replaceString(strString, strSearch, strReplace)
{
var i = strString.indexOf(strSearch);
if (i != -1)
{
return strString.substring(0, i) + strReplace + strString.substring(i + strSearch.length);
}
else
{
return strString;
}
}
function replaceImage(nodeDiv, search, replace)
{
var node = nodeDiv.firstChild.firstChild;
while (node != null)
{
if (node.tagName == 'A' && node.firstChild.tagName == 'IMG')
{
for (var i = 0; i < search.length; i++)
{
var src = node.firstChild.src;
var j = src.lastIndexOf(search[ i ]);
if (j != -1)
{
node.firstChild.src = src.substring(0, j) + replace[ i ];
return;
}
}
break;
}
node = node.nextSibling;
}
}
function setNormalClassStyle(config, nodeDiv)
{
var node = nodeDiv.firstChild;
while (node != null)
{
if (node.className == config.m_strClassSelected)
{
node.className = config.m_strClassNormal;
node.style.cssText = config.m_strStyleNormal;
return false;
}
if (setNormalClassStyle(config, node) == false)
{
return false;
}
node = node.nextSibling;
}
return true;
}
function setSelectedClassStyle(config, nodeDiv)
{
var node = nodeDiv.firstChild;
while (node != null)
{
if (node.className == config.m_strClassNormal)
{
node.className = config.m_strClassSelected;
node.style.cssText = config.m_strStyleSelected;
return false;
}
if (setSelectedClassStyle(config, node) == false)
{
return false;
}
node = node.nextSibling;
}
return true;
}
function renderHiddenInputHtml(hidden)
{
return "<input type='hidden' id='" + hidden.name + "' name='" + hidden.name + "' value='" + hidden.value + "'/>";
}
function compressHtml(rawHtml)
{
var re = new RegExp("(>)\\s*?(<)", "g");
var htmlWithoutWhiteSpace = rawHtml.replace(re,"$1$2");
return htmlWithoutWhiteSpace;
}
