var MSIE = false;
var ver = 0;
var indexOfMSIE = navigator.userAgent.indexOf("MSIE");
if(indexOfMSIE != -1)
{
MSIE = true;
ver = parseFloat(navigator.userAgent.substring(indexOfMSIE + 5, navigator.userAgent.indexOf(";", indexOfMSIE)));
}
var isMac = (navigator.appVersion.indexOf("Macintosh") >= 0);
var isUpLevel = (MSIE && ver >= 5 && !isMac);
var xmlData = XMLData("drbl_mode.files/data.xml");
var g_RowStyleList = new Array(
"propViewerEvenRow",
"propViewerOddRow"
);
var strShape = "圖形名稱:";
function XMLData(file)
{
var temp = null;
if(isUpLevel)
{
temp = CreateObject("Microsoft.XMLDOM");
if (temp == null)
{
temp = CreateObject("MSXML2.DOMDocument");
}
if (temp != null)
{
temp.async = false;
temp.load(file);
if (temp.parseError.errorCode != 0)
{
temp = null;
}
}
}
return temp;
}
function CreateObject (strObj)
{
var obj = null;
eval ("try { obj = new ActiveXObject(strObj); } catch (e) {}");
return obj;
}
function doVersion()
{
if(isUpLevel)
{
frmToolbar.divDownLevel.innerHTML = "";
frmToolbar.divUpLevel.innerHTML = frmWidgets.divData.innerHTML;
}
}
function FindShapeXML (pageID, shapeID)
{
var shapeObj = null;
if (xmlData != null)
{
var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
if(!pagesObj)
{
return null;
}
var pageQuerryString = './/Page[@ID = "' + pageID + '"]';
var pageObj = pagesObj.selectSingleNode(pageQuerryString);
if(pageObj == null)
{
return null;
}
var shapeQuerryString = './/Shape[@ID = "' + shapeID + '"]';
shapeObj = pageObj.selectSingleNode(shapeQuerryString);
}
return shapeObj;
}
function OnShapeKey(pageID, shapeID)
{
var e = window.frmDrawing.event;
if(e.keyCode == 13 && e.ctrlKey) //ctrl + enter
{
UpdateProps (pageID, shapeID);
}
else if (e.keyCode == 13)
{
OnShapeClick (pageID, shapeID);
}
}
function OnShapeClick (pageID, shapeID)
{
if (isUpLevel)
{
var e = frmDrawing.window.event;
var elem = e.srcElement;
if (e != null && e.ctrlKey && frmToolbar.widgets && frmToolbar.widgets.Details)
{
UpdateProps (pageID, shapeID);
}
else
{
var shapeNode = FindShapeXML (pageID, shapeID);
var hlObj = GetHLAction (shapeNode, pageID, shapeID);
if (hlObj != null)
{
if (hlObj.DoFunction.length > 0)
{
eval (hlObj.DoFunction);
}
else if (hlObj.Hyperlink.length > 0)
{
if (hlObj.NewWindow)
{
window.open (hlObj.Hyperlink);
}
else
{
top.location.href = hlObj.Hyperlink.substr (0, 510);
}
}
else if (elem != null)
{
var href = elem.origHref;
if (href == null)
{
href = elem.href;
}
var target = elem.origTarget;
if (target == null)
{
target = elem.target;
}
if (href && href.length > 0)
{
href = HTMLEscape (href);
if (target && target == "_blank")
{
window.open (href);
}
else
{
top.location.href = href.substr (0, 510);
}
}
}
}
}
}
return (!isUpLevel);
}
function UpdateProps(pageID, shapeID)
{
var shape = FindShapeXML (pageID, shapeID);
FillPropPane(shape, frmToolbar.hideDetails);
}
function UpdatePropsByShapeName(pageName, shapeName)
{
var shape = FindShapeXMLByName (pageName, shapeName);
FillPropPane(shape, frmToolbar.hideDetails);
}
function FillPropPane (shapeNode, outputDivObj )
{
if (shapeNode != null && outputDivObj != null)
{
if(outputDivObj.style.display == "none")
{
frmToolbar.ToggleWidget(outputDivObj);
}
var strCPHTML = "";
var shapeNameAttr = shapeNode.attributes.getNamedItem ("Name");
if (shapeNameAttr)
{
strCPHTML += "" + strShape + " " + HTMLEscape(shapeNameAttr.text) + "";
}
var strTableHTML = CreatePropTable (shapeNode);
if(strTableHTML.indexOf("
";
}
if (strTableHTML.length > 0)
{
strCPHTML += strTableHTML;
}
else
{
strCPHTML = strNoCustomPropertiesToDisplayText;
}
outputDivObj.innerHTML = strCPHTML;
outputDivObj.minHeight = 75;
}
}
function CreatePropTable (shapeNode)
{
var strCPHTML = "";
var strStartTable = "";
strStartTable += "標籤 | 值 | ";
var strEndTable = "
";
if (shapeNode != null)
{
var propColl = shapeNode.selectNodes ("Prop");
var propCount = propColl.length;
for (var count = 0; count < propCount; count++)
{
strCPHTML += "";
var strLabelText = "";
oPropLabel = propColl.item(count).selectSingleNode("Label/textnode()");
if (oPropLabel != null)
{
strLabelText = HTMLEscape (oPropLabel.text);
}
else
{
oPropName = propColl.item(count).attributes.getNamedItem ("Name");
if (oPropName)
{
strLabelText = HTMLEscape (oPropName.text);
}
}
if (strLabelText.length > 0)
{
strCPHTML += "" + strLabelText + " | ";
strCPHTML += ""
var strValueText = " ";
oPropValue = propColl.item(count).selectSingleNode("Value/textnode()");
if (oPropValue)
{
strValueText = HTMLEscape (oPropValue.text);
}
strCPHTML += strValueText + " |
";
}
}
if(strCPHTML != "")
{
strCPHTML = strStartTable + strCPHTML + strEndTable;
}
else
{
strCPHTML = "沒有可使用的詳細資料。";
}
}
return strCPHTML;
}
function keyHandler()
{
var e = frmDrawing.window.event;
if(e.keyCode == 13) //enter
{
e.srcElement.click();
}
}
function GoToPage(index)
{
if (viewMgr)
{
viewMgr.loadPage (index);
}
else
{
DefPageLoad (index);
}
}
function GoToPageByID(pageID)
{
var pageIndex = PageIndexFromID (pageID);
if (pageIndex >= 0)
{
GoToPage (pageIndex);
}
}
function PageIndexFromID (pageID)
{
if (g_FileList != null)
{
var entry;
var count;
var fileEntry;
var bFoundEntry = false;
for (count = 0;
count < g_FileList.length && !bFoundEntry;
count++)
{
if (pageID == g_FileList[count].PageID)
{
return count;
}
}
}
return -1;
}
function PageIndexFromName (strPageName)
{
if (g_FileList != null)
{
var entry;
var strPageNameLower = strPageName;
strPageNameLower = strPageNameLower.toLowerCase ();
var count;
var fileEntry;
var bFoundEntry = false;
for (count = 0;
count < g_FileList.length && !bFoundEntry;
count++)
{
var strFileListPageName = g_FileList[count].PageName;
strFileListPageName = HTMLUnescape (strFileListPageName);
strFileListPageName = strFileListPageName.toLowerCase ();
if (strPageNameLower == strFileListPageName)
{
return count;
}
}
}
return -1;
}
function PageIndexFromFileName (strFileName)
{
if (g_FileList != null)
{
var entry;
var strFileNameLower = strFileName;
strFileNameLower = strFileNameLower.toLowerCase ();
var count;
var fileEntry;
var bFoundEntry = false;
for (count = 0;
count < g_FileList.length && !bFoundEntry;
count++)
{
var strFileListFileName = g_FileList[count].PriImage;
strFileListFileName = strFileListFileName.toLowerCase ();
if (strFileNameLower == strFileListFileName)
{
return count;
}
strFileListFileName = g_FileList[count].SecImage;
strFileListFileName = strFileListFileName.toLowerCase ();
if (strFileNameLower == strFileListFileName)
{
return count;
}
}
}
return -1;
}
function PageIndexFromVisioPageIndex (pageIndex)
{
if (g_FileList != null)
{
var entry;
var count;
var fileEntry;
var bFoundEntry = false;
for (count = 0;
count < g_FileList.length && !bFoundEntry;
count++)
{
if (pageIndex == g_FileList[count].PageIndex)
{
return count;
}
}
}
return -1;
}
function FindShapeXML (pageID, shapeID)
{
var shapeObj = null;
if (xmlData)
{
var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
if(!pagesObj)
{
return null;
}
var pageQuerryString = './/Page[@ID = "' + pageID + '"]';
var pageObj = pagesObj.selectSingleNode(pageQuerryString);
if(!pageObj)
{
return null;
}
var shapeQuerryString = './/Shape[@ID = "' + shapeID + '"]';
shapeObj = pageObj.selectSingleNode(shapeQuerryString);
}
return shapeObj;
}
function FindShapeXMLByName (pageName, shapeName)
{
var shapeObj = null;
if (xmlData)
{
var pagesObj = xmlData.selectSingleNode("VisioDocument/Pages");
if(!pagesObj)
{
return null;
}
var pageQuerryString = './/Page[@Name $ieq$ "' + EscapeString (pageName) + '"]';
var pageObj = pagesObj.selectSingleNode(pageQuerryString);
if(!pageObj)
{
return null;
}
var shapeQuerryString = './/Shape[@Name $ieq$ "' + EscapeString (shapeName) + '"]';
shapeObj = pageObj.selectSingleNode(shapeQuerryString);
}
return shapeObj;
}
function Unquote (str)
{
var nStartIndex = 0;
var nEndIndex = str.length;
if (str.charAt (0) == '"')
{
nStartIndex = 1;
}
if (str.charAt (nEndIndex - 1) == '"')
{
nEndIndex -= 1;
}
return str.substring (nStartIndex, nEndIndex);
}
function ConvertXorYCoordinate(PosValue, OldMin, OldMax, NewMin, NewMax, MapBackwards)
{
var OldMid = (OldMax - OldMin) / 2;
var NewMid = (NewMax - NewMin) / 2;
var ConvertResult = 1 * PosValue;
ConvertResult = ConvertResult - (OldMin + OldMid);
ConvertResult = ConvertResult / OldMid;
if(MapBackwards != 0)
{
ConvertResult = 0 - ConvertResult;
}
ConvertResult = ConvertResult * NewMid;
ConvertResult = ConvertResult + (NewMin + NewMid);
return ConvertResult;
}
function showObject( divObject, divID )
{
if( divObject == null )
divObject = getObj( divID );
if( divObject != null )
{
divObject.style.display = "";
divObject.style.visibility = "visible"
}
return divObject;
}
function hideObject( divObject, divID )
{
if( divObject == null )
divObject = getObj( divID );
if( divObject != null )
{
divObject.style.visibility = "hidden";
divObject.style.display = "none";
}
return divObject;
}
function EscapeString (str)
{
var strResult = "";
for (var i = 0 ; i < str.length ; i++)
{
var curChar = str.charAt(i);
if (curChar == '\\')
{
strResult += "\\\\";
}
else if (curChar == "\"")
{
strResult += "\\\"";
}
else if (curChar == "\'")
{
strResult += "\\\'";
}
else
{
strResult += curChar;
}
}
return strResult;
}
function HTMLEscape (str)
{
var strResult = "";
for (var i = 0 ; i < str.length ; i++)
{
var curChar = str.charAt(i);
if (curChar == '\\')
{
strResult += "\";
}
else if (curChar == '\"')
{
strResult += """;
}
else if (curChar == '\'')
{
strResult += "'";
}
else if (curChar == '<')
{
strResult += "<";
}
else if (curChar == '<')
{
strResult += ">";
}
else if (curChar == '&')
{
strResult += "&";
}
else
{
strResult += curChar;
}
}
return strResult;
}
function HTMLUnescape (str)
{
var strResult = "";
var strEscapePattern = "x;";
for (var i = 0 ; i < str.length - strEscapePattern.length + 1; i++)
{
if (str.charAt(i) == '&' &&
str.charAt(i + 1) == '#' &&
str.charAt(i + 4) == ';')
{
var charCode = str.charAt(i + 2);
charCode += str.charAt(i + 3);
if (charCode == "34")
{
strResult += '"';
}
else if (charCode == "39")
{
strResult += '\'';
}
else if (charCode == "60")
{
strResult += '<';
}
else if (charCode == "62")
{
strResult += '>';
}
else if (charCode == "92")
{
strResult += '\\';
}
else if (charCode == "38")
{
strResult += '&';
}
i = i + strEscapePattern.length - 1;
}
else
{
strResult += str.charAt(i);
}
}
strResult += str.substring (i, str.length);
return strResult;
}