// eHelp® Corporation Dynamic HTML JavaScript // Copyright© 1998-2003 eHelp® Corporation.All rights reserved. // Version=4.82 // Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten. //// Segment Begin -- (JavaScript 1.0) /// Section Begin - General and relative topics(JavaScript 1.0) //{{HH_SYMBOL_SECTION var HH_ChmFilename = ""; var HH_WindowName = ""; var HH_GlossaryFont = ""; var HH_Glossary = ""; var HH_Avenue = ""; var HH_ActiveX = false; //}}HH_SYMBOL_SECTION //Begin to support previous generic parameters //Get the information about the browser. var gstrBsAgent = navigator.userAgent.toLowerCase(); var gnBsVer = parseInt(navigator.appVersion); var gbBsOpera = (gstrBsAgent.indexOf('opera') != -1); var gbBsKonqueror = (gstrBsAgent.indexOf('konqueror') != -1); var gbBsSafari = (gstrBsAgent.indexOf('safari') != -1); var gbBsIE = (gstrBsAgent.indexOf('msie') != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; var gbBsNS = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1)) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari; var gbBsMac = (gstrBsAgent.indexOf('mac') != -1); var gbBsWindows = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1)); var gbBsSunOS = (gstrBsAgent.indexOf("sunos") != -1); var gbBsIE3Before = ((gbBsIE) && (gnBsVer <= 2)); var gbBsNS3Before = ((gbBsNS) && (gnBsVer <= 3)); var gbBsNS2 = ((gbBsNS) && (gnBsVer <= 2)); var gbBsNS3 = ((gbBsNS) && (gnBsVer == 3)); var gbBsIE300301 = ((gbBsIE) && (gnBsVer == 2) && ((gstrBsAgent.indexOf("3.00") != -1)||(gstrBsAgent.indexOf("3.0a") != -1)||(gstrBsAgent.indexOf("3.0b")!=-1)||(gstrBsAgent.indexOf("3.01")!=-1))); var gbBsIE302 = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1)); var gbBsNS4 = ((gbBsNS) && (gnBsVer >= 4)); var gbBsNS6 = ((gbBsNS) && (gnBsVer >= 5)); var gbBsNS7 = false; var gbBsIE4 = ((gbBsIE) && (gnBsVer >= 4)); var gbBsIE5 = false; var gbBsIE55 = false; var gbBsOpera6 = false; var gbBsOpera7 = false; var gbBsKonqueror3 = false; gbBsIE = (navigator.appName.indexOf("Microsoft") != -1) && !gbBsOpera && !gbBsKonqueror && !gbBsSafari;; if (gbBsIE) { if (parseInt(navigator.appVersion) >= 4) { gbBsIE4 = true; if (gbBsIE4) { var nPos = gstrBsAgent.indexOf("msie"); var strIEversion = gstrBsAgent.substring(nPos + 5); var nVersion = parseFloat(strIEversion); if (nVersion >= 5) gbBsIE5 = true; if (nVersion >= 5.5) gbBsIE55 = true; } } } if (gbBsNS6) { var nPos=gstrBsAgent.indexOf("gecko"); if(nPos!=-1) { var nPos2=gstrBsAgent.indexOf("/", nPos); if(nPos2!=-1) { var nVersion=parseFloat(gstrBsAgent.substring(nPos2+1)); if (nVersion>=20020823) gbBsNS7=true; } } } if (gbBsOpera) { var nPos = gstrBsAgent.indexOf("opera"); if(nPos!=-1) { var nVersion = parseFloat(gstrBsAgent.substring(nPos+6)); if (nVersion >= 6) { gbBsOpera6=true; if (nVersion >=7) gbBsOpera7=true; } } } if (gbBsKonqueror) { var nPos = gstrBsAgent.indexOf("konqueror"); if(nPos!=-1) { var nVersion = parseFloat(gstrBsAgent.substring(nPos+10)); if (nVersion >= 3) { gbBsKonqueror3=true; } } } function insertAdjacentHTML(obj, where, htmlStr) { if (gbBsIE || gbBsOpera7) { obj.insertAdjacentHTML(where, htmlStr); } else if (gbBsNS6 || gbBsSafari) { var r = obj.ownerDocument.createRange(); r.setStartBefore(obj); var parsedHTML = r.createContextualFragment(htmlStr); switch (where){ case 'beforeBegin': obj.parentNode.insertBefore(parsedHTML,obj); break; case 'afterBegin': obj.insertBefore(parsedHTML,obj.firstChild); break; case 'beforeEnd': obj.appendChild(parsedHTML); break; case 'afterEnd': if (obj.nextSibling){ obj.parentNode.insertBefore(parsedHTML,obj.nextSibling); } else { obj.parentNode.appendChild(parsedHTML); } break; } } } // Utilities functions. function BsscHasExtJs() { if( gbBsIE3Before || gbBsNS3Before) return false; return true; } // Register event handler var gBsOnLoads = new Array(); // An array holds all the onload event handler. var gBsOnClicks = new Array(); // An array holds all the onClick event handler. var gBsOnUnLoads = new Array(); // An array holds all the OnUnLoad event handler. var gBsOnMouseOvers = new Array(); // An array holds all the OnMouseOver event handler. var gBsOnMouseOuts = new Array(); // An array holds all the OnMouseOut event handler. var gbOrignalOnMouseDown = null; function BsscRegisterOnLoad(funcHandler) { var nLength = gBsOnLoads.length; gBsOnLoads[nLength] = funcHandler; } function BsscRegisterOnClick(funcHandler) { var nLength = gBsOnClicks.length; gBsOnClicks[nLength] = funcHandler; } function BsscRegisterOnUnLoad(funcHandler) { var nLength = gBsOnUnLoads.length; gBsOnUnLoads[nLength] = funcHandler; } function BsscRegisterOnMouseOver(funcHandler) { var nLength = gBsOnMouseOvers.length; gBsOnMouseOvers[nLength] = funcHandler; } function BsscRegisterOnMouseOut(funcHandler) { var nLength = gBsOnMouseOuts.length; gBsOnMouseOuts[nLength] = funcHandler; } function BsGeneralOnLoad() { if (!gbBsIE4 && !gbBsNS4) return; // Make everything visible in navigator if (gbBsNS4 && !gbBsNS6) { // Make some special effects items visible for (var iLayer = 0; iLayer < document.layers.length; iLayer++) { document.layers[iLayer].visibility = "show"; document.layers[iLayer].left = 0; } } } // If resize the netscape browser, need to reload it. function BsReDo() { if (innerWidth != origWidth || innerHeight != origHeight) location.reload(); } // End of the local functions. // The following functions are used by the html files. function BSSCOnLoad() { if( !BsscHasExtJs() ) return; for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--) gBsOnLoads[nElement](); } function BSSCOnClick() { if (!BsscHasExtJs()) return; for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--) gBsOnClicks[nElement](); } function BSSCOnUnload() { if (!BsscHasExtJs()) return; for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--) gBsOnUnLoads[nElement](); } function BSSCOnMouseOver() { if (!BsscHasExtJs()) return; for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--) gBsOnMouseOvers[nElement](); } function BSSCOnMouseOut() { if (!BsscHasExtJs()) return; for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--) { gBsOnMouseOuts[nElement](); } } // End of invocation of the event handle functions. // Add the GereralOnLoad to the onload array. if (typeof(BsscRegisterOnLoad) != "undefined") { BsscRegisterOnLoad(BsGeneralOnLoad); } if (gbBsNS4&&!gbBsNS6) { origWidth = innerWidth; origHeight = innerHeight; onresize = BsReDo; } //End to support previous generic parameters //Begin to support previous HHActiveX invoking function BsHHActivateComponents() { if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0]))) { var objBody = getElementsByTag(document,"BODY")[0]; if( typeof(objBody) == "object" ) { insertAdjacentHTML(objBody, "beforeEnd", '<OBJECT ID="HHComponentActivator" CLASSID="CLSID:399CB6C4-7312-11D2-B4D9-00105A0422DF" width=0 height=0></OBJECT>'); if (HHComponentActivator.object) HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue); } } } function BsHHActivXOnLoad() { if( gbBsIE4 ) BsHHActivateComponents(); } if( typeof(BsscRegisterOnLoad) != "undefined" ) { BsscRegisterOnLoad(BsHHActivXOnLoad); } //End to support previous HHActiveX invoking //Begin to support previous relative topics //If webHelp needs Related Topics DHTMLcode, it's supposed to add it here var gbPopupMenuTimeoutExpired = false; var gbInPopupMenu = false; var gbPopupMenuTopicList = null; var gOlddocumentClick = null; ////////////////////////////////////////////////////////////////////////////////////////// // // Popup Menu code // ////////////////////////////////////////////////////////////////////////////////////////// var g_bIsPopupMenuInit = false; function _WritePopupMenuLayer() { if (!g_bIsPopupMenuInit) { if (gbBsNS4&&!gbBsNS6) { //Do not try to write ininle styles for NS! NS can not handle it and will not stop downloading the html page... document.write("<DIV CLASS='WebHelpPopupMenu' ID='PopupMenu'></DIV>"); } else{ document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>"); if (!(gbBsNS4&&!gbBsNS6)) { document.write("<STYLE TYPE='text/css'>"); if (gbBsMac&&gbBsIE4) { document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}"); document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}"); } else { document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}"); document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}"); } document.write("</STYLE>"); } } g_bIsPopupMenuInit = true; } } //Seek for the bsscright frame function _SeekFrameByName( cRoot, strName ) { if( cRoot == null ) return null; if( cRoot.frames == null ) return null; if( cRoot.frames[strName] != null ) return cRoot.frames[strName]; for (var i=0; i<cRoot.frames.length; i++) { var cObj = null; if (!gbBsNS6) cObj = _SeekFrameByName( cRoot.frames(i).document, strName ); else cObj = _SeekFrameByName( cRoot.frames[i], strName ); if( cObj != null ) return cObj; }; return null; } function _GetFrameByName( cRoot, strName ) { if( cRoot == null ) return null; var cRet = _SeekFrameByName(cRoot, strName); if( cRet != null ) return cRet; if (cRoot.parent != cRoot) return _GetFrameByName( cRoot.parent, strName ); else return null; } var gfn_arguments = null; function _PopupMenu_Invoke(fn_arguments) { gfn_arguments = fn_arguments; if (gbBsOpera6&&gbBsMac) { var wndOldPopupLinks= window.open(document.location.href, "popuplinks"); wndOldPopupLinks.close(); setTimeout("_PopupMenu_Invoke_2();",100); } else { _PopupMenu_Invoke_2(); } } function _PopupMenu_Invoke_2() { var fn_arguments = gfn_arguments; gfn_arguments = null; // Make sure we have reasonable arguments var argLen = fn_arguments.length; if (argLen < 3) { return false; } // Check to see if we only have one target var strTarget = ""; var targetDoc = null; if (fn_arguments[1] == '') { if (BSSCPopup_IsPopup()) { targetDoc = parent; strTarget = "TARGET= _parent"; } else targetDoc = window.document; } else { targetDoc = _GetFrameByName( parent, fn_arguments[1] ); strTarget = "TARGET='" + fn_arguments[1] + "'"; } if ((!gbBsIE4 && !gbBsNS4 && !gbBsOpera7 && !gbBsKonqueror3 &&!gbBsSafari) || ((gbBsMac) && (gbBsIE4) && (window.event.srcElement.tagName == "AREA"))) { var argLen = fn_arguments.length; // Create the window that the hyperlinks will go into var nHeight = argLen * 15; var nWidth = 400; var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto"; strParam += ",height=" + nHeight + ",width=200"; strParam += ",resizable"; var wndTemp=null; // Create a temporary window first to ensure the real popup comes up on top if (!gbBsOpera) wndTemp = window.open("", "temp", strParam); // Create the real popup window var wndPopupLinks=null; if (gbBsOpera&&gbBsMac) { wndTemp = window.open(document.location.href, "temp", strParam); wndPopupLinks= window.open(document.location.href, "popuplinks", strParam); } else wndPopupLinks= window.open("", "popuplinks", strParam); wndPopupLinks.document.open("text/html"); // Close the temporary if (wndTemp) wndTemp.close(); var sHTML="<html><head></head>"; sHTML+="<body onBlur=\'self.focus();\'>"; var strParaLine = ""; for (var i = 0; i < (argLen - 2) / 2; i++) { strParaLine = ""; strParaLine += "<a href=\"javascript:"; if (gbBsIE) { strParaLine += "onBlur=null; "; } strParaLine += "opener.location=\'"; strParaLine += fn_arguments[2 * i + 3]; strParaLine += "\';close();\""; strParaLine += strTarget; strParaLine += ">"; strParaLine += fn_arguments[2 * i + 2]; strParaLine += "</a>"; strParaLine += "<br>"; sHTML+=strParaLine; } sHTML+="</body></html>"; wndPopupLinks.document.write(sHTML); wndPopupLinks.document.close(); window.gbInPopupMenu = true; if (!gbBsIE) { wndPopupLinks.focus(); } return false; } if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) || ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) { // Get the place that we will be putting the topic into var strURL = ""; if (isNaN(fn_arguments[2]) || (gbPopupMenuTopicList == null)) { strURL = fn_arguments[3]; } else { strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL; } if (targetDoc != null) { targetDoc.location.href = strURL; } else { if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined") window.open(strURL, fn_arguments[1]); else window.open(strURL); } window.gbInPopupMenu = true; return false; } var strMenu = ""; if (gbBsNS4&&!gbBsNS6) { strMenu = '<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=3 BGCOLOR="#c0c0c0">'; } else { strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0'; if (gbBsMac) { strMenu += ' CELLPADDING=4'; } else { strMenu += ' CELLPADDING=2'; } strMenu += ' BGCOLOR=#c0c0c0>'; } // Add each of the items var i = 2; while (i <= argLen - 1) { strMenu += '<TR><TD><NOBR>' // If the destination is a number then look it up in the topic list if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) { strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '"' + strTarget; } else { strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + gbPopupMenuTopicList[fn_arguments[i]].strURL + '"' + strTarget; } strMenu += ' onclick="PopupMenu_HandleClick(event);"'; strMenu += ' onmouseover="PopupMenu_Over(event);"'; strMenu += ' onmouseout="PopupMenu_Out(event);"'; strMenu += '>'; if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) { strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>'; } else { strMenu += '<SPAN CLASS="PopupNotOver">' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + '</SPAN>'; } strMenu += '</A></DIV></NOBR></TD></TR>'; if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) { i += 2; } else { i += 1; } } strMenu += "</TABLE>"; if (gbBsMac) { // totally hack. because ie5 in mac need something. </TABLE> is one of them. mac is mad. strMenu +="<TABLE></TABLE>"; } var layerPopup = null; var stylePopup = null; var nEventX = 0; var nEventY = 0; var nWindowWidth = 0; if (gbBsIE4 || gbBsOpera7) { layerPopup = getElement("PopupMenu"); layerPopup.innerHTML = strMenu; stylePopup = layerPopup.style; _BSPSGetClientSize(); // Get the position of the item causing the event (relative to its parent) nEventX = window.event.clientX; nEventY = window.event.clientY; if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) { nEventY += document.body.scrollTop + 10; } else { nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20; } stylePopup.top = nEventY; var nPopupWidth = layerPopup.scrollWidth; if (gbBsMac) { nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup. } if (nEventX + nPopupWidth + 20 > gBsClientWidth) { if (gBsClientWidth - nPopupWidth < 5) { stylePopup.left = 5; } else { stylePopup.left = gBsClientWidth - nPopupWidth - 5; } } else { stylePopup.left = nEventX + document.body.scrollLeft + 20; } stylePopup.visibility = "visible"; if (!gOlddocumentClick && document.onclick) gOlddocumentClick = document.onclick; document.onclick = PopupMenu_HandleClick; } else if (gbBsNS6 || gbBsKonqueror3||gbBsSafari) { layerPopup = getElement("PopupMenu"); layerPopup.style.visibility = "hidden"; if (gbBsNS6) { var e = fn_arguments[0]; nEventX = e.pageX; nEventY = e.pageY; } else { nEventX = window.event.clientX; nEventY = window.event.clientY; } _BSPSGetClientSize(); layerPopup.innerHTML = strMenu; if (nEventY + layerPopup.offsetHeight + 20 < window.pageYOffset + gBsClientHeight) { nEventY += 20; } else { nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20; } if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) { if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) { nEventX = 5; } else { nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20; } } else { nEventX += 20; } layerPopup.style.top = nEventY; layerPopup.style.left = nEventX; // set again to avoid the stupid frash in netscape 6. layerPopup.innerHTML = strMenu; layerPopup.style.visibility = "visible"; //window.captureEvents(Event.MOUSEDOWN); if (!gOlddocumentClick && document.onclick) gOlddocumentClick = document.onclick; window.onclick = PopupMenu_HandleClick; } else if (gbBsNS4) { layerPopup = document.layers.PopupMenu; layerPopup.visibility = "hide"; stylePopup = layerPopup.document; stylePopup.write(strMenu); stylePopup.close(); var e = fn_arguments[0]; nEventX = e.pageX; nEventY = e.pageY; _BSPSGetClientSize(); if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) { nEventY += 20; } else { nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20; } layerPopup.top = nEventY; if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) { if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) { nEventX = 5; } else { nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20; } } else { nEventX += 20; } layerPopup.left = nEventX; layerPopup.visibility = "show"; window.captureEvents(Event.MOUSEDOWN); if (!gOlddocumentClick && document.onmousedown) gOlddocumentClick = document.onmousedown; window.onmousedown = PopupMenu_HandleClick; } window.gbInPopupMenu = true; window.gbPopupMenuTimeoutExpired = false; setTimeout("PopupMenu_Timeout();", 100); return false; } function PopupMenu_Timeout() { window.gbPopupMenuTimeoutExpired = true; } function PopupMenu_Over(e) { if (gbBsIE4||gbBsOpera7) e.srcElement.className = "PopupOver"; else if (gbBsNS6) e.target.parentNode.className = "PopupOver"; return; } function PopupMenu_Out(e) { if (gbBsIE4||gbBsOpera7) e.srcElement.className = "PopupNotOver"; else if (gbBsNS6) e.target.parentNode.className = "PopupNotOver"; return; } function PopupMenu_HandleClick(e) { if (window.gbPopupMenuTimeoutExpired) { window.gbInPopupMenu = false; if (gbBsNS4 && !gbBsNS6) { window.releaseEvents(Event.MOUSEDOWN); } var layerPopup = null; if (gbBsNS4&&!gbBsNS6) { layerPopup = document.layers.PopupMenu; layerPopup.visibility = "hide"; } else { layerPopup = getElement("PopupMenu"); layerPopup.style.visibility = "hidden"; } if (gOlddocumentClick) { if (gbBsNS4 && !gbBsNS6) document.onmousedown = gOlddocumentClick; else document.onclick = gOlddocumentClick; } } return; } function BSSCPopup_ClickMac() { if ((!DHTMLPopupSupport()) && (gbBsIE4 || gbBsOpera7)) { var bClickOnAnchor = false; var el; if ((window.event != null) && (window.event.srcElement != null)) { el = window.event.srcElement; while (el != null) { if ((el.tagName == "A") || (el.tagName == "AREA")) { bClickOnAnchor = true; break; } if (el.tagName == "BODY") { break; } el = getParentNode(el); } } if (BSSCPopup_IsPopup()) { if (!bClickOnAnchor) { parent.window.gPopupWindow = null; self.close(); } } else { bClosePopupWindow = true; if ((bClickOnAnchor) && (el.href) && ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1))) { bClosePopupWindow = false; } if (bClosePopupWindow) { if (window.gPopupWindow != null && !window.gPopupWindow.closed ) { window.gPopupWindow.close(); } } } } } function BsPopupOnClick() { if (!gbBsIE4 && !gbBsOpera7) return; BSSCPopup_ClickMac(); } function _BSSCOnError(message) { if(-1 != message.indexOf("denied") || -1 != message.indexOf("Object required")) return true; } //End to support previous relative topics /// Section End - General and relative topics (JavaScript 1.0) /// Section Begin - Popup (JavaScript 1.0) //Begin to support previous popup functions //variables used to isolate the browser type var gBsStyVisShow = null; var gBsStyVisHide = null; var gBsClientWidth = 640; var gBsClientHeight = 480; // here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others. var gBRateH_W = 0.618; // 1.618 Golden cut. var gBMaxXOfParent = 0.8; var gBMaxYOfParent = 0.8; var gBscrollHeight = 16; var gBscrollWidth = 16; var gBpermitXDelta = 3; var gBpermitYDelta = 3; var arrayPopupURL = new Array(); var arrayAbsPopupURL = new Array(); var arrayDirty = new Array(); function setAbsPopupURL(nIndex, strURL) { arrayAbsPopupURL[nIndex] = strURL; } function getAbsPopupURL(nIndex) { if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null; else return arrayAbsPopupURL[nIndex]; } function getPopupURL(nIndex) { if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null; else return arrayPopupURL[nIndex]; } function getPopupID(nIndex) { return gstrPopupID + nIndex; } function getPopupShadowID(nIndex) { return gstrPopupShadowID + nIndex; } function getPopupTopicID(nIndex) { return gstrPopupTopicID + nIndex; } function getPopupIFrameID(nIndex) { return gstrPopupIFrameID + nIndex; } function getPopupIFrameName(nIndex) { return gstrPopupIFrameName + nIndex; } function getPopupTopicStyle(nIndex) { return getElement(getPopupTopicID(nIndex)).style; } function getPopupShadowStyle(nIndex) { return getElement(getPopupShadowID(nIndex)).style; } function getPopupIFrame(nIndex) { if (gbBsNS6) return eval("window.frames['" + getPopupIFrameName(nIndex) + "']"); else return eval("document.frames['" + getPopupIFrameName(nIndex) + "']"); } function getPopupDivStyle(nIndex) { return getElement(getPopupID(nIndex)).style; } function getPopupIFrameStyle(nIndex) { return getElement(getPopupIFrameID(nIndex)).style; } function findDiv(strURL) { for (var i = 0; i < arrayPopupURL.length; i ++ ) { if (arrayPopupURL[i] == strURL) { return i; } } return -1; } var gnToken = -1; function takeToken() { gnToken ++; if (gnToken > 10000) gnToken = 0; return gnToken; } function IsValidToken(nToken) { return (gnToken == nToken); } function addDiv(strURL) { for (var i = 0; i < arrayPopupURL.length; i ++) { if (arrayPopupURL[i] == null) { arrayPopupURL[i] = strURL; return i; } } arrayPopupURL[i] = strURL; arrayDirty[i] = true; return i; } function setDirty() { for (var i = 0; i < arrayPopupURL.length; i ++ ) arrayDirty[i] = true; } function IsDirty(nIndex) { if (nIndex == -1) return true; else if (arrayDirty.length > nIndex) return arrayDirty[nIndex]; else return true; } function hideAll() { for (var i = 0; i < arrayPopupURL.length; i ++ ) { getPopupDivStyle(i).visibility = gBsStyVisHide; getPopupIFrameStyle(i).visibility = gBsStyVisHide; } } function getCurrentPopupIFrame() { for (var i = 0; i < arrayPopupURL.length; i ++) if (getPopupDivStyle(i).visibility == gBsStyVisShow) return getPopupIFrame(i); return null; } function setClear(nIndex) { if (nIndex != -1) arrayDirty[nIndex] = false; } function _BSSCCreatePopupDiv(strURL) { var nIndex = findDiv(strURL); if (nIndex == -1 ) { nIndex = addDiv(strURL); BsPopup_CreateDiv(nIndex); } else { if (IsDirty(nIndex)) { if("object" == typeof(getPopupIFrame(nIndex).document)) getPopupIFrame(nIndex).document.location.href = strURL; } } return nIndex; } //Here is the browser type function _BSPSGetBrowserInfo() { if (gbBsNS4&&!gbBsNS6) { gBsStyVisShow = "show"; gBsStyVisHide = "hide"; } else { gBsStyVisShow = "visible"; gBsStyVisHide = "hidden"; } } _BSPSGetBrowserInfo(); //Get client size info function _BSPSGetClientSize() { if (gbBsNS4||gbBsKonqueror3||gbBsSafari) { gBsClientWidth = innerWidth; gBsClientHeight = innerHeight; } else if (gbBsIE4 || gbBsOpera7) { gBsClientWidth = document.body.clientWidth; gBsClientHeight = document.body.clientHeight; } } var gstrPopupID = 'BSSCPopup'; var gstrPopupShadowID = 'BSSCPopupShadow'; var gstrPopupTopicID = 'BSSCPopupTopic'; var gstrPopupIFrameID = 'BSSCPopupIFrame'; var gstrPopupIFrameName = 'BSSCPopupIFrameName'; var gstrPopupSecondWindowName = 'BSSCPopup'; var gPopupWindow = null; var gnPopupClickX = 0; var gnPopupClickY = 0; var gnPopupScreenClickX = 0; var gnPopupScreenClickY = 0; var gbPopupTimeoutExpired = false; function DHTMLPopupSupport() { if (((gbBsIE4) && (!gbBsMac))||gbBsOpera7|| gbBsNS7) { return true; } return false; } function BSSCPopup_IsPopup() { if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) { return true; } else if ((gbBsNS4 || gbBsIE4 || gbBsOpera7) && (this.name.indexOf(gstrPopupID) != -1)) { return true; } else { return false; } } // If there is a hyperlink in a popup window, display the hyperlink in // the original window. (bsscright) if (BSSCPopup_IsPopup() && !gbBsIE4 && !gbBsOpera7) { document.write("<base target=\"bsscright\">"); } // Local functions. function BsPopup_CreateDiv(nIndex) { if(!DHTMLPopupSupport()) return; // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone. var strPopupDiv = "<DIV ID='" + getPopupID(nIndex) + "' STYLE='position:absolute; top:-100; left:0; z-index:600; visibility:hidden;'>"; strPopupDiv += "<DIV ID='" + getPopupShadowID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0; background-color:#C0C0C0;\"></DIV>"; strPopupDiv += "<DIV ID='" + getPopupTopicID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0; background-color:#FFFFFF;border:1px #000000 outset;\">"; strPopupDiv += "<IFRAME title=\"Popup Window\" ID='" + getPopupIFrameID(nIndex) + "' name='" + getPopupIFrameName(nIndex) + "' src = '" + getPopupURL(nIndex) + "' frameborder=0 scrolling=auto></IFRAME>"; strPopupDiv += "</DIV></DIV>"; var objBody = getElementsByTag(document, "BODY")[0]; if( typeof(objBody) != "object" ) return; insertAdjacentHTML(objBody, "beforeEnd", strPopupDiv); } function handleLoadNS() { if (this.id) { var nIndex = parseInt(this.id.substring(gstrPopupIFrameID.length)); BSSCPopup_PostWork(nIndex); } } function BSSCPopup_PostWork(nIndex) { getPopupDivStyle(nIndex).visibility = gBsStyVisShow; getPopupIFrameStyle(nIndex).visibility =gBsStyVisShow; setClear(nIndex); window.gbPopupTimeoutExpired = true; BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document); if (gbBsNS6) getPopupIFrame(nIndex).document.body.addEventListener("click",BSSCPopupClicked,false); else getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked; if (!gbOrignalOnMouseDown && document.onmousedown) gbOrignalOnMouseDown = document.onmousedown; if (gbBsNS6) document.addEventListener("mousedown", BSSCPopupParentClicked,false); else document.onmousedown = BSSCPopupParentClicked; } function BSSCPopup_Timeout(nIndex, nToken) { if (!IsValidToken(nToken)) return; if (gbBsNS6||((getPopupIFrame(nIndex).document.readyState == "complete") && (getPopupIFrame(nIndex).document.body != null))) { BSSCPopup_PostWork(nIndex); } else { setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100); } } // VH 08/10/00 // do not change target to parent if the href is using javascript function BSSCPopup_ChangeTargettoParent(tagsObject) { var collA = getElementsByTag(tagsObject, "A"); BSSCPopup_ChangeTargettoParent2(collA); var collIMG = getElementsByTag(tagsObject,"IMG"); BSSCPopup_ChangeTargettoParent2(collIMG); } function BSSCPopup_ChangeTargettoParent2(colls) { if (colls != null) { for (var j = 0; j < colls.length; j ++ ) { var strtemp = colls[j].href; if (strtemp) { strtemp = strtemp.toLowerCase(); if (strtemp.indexOf("javascript:") == -1) if (colls[j].target == "") colls[j].target = "_parent"; } } } } function BSPSPopupTopicWinHelp(strURL) { _BSSCPopup(strURL); return; } function _BSSCPopup(strURL, width, height) { var cuswidth = 0; var cusheight = 0; if ("undefined" != typeof(width) && "undefined" != typeof(height)) { cuswidth = width; cusheight= height; } if (DHTMLPopupSupport()) { var nToken = takeToken(); // take token first. var nIndex = _BSSCCreatePopupDiv(strURL); window.gbPopupTimeoutExpired = false; var ntWidth = gBsClientWidth; var ntHeight = gBsClientHeight; _BSPSGetClientSize(); if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) { setDirty(); } if (IsDirty(nIndex)) { if (gbBsMac) { setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight +")", 400); } else { setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100); } } else { MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight); } } else { _BSSCPopup2(strURL, cuswidth, cusheight); } return; } if (gbBsIE55) { var ehlpdhtm_fOldBefureUnload = window.onbeforeunload; var gnBsUnload=0; window.onbeforeunload = window_BUnload; } function window_BUnload() { gnBsUnload++; if (gnBsUnload>1) return; for (var i = 0; i < arrayPopupURL.length; i ++) removeThis(document.all(getPopupID(i))); arrayPopupURL.length = 0; if (ehlpdhtm_fOldBefureUnload) ehlpdhtm_fOldBefureUnload(); } function _BSSCPopup2(strURL, width, height) { if (gbBsOpera6&&gbBsMac) { var wmTemp = window.open(document.location.href, gstrPopupSecondWindowName); wmTemp.close(); setTimeout("_BSSCPopup3(\""+strURL+"\","+width+","+height+");",100); } else _BSSCPopup3(strURL, width, height); } function _BSSCPopup3(strURL, width, height) { if (window.name == gstrPopupSecondWindowName) { window.location = strURL; } else { if (!gbBsMac || !gbBsNS4) { BSSCHidePopupWindow(); } var nX = 0; var nY = 0; var nHeight = 300; var nWidth = 400; if (width > 0 && height > 0) { nHeight = height; nWidth = width; } _BSPSGetClientSize(); nX = window.gnPopupScreenClickX; nY = window.gnPopupScreenClickY; if (nY + nHeight + 40 > screen.availHeight) { nY = screen.availHeight - nHeight - 40; } if (nX + nWidth + 40 > screen.availWidth) { nX = screen.availWidth - nWidth - 40; } // Launch a separate window var strParam="titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes"; if (gbBsNS) { if (gbBsNS6) { strParam += ",Height=" + nHeight + ",Width=" + nWidth; strParam += ",screenX=" + nX + ",screenY=" + nY; strParam += ",dependent=yes"; } else { strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth; strParam += ",screenX=" + nX + ",screenY=" + nY; strParam += ",dependent=yes"; } } else { strParam += ",height=" + nHeight + ",width=" + nWidth; strParam += ",left=" + nX + ",top=" + nY; } if (gbBsSafari) { if (window.gPopupWindow) window.gPopupWindow.close(); window.gPopupWindow = window.open(strURL, "", strParam); window.gPopupWindow.name = gstrPopupSecondWindowName; window.gPopupWindow.moveTo(nX, nY); widnow.gPopupWindow.document.location.reload(); } else { var wmTemp=null; if (gbBsKonqueror3) { if (window.gPopupWindow) window.gPopupWindow.close(); } if (gbBsOpera&&gbBsMac) { wmTemp= window.open(document.location.href, "Temp", strParam); } window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam); if (!gbBsIE) window.gPopupWindow.focus(); if (wmTemp) wmTemp.close(); } if (gbBsNS4) setEventHandle(); else if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) setTimeout("setPopupFocus();", 100); } return; } function setEventHandle() { window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUR); window.gPopupWindow.onclick = NonIEPopup_HandleClick; window.gPopupWindow.onblur = NonIEPopup_HandleBlur; } function setPopupFocus() { window.gPopupWindow.focus(); } function NonIEPopup_HandleBlur(e) { window.gPopupWindow.focus(); } function NonIEPopup_HandleClick(e) { // Because navigator will give the event to the handler before the hyperlink, let's // first route the event to see if we are clicking on a Popup menu in a popup. document.routeEvent(e); // If a popup menu is active then don't do anything with the click if (window.gPopupWindow.gbInPopupMenu) { window.gPopupWindow.captureEvents(Event.CLICK); window.gPopupWindow.onclick = NonIEPopup_HandleClick; return false; } // Close the popup window if(e.target.href) { if(e.target.href.indexOf("javascript:")==-1) { if (e.target.target=="") window.location.href = e.target.href; else window.open(e.target.href, e.target.target); this.close(); } } else this.close(); return false; } function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight) { if (!window.getPopupIFrame(nIndex).document) { _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight); return; } if (!IsValidToken(nToken)) return; if (gbBsNS6) { setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); return; } if ((window.getPopupIFrame(nIndex).document.readyState == "complete") && (window.getPopupIFrame(nIndex).document.body != null)) { if (window.getPopupIFrame(nIndex).document.location.href.indexOf("about:blank") != -1) { // add this check. IE will use about:blank" as the default vaule for Iframe. window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); } else { setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url. BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight); } } else { setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); } } function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight) { if (window.gbPopupTimeoutExpired) return; if (!IsValidToken(nToken)) return; getPopupDivStyle(nIndex).visibility = gBsStyVisHide; getPopupIFrameStyle(nIndex).visibility = gBsStyVisHide; // Determine the width and height for the window _BSPSGetClientSize(); var size = new BSSCSize(0, 0); if (cuswidth <= 0 || cusheight <= 0) BSSCGetContentSize(window.getPopupIFrame(nIndex), size); else { size.x = cuswidth; size.y = cusheight; } // Determine the width and height for the window var nWidth = size.x; var nHeight = size.y; // for small popup size, we should allow any size. // The popup size should be ok if bigger than 0 if (nWidth < 0 || nHeight < 0) return; // there must be something terribly wrong. getPopupDivStyle(nIndex).width = nWidth; getPopupDivStyle(nIndex).height = nHeight; getPopupShadowStyle(nIndex).width = nWidth; getPopupShadowStyle(nIndex).height = nHeight; getPopupTopicStyle(nIndex).width = nWidth; getPopupTopicStyle(nIndex).height = nHeight; if (gbBsIE55) { getPopupShadowStyle(nIndex).width = nWidth + 2; getPopupShadowStyle(nIndex).height = nHeight + 2; getPopupTopicStyle(nIndex).width = nWidth + 2; getPopupTopicStyle(nIndex).height = nHeight + 2; } getPopupIFrameStyle(nIndex).width = nWidth; getPopupIFrameStyle(nIndex).height = nHeight; if (gbBsIE55 || gbBsNS6) { getPopupIFrameStyle(nIndex).top = 0; getPopupIFrameStyle(nIndex).left = 0; } var strURL = getPopupURL(nIndex); if (strURL.indexOf("#") != -1&&gbBsNS6) getPopupIFrame(nIndex).location.reload(); else if (strURL.indexOf("#") != -1||gbBsNS6) getPopupIFrame(nIndex).location.href = strURL; // reload again, this will fix the bookmark misunderstand in IE5. MoveDivAndShow(nIndex, nToken, cuswidth, cusheight); } function getScrollLeft() { if (document.body.scrollLeft) return document.body.scrollLeft; else if (window.pageXOffset) return window.pageXOffset; else return 0; } function getScrollTop() { if (document.body.scrollTop) return document.body.scrollTop; else if (window.pageYOffset) return window.pageYOffset; else return 0; } function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight) { if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again. window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex); setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200); return; } // Determine the position of the window var nClickX = window.gnPopupClickX; var nClickY = window.gnPopupClickY; var nTop = 0; var nLeft = 0; var nWidth = parseInt(getPopupDivStyle(nIndex).width); var nHeight = parseInt(getPopupDivStyle(nIndex).height); if (nClickY + nHeight + 20 < gBsClientHeight + getScrollTop()) { nTop = nClickY + 10; } else { nTop = (getScrollTop() + gBsClientHeight) - nHeight - 20; } if (nClickX + nWidth < gBsClientWidth + getScrollLeft()) { nLeft = nClickX; } else { nLeft = (getScrollLeft() + gBsClientWidth) - nWidth - 8; } if (nTop < getScrollTop()) nTop = getScrollTop() + 1; if (nLeft< getScrollLeft()) nLeft = getScrollLeft() + 1; getPopupDivStyle(nIndex).left = nLeft; getPopupDivStyle(nIndex).top = nTop; // Set the location of the background blocks getPopupShadowStyle(nIndex).left = 6; getPopupShadowStyle(nIndex).top = 6; if (gbBsIE55) { getPopupShadowStyle(nIndex).left = 4; getPopupShadowStyle(nIndex).top = 4; } if (gbBsMac&&gbBsIE4) { // Total hack on the iMac to get the IFrame to position properly getPopupIFrameStyle(nIndex).pixelLeft = 100; getPopupIFrameStyle(nIndex).pixelLeft = 0; // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it getPopupIFrame(nIndex).window.BSSCOnLoad(); } if (gbBsNS6&&IsDirty(nIndex)) getElement(getPopupIFrameID(nIndex)).addEventListener("load", handleLoadNS, false); else BSSCPopup_Timeout(nIndex , nToken ); return; } function BSSCSize(x, y) { this.x = x; this.y = y; } function BSSCGetContentSize(thisWindow, size) { if (!gbBsIE4 && !gbBsOpera7 && !gbBsNS4) return; if ((gbBsMac&&gbBsIE4)||gbBsNS4||gbBsOpera7) { size.x = 320; size.y = 180; return; } // Resize the width until it is wide enough to handle the content // The trick is to start wide and determine when the scrollHeight changes // because then we know a scrollbar is necessary. We can then go back // to the next widest size (for no scrollbar) var ClientRate = gBsClientHeight / gBsClientWidth; var GoldenSize = new BSSCSize(0,0); GoldenSize.x = gBsClientWidth * gBMaxXOfParent; GoldenSize.y = gBsClientHeight *gBMaxYOfParent ; if (ClientRate > gBRateH_W) { GoldenSize.y = GoldenSize.x * gBRateH_W; } else { GoldenSize.x = GoldenSize.y / gBRateH_W; } // Try to using parent specified max x. var x = 0; var maxgoldx = GoldenSize.x; var maxx = gBsClientWidth * gBMaxXOfParent; // This double resize causes the document to re-render (and we need it to) if (!gbBsIE5) thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4. thisWindow.resizeTo(1, 1); thisWindow.resizeTo(1, 1); thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight); var miny = thisWindow.document.body.scrollHeight + gBscrollHeight; if (miny > GoldenSize.y) // the popup does not fix in the parent wanted golden area. so try to expand itself as large as it can { thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight); miny = thisWindow.document.body.scrollHeight + gBscrollHeight; maxy = gBsClientHeight * gBMaxYOfParent; if (miny > maxy) { // the popup must have a scroll, OK let it be. miny = maxy; size.x = maxx; size.y = maxy; thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little. } else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent. size.y = miny; // downsize from maxx , now I try to using binary divide. x = maxx; deltax = -maxx/2; //j = 0; while (true) { x = x + deltax; thisWindow.resizeTo(x, miny); thisWindow.resizeTo(x, miny); diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate; if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter deltax = Math.abs(deltax) /2; else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter deltax = -Math.abs(deltax) /2; else // the y is close enough to wanted. break; if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. break; } size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight; thisWindow.document.body.scroll = 'no'; } } else { if (thisWindow.document.body.scrollWidth > maxgoldx) { size.x = maxx; size.y = miny; thisWindow.document.body.scroll = 'yes'; } else { // downsize from maxgoldx , now I try to using binary divide. x = maxgoldx; deltax = -maxgoldx/2; while (true) { x = x + deltax; thisWindow.resizeTo(x, miny); thisWindow.resizeTo(x, miny); diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W; if (diffy > gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter deltax = Math.abs(deltax) /2; else if (diffy < -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter deltax = -Math.abs(deltax) /2; else // the y is close enough to wanted. break; if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore. break; } size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth; size.y = thisWindow.document.body.scrollHeight ; thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little. thisWindow.resizeTo(size.x, size.y); if (thisWindow.document.body.scrollWidth > size.x) { size.x = thisWindow.document.body.scrollWidth; } if (thisWindow.document.body.scrollHeight > size.y) { size.y = thisWindow.document.body.scrollHeight; } } } thisWindow.resizeTo(size.x, size.y); thisWindow.resizeTo(size.x, size.y); return; } function BSSCPopupParentClicked() { if (!window.gbPopupTimeoutExpired) { return false; } document.onmousedown = gbOrignalOnMouseDown; // Simply hide the popup hideAll(); window.gbPopupTimeoutExpired = false; return true; } function isInsideHyperLink(obj) { if (obj&&obj!=getParentNode(obj)) { if (obj.tagName=="A"||obj.tagName=="IMG") return true; else return isInsideHyperLink(getParentNode(obj)); } else return false; } function BSSCPopupClicked(e) { if (!window.gbPopupTimeoutExpired) { return false; } var popupIFrame = getCurrentPopupIFrame(); if (popupIFrame == null) { return true; } if (gbBsIE4 && (!((popupIFrame.window.event != null) && (popupIFrame.window.event.srcElement != null) && isInsideHyperLink(popupIFrame.window.event.srcElement)))) { document.onmousedown = gbOrignalOnMouseDown; // Simply hide the popup hideAll(); window.gbPopupTimeoutExpired = false; return true; } else if (gbBsNS6 && (!((e != null) && (e.target!= null) && isInsideHyperLink(e.target)))) { document.addEventListener("mousedown", gbOrignalOnMouseDown,false); // Simply hide the popup hideAll(); window.gbPopupTimeoutExpired = false; return true; } } //trace the mouse over's position for hotspot function BSPSPopupOnMouseOver(event) { if (gbBsIE4 || gbBsOpera7||gbBsKonqueror3) { window.gnPopupClickX = event.clientX + getScrollLeft(); window.gnPopupClickY = event.clientY + getScrollTop(); window.gnPopupScreenClickX = event.screenX; window.gnPopupScreenClickY = event.screenY; } else if (gbBsSafari) { window.gnPopupClickX = event.clientX + getScrollLeft(); window.gnPopupClickY = event.clientY + getScrollTop(); window.gnPopupScreenClickX = event.screenX + window.screenX; window.gnPopupScreenClickY = event.screenY + window.screenY; } else if (gbBsNS4) { window.gnPopupClickX = event.pageX - window.pageXOffset; window.gnPopupClickY = event.pageY - window.pageYOffset; window.gnPopupScreenClickX = event.screenX - window.pageXOffset; window.gnPopupScreenClickY = event.screenY - window.pageYOffset; } } function BSSCHidePopupWindow() { if (window.gPopupWindow != null) { if (gbBsNS4) { if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) { window.gPopupWindow.close(); window.gPopupWindow = null; } } } return; } // Add the PopupOnClick to the onclick array. if (typeof(BsscRegisterOnClick) != "undefined") { BsscRegisterOnClick(BsPopupOnClick); } //End to support previous popup functions /// Section End - Popup (JavaScript 1.0) /// Section Begin - Embedded Stub (JavaScript 1.0) function BSSCCreatePopupDiv() { return; } function WritePopupMenuLayer() { if (BsscHasExtJs()) {_WritePopupMenuLayer();} } function BSSCPopup(strURL, width, height) { var re = new RegExp("'", 'g'); strURL = strURL.replace(re, "%27"); if (BsscHasExtJs()) { _BSSCPopup(strURL, width, height); }else{ //Create a temporary window first to ensure the real popup comes up on top var wndTemp = null; if (!gbBsNS3) { wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4"); } // Create the real popup window var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400"); // Close the temporary if (!gbBsNS3) { wndTemp.close(); } else { wndPopup.focus(); } } } var gbWndTemp = null, gbWndPopupLinks = null; var gbstrParaTotal = ""; function PopupMenu_Invoke() { if (typeof(wfRelatedTopic) == 'function' && typeof(IsFlashSupported) == 'function') { if (Number(gsSkinVersion) > 2 && IsFlashSupported()) { return wfRelatedTopic(PopupMenu_Invoke.arguments); } } if (BsscHasExtJs()) { return _PopupMenu_Invoke(PopupMenu_Invoke.arguments); } if (gbBsNS3Before || gbBsIE3Before ) { var argLen = PopupMenu_Invoke.arguments.length; if (argLen < 5) { window.document.location.href = PopupMenu_Invoke.arguments[3]; return false; } gbWndTemp = null; gbWndPopupLinks = null; gbstrParaTotal = ""; for (var i = 0; i < (argLen - 2) / 2; i++) { var strParaLine = ""; if (gbBsNS2){ strParaLine += "<a href=\""; strParaLine += PopupMenu_Invoke.arguments[2 * i + 3]; strParaLine += "\">" strParaLine += PopupMenu_Invoke.arguments[2 * i + 2]; strParaLine += "</a>"; } else { strParaLine += "<a href=\"javascript:"; strParaLine += "gotoUrl(\'"; strParaLine += PopupMenu_Invoke.arguments[2 * i + 3]; strParaLine += "\');\""; if (PopupMenu_Invoke.arguments[1] != '') { strParaLine += " TARGET='" + PopupMenu_Invoke.arguments[1] + "'"; } strParaLine += ">"; strParaLine += PopupMenu_Invoke.arguments[2 * i + 2]; strParaLine += "</a>"; } strParaLine += "<br>"; gbstrParaTotal += strParaLine; } var nHeight = argLen * 15; var nWidth = 400; var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto"; strParam += ",height=" + nHeight + ",width=200,resizable"; //Create a temporary window first to ensure the real popup comes up on top //var wndTemp = null; if (!gbBsNS3) { gbWndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4"); } gbWndPopupLinks = window.open("", "popuplinks", strParam); setTimeout("Wait_PopupMenuReady()", 100); } return true; } function Wait_PopupMenuReady() { if (gbWndPopupLinks != null && "object" == typeof(gbWndPopupLinks.document)) { PopupMenu_InvokeReady(); } else setTimeout("Wait_PopupMenuReady()", 100); } function PopupMenu_InvokeReady() { if (gbWndPopupLinks != null) { gbWndPopupLinks.document.open("text/html"); gbWndPopupLinks.document.write("<html><head>"); if (gbBsNS2) { gbWndPopupLinks.document.write("<base href=\"" + location +"\">"); } else { //YJ: IE301,302 and NS3.x works fine gbWndPopupLinks.document.write("<"); gbWndPopupLinks.document.write("script>"); gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}"); gbWndPopupLinks.document.write("<"); gbWndPopupLinks.document.write("/script>"); } gbWndPopupLinks.document.write("</head><body onBlur=\'self.focus();\'>"); gbWndPopupLinks.document.write(gbstrParaTotal); gbWndPopupLinks.document.write("</body></html>"); gbWndPopupLinks.document.close(); // Close the temporary if (!gbBsNS3 && gbWndTemp != null) { gbWndTemp.close(); }else { gbWndPopupLinks.focus(); } return true; } return false; } /// Section End - Embedded Stub (JavaScript 1.0) //// Segment End -- (JavaScript 1.0) //// Segment Begin -- (JavaScript 1.2) /// Section Begin - kadov DHTM (JavaScript 1.2) //Begin to support extended and dropdown text effects. function kadovIsParagraph(el) { return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false; } function kadovInitEachChild(el) { for(var i=0; i<getChildNodes(el).length; i++) { var child = getChildNodes(el)[i]; if( child.tagName == "SCRIPT" || child.tagName == "!" ) continue; if( child.id != "" ) { // to wipe out the onload effects if (gbBsIE4&&!gbBsMac) { var onLoadEffect = child.style.getAttribute( "x-on-pageload" ); if( (onLoadEffect != null) && (onLoadEffect > "") ) child.style.setAttribute( "x-on-pageload", "" ); } var href = child.getAttribute("href") if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 ) kadovFilePopupInit(child.id); // Init for Popup else if( child.className == "dropspot" || child.className == "expandspot" || child.className == "glossterm" ) kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text else if( child.className == "trigger") kadovInitTrigger(child.id);// Init for Trigger else { kadovInitEffects(child.id);// Init for DHTML effects CEngine.SetOneTargetInitialState( child.id ); } } if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") ) child.start = "mouseover";// to start a AVI file. fileopen doesn't work kadovInitEachChild(child); } } function kadovRetrieveTextInner(el) { var x = ""; if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" )) return x; if( kadovIsParagraph(el) ) { var strNewID = " "; if( el.id != "" ) strNewID += "id=" + el.id + "_NewSpan "; x = "<span" + strNewID + "style='" + el.style.cssText + "'>" + el.innerHTML + "</span>"; } else { for(var i=0; i<getChildNodes(el).length; i++) x += kadovRetrieveTextInner( getChildNodes(el)[i] ); } return x; } function kadovRetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance ) { var nTagOpen = strRawHTML.indexOf( strTagOpen, 0 ); if( nTagOpen < 0 ) return strRawHTML; var nTagClose = strRawHTML.indexOf( strTagClose, nTagOpen); if( nTagClose < nTagOpen ) return strRawHTML; if( typeof(nDistance) == "number" && nDistance > 0 ) if( (nTagClose - nTagOpen) != nDistance ) return strRawHTML; var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ; return kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose ); } function kadovAdjustObjectTag(strRawHTML, nStartPos) {// adjust object tag for related topics HTML control, because innerHTML misses out the item settings //Is there any DTC? var strDTCTagOpen = '<!--Metadata type="DesignerControl" startspan'; var strDTCTagClose = '<!--Metadata type="DesignerControl" endspan-->'; var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos ); if( nDTCTagOpen < 0 ) return strRawHTML; var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen ); if( nDTCTagClose < nDTCTagOpen) return strRawHTML; // no Design Time Controls; //Is the DTC HTML Help Control? var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11'; var strRTObjTagClose = '</OBJECT>'; var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen ); if( nRTObjTagOpen < nDTCTagOpen ) return strRawHTML; var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen ); if( nRTObjTagClose < nRTObjTagOpen ) return strRawHTML; // is not a HTML help control // Is it a related Topics html help control? var strRTObjLabel = '<PARAM NAME=\"Command\" VALUE=\"Related Topics'; if( strRawHTML.indexOf(strRTObjLabel, nRTObjTagOpen) < 0 ) return strRawHTML; // does the commented object tag contain a items parameters var strRTItemsOpen = '<param name="Items" value="'; var strRTItemsClose = '$$**$$" >'; var strRTItemsClose2 = '$$**$$">'; var nRTItemsOpen = strRawHTML.indexOf(strRTItemsOpen, nDTCTagOpen); if( nRTItemsOpen < nDTCTagOpen ) return strRawHTML; var nRTItemsClose = strRawHTML.indexOf(strRTItemsClose, nRTItemsOpen); if (nRTItemsClose == -1) nRTItemsClose = strRawHTML.indexOf(strRTItemsClose2, nRTItemsOpen); if( nRTItemsClose < nRTItemsOpen ) return strRawHTML; // found a items string var strItems = strRawHTML.substring( nRTItemsOpen + strRTItemsOpen.length, nRTItemsClose); if( strItems.length < 1 ) return strRawHTML; // to reconstruct the item(s) param tag(s) var strItemsArray = strItems.split('$$**$$'); if( strItemsArray.length < 1 ) return strRawHTML; var strRunTimeItemParam = ""; for( var i = 0; i < strItemsArray.length; i++ ) { strRunTimeItemParam += '<PARAM NAME="Item' + (i+1); strRunTimeItemParam += '"' + ' VALUE="'; strRunTimeItemParam += strItemsArray[i]; strRunTimeItemParam += '">'; } // to insert the reconstructed item params into runtime object tag var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length); return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length); } function kadovTextPopupOnLoad( el ) { if( typeof(el) == "string" ) el = getElement(el); var src = el.getAttribute( "x-use-popup" ); var bNeedMove=true; if(!src&&el.id) { for (var i=0;i<gPopupData.length;i++) if (gPopupData[i].el==el.id) { src=gPopupData[i].popupId; bNeedMove=false; break; } } if(!src) src = el.style.getAttribute( "x-use-popup" ); if (!src) return 0; var name = src; if( src.substr(0,1) == "#" ) name = src.substr(1, src.length-1); var srcDiv = getElement(name); if( !srcDiv ) return 1; if (bNeedMove) { var type = el.getAttribute( "x-popup-type" ); if (!type) type = el.style.getAttribute("x-popup-type"); if (!type) return 1; var setup = el.getAttribute( "x-tmp-setup" ); var newId = name; if( newId.indexOf( "_tmp") <= 0 ) newId += "_tmp"; if( !setup) { el.setAttribute( "x-tmp-setup", 1 ); if( type == "pulldown" ) { var strAdjust = kadovAdjustObjectTag(srcDiv.innerHTML,0); var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->"); strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>"); //work around the bug in HH.exe that highlight the phrases when use Search tab //this approach is just removing the <FONT...> tag inserted by Microsoft in the runtime strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<FONT color=#", "\">", 52); var strStyle = " style='display:none; position:relative;"; var newDiv = "<div class=droptext id=" + newId + strStyle + "'>" + strCleanHTML + "</div>"; removeThis(srcDiv); // empty the original DIV tag var elParentPra = kadovFindParentParagraph(el); if( elParentPra ) insertAdjacentHTML(elParentPra, "afterEnd", newDiv ); } else if( type == "expanding" ) { var inner = kadovRetrieveTextInner(srcDiv); if( inner == "" ) inner = srcDiv.innerHTML; var strAdjust = kadovAdjustObjectTag(inner,0); var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->"); strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>"); var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext"; var newSpan = "<span class=" + strClassName + " style='display: none;' id=" + newId + "> " + strCleanHTML + "</span>"; removeThis(srcDiv); // empty the original DIV tag insertAdjacentHTML(el, "afterEnd", newSpan ); } } } else { srcDiv.style.display = "none"; } return 0; } function getElementsByTag(obj,sTagName) { if(obj.getElementsByTagName) return obj.getElementsByTagName(sTagName); else if(obj.all) return obj.all.tags(sTagName); return null; } function getElement(sID) { if(document.getElementById) return document.getElementById(sID); else if(document.all) return document.all(sID); return null; } function getParentNode(obj) { if(obj.parentNode) return obj.parentNode; else if(obj.parentElement) return obj.parentElement; return null; } function getChildNodes(obj) { if(obj.childNodes) { var children = new Array(); for (var i = 0; i < obj.childNodes.length; i++) { if (obj.childNodes[i].nodeType == 1) children[children.length] = obj.childNodes[i]; } return children; } else if(obj.children) return obj.children; return null; } function removeThis(obj) { if(obj.parentNode) obj.parentNode.removeChild(obj); else obj.outerHTML=""; } function kadovTextPopup( el ) { if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3 ) return; var bNeedMove=true; if (window.event) window.event.cancelBubble = true; if( typeof(el) == "string" ) el = getElement(el); if (!el||el==window) return; var src = el.getAttribute( "x-use-popup" ); if(!src&&el.id) { for (var i=0;i<gPopupData.length;i++) if (gPopupData[i].el==el.id) { src=gPopupData[i].popupId; bNeedMove=false; break; } } if(!src) src = el.style.getAttribute( "x-use-popup" ); if(!src) return; var name = src; if( src.substr(0,1) == "#" ) if (bNeedMove) name = src.substr(1, src.length-1) + "_tmp"; else name = src.substr(1, src.length-1); var srcDiv = getElement(name); if( !srcDiv ) return; if( srcDiv ) { if( srcDiv.style.display == "" ) srcDiv.style.display = "none"; else { srcDiv.style.display = ""; if( typeof(srcDiv.bInitialized) == "undefined" ) { srcDiv.bInitialized = true; kadovInitEffects(name); kadovInitEachChild(srcDiv); } } } if(gbBsIE4) event.returnValue=false; return; } function kadovFindParentParagraph( el ) { if( typeof(el) == "string" ) el = getElement(el); if( (!el) || el.tagName == "BODY" ) return null; if( kadovIsParagraph(getParentNode(el)) ) return getParentNode(el); else return kadovFindParentParagraph( getParentNode(el) ); } //Begin HTML code invoked function function kadovRegisterEventHandler( obj, strEvent, strEventHandler ) { if( !gbBsIE4 ) return; CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler ); } function textPopupData(el, popupId) { this.el = el; this.popupId = "#"+popupId; } var gPopupData = new Array(); function kadovTextPopupInit( el, popupId) { if (!gbBsIE4 && !gbBsOpera7 && !gbBsSafari && !gbBsNS6 && !gbBsKonqueror3) return; if( typeof(el) == "string" ) { if (popupId) { gPopupData[gPopupData.length]=new textPopupData(el, popupId); } el = getElement(el); } if( el != null ) { CCSSP.RegisterEventHandler( el, "onclick", "kadovTextPopup(\"" + el.id +"\");" ); CCSSP.RegisterEventHandler( window, "onload", "kadovTextPopupOnLoad(\"" + el.id +"\");" ); } } //End HTML code invoked function //End to support extended and dropdown text effects. //Begin to convert iWrite format to RoboEditor Format for DHTML effects function kadovInitTriggersInHead( ) { if( Object.xDelayedInitElements ) { var x = Object.xDelayedInitElements; for(i=0; i<x.length; i++) kadovInitTrigger( x[i] ); } } //Begin HTML code invoked function function kadovFilePopupInit( el ) { if( typeof(el) == "string" ) el = getElement(el); if( el != null ) CCSSP.RegisterEventHandler( el, "onmouseover", "BSPSPopupOnMouseOver(event);" ); } function kadovInitTrigger( element ) { if( !gbBsIE4 ) return; var srcElement = element; if( typeof(srcElement) == "string" ) { srcElement = getElement(element,0); if(srcElement == null) return; } if( !kadovIsParentVisible(srcElement) ) return; var targets = srcElement.getAttribute( "x-targets" ); if (!targets) targets = srcElement.style.getAttribute("x-targets"); if (!targets) return; var arrOneTarget = targets.split( "," ); for( var i = 0; i < arrOneTarget.length; i ++ ) bsscFXInit( element, arrOneTarget[i], null, null, null, null ); } function kadovIsParentVisible( el ) { if( typeof(el) == "string" ) el = getElement(el); if( (!el) || el.tagName == "BODY" ) return true; if( el.style.display == 'none' ) //el.visibility == 'hidden' || return false; else return kadovIsParentVisible( getParentNode(el) ); } function kadovInitEffects( element ) { if( !gbBsIE4 ) return; var srcElement = element; if( typeof(srcElement) == "string" ) { srcElement = getElement(element,0); if(srcElement == null) return; } if( !kadovIsParentVisible(srcElement) ) return; kadovInitEffect( srcElement, "x-on-hover" ); kadovInitEffect( srcElement, "x-on-pageclick" ); kadovInitEffect( srcElement, "x-on-pageload" ); kadovInitEffect( srcElement, "x-on-trigger-1" ); kadovInitEffect( srcElement, "x-on-trigger-2" ); } //End HTML code invoked function function kadovInitEffect( element, prop ) { var values = null; if( element.getAttribute( "currentStyle" ) && element.currentStyle.getAttribute) values = element.currentStyle.getAttribute( prop ); else if (element.style.getAttribute) values = element.style.getAttribute( prop ); if( !values ) return; var functions = new Array(); var nIdx = 0, nStart = 0; var nNext = values.indexOf( "\)", 0); while( nNext >= 0 && nNext < values.length ) { functions[nIdx] = values.substr( nStart, nNext-nStart+1); nStart = nNext + 1; nIdx++; nNext = values.indexOf( "\)", nStart); } for( var i=0; i<functions.length; i++) { var id = element.getAttribute( "id" ); var translatedProp = kadovTranslateProp(prop); var lp = functions[i].indexOf( "(" ); var fnname = functions[i].substring(0, lp); var srcargs = functions[i].substring(lp+1, functions[i].length-1); var nClickTimes = 1; var arrForClickCount = srcargs.split( "," ); for( var j = 0; j < arrForClickCount.length; j++ ) {// to locate and get the "clicks=99" settings var nPageClick = arrForClickCount[j].indexOf("clicks"); if( nPageClick >= 0 ) { nPageClick = arrForClickCount[j].indexOf("="); if( nPageClick > 0 ) { nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1; break; } } } var args = srcargs; if( j < arrForClickCount.length ) {// to strip out the "clicks=99" from the arguments string args = ""; for( var k = 0; k < arrForClickCount.length; k ++ ) { if( k != j ) { args += arrForClickCount[k]; if( k < arrForClickCount.length - 1 ) args += ","; } } } bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes ); } } function kadovTranslateProp( prop ) { switch( prop ) { case "x-on-hover" : return "bsschover"; case "x-on-pageclick" : return "bsscpageclick"; case "x-on-pageload" : return "bsscpageload"; case "x-on-trigger-1" : return "bssctrigger1"; case "x-on-trigger-2" : return "bssctrigger2"; } return null; } //End to convert iWrite format to RoboEditor Format for DHTML effects //Begin the definition of one entry to DHTML effects function bsscFXInit( trigger_ID, target_ID, event_type, action_type, action_setting, event_addional ) { if( (!gbBsWindows && !gbBsSunOS && !(gbBsMac&&gbBsIE5)) || typeof(target_ID) != "string" )//MUST have a target_ID return; // we don't support Navigator yet if( typeof(event_type) == "string" ) event_type = event_type.toLowerCase(); if( typeof(action_type) == "string" ) action_type = action_type.toLowerCase(); if( typeof(action_setting) == "string" ) action_setting = action_setting.toLowerCase(); // to get the target element then add it to the target list var eleTarget = CCSSP.GetObject( target_ID ); if( (eleTarget != null) && (event_type != null) && (action_type != null) ) { CEngine.AddOneTarget( target_ID, eleTarget ); CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional); } // to validate the trigger_ID parameter if( typeof(trigger_ID) == "string" && trigger_ID != "" ) CEngine.BuildTriggerObject( trigger_ID, target_ID ); } //End the definition of one entry to DHTML effects /// Section End - kadov DHTM (JavaScript 1.2) /// Section Begin - CCSSP DHTM (JavaScript 1.2) //Begin JavaScript libary for cross-platform positioning object. function CCSSP(){} // constructor of CCSSP class CCSSP.GetObject = function( obj ) {//convert object name string or reference into a valid object reference if( typeof(obj) == "object" ) return obj; else if( typeof(obj) == "string" && obj != "") { if( gbBsNS4 ) return eval("document." + obj); else return eval("document.all(\"" + obj + "\")"); } else return null; } CCSSP.MoveObjectTo = function(obj, x, y) {//positioning an object at a specific pixel coordinate if( gbBsNS4 ) obj.moveTo(x,y); else { obj.style.pixelLeft = x; obj.style.pixelTop = y; } } CCSSP.MoveObjectBy = function(obj, dx, dy) {//moveing a object by x and/or y pixel if( gbBsNS4 ) obj.moveBy(dx,dy); else { obj.style.pixelLeft += dx; obj.style.pixelTop += dy; } } CCSSP.SetObjectBGColor = function(obj, color) {//set the background color of an object if( gbBsNS4 ) obj.bgColor = color; else obj.style.backgroundColor = color; } CCSSP.ShowObject = function(obj, bShow) {// set the object to be visible or invisible if( gbBsNS4 ) obj.visibility = (bShow == true) ? 'show' : 'hide'; else obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space. } CCSSP.GetObjectLeft = function(obj) {// retrieve the x coordinate of a posionable object if( gbBsNS4 ) return obj.left; else return obj.style.pixelLeft; } CCSSP.GetObjectTop = function(obj) {// retrieve the y coordinate of a posionable object if( gbBsNS4 ) return obj.top; else return obj.style.pixelTop; } CCSSP.GetObjectContainLeft = function(obj) {// retrieve the x coordinate of a posionable object relative to it's parent element if( gbBsNS4 ) return obj.pageX; else { if( obj == document.body ) return obj.clientLeft; else return obj.offsetLeft; } } CCSSP.GetObjectWindowLeft = function(obj) {// retrieve the x coordinate of a posionable object relative to browser window if( gbBsNS4 ) return obj.pageX; else { var nOffsetWindowLeft = 0; for(var element = obj; element; element = element.offsetParent) nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element); return nOffsetWindowLeft; } } CCSSP.GetObjectContainTop = function(obj) {// retrieve the y coordinate of a posionable object relative to it's parent element if( gbBsNS4 ) return obj.pageY; else { if( obj == document.body ) return obj.clientTop; else return obj.offsetTop; } } CCSSP.GetObjectWindowTop = function(obj) {// retrieve the y coordinate of a posionable object relative to browser window if( gbBsNS4 ) return obj.pageY; else { var nOffsetWindowTop = 0; for(var element = obj; element; element = element.offsetParent) nOffsetWindowTop += CCSSP.GetObjectContainTop(element); return nOffsetWindowTop; } } CCSSP.GetObjectHeight = function(obj) {// retrieve the height of a posionable object if( gbBsNS4 ) return obj.clip.height; else return obj.offsetHeight; } CCSSP.GetObjectWidth = function(obj) {// retrieve the width of a posionable object if( gbBsNS4 ) return obj.clip.width; else return obj.offsetWidth; } CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler ) { // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined if (gbBsNS4 && !gbBsNS6) return ; var oldHandler = ""; if (gbBsMac &&gbBsIE4&&!gbBsIE5) { if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown") { //search for <SCRIPT> tag which define the event handler for( var i = 0; i < document.scripts.length; i++ ) { var script = document.scripts[i]; if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName ) { oldHandler = script.innerHTML; break; } } } } else { var oldInlineHandler = srcObj[rawEventName.toLowerCase()]; if( oldInlineHandler != null && typeof(oldInlineHandler) != "undefined") { var functionDefinition = oldInlineHandler.toString(); var bodyStart = functionDefinition.indexOf( "{" ); var bodyEnd = functionDefinition.lastIndexOf( "}" ); if( bodyStart > 0 || bodyEnd > bodyStart ) oldHandler = functionDefinition.substr( bodyStart + 1, bodyEnd - bodyStart - 2 ); } else if( gbBsIE4 ) { //search for <SCRIPT> tag which define the event handler for( var i = 0; i < document.scripts.length; i++ ) { var script = document.scripts[i]; if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName ) { oldHandler = script.innerHTML; break; } } } } if( oldHandler.indexOf(funcHandler) >= 0 ) return;// to prevent register the funtion twice. if( gbBsNS4 ) // only "onload, onresize, onfocus" apply to window {// other raw events will apply to layer var noOn = rawEventName.substring(2, rawEventName.length); if( typeof(noOn) == "string" && noOn.length > 3 ) { if (srcObj.captureEvents) srcObj.captureEvents( Event[noOn.toUpperCase()] ); } } var newHandler = oldHandler; if( newHandler.length == 0 ) newHandler = funcHandler; else newHandler += "; " + funcHandler; srcObj[rawEventName.toLowerCase()] = new Function( newHandler ); } CCSSP.GetWindowHeight = function() {// retrieve the height of available content in browser window if( gbBsNS4 ) return window.innerHeight; else return document.body.clientHeight; } CCSSP.GetWindowBottom = function() {// retrieve the bottom postion of browser window if( gbBsNS4 ) return window.outerHeight + window.pageYOffset; else return document.body.clientHeight + document.body.scrollTop; } CCSSP.GetWindowWidth = function() {// retrieve the width of available content in browser window if( gbBsNS4 ) return window.innerWidth; else return document.body.clientWidth; } CCSSP.GetWindowRight = function() {// retrieve the right postion of browser window if( gbBsNS4 ) return window.outerWidth + window.pageXOffset; else return document.body.clientWidth + document.body.scrollLeft; } CCSSP.TrimString = function( objString, subtrim ) {// to trim the "subtrim" in the beginning and ending of a string object if( typeof(subtrim) != "string" || subtrim == null ) return objString; var strHead = objString.substring(0, 1); var strRear = objString.substring(objString.length-1, objString.length); if( strHead != subtrim && strRear != subtrim ) return objString; var spacePos = objString.indexOf(subtrim); if( spacePos < 0 ) return objString; else if( spacePos == objString.length - 1 ) return objString.substring(0, spacePos); else { var newString = objString.substring( spacePos + 1, objString.length); return CCSSP.TrimString( newString, subtrim ); } } CCSSP.TrimSpace = function( objString ) { var Trim1 = CCSSP.TrimString( objString, " "); return CCSSP.TrimString( Trim1, "\'"); } CCSSP.GetEventElement = function( navEventObject ) {// to get the element who fired the current event if(gbBsNS4) if (gbBsNS6) return null; else navEventObject.target; else return event.srcElement; } CCSSP.PrepareFilter = function( Obj ) {//to prepare for making the filter work Obj.style.filter = ""; if( Obj.style.width != "" || Obj.style.height != "" || Obj.style.position == "absolute" ) return; Obj.style.height = CCSSP.GetObjectHeight(Obj); } CCSSP.IsDescendant = function( progenitor, progeny ) { if( typeof(progeny) == "undefined" || progeny == null ) return false; else if( progeny == progenitor ) return true; else if( progeny.id == progenitor.id ) return true; else if( getParentNode(progeny) == getParentNode(progenitor)) return false; else return CCSSP.IsDescendant( progenitor, getParentNode(progeny)); } CCSSP.IsTextTag = function( Obj ) { if( typeof( Obj.tagName ) == "undefined" ) return false; return( Obj.tagName.indexOf("H") == 0 || Obj.tagName == "P" || Obj.tagName == "FONT" || Obj.tagName == "SPAN" ); } //End JavaScript libary for cross-platform positioning object. /// Section End - CCSSP DHTM (JavaScript 1.2) /// Section Begin - CCSSP DHTM 1 (JavaScript 1.2) //Begin the definition of class CTrigger function CTrigger( TriggerElement ) { // object : the trigger element. Never be null. this.eleTrigger = TriggerElement; // number : the click counter number: only 3 values: 0,1,2; this.nCounter = 0; //object as associative array of string: // the associate target ID strings; one element at least. this.objStrTarget = new Object(); this.eleTrigger.style.cursor = "hand"; if( this.eleTrigger.tagName == "AREA" && this.eleTrigger.getAttribute("href") == "" ) this.eleTrigger.setAttribute("href", "#") // to make a hand cursor for image map } CTrigger.prototype.AddTargetID = function( strTargetID ) {// add one target ID string to the objStrTarget if( typeof(strTargetID) != "string" ) return ; if( typeof(this.objStrTarget[strTargetID]) != "string" ) this.objStrTarget[strTargetID] = strTargetID; } CTrigger.prototype.OnTriggerClick = function() {// to activate all asociated target var strEventType = ( (this.nCounter++)% 2 == 0 ) ? "bssctrigger1" : "bssctrigger2"; // to enumerate associative target element's ID string for( var strTargetID in this.objStrTarget ) CEngine.SendEventToOneTarget( strTargetID, strEventType ); } //End the definition of class CTrigger //Begin the definition of class CTarget function CTarget( TargetElement ) { // object : the target element. Never be null. this.eleTarget = TargetElement; this.objManager = new Object(); // object: the event manager } CTarget.nPageClickCounter = 0;// static class property. CTarget.prototype.GetAgencyObject = function(str_action_type,action_setting ) {// return the action agency ( effect )object's refernece switch( str_action_type ) { case "show":return new CAgencyShow( this.eleTarget, true ) ; case "hide":return new CAgencyShow( this.eleTarget, false ) ; case "flyin" : return new CAgencyFly(this.eleTarget, action_setting, true); case "flyout" : return new CAgencyFly(this.eleTarget, action_setting, false); case "spiralin" : return new CAgencySpiral(this.eleTarget, action_setting, true); case "spiralout" : return new CAgencySpiral(this.eleTarget, action_setting, false); case "zoomin" : return new CAgencyZoom(this.eleTarget, action_setting, true); case "zoomout" : return new CAgencyZoom(this.eleTarget, action_setting, false); case "elastic" : return new CAgencyElastic(this.eleTarget, action_setting); case "fadein" : return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, true) : null; case "fadeout" : return (gbBsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, false) : null; case "rockrollstatic" : case "rockroll" : return (gbBsIE4)? new CAgencyWave(this.eleTarget, action_setting, false) : null; case "glow": return (gbBsIE4)? new CAgencyGlow(this.eleTarget,action_setting) : null; case "dropshadow": return (gbBsIE4)? new CAgencyDropShadow(this.eleTarget,action_setting) : null; case "transition" : return (gbBsIE4)? new CAgencyRevealTrans(this.eleTarget,action_setting) : null; case "blur" : return (gbBsIE4)? new CAgencyBlur(this.eleTarget,action_setting) : null; case "fliph" : // all these 4 do NOT need any parameters case "flipv" : case "invert": case "gray" : return (gbBsIE4)? new CAgencyChangeFilter(this.eleTarget, str_action_type) : null; case "fontchange": // the effects below change the style on the fly, so won't work in Navigator return (gbBsIE4)? new CAgencyFontChange(this.eleTarget,action_setting) : null; case "boderchange": case "stylechange": return (gbBsIE4)? new CAgencyChangeStyle(this.eleTarget,action_setting) : null; default: return null; } } CTarget.prototype.SetEventManager = function( one_event_type,str_action_type,action_setting,event_additional) {// to set the event manager with specified action if( typeof( one_event_type ) != "string" || typeof( str_action_type ) != "string"|| typeof( action_setting ) != "string" ) return false; if( typeof(this.objManager[one_event_type]) == "undefined" ) { this.objManager[one_event_type] = new Object(); this.objManager[one_event_type].length = 0; } var eventAgency = this.GetAgencyObject(str_action_type,action_setting); if( eventAgency != null ) { var ct = this.objManager[one_event_type].length ++; this.objManager[one_event_type][ct] = eventAgency; if( one_event_type == "bsscpageclick" ) {// to deal with the "number of pageclick" stuff if( typeof(event_additional) == "number" ) this.objManager[one_event_type][ct].nPageClick = event_additional; else // set the default number this.objManager[one_event_type][ct].nPageClick = 1; if( (typeof(this.objManager.nMinPageClickIndex) == "undefined") || (this.objManager[one_event_type][ct].nPageClick < this.objManager[one_event_type][this.objManager.nMinPageClickIndex].nPageClick) ) this.objManager.nMinPageClickIndex = ct; } //hide the object blindly,SetState function will take care of the final correct state if( ((one_event_type == "bsscpageclick") && (this.objManager[one_event_type][ct].nPageClick == 1)) || one_event_type == "bsscpageload" || one_event_type == "bssctrigger1" ) CCSSP.ShowObject( this.eleTarget, false ); if( one_event_type == "bssctrigger1" || one_event_type == "bssctrigger2" ) if( typeof( this.strTriggerEvent ) == "undefined" ) this.strTriggerEvent = ( one_event_type == "bssctrigger1" ) ? "bssctrigger2" : "bssctrigger1"; return true; } return false; } CTarget.prototype.OnEvent = function( strBsscEvent ) {// response to the event ( bssc format ) if( typeof(this.objManager[strBsscEvent]) == "object" ) { // to get the event agency from the event manager var eventAgency = this.objManager[strBsscEvent]; for( var i = 0; i < eventAgency.length; i++ ) { if( strBsscEvent == "bsscpageclick" && eventAgency[i].nPageClick != CTarget.nPageClickCounter ) continue; else if( strBsscEvent == "bsschover" && event.type == "mouseout" ) eventAgency[i].EndEffect(); else // to invoke the unified function in effect object eventAgency[i].UpdateEffect(); } } } CTarget.prototype.SetState = function( strBsscEvent ) { if( typeof(this.objManager[strBsscEvent]) != "object" ) return false; // to get the event agency from the event manager var eventAgency = this.objManager[strBsscEvent]; if( strBsscEvent == "bsscpageclick" ) {// we only set the initial state for the minium number of pageclick eventAgency[this.objManager.nMinPageClickIndex].PrepareEffect(); return true; } else { for( var i = 0; i < eventAgency.length; i++ ) eventAgency[i].PrepareEffect(); // to invoke the unified function in effect object if( i > 0 ) return true; else return false; } } //End the definition of class CTarget //Begin the definition of CEngine class function CEngine(){}// all properities are going be "class" properities // object : as associative array of trigger objects CEngine.objTrigger = new Object(); // object : as associative array of target objects CEngine.objTarget = new Object(); // Array : each element is a CAgencyXXX animation object CEngine.arrAnimation = new Array(); CEngine.PerformAnimation = function( nIndex ) {// animation : update effects function CEngine.arrAnimation[nIndex].UpdateEffect(); } CEngine.AddOneTrigger = function(TriggerID,TriggerElement) {// add one Trigger object into the trigger array if( typeof(TriggerID) != "string" || TriggerElement == null || typeof(TriggerElement) != "object" ) return; if( typeof(CEngine.objTrigger[TriggerID] ) != "object" ) CEngine.objTrigger[TriggerID] = new CTrigger(TriggerElement); } CEngine.AddOneTarget = function(TargetID, TargetElement) {// add one Target object into the target array if( typeof(TargetID) != "string" || TargetElement == null || typeof(TargetElement) != "object" ) return; if( typeof(CEngine.objTarget[TargetID]) != "object" ) CEngine.objTarget[TargetID] = new CTarget( TargetElement ); } CEngine.SendEventToOneTarget = function(strTargetID, strBsscEvent ) {// to activate one target object if( typeof(CEngine.objTarget[strTargetID]) == "object" ) { if( strBsscEvent == "bssctrigger1" || strBsscEvent == "bssctrigger2" ) {//now, the "bssctrigger1" and "bssctrigger2" work like a toggle if( strBsscEvent == CEngine.objTarget[strTargetID].strTriggerEvent ) strBsscEvent = (strBsscEvent == "bssctrigger1") ? "bssctrigger2" : "bssctrigger1"; CEngine.objTarget[strTargetID].strTriggerEvent = strBsscEvent; } CEngine.objTarget[strTargetID].OnEvent( strBsscEvent ); } } CEngine.SendEventToAllTarget = function( strBsscEvent ) { //to activate all target associative to the BSSC event for( var strTargetID in CEngine.objTarget ) //to enumerate all target CEngine.SendEventToOneTarget( strTargetID, strBsscEvent ); } CEngine.SetOneTargetInitialState = function( strTargetID ) {// only invoked after ALL effects for the target have been set if( typeof(CEngine.objTarget[strTargetID]) == "object" ) {// to get target object var objTarget = CEngine.objTarget[strTargetID]; if( objTarget.SetState( "bsscpageload" ) == false ) { objTarget.SetState( "bsscpageclick" ); objTarget.SetState( "bssctrigger1" ); } } } CEngine.AdjustPageClickCounter = function() { var nAdjustedClickCounter = CTarget.nPageClickCounter; var bAdjusted = false; for( var strTargetID in CEngine.objTarget ) //to enumerate all target {// try to find the minum pageCliclConter greater than CTarget.nPageClickCounter var objEventPageClick = CEngine.objTarget[strTargetID].objManager.bsscpageclick; if( objEventPageClick != null ) { for( var i = 0; i < objEventPageClick.length; i++ ) { var nOtherPageClick = objEventPageClick[i].nPageClick; if( nOtherPageClick == CTarget.nPageClickCounter ) return; if( nOtherPageClick > CTarget.nPageClickCounter ) { if( !bAdjusted ) { nAdjustedClickCounter = nOtherPageClick; bAdjusted = true; } else if( nOtherPageClick < nAdjustedClickCounter ) nAdjustedClickCounter = nOtherPageClick; } } } } CTarget.nPageClickCounter = nAdjustedClickCounter; } CEngine.OnPageLoad = function() { // first, to set all target's initial state for( var strTargetID in CEngine.objTarget ) CEngine.SetOneTargetInitialState( strTargetID ); // to invoke all target's onpageload handler CEngine.SendEventToAllTarget( "bsscpageload" ); } CEngine.OnPageClick = function() { // to invoke all target's onpageclick handler var src = CCSSP.GetEventElement( arguments[0] ); if( src == null ) return; var objClickedTrigger = null; for( var strTriggerID in CEngine.objTrigger ) { // to detect which trigger is clicked if( CCSSP.IsDescendant( CEngine.objTrigger[strTriggerID].eleTrigger,src) ) { objClickedTrigger = CEngine.objTrigger[strTriggerID]; break; } } if( objClickedTrigger != null) // the clicked trigger found objClickedTrigger.OnTriggerClick(); else // no trigger is clicked { // to send PageClick event to all target CTarget.nPageClickCounter++; CEngine.AdjustPageClickCounter(); CEngine.SendEventToAllTarget( "bsscpageclick" ); } } CEngine.OnMouseOver = function() { // to invoke all target's onpageload handler var src = CCSSP.GetEventElement( arguments[0] ); if( src == null ) return; var strHoveredTargetID = null; for( var strTargetID in CEngine.objTarget ) { // to detect which Target is hovering on if( CCSSP.IsDescendant( CEngine.objTarget[strTargetID].eleTarget, src ) ) { strHoveredTargetID = strTargetID; break; } } if( strHoveredTargetID != null ) // the hovered target found CEngine.SendEventToOneTarget( strHoveredTargetID, "bsschover" ); } CEngine.BuildTargetObject = function(target_ID,event_type,action_type, action_setting, event_additional) {// to build target object // to get the target object if( typeof( CEngine.objTarget[target_ID] ) != "object" ) return false;// the engine's AddOneTarget function might have failed. var TargetObject = CEngine.objTarget[target_ID]; // to prepare the parameters for the event manager var arrEvent = event_type.split("|"); // to split the combined event_type string var arrAction = action_type.split("|");//to split the combined action_type string for( var trim = 0; trim < arrEvent.length; trim++ ) arrEvent[trim] = CCSSP.TrimSpace(arrEvent[trim]); for( trim = 0; trim < arrAction.length; trim++ ) arrAction[trim] = CCSSP.TrimSpace(arrAction[trim]); var arrSetting = new Array(); if( typeof(action_setting) == "string" ) arrSetting = action_setting.split("|");// to split the combined action_setting string // to calibrate the arrays for( var i = arrSetting.length; i < arrAction.length; i++ ) { if( typeof(arrSetting[i]) != "string" ) arrSetting[i] = ""; } // to prepare for dealing with the absolute posioning element TargetObject.eleTarget.ABSX = CCSSP.GetObjectLeft( TargetObject.eleTarget ); TargetObject.eleTarget.ABSY = CCSSP.GetObjectTop( TargetObject.eleTarget ); if( arrEvent.length > 1 ) {// if event is combined, it must be : "bssctrigger1 | bssctrigger2" if( arrAction.length != 2 ) return false; // if event is combined, there must be 2 actions for( i = 0 ; i < 2; i++ ) { if( TargetObject.SetEventManager(arrEvent[i], arrAction[i], arrSetting[i], event_additional) == false ) return false; // the event manager has not been set up } } else // the event_type string is not combined { for( i = 0 ; i < arrAction.length; i++ ) { TargetObject.SetEventManager(event_type, arrAction[i], arrSetting[i], event_additional); // to validate the event manager if( typeof(TargetObject.objManager[event_type]) != "object" || typeof(TargetObject.objManager[event_type][i]) != "object" ) return false; // the event manager has not been set up } } return true; } CEngine.BuildTriggerObject = function(trigger_ID, target_ID) {// to build the trigger object var arrTrigger = trigger_ID.split("|"); // to split the combined trigger_ID string for( var i = 0; i < arrTrigger.length; i ++ ) {// to get the trigger element then add it to the trigger list arrTrigger[i] = CCSSP.TrimSpace( arrTrigger[i] ); var eleTrigger = CCSSP.GetObject( arrTrigger[i] ); if( eleTrigger == null ) continue; // the trigger_ID string in the HTML code maybe wrong CEngine.AddOneTrigger( arrTrigger[i], eleTrigger ); // to get the target object if( typeof( this.objTrigger[arrTrigger[i]] ) != "object" ) continue;// the engine's AddOneTarget function might have failed. CEngine.objTrigger[arrTrigger[i]].AddTargetID( target_ID ); } } //End the definition of CEngine class /// Section End - CCSSP DHTM 1 (JavaScript 1.2) /// Section Begin - CCSSP DHTM 2 (JavaScript 1.2) //Begin the definition of CAgencyXXXX classes //Begin of the CAgencyShow definition function CAgencyShow( element, bIsShow ) { this.ele = element; this.bIsShow = bIsShow; } CAgencyShow.prototype.PrepareEffect = function() { CCSSP.ShowObject( this.ele, !this.bIsShow ); } CAgencyShow.prototype.UpdateEffect = function() { CCSSP.ShowObject( this.ele, this.bIsShow ); } CAgencyShow.prototype.EndEffect = function() { CCSSP.ShowObject( this.ele, !this.bIsShow ); } // End of the CAgencyShow definition // Begin of CAgencyFly definition function CAgencyFly( element, settings, bIsIn ) { this.ele = element; this.bIsIn = bIsIn; this.duration = 1000; // default this.direction = "right"; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "speed" : this.duration = 100000/arrOneSet[1]; break; case "direction" : this.direction = arrOneSet[1]; break; } } if( gbBsIE5 && this.ele.style.position != "absolute" ) this.ele.style.position = "relative"; this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencyFly.prototype.PrepareEffect = function() { CCSSP.ShowObject(this.ele, !this.bIsIn ); } CAgencyFly.prototype.UpdateEffect = function() { if( this.timer == null ) this.ResetParameters(); var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) this.EndEffect(); else { var newX = this.startX*(1.0-percent) + this.finalX*percent; var newY = this.startY*(1.0-percent) + this.finalY*percent; CCSSP.MoveObjectTo(this.ele, newX, newY); if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 ); } } CAgencyFly.prototype.EndEffect = function() { clearInterval( this.timer ); this.timer = null; if( this.bIsIn ) // FlyIn CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY); else // FlyOut CCSSP.MoveObjectTo(this.ele, this.startX, this.startY); CCSSP.ShowObject(this.ele, this.bIsIn ); } CAgencyFly.prototype.ResetParameters = function() { this.PrepareEffect(); CCSSP.ShowObject(this.ele, true ); this.startX = 0; this.startY = 0; this.finalX = 0; this.finalY = 0; var offsetLeft = CCSSP.GetObjectWindowLeft(this.ele) + this.ele.offsetWidth; var offsetTop = CCSSP.GetObjectWindowTop(this.ele) + this.ele.offsetHeight; var offsetRight = CCSSP.GetWindowRight(); var offsetBottom = CCSSP.GetWindowBottom(); if( this.bIsIn ) { // FlyIn this.finalX = this.ele.ABSX; this.finalY = this.ele.ABSY; switch( this.direction ) { case "right": this.startX = offsetRight; this.startY = this.finalY; break; case "left": this.startX = -offsetLeft; this.startY = this.finalY; break; case "down": this.startY = offsetBottom; this.startX = this.finalX; break; case "up": this.startY = -offsetTop; this.startX = this.finalX; break; case "downright": this.startX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight; this.startY = this.startX; break; case "upright": this.startX = (offsetTop < offsetRight)? offsetTop : offsetRight; this.startY = -this.startX; break; case "upleft": this.startX = -((offsetTop < offsetRight)? offsetTop : offsetRight); this.startY = this.startX; break; case "downleft": this.startX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight); this.startY = -this.startX; break; } } else { // FlyOut this.startX = this.ele.ABSX; this.startY = this.ele.ABSY; switch( this.direction ) { case "right": this.finalX = offsetRight; this.finalY = this.startY; break; case "left": this.finalX = -offsetLeft; this.finalY = this.startY; break; case "down": this.finalY = offsetBottom; this.finalX = this.startX; break; case "up": this.finalY = -offsetTop; this.finalX = this.startX; break; case "downright": this.finalX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight; this.finalY = this.finalX; break; case "upright": this.finalX = (offsetTop < offsetRight)? offsetTop : offsetRight; this.finalY = -this.finalX; break; case "upleft": this.finalX = -((offsetTop < offsetRight)? offsetTop : offsetRight); this.finalY = this.finalX; break; case "downleft": this.finalX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight); this.finalY = -this.finalX; break; } } CCSSP.MoveObjectTo(this.ele, this.startX, this.startY); this.startTime = (new Date()).getTime(); } // End of the CAgencyFly definition // Begin of CAgencySpiral function CAgencySpiral( element, settings, bIsIn ) { this.ele = element; this.bIsIn = bIsIn; this.duration = 1000; // default var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "speed" : this.duration = 100000/arrOneSet[1]; break; } } if( gbBsIE5 && this.ele.style.position != "absolute" ) this.ele.style.position = "relative"; this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencySpiral.prototype.PrepareEffect = function() { CCSSP.ShowObject(this.ele, !this.bIsIn ); } CAgencySpiral.prototype.UpdateEffect = function() { if( this.timer == null ) this.ResetParameters(); var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) this.EndEffect(); else { var rf = (this.bIsIn)? (1.0 - percent) : percent; var t = (1.0-rf) * 4.0 * Math.PI var rxP = (this.bIsIn)? this.startX : this.finalX; var ryP = (this.bIsIn)? this.startY : this.finalY; var rx = (Math.abs(rxP) < 200) ? Math.abs(rxP) : 200; var ry = (Math.abs(ryP) < 200) ? Math.abs(ryP) : 200; var newX = Math.ceil(-rf*Math.cos(t)*rx) + this.ele.ABSX; var newY = Math.ceil(-rf*Math.sin(t)*ry) + this.ele.ABSY; CCSSP.MoveObjectTo(this.ele, newX, newY); if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 ); } } CAgencySpiral.prototype.EndEffect = function() { clearInterval( this.timer ); this.timer = null; if( this.bIsIn ) // In CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY); else // Out CCSSP.MoveObjectTo(this.ele, this.startX, this.startY); CCSSP.ShowObject(this.ele, this.bIsIn ); } CAgencySpiral.prototype.ResetParameters = function() { this.PrepareEffect(); CCSSP.ShowObject(this.ele, true ); this.startX = (this.bIsIn)? CCSSP.GetWindowRight() : this.ele.ABSX; this.startY = (this.bIsIn)? CCSSP.GetWindowBottom() : this.ele.ABSY; this.finalX = (this.bIsIn)? this.ele.ABSX : CCSSP.GetWindowRight(); this.finalY = (this.bIsIn)? this.ele.ABSY : CCSSP.GetWindowBottom(); CCSSP.MoveObjectTo(this.ele, this.startX, this.startY); this.startTime = (new Date()).getTime(); } // End of CAgencySpiral // Begin of CAgencyElastic function CAgencyElastic( element, settings) { this.ele = element; this.duration = 1000; // default this.direction = "right"; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "speed" : this.duration = 100000/arrOneSet[1]; break; case "direction" : this.direction = arrOneSet[1]; break; } } if( gbBsIE5 && this.ele.style.position != "absolute" ) this.ele.style.position = "relative"; this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencyElastic.prototype.PrepareEffect = function() { CCSSP.ShowObject(this.ele, false ); } CAgencyElastic.prototype.UpdateEffect = function() { if( this.timer == null ) this.ResetParameters(); var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) this.EndEffect(); else { var newX = this.startX; var newY = this.startY; var rf = Math.exp(-percent*3); var t = percent * 1.5 * Math.PI var rx = (Math.abs(this.startX) > Math.abs(this.startY)) ? this.startX : this.startY; switch (this.direction ) { case "left": case "right" : newX = rf*Math.cos(t)*rx + this.ele.ABSX; break; case "up": case "down" : newY = rf*Math.cos(t)*rx + this.ele.ABSX; break; } CCSSP.MoveObjectTo(this.ele, newX, newY); if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 ); } } CAgencyElastic.prototype.EndEffect = function() { CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY); clearInterval( this.timer ); this.timer = null; } CAgencyElastic.prototype.ResetParameters = function() { CCSSP.ShowObject(this.ele, true ); this.startX = this.ele.ABSX; this.finalX = this.ele.ABSX; this.startY = this.ele.ABSY; this.finalY = this.ele.ABSY; switch (this.direction) { case "left": this.startX = -this.ele.offsetWidth; break; case "right": this.startX = this.ele.offsetWidth; break; case "up": this.startY = -this.ele.offsetHeight;break; case "down": this.startY = this.ele.offsetHeight; break; } CCSSP.MoveObjectTo(this.ele, this.startX, this.startY); this.startTime = (new Date()).getTime(); } // End of CAgencyElastic // Begin of CAgencyZoom function CAgencyZoom( element, settings, bIsIn) { this.ele = element; this.duration = 1000; // default var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "speed" : this.duration = 100000/arrOneSet[1]; break; } } this.bIsIn = bIsIn; this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencyZoom.prototype.PrepareEffect = function() { CCSSP.ShowObject(this.ele, false); } CAgencyZoom.prototype.UpdateEffect = function() { if( this.timer == null ) this.ResetParameters(); var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) this.EndEffect(); else { var nFactorIn = Math.ceil(50+50*percent); var nFactorOut = Math.ceil(100+200*(1-percent)); var AlterFontsize = ((this.bIsIn)? nFactorIn : nFactorOut) + "%"; var AlterFactor = ((this.bIsIn)? nFactorIn : nFactorOut) / 100; this.UpdateEffectAllChildren(this.ele, AlterFontsize, AlterFactor); for(var index = 0; index < this.ele.all.length; index++) this.UpdateEffectAllChildren(this.ele.all[index], AlterFontsize, AlterFactor); if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 ); } } CAgencyZoom.prototype.UpdateEffectAllChildren = function(child, FontSize, Factor) { if( CCSSP.IsTextTag(child) ) child.style.fontSize = FontSize; else { if( typeof(child.orgWidth) == "number" ) child.style.width = Factor * child.orgWidth; if( typeof(child.orgHeight) == "number" ) child.style.height = Factor * child.orgHeight; } } CAgencyZoom.prototype.EndEffect = function() { this.EndEffectAllChildren(this.ele); for(var index = 0; index < this.ele.all.length; index++) this.EndEffectAllChildren(this.ele.all[index]); clearInterval( this.timer ); this.timer = null; } CAgencyZoom.prototype.EndEffectAllChildren = function( child ) { if( CCSSP.IsTextTag(child) ) child.style.fontSize = child.orgFontSize; else { if( typeof(child.intactWidth) != "undefined" ) { child.width = child.intactWidth; child.height = child.intactHeight; } else if( typeof(child.style.intactPixelWidth) != "undefined" ) { child.style.pixelWidth = child.style.intactPixelWidth; child.style.pixelHeight = child.style.intactPixelHeight; } } } CAgencyZoom.prototype.ResetParameters = function() { this.PrepareEffect(); this.ResetParametersAllChildren( this.ele ); for(var index = 0; index < this.ele.all.length; index++) this.ResetParametersAllChildren(this.ele.all[index]); this.startTime = (new Date()).getTime(); } CAgencyZoom.prototype.ResetParametersAllChildren = function( child ) { CCSSP.ShowObject(child, true ); if( (child.tagName == "DIV") && (getParentNode(child).tagName == "TD") ) child.width = "100%";// if the div is inside a cell of table, we need the this hack if( CCSSP.IsTextTag(child) ) child.orgFontSize = child.style.fontSize; else { if( child.width > "" || child.height > "" ) { child.orgWidth = child.intactWidth = child.width; child.orgHeight = child.intactHeight = child.height; } else if( ( typeof(child.orgWidth) != "number" ) && (typeof(child.orgHeight) != "number") ) { child.orgWidth = child.style.intactPixelWidth = child.style.pixelWidth; child.orgHeight = child.style.intactPixelHeight = child.style.pixelHeight; } } } // End of CAgencyZoom //// the following effects will use IE's exclusive "filter" function //// // Begin of CAgencyAlpha definition function CAgencyAlpha( element, settings, bIsIn ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; this.bIsIn = bIsIn; // to set the default value this.startOpacity = (this.bIsIn) ? 0 : 100; this.endOpacity = (this.bIsIn) ? 100 : 0; this.duration = 1000; // default var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "speed" : this.duration = 100000/arrOneSet[1]; break; } } this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencyAlpha.prototype.PrepareEffect = function() {// to set the visual filter function // the visual filter ONLY work when set by "Width and Height" or // absolute position for DIV, SPAN and normal tag ( such as p ) // but, "absolute" cause the following elements overlap, so: CCSSP.PrepareFilter( this.ele ); CCSSP.ShowObject(this.ele, !this.bIsIn ); } CAgencyAlpha.prototype.UpdateEffect = function() {// to set the visual filter function if( this.timer == null ) this.ResetParameters(); if( typeof(this.ele.filters.alpha) != "object" ) { this.EndEffect(); return; } var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) this.EndEffect(); else if( typeof(this.ele.filters.alpha) == "object" ) { this.ele.filters.alpha.opacity = this.startOpacity*(1.0-percent) + this.endOpacity*percent; if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 ); } } CAgencyAlpha.prototype.EndEffect = function() {// to remove the visual filter function clearInterval( this.timer ); this.timer = null; this.ele.style.filter = ""; CCSSP.ShowObject(this.ele, this.bIsIn ); } CAgencyAlpha.prototype.ResetParameters = function() { this.PrepareEffect(); CCSSP.ShowObject(this.ele, true ); this.ele.style.filter = "alpha(opacity=" + this.startOpacity + ")"; this.startTime = (new Date()).getTime(); } // End of the CAgencyAlpha definition // Begin of CAgencyWave definition function CAgencyWave( element, settings ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; this.duration = 0; // default this.strength = 10; this.freq = 1; this.lightstrength = 1; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "duration" : this.duration = 100000/arrOneSet[1]; break; case "strength" : this.strength = arrOneSet[1]; break; case "freq" : this.freq = arrOneSet[1]; break; case "lightstrength" : this.lightstrength = arrOneSet[1]; break; } } this.timer = null; this.aniIndex = CEngine.arrAnimation.length; CEngine.arrAnimation[this.aniIndex] = this; } CAgencyWave.prototype.PrepareEffect = function() {// to set the visual filter function CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject(this.ele, true ); } CAgencyWave.prototype.UpdateEffect = function() {// to set the visual filter function if( this.timer == null ) this.ResetParameters(); if( typeof(this.ele.filters.wave) != "object" ) { this.EndEffect(); return; } if( this.duration > 0 ) { var percent = ((new Date()).getTime() - this.startTime)/this.duration; if( percent >= 1.0 ) { this.EndEffect(); return; } } this.ele.filters.wave.phase += 5; this.ele.filters.wave.phase %= 100; if( this.timer == null ) this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 50 ); } CAgencyWave.prototype.EndEffect = function() {// to remove the visual filter function this.ele.style.filter = ""; clearInterval( this.timer ); this.timer = null; } CAgencyWave.prototype.ResetParameters = function() { this.PrepareEffect(); this.ele.style.filter = "wave(strength=" + this.strength + ",freq=" + this.freq +", lightstrength=" + this.lightstrength +",phase=0);"; this.startTime = (new Date()).getTime(); } // End of the CAgencyWave definition // Begin of CAgencyGlow definition function CAgencyGlow( element, settings ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; // to set the default value this.glowColor = "green"; this.glowStrength = "3"; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) { arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "color" : this.glowColor = arrOneSet[1]; break; case "strength" : this.glowStrength = arrOneSet[1]; break; } } } CAgencyGlow.prototype.PrepareEffect = function() { CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject(this.ele, true ); if( this.ele.style.backgroundColor != "" ) {//style.backgroundColor somehow stop the visual filter this.ele.intactBackgroundColor = this.ele.style.backgroundColor; this.ele.style.backgroundColor = ""; } } CAgencyGlow.prototype.UpdateEffect = function() {// to set the visual filter function this.PrepareEffect(); this.ele.style.filter = "glow(Color=" + this.glowColor + ", Strength=" + this.glowStrength + ", enabled=true" +")"; } CAgencyGlow.prototype.EndEffect = function() {// to remove the visual filter function this.ele.style.filter = ""; if( typeof(this.ele.intactBackgroundColor) != "undefined" ) this.ele.style.backgroundColor = this.ele.intactBackgroundColor; } // End of the CAgencyGlow definition // Begin of CAgencyDropShadow definition function CAgencyDropShadow( element, settings ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; // to set the default value this.shadowColor = "black"; this.shadowOffx = "1"; this.shadowOffy = "1"; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) { arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "color" : this.shadowColor = arrOneSet[1]; break; case "offx" : this.shadowOffx = arrOneSet[1]; break; case "offy" : this.shadowOffy = arrOneSet[1]; break; } } } CAgencyDropShadow.prototype.PrepareEffect = function() { CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject(this.ele, true ); if( this.ele.style.backgroundColor != "" ) {//style.backgroundColor somehow stop the visual filter this.ele.intactBackgroundColor = this.ele.style.backgroundColor; this.ele.style.backgroundColor = ""; } } CAgencyDropShadow.prototype.UpdateEffect = function() {// to set the visual filter function this.PrepareEffect(); this.ele.style.filter = "dropshadow(color=" + this.shadowColor + ", offx=" + this.shadowOffx + ", offy=" + this.shadowOffy + ")"; } CAgencyDropShadow.prototype.EndEffect = function() {// to remove the visual filter function this.ele.style.filter = ""; if( typeof(this.ele.intactBackgroundColor) != "undefined" ) this.ele.style.backgroundColor = this.ele.intactBackgroundColor; } // End of the CAgencyDropShadow definition // Begin of CAgencyRevealTrans definition function CAgencyRevealTrans( element, settings ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; // to set the default value this.duration = 1.0; //The value is specified in seconds.milliseconds format (0.0000). this.transition = 0; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) { arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "type" : this.transition = arrOneSet[1]; break; case "duration" : this.duration = 100/arrOneSet[1]; break; } } } CAgencyRevealTrans.prototype.PrepareEffect = function() { CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject( this.ele, false); } CAgencyRevealTrans.prototype.UpdateEffect = function() {// to set the visual filter function if( typeof( this.ele.filters.RevealTrans ) == "object" ) { if( this.ele.filters.RevealTrans.status == 2 ) this.ele.filters.RevealTrans.stop(); } this.PrepareEffect(); this.ele.style.filter = "RevealTrans(duration=" + this.duration + ", transition=" + this.transition + ")"; if( typeof( this.ele.filters.RevealTrans ) == "object" ) { this.ele.filters.RevealTrans.apply(); CCSSP.ShowObject( this.ele, true); this.ele.filters.RevealTrans.play(); } else CCSSP.ShowObject( this.ele, true); } CAgencyRevealTrans.prototype.EndEffect = function() { if( typeof( this.ele.filters.RevealTrans ) == "object" ) this.ele.filters.RevealTrans.stop(); this.ele.style.filter = ""; } // End of the CAgencyRevealTrans definition // Begin of CAgencyBlur definition function CAgencyBlur( element, settings ) {// because of "visual filter" style, this won't work in Navigator this.ele = element; // to set the default value this.strength = "5"; this.direction = "90"; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) { arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "strength" : this.strength = arrOneSet[1]; break; case "direction" : this.direction = arrOneSet[1]; break; } } } CAgencyBlur.prototype.PrepareEffect = function() { CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject(this.ele, true ); } CAgencyBlur.prototype.UpdateEffect = function() {// to set the visual filter function CCSSP.PrepareFilter(this.ele); this.ele.style.filter = "blur(strength=" + this.strength + ", direction=" + this.direction + ")"; } CAgencyBlur.prototype.EndEffect = function() {// to remove the visual filter function this.ele.style.filter = ""; } // End of the CAgencyBlur definition // Begin of CAgencyChangeFilter definition function CAgencyChangeFilter( element, settings ) // flipH, flipV, invert, grey, {// because of "visual filter" style, this won't work in Navigator this.ele = element; // to set the default value this.filterFunction = settings; } CAgencyChangeFilter.prototype.PrepareEffect = function() { CCSSP.PrepareFilter(this.ele); CCSSP.ShowObject(this.ele, true ); } CAgencyChangeFilter.prototype.UpdateEffect = function() {// to set the visual filter function CCSSP.PrepareFilter(this.ele); this.ele.style.filter = this.filterFunction; } CAgencyChangeFilter.prototype.EndEffect = function() {// to remove the visual filter function this.ele.style.filter = ""; } // End of the CAgencyChangeFilter definition // The effects below change the style on the fly, so they won't work in Navigator // Begin of CAgencyFontChange definition, function CAgencyFontChange( element, settings ) {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string. this.ele = element; // to retrieve the original font style this.RetrieveOldFont( this.ele ); // to set the default font to change this.newfontFamily = this.ele.oldFontFamily; this.newfColor = this.ele.oldColor; this.newtextDecoration = this.ele.oldTextDecoration; this.newfontWeight = this.ele.oldFontWeight; this.newfontStyle = this.ele.oldFontStyle; this.newfontSize = this.ele.oldFontSize; this.newBackgroundColor = this.ele.oldBackgroundColor; var arrAllSet = settings.split(","); for( var i = 0; i < arrAllSet.length; i ++ ) {// to retrieve the setting arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]); var arrOneSet = arrAllSet[i].split("="); for( var j = 0; j < arrOneSet.length; j++ ) arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]); switch( arrOneSet[0] ) { case "font-family" : this.newfontFamily = arrOneSet[1]; break; case "color" : this.newfColor = arrOneSet[1]; break; case "underline" : this.newtextDecoration = (arrOneSet[1]=="on")? "underline" : "none"; break; case "bold" : this.newfontWeight = (arrOneSet[1]=="on")? "bold" : "normal"; break; case "italic" : this.newfontStyle = (arrOneSet[1]=="on")? "italic" : "normal"; break; case "size" : this.newfontSize = arrOneSet[1]; break; case "background-color" : this.newBackgroundColor = arrOneSet[1]; break; } } } CAgencyFontChange.prototype.RetrieveOldFont = function(objChild) { if( typeof(objChild.oldFontFamily) == "undefined" ) objChild.oldFontFamily = objChild.style.fontFamily; if( typeof(objChild.oldColor) == "undefined" ) objChild.oldColor = objChild.style.color; if( typeof(objChild.oldTextDecoration) == "undefined" ) objChild.oldTextDecoration = objChild.style.textDecoration; if( typeof(objChild.oldFontWeight) == "undefined" ) objChild.oldFontWeight = objChild.style.fontWeight; if( typeof(objChild.oldFontStyle) == "undefined" ) objChild.oldFontStyle = objChild.style.fontStyle; if( typeof(objChild.oldFontSize) == "undefined" ) objChild.oldFontSize = objChild.style.fontSize; if( typeof(objChild.oldBackgroundColor) == "undefined" ) objChild.oldBackgroundColor = objChild.style.backgroundColor; } CAgencyFontChange.prototype.PrepareEffect = function() { // as for expanding text, the child is created after the constructor called for(var index = 0; index < this.ele.all.length; index++) this.RetrieveOldFont(this.ele.all[index]); CCSSP.ShowObject(this.ele, true ); } CAgencyFontChange.prototype.UpdateEffect = function() {// to change the font this.PrepareEffect(); this.UpdateEffectAllChildren( this.ele ); for( var index = 0; index < this.ele.all.length; index++) this.UpdateEffectAllChildren(this.ele.all[index]); } CAgencyFontChange.prototype.UpdateEffectAllChildren = function(objChild) { objChild.style.fontFamily = this.newfontFamily; objChild.style.color = this.newfColor; objChild.style.textDecoration = this.newtextDecoration; objChild.style.fontWeight = this.newfontWeight; objChild.style.fontStyle = this.newfontStyle; objChild.style.fontSize = this.newfontSize; objChild.style.backgroundColor = this.newBackgroundColor; } CAgencyFontChange.prototype.EndEffect = function() {// to reinstate the original font style this.EndEffectAllChildren( this.ele ); for( var index = 0; index < this.ele.all.length; index++) this.EndEffectAllChildren(this.ele.all[index]); } CAgencyFontChange.prototype.EndEffectAllChildren = function( objChild ) { if( typeof(objChild.oldFontFamily) != "undefined" ) objChild.style.fontFamily = objChild.oldFontFamily; if( typeof(objChild.oldColor) != "undefined" ) objChild.style.color = objChild.oldColor; if( typeof(objChild.oldFontWeight) != "undefined" ) objChild.style.fontWeight = objChild.oldFontWeight; if( typeof(objChild.oldFontStyle) != "undefined" ) objChild.style.fontStyle = objChild.oldFontStyle; if( typeof(objChild.oldFontSize) != "undefined" ) objChild.style.fontSize = objChild.oldFontSize; if( typeof(objChild.oldTextDecoration) != "undefined" ) objChild.style.textDecoration = objChild.oldTextDecoration; if( typeof(objChild.oldBackgroundColor) != "undefined" ) objChild.style.backgroundColor = objChild.oldBackgroundColor; } // End of the CAgencyFontChange definition // Begin of the CAgencyChangeStyle definition function CAgencyChangeStyle( element, settings ) {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string. this.ele = element; // to retrieve the original style this.oldstyle = this.ele.style.cssText; // to set the default style this.newStyle = this.oldstyle; if( typeof(settings) == "string" && settings.length > 1 ) this.newStyle = this.oldstyle + " " + settings; } CAgencyChangeStyle.prototype.PrepareEffect = function() { CCSSP.ShowObject(this.ele, true ); } CAgencyChangeStyle.prototype.UpdateEffect = function() {// to change the style this.ele.style.cssText = this.newStyle; } CAgencyChangeStyle.prototype.EndEffect = function() {// to reinstate the original style this.ele.style.cssText = this.oldStyle; } // End of the CAgencyChangeStyle definition //End the definition of CAgencyXXXX classes //Begin to collaborate with other event handler settings CCSSP.RegisterEventHandler( window, "onload", "CEngine.OnPageLoad();BSSCOnLoad();kadovInitTriggersInHead();"); CCSSP.RegisterEventHandler( document, "onclick", "CEngine.OnPageClick();BSSCOnClick();"); CCSSP.RegisterEventHandler( document, "onmouseover", "CEngine.OnMouseOver();BSSCOnMouseOver();" ); CCSSP.RegisterEventHandler( document, "onmouseout", "CEngine.OnMouseOver();BSSCOnMouseOut();" ); CCSSP.RegisterEventHandler( window, "onunload", "BSSCOnUnload();"); //End to collaborate with other event handler settings /// Section End - CCSSP DHTM 2 (JavaScript 1.2) //// Segment End -- (JavaScript 1.2)