Salome HOME
DCQ : Merge with Ecole_Ete_a6.
[modules/smesh.git] / doc / salome / gui / SMESH / ehlpdhtm.js
1 // eHelp® Corporation Dynamic HTML JavaScript \r
2 // Copyright© 1998-2001 eHelp® Corporation.All rights reserved.\r
3 // Version=4.57\r
4 \r
5 // Warning:Do not modify this file.It is generated by RoboHELP® and changes will be overwritten.\r
6 \r
7 //// Segment Begin -- (JavaScript 1.0)\r
8 \r
9 /// Section Begin - General and relative topics(JavaScript 1.0)\r
10 \r
11 //{{HH_SYMBOL_SECTION\r
12 var HH_ChmFilename = "";\r
13 var HH_WindowName = "";\r
14 var HH_GlossaryFont = "";\r
15 var HH_Glossary = "";\r
16 var HH_Avenue = "";\r
17 var HH_ActiveX = false;\r
18 //}}HH_SYMBOL_SECTION\r
19 \r
20 //Begin to support previous generic parameters\r
21 //Get the information about the browser.\r
22 var gstrBsAgent         = navigator.userAgent.toLowerCase();\r
23 var gnBsVer                     = parseInt(navigator.appVersion);\r
24 \r
25 var gbBsIE              = (gstrBsAgent.indexOf('msie') != -1);\r
26 var gbBsNS              = (gstrBsAgent.indexOf('mozilla') != -1) && ((gstrBsAgent.indexOf('spoofer') == -1) && (gstrBsAgent.indexOf('compatible') == -1));\r
27 var gbBsOpera           = (gstrBsAgent.indexOf('opera') != -1);\r
28 \r
29 var gbBsIE3Before       = ((gbBsIE) && (gnBsVer <= 2));\r
30 var gbBsNS3Before       = ((gbBsNS) && (gnBsVer <= 3));\r
31 \r
32 var gbBsNS2                     = ((gbBsNS) && (gnBsVer <= 2));\r
33 var gbBsNS3                     = ((gbBsNS) && (gnBsVer == 3));\r
34 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)));\r
35 var gbBsIE302           = ((gbBsIE) && (gnBsVer == 2) && (gstrBsAgent.indexOf("3.02") != -1));\r
36 \r
37 var gbBsNS4                     = ((gbBsNS) && (gnBsVer >= 4));\r
38 var gbBsNS6                     = ((gbBsNS) && (gnBsVer >= 5));\r
39 \r
40 var gbBsIE4                     = ((gbBsIE) && (gnBsVer >= 4));\r
41 var gbBsIE5                     = false;\r
42 var gbBsIE55            = false;\r
43 \r
44 gbBsIE = (navigator.appName.indexOf("Microsoft") != -1);\r
45 \r
46 if (parseInt(navigator.appVersion) >= 4) {\r
47         gbBsIE4 = (navigator.appName.indexOf("Microsoft") != -1);\r
48 \r
49         if (gbBsIE4) {\r
50                 var nPos = gstrBsAgent.indexOf("msie");\r
51                 var strIEversion = gstrBsAgent.substring(nPos + 5);\r
52                 var nVersion =  parseFloat(strIEversion);\r
53                 if (nVersion >= 5)\r
54                         gbBsIE5 = true;\r
55                 if (nVersion >= 5.5)\r
56                         gbBsIE55 = true;\r
57         }\r
58 }\r
59 \r
60 var gbBsMac                     = (gstrBsAgent.indexOf('mac') != -1);\r
61 var gbBsWindows         = ((gstrBsAgent.indexOf('win') != -1) || (gstrBsAgent.indexOf('16bit') != -1));\r
62 var gbBsOp3                     = (gstrBsAgent.indexOf('opera') != -1);\r
63 \r
64 // Utilities functions.\r
65 function BsscHasExtJs()\r
66 {\r
67         if( gbBsIE3Before || gbBsNS3Before)\r
68                 return false;\r
69         return true;\r
70 }\r
71 \r
72 // Register event handler\r
73 var gBsOnLoads                  = new Array();  // An array holds all the onload event handler.\r
74 var gBsOnClicks                 = new Array();  // An array holds all the onClick event handler.\r
75 var gBsOnUnLoads                = new Array();  // An array holds all the OnUnLoad event handler.\r
76 var gBsOnMouseOvers     = new Array();  // An array holds all the OnMouseOver event handler.\r
77 var gBsOnMouseOuts              = new Array();  // An array holds all the OnMouseOut event handler.\r
78 \r
79 var gbOrignalOnMouseDown = null;\r
80 \r
81 function BsscRegisterOnLoad(funcHandler)\r
82 {\r
83         var nLength = gBsOnLoads.length;\r
84         gBsOnLoads[nLength] = funcHandler;\r
85 }\r
86 \r
87 function BsscRegisterOnClick(funcHandler)\r
88 {\r
89         var nLength = gBsOnClicks.length;\r
90         gBsOnClicks[nLength] = funcHandler;\r
91 }\r
92 \r
93 function BsscRegisterOnUnLoad(funcHandler)\r
94 {\r
95         var nLength = gBsOnUnLoads.length;\r
96         gBsOnUnLoads[nLength] = funcHandler;\r
97 }\r
98 \r
99 function BsscRegisterOnMouseOver(funcHandler)\r
100 {\r
101         var nLength = gBsOnMouseOvers.length;\r
102         gBsOnMouseOvers[nLength] = funcHandler;\r
103 }\r
104 \r
105 function BsscRegisterOnMouseOut(funcHandler)\r
106 {\r
107         var nLength = gBsOnMouseOuts.length;\r
108         gBsOnMouseOuts[nLength] = funcHandler;\r
109 }\r
110 \r
111 \r
112 function BsGeneralOnLoad()\r
113 {\r
114         if (!gbBsIE4 && !gbBsNS4)\r
115                 return;\r
116 \r
117         // Make everything visible in navigator\r
118         if (gbBsNS4 && !gbBsNS6) {\r
119                 // Make some special effects items visible\r
120                 for (var iLayer = 0; iLayer < document.layers.length; iLayer++) {\r
121                         document.layers[iLayer].visibility = "show";\r
122                         document.layers[iLayer].left = 0;\r
123                 }\r
124         }\r
125 }\r
126 \r
127 // If resize the netscape browser, need to reload it.\r
128 function BsReDo()\r
129 {\r
130   if (innerWidth != origWidth || innerHeight != origHeight)\r
131      location.reload();\r
132 }\r
133 // End of the local functions.\r
134 \r
135 // The following functions are used by the html files.\r
136 function BSSCOnLoad()\r
137 {\r
138         if( !BsscHasExtJs() )\r
139                 return;\r
140         for (var nElement = gBsOnLoads.length - 1; nElement >= 0; nElement--)\r
141                 gBsOnLoads[nElement]();\r
142 }\r
143 \r
144 function BSSCOnClick()\r
145 {\r
146         if (!BsscHasExtJs()) return;\r
147                 \r
148         for (var nElement = gBsOnClicks.length - 1; nElement >= 0; nElement--)\r
149                 gBsOnClicks[nElement]();\r
150 }\r
151 \r
152 function BSSCOnUnload()\r
153 {\r
154         if (!BsscHasExtJs()) return;\r
155         for (var nElement = gBsOnUnLoads.length - 1; nElement >= 0; nElement--)\r
156         {\r
157                 gBsOnUnLoads[nElement]();\r
158         }\r
159 }\r
160 \r
161 function BSSCOnMouseOver()\r
162 {\r
163         if (!BsscHasExtJs()) return;\r
164         for (var nElement = gBsOnMouseOvers.length - 1; nElement >= 0; nElement--)\r
165         {\r
166                 gBsOnMouseOvers[nElement]();\r
167         }\r
168 }\r
169 \r
170 function BSSCOnMouseOut()\r
171 {\r
172         if (!BsscHasExtJs()) return;\r
173         for (var nElement = gBsOnMouseOuts.length - 1; nElement >= 0; nElement--)\r
174         {\r
175                 gBsOnMouseOuts[nElement]();\r
176         }\r
177 }\r
178 // End of invocation of the event handle functions.\r
179 \r
180 \r
181 // Add the GereralOnLoad to the onload array.\r
182 if (typeof(BsscRegisterOnLoad) != "undefined")\r
183 {\r
184         BsscRegisterOnLoad(BsGeneralOnLoad);\r
185 }\r
186 if (gbBsNS4&&!gbBsNS6) {\r
187         origWidth = innerWidth;\r
188         origHeight = innerHeight;\r
189         onresize = BsReDo;\r
190 }\r
191 //End to support previous generic parameters\r
192 \r
193 //Begin to support previous HHActiveX invoking\r
194 function BsHHActivateComponents()\r
195 {\r
196         if( HH_ActiveX && (HH_ChmFilename != "") && ((self == top) || (self == top.frames[0])))\r
197         {\r
198                 var objBody = document.all.tags("BODY")[0];\r
199                 if( typeof(objBody) == "object" )\r
200                 {\r
201                         objBody.insertAdjacentHTML("beforeEnd", '<OBJECT ID="HHComponentActivator" CLASSID="CLSID:399CB6C4-7312-11D2-B4D9-00105A0422DF" width=0 height=0></OBJECT>');\r
202                         if (HHComponentActivator.object)\r
203                                 HHComponentActivator.Activate(HH_ChmFilename, HH_WindowName, HH_GlossaryFont, HH_Glossary, HH_Avenue);\r
204                 }\r
205         }\r
206 }\r
207 \r
208 function BsHHActivXOnLoad()\r
209 {       \r
210         if( gbBsIE4 )\r
211                 BsHHActivateComponents(); \r
212 }\r
213 \r
214 if( typeof(BsscRegisterOnLoad) != "undefined" )\r
215 {\r
216         BsscRegisterOnLoad(BsHHActivXOnLoad);\r
217 }\r
218 //End to support previous HHActiveX invoking\r
219 \r
220 //Begin to support previous relative topics\r
221 //If webHelp needs Related Topics DHTMLcode, it's supposed to add it here\r
222 var gbPopupMenuTimeoutExpired = false;\r
223 var gbInPopupMenu = false;\r
224 var gbPopupMenuTopicList = null;\r
225 var gOlddocumentClick = null;\r
226 \r
227 //////////////////////////////////////////////////////////////////////////////////////////\r
228 //\r
229 // Popup Menu code\r
230 //\r
231 //////////////////////////////////////////////////////////////////////////////////////////\r
232 \r
233 var g_bIsPopupMenuInit = false;\r
234 function _WritePopupMenuLayer()\r
235 {\r
236         if (!g_bIsPopupMenuInit)\r
237         {\r
238           if (gbBsNS4) {\r
239 //Do not try to write ininle styles for NS!  NS can not handle it and will not stop downloading the html page...\r
240            if (gbBsNS6)\r
241                 document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
242            else\r
243                 document.write("<DIV CLASS='WebHelpPopupMenu' ID='PopupMenu'></DIV>");\r
244           } else{\r
245           document.write("<DIV ID='PopupMenu' STYLE='position:absolute; left:0px; top:0px; z-index:4; visibility:hidden;'></DIV>");\r
246           if (gbBsIE4) {\r
247                 document.write("<STYLE TYPE='text/css'>");\r
248                 if (gbBsMac) {\r
249                         document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
250                         document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:10pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
251                 } else {\r
252                         document.write(".PopupOver {font-family:'Arial'; color:white; background:navy; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
253                         document.write(".PopupNotOver {font-family:'Arial'; color:black; background:#c0c0c0; font-size:8pt; font-style:normal;font-weight:normal;text-decoration:none;}");\r
254                 }\r
255                 document.write("</STYLE>");\r
256            }\r
257           }\r
258           g_bIsPopupMenuInit = true;\r
259         }\r
260 }\r
261 \r
262 //Define variable arguments as: strTitle, strUrl\r
263 function MTE() \r
264 {\r
265         this.strTitle = MTE.arguments[0];\r
266         if (MTE.arguments.length > 1)\r
267                 this.strURL = MTE.arguments[1];\r
268         else\r
269                 this.strURL = this.strTitle;\r
270 }\r
271 \r
272 // If the topic list is set, it is an array of TopicEntry objects (defined in WebHelp3.js)\r
273 function PopupMenu_SetTopicList(aPopupTopicArray)\r
274 {\r
275         gbPopupMenuTopicList = aPopupTopicArray;\r
276 }\r
277 \r
278 \r
279 //Seek for the bsscright frame \r
280 function _SeekFrameByName( cRoot, strName )\r
281 {\r
282         if( cRoot == null )     return null;\r
283         if( cRoot.frames == null )      return null;\r
284         if( cRoot.frames[strName] != null )     return cRoot.frames[strName];\r
285         for (var i=0; i<cRoot.frames.length; i++)\r
286         {\r
287                 var cObj = null;\r
288                 if (!gbBsNS6) \r
289                         cObj = _SeekFrameByName( cRoot.frames(i).document, strName );\r
290                 else\r
291                         cObj = _SeekFrameByName( cRoot.frames[i], strName );\r
292                 if( cObj != null )              return cObj;\r
293         };\r
294         return null;\r
295 }\r
296 function _GetFrameByName( cRoot, strName )\r
297 {\r
298         if( cRoot == null )     return null;\r
299         var cRet = _SeekFrameByName(cRoot, strName);\r
300         if( cRet != null )      return cRet;\r
301         if (cRoot.parent != cRoot)\r
302                 return _GetFrameByName( cRoot.parent, strName );\r
303         else\r
304                 return null;\r
305 }\r
306 \r
307 function _PopupMenu_Invoke(fn_arguments)\r
308 {\r
309         // Make sure we have reasonable arguments\r
310         var argLen = fn_arguments.length;\r
311         if (argLen < 3) {\r
312                 return false;\r
313         }\r
314 \r
315         // Check to see if we only have one target\r
316         var strTarget = "";\r
317         var targetDoc = null;\r
318         if (fn_arguments[1] == '') {\r
319                 if (BSSCPopup_IsPopup()) {\r
320                         targetDoc = parent;\r
321                         strTarget = "TARGET= _parent";\r
322                 }\r
323                 else\r
324                         targetDoc = window.document;\r
325         } else {\r
326                 targetDoc = _GetFrameByName( parent, fn_arguments[1] );\r
327 \r
328                 strTarget = "TARGET='" + fn_arguments[1] + "'";\r
329         }\r
330 \r
331         if ((!gbBsIE4 && !gbBsNS4) || ((gbBsMac) && (gbBsIE4) && (window.event.srcElement.tagName == "AREA"))) {\r
332         \r
333                 var argLen      = fn_arguments.length;\r
334 \r
335                 // Create the window that the hyperlinks will go into\r
336                 var nHeight = argLen * 15;\r
337                 var nWidth = 400;\r
338                 var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
339                 strParam += ",height=" + nHeight + ",width=200";\r
340                 strParam += ",resizable";\r
341 \r
342                 // Create a temporary window first to ensure the real popup comes up on top\r
343                 var wndTemp = window.open("", "temp", strParam);\r
344 \r
345                 // Create the real popup window\r
346                 var wndPopupLinks = window.open("", "popuplinks", strParam);\r
347 \r
348                 // Close the temporary\r
349                 wndTemp.close();\r
350 \r
351                 wndPopupLinks.document.open("text/html");\r
352                 wndPopupLinks.document.write("<html><head></head>");\r
353                 wndPopupLinks.document.write("<body onBlur=\'self.focus();\'>");\r
354                 var strParaLine = "";\r
355                 for (var i = 0; i < (argLen - 2) / 2; i++) {\r
356                         strParaLine = "";\r
357                         strParaLine += "<a href=\"javascript:";\r
358                         if (gbBsIE) {\r
359                                 strParaLine += "onBlur=null; ";\r
360                         }\r
361                         strParaLine += "opener.location=\'";\r
362                         strParaLine += fn_arguments[2 * i + 3];\r
363                         strParaLine += "\';close();\"";\r
364                         strParaLine += strTarget;\r
365 \r
366                         strParaLine += ">";\r
367                         strParaLine += fn_arguments[2 * i + 2];\r
368                         strParaLine += "</a>";\r
369                         strParaLine += "<br>";\r
370                         wndPopupLinks.document.write(strParaLine);\r
371                 }\r
372                 wndPopupLinks.document.write("</body></html>");\r
373                 wndPopupLinks.document.close();\r
374                 window.gbInPopupMenu = true;\r
375                 if (!gbBsIE) {\r
376                         wndPopupLinks.focus();\r
377                 }\r
378 \r
379                 return false;\r
380         }\r
381 \r
382 \r
383         if (((argLen < 5) && ((isNaN(fn_arguments[2])) || (gbPopupMenuTopicList == null))) ||\r
384                 ((argLen < 4) && ((!isNaN(fn_arguments[2])) && (gbPopupMenuTopicList != null)))) {\r
385                 // Get the place that we will be putting the topic into\r
386                 var strURL = "";\r
387                 if (isNaN(fn_arguments[2]) ||  (gbPopupMenuTopicList == null)) {\r
388                         strURL = fn_arguments[3];\r
389                 }\r
390                 else    {\r
391                         strURL = gbPopupMenuTopicList[fn_arguments[2]].strURL;\r
392                 }\r
393 \r
394                 if (targetDoc != null) {\r
395                         targetDoc.location.href = strURL;\r
396                 }\r
397                 else {\r
398                         if (fn_arguments[1] != null && typeof(fn_arguments[1]) != "undefined")\r
399                                 window.open(strURL, fn_arguments[1]);\r
400                         else\r
401                                 window.open(strURL);\r
402                 }               \r
403                 window.gbInPopupMenu = true;\r
404                 return false;\r
405         }\r
406         \r
407         var strMenu = "";\r
408         if (gbBsNS4) {\r
409                 strMenu = '<TABLE BORDER="1" CELLSPACING=0 CELLPADDING=3 BGCOLOR="#c0c0c0">';\r
410         } else {\r
411                 strMenu = '<TABLE STYLE="border:2px outset white;" CELLSPACING=0';\r
412                 if (gbBsMac) {\r
413                         strMenu += ' CELLPADDING=4';\r
414                 } else {\r
415                         strMenu += ' CELLPADDING=2';\r
416                 }       \r
417                 strMenu += ' BGCOLOR=#c0c0c0>';\r
418         }\r
419         // Add each of the items\r
420         var i = 2;\r
421         while (i <= argLen - 1) {\r
422                 strMenu += '<TR><TD><NOBR>'\r
423                 // If the destination is a number then look it up in the topic list\r
424                 if (isNaN(fn_arguments[i]) ||  (gbPopupMenuTopicList == null)) {\r
425                         strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + fn_arguments[i + 1] + '"' + strTarget;\r
426                 } else {\r
427                         strMenu += '<DIV STYLE="padding-left:3pt; padding-right:3pt;"><A HREF="' + gbPopupMenuTopicList[fn_arguments[i]].strURL + '"' + strTarget;\r
428                 }\r
429                 strMenu += ' onclick="PopupMenu_HandleClick(event);"';\r
430                 strMenu += ' onmouseover="PopupMenu_Over(event);"';\r
431                 strMenu += ' onmouseout="PopupMenu_Out(event);"';\r
432                 strMenu += '>';\r
433                 if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
434                         strMenu += '<SPAN CLASS="PopupNotOver">' + fn_arguments[i] + '</SPAN>';\r
435                 } else {\r
436                         strMenu += '<SPAN CLASS="PopupNotOver">' + gbPopupMenuTopicList[fn_arguments[i]].strTitle + '</SPAN>';\r
437                 }\r
438                 strMenu += '</A></DIV></NOBR></TD></TR>';\r
439 \r
440                 if (isNaN(fn_arguments[i]) || (gbPopupMenuTopicList == null)) {\r
441                         i += 2;\r
442                 } else {\r
443                         i += 1;\r
444                 }\r
445         }\r
446         strMenu += "</TABLE>";\r
447 \r
448         if (gbBsMac) {\r
449         // totally hack. because ie5 in mac need something. </TABLE> is one of them. mac is mad.\r
450                 strMenu +="<TABLE></TABLE>";\r
451         }\r
452 \r
453         var layerPopup = null;\r
454         var stylePopup = null;\r
455         var nEventX = 0;\r
456         var nEventY = 0;\r
457         var nWindowWidth = 0;\r
458         if (gbBsIE4) {\r
459 \r
460                 layerPopup = document.all["PopupMenu"];\r
461                 layerPopup.innerHTML = strMenu;\r
462                 stylePopup = layerPopup.style;\r
463 \r
464                 _BSPSGetClientSize();\r
465 \r
466                 // Get the position of the item causing the event (relative to its parent)\r
467                 nEventX = window.event.clientX;\r
468                 nEventY = window.event.clientY;\r
469 \r
470                 if (nEventY + layerPopup.scrollHeight + 10 < gBsClientHeight) {\r
471                         nEventY += document.body.scrollTop + 10;\r
472                 } else {\r
473                         nEventY = (document.body.scrollTop + gBsClientHeight) - layerPopup.scrollHeight - 20;\r
474                 }\r
475                 stylePopup.top = nEventY;\r
476                 \r
477                 var nPopupWidth = layerPopup.scrollWidth;\r
478                 if (gbBsMac) {\r
479                         nPopupWidth = 80; // we have no idea how to get the dynamic width of the popup.\r
480                 }\r
481                 if (nEventX + nPopupWidth + 20 > gBsClientWidth) {\r
482                         if (gBsClientWidth - nPopupWidth < 5) {\r
483                                 stylePopup.left = 5;\r
484                         } else {\r
485                                 stylePopup.left = gBsClientWidth - nPopupWidth - 5;\r
486                         }\r
487                 } else {\r
488                         stylePopup.left = nEventX + document.body.scrollLeft + 20;\r
489                 }\r
490 \r
491                 stylePopup.visibility = "visible";\r
492                 if (!gOlddocumentClick && document.onclick)\r
493                         gOlddocumentClick = document.onclick;\r
494                 document.onclick = PopupMenu_HandleClick;\r
495 \r
496         } else if (gbBsNS6) {\r
497                 layerPopup = document.getElementById("PopupMenu");\r
498                 layerPopup.style.visibility = "hidden";\r
499         \r
500                 var e = fn_arguments[0];\r
501                 nEventX = e.pageX;\r
502                 nEventY = e.pageY;\r
503                 _BSPSGetClientSize();\r
504                 layerPopup.innerHTML = strMenu;\r
505 \r
506                 if (nEventY + layerPopup.offsetHeight + 20  <  window.pageYOffset + gBsClientHeight) {\r
507                         nEventY += 20;\r
508                 } else {\r
509                         nEventY = gBsClientHeight + window.pageYOffset - layerPopup.offsetHeight - 20;\r
510                 }\r
511 \r
512                 if (nEventX + layerPopup.offsetWidth + 20 > gBsClientWidth + window.pageXOffset) {\r
513                         if (gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth < 20) {\r
514                                 nEventX = 5;\r
515                         } else {\r
516                                 nEventX = gBsClientWidth + window.pageXOffset - layerPopup.offsetWidth - 20;\r
517                         }\r
518                 } else {\r
519                         nEventX += 20;\r
520                 }\r
521                 layerPopup.style.top = nEventY;\r
522                 layerPopup.style.left = nEventX;\r
523                 // set again to avoid the stupid frash in netscape 6.\r
524                 layerPopup.innerHTML = strMenu;\r
525                 layerPopup.style.visibility = "visible";\r
526                 //window.captureEvents(Event.MOUSEDOWN);\r
527                 if (!gOlddocumentClick && document.onclick)\r
528                         gOlddocumentClick = document.onclick;\r
529                 window.onclick = PopupMenu_HandleClick;\r
530         }\r
531         else if (gbBsNS4) {\r
532                 layerPopup = document.layers.PopupMenu;\r
533                 layerPopup.visibility = "hide";\r
534                 stylePopup = layerPopup.document;\r
535                 stylePopup.write(strMenu);\r
536                 stylePopup.close();\r
537                 var e = fn_arguments[0];\r
538                 nEventX = e.pageX;\r
539                 nEventY = e.pageY;\r
540                 _BSPSGetClientSize();\r
541                 if (nEventY + layerPopup.clip.height + 20 < window.pageYOffset + gBsClientHeight) {\r
542                         nEventY += 20;\r
543                 } else {\r
544                         nEventY = gBsClientHeight + window.pageYOffset- layerPopup.clip.height - 20;\r
545                 }\r
546                 layerPopup.top = nEventY;\r
547 \r
548                 if (nEventX + layerPopup.clip.width + 20 > gBsClientWidth + window.pageXOffset) {\r
549                         if (gBsClientWidth + window.pageXOffset - layerPopup.clip.width < 20) {\r
550                                 nEventX = 5;\r
551                         } else {\r
552                                 nEventX = gBsClientWidth + window.pageXOffset - layerPopup.clip.width - 20;\r
553                         }\r
554                 } else {\r
555                         nEventX += 20;\r
556                 }\r
557 \r
558                 layerPopup.left = nEventX;\r
559 \r
560                 layerPopup.visibility = "show";\r
561 \r
562                 window.captureEvents(Event.MOUSEDOWN);\r
563                 if (!gOlddocumentClick && document.onmousedown)\r
564                         gOlddocumentClick = document.onmousedown;\r
565                 window.onmousedown = PopupMenu_HandleClick;\r
566         }\r
567 \r
568         window.gbInPopupMenu = true;\r
569         window.gbPopupMenuTimeoutExpired = false;\r
570         setTimeout("PopupMenu_Timeout();", 100);\r
571         return false;\r
572 }\r
573 \r
574 \r
575 function PopupMenu_Timeout()\r
576 {\r
577         window.gbPopupMenuTimeoutExpired = true;\r
578 }\r
579 \r
580 function PopupMenu_Over(e)\r
581 {\r
582     if (gbBsIE4) {\r
583                 e.srcElement.className = "PopupOver";\r
584     } else if (gbBsNS4) {\r
585 //              this.bgColor = "red";\r
586 //        e.target.document.className = "PopupOver";\r
587     }\r
588         return;\r
589 }\r
590 \r
591 function PopupMenu_Out(e)\r
592 {\r
593     if (gbBsIE4) {\r
594                 e.srcElement.className = "PopupNotOver";\r
595     } else if (gbBsNS4) {\r
596         this.bgColor = "#f0f0f0";\r
597     }\r
598         return;\r
599 }\r
600 \r
601 \r
602 function PopupMenu_HandleClick(e)\r
603 {\r
604         if (window.gbPopupMenuTimeoutExpired) {\r
605 \r
606                 window.gbInPopupMenu = false;\r
607 \r
608                 if (gbBsNS4 && !gbBsNS6) {\r
609                         window.releaseEvents(Event.MOUSEDOWN);\r
610                 }\r
611 \r
612                 var layerPopup = null;\r
613                 var stylePopup = null;\r
614                 if (gbBsIE4) {\r
615                         layerPopup = document.all["PopupMenu"];\r
616                         stylePopup = layerPopup.style;\r
617                         stylePopup.visibility = "hidden";\r
618                 } else if (gbBsNS6) {\r
619                         layerPopup = document.getElementById("PopupMenu");\r
620                         layerPopup.style.visibility = "hidden";\r
621                 } else if (gbBsNS4) {\r
622                         layerPopup = document.layers.PopupMenu;\r
623                         layerPopup.visibility = "hide";\r
624                 }\r
625         \r
626                 if (gOlddocumentClick)\r
627                 {\r
628                         if (gbBsNS4 && !gbBsNS6)\r
629                                 document.onmousedown = gOlddocumentClick;\r
630                         else\r
631                                 document.onclick = gOlddocumentClick;\r
632                 }\r
633         }\r
634         return;\r
635 }\r
636 \r
637 // This function should be deleted when all old projects are cleaned up\r
638 function BSPSWritePopupFrameForIE4()\r
639 {\r
640         return false;\r
641 }\r
642 \r
643 /////////////////////////////////////////////////////////////////////\r
644 function BSSCPopup_ClickMac()\r
645 {\r
646         if ((!DHTMLPopupSupport()) && (gbBsIE4))\r
647         {       \r
648                 var bClickOnAnchor = false;\r
649                 var el;\r
650                 if ((window.event != null) &&\r
651                     (window.event.srcElement != null))\r
652                 {\r
653                     el = window.event.srcElement;\r
654                         while (el != null)\r
655                         {\r
656                                 if ((el.tagName == "A") || (el.tagName == "AREA"))      {\r
657                                         bClickOnAnchor = true;\r
658                                         break;\r
659                                 }\r
660                                 if (el.tagName == "BODY") {\r
661                                         break;\r
662                                 }\r
663                                 el = el.parentElement;\r
664                         }\r
665                 }\r
666                 if (BSSCPopup_IsPopup())\r
667                 {\r
668                         if (!bClickOnAnchor) {\r
669                                 parent.window.gPopupWindow = null;\r
670                                 self.close();\r
671                         }\r
672                 }\r
673                 else\r
674                 {\r
675                         bClosePopupWindow = true;\r
676                         if ((bClickOnAnchor) &&\r
677                                 (el.href) &&\r
678                             ((el.href.indexOf("javascript:BSSCPopup") != -1) || (el.href.indexOf("javascript:null") != -1) || (el.href.indexOf("javascript:void(0)") != -1)))\r
679                         {\r
680                                 bClosePopupWindow = false;\r
681                         }\r
682                         if (bClosePopupWindow)\r
683                         {\r
684                                 if (window.gPopupWindow != null && !window.gPopupWindow.closed )\r
685                                 {\r
686                                         window.gPopupWindow.close();\r
687                                 }\r
688                         }\r
689                 }\r
690         }\r
691  }\r
692 \r
693 //////////////////////////////////////////////////////////////////////\r
694 \r
695 function BsPopupOnClick()\r
696 {\r
697         if (!gbBsIE4)\r
698                 return;\r
699 \r
700         BSSCPopup_ClickMac();\r
701 }\r
702 \r
703 function _BSSCOnError(message)\r
704 {\r
705         if(-1 != message.indexOf("denied") \r
706                 || -1 != message.indexOf("Object required"))\r
707          return true;\r
708 }\r
709 \r
710 //End to support previous relative topics\r
711 \r
712 \r
713 /// Section End - General and relative topics (JavaScript 1.0)\r
714 \r
715 /// Section Begin  - Popup (JavaScript 1.0)\r
716 \r
717 //Begin to support previous popup functions\r
718 //////////////////////////////////////////////////////////////////////////////////////////////\r
719 //\r
720 //      Begin DHTML Popup Functions\r
721 //\r
722 //////////////////////////////////////////////////////////////////////////////////////////////\r
723 //variables used to isolate the browser type\r
724 var gBsDoc                      = null;                 \r
725 var gBsSty                      = null;\r
726 var gBsHtm                      = null;\r
727 var gBsStyVisShow       = null;\r
728 var gBsStyVisHide       = null;\r
729 var gBsClientWidth      = 640;\r
730 var gBsClientHeight = 480;\r
731 var gBsBrowser          = null;\r
732 \r
733 // here is the varible for judge popup windows size. these parameter is for IE5.0, it may need adjust for others.\r
734 var gBRateH_W           = 0.618; // 1.618 Golden cut.\r
735 var gBMaxXOfParent      = 0.8; \r
736 var gBMaxYOfParent      = 0.8;\r
737 var gBscrollHeight   = 16;\r
738 var gBscrollWidth   =  16;\r
739 var gBpermitXDelta      = 3;\r
740 var gBpermitYDelta      = 3;\r
741 \r
742 \r
743 var arrayPopupURL = new Array();\r
744 var arrayAbsPopupURL = new Array();\r
745 \r
746 var arrayDirty = new Array();\r
747 \r
748 function setAbsPopupURL(nIndex, strURL)\r
749 {\r
750         arrayAbsPopupURL[nIndex] = strURL;\r
751 }\r
752 \r
753 function getAbsPopupURL(nIndex)\r
754 {\r
755         if (nIndex == -1 || arrayAbsPopupURL.length <= nIndex) return null;\r
756         else \r
757                 return arrayAbsPopupURL[nIndex];\r
758 }\r
759 \r
760 function getPopupURL(nIndex)\r
761 {\r
762         if (nIndex == -1 || arrayPopupURL.length <= nIndex) return null;\r
763         else \r
764                 return arrayPopupURL[nIndex];\r
765 }\r
766 \r
767 function getPopupID(nIndex)\r
768 {\r
769         return gstrPopupID + nIndex;\r
770 }\r
771 \r
772 function getPopupShadowID(nIndex)\r
773 {\r
774         return gstrPopupShadowID + nIndex;\r
775 }\r
776 \r
777 function getPopupTopicID(nIndex)\r
778 {\r
779         return gstrPopupTopicID + nIndex;\r
780 }\r
781 \r
782 function getPopupIFrameID(nIndex)\r
783 {\r
784         return gstrPopupIFrameID + nIndex;\r
785 }\r
786 \r
787 function getPopupIFrameName(nIndex)\r
788 {\r
789         return gstrPopupIFrameName + nIndex;\r
790 }\r
791 \r
792 \r
793 function getPopupTopicStyle(nIndex)\r
794 {\r
795         return eval("document.all['" + getPopupTopicID(nIndex) + "']").style;\r
796 }\r
797 \r
798 function getPopupShadowStyle(nIndex)\r
799 {\r
800         return eval("document.all['" + getPopupShadowID(nIndex) + "']").style;\r
801 }\r
802 \r
803 function getPopupIFrame(nIndex)\r
804 {\r
805 \r
806         return eval("document.frames['" + getPopupIFrameName(nIndex) + "']");\r
807 }\r
808 \r
809 function getPopupDivStyle(nIndex)\r
810 {\r
811         return eval("document.all['" + getPopupID(nIndex) + "']").style;\r
812 }\r
813 \r
814 function getPopupIFrameStyle(nIndex)\r
815 {\r
816         return eval("document.all['" + getPopupIFrameName(nIndex) + "'].style");\r
817 }\r
818 \r
819 \r
820 function findDiv(strURL)\r
821 {\r
822         var i = 0;\r
823         for (i = 0; i < arrayPopupURL.length; i ++ ) {\r
824                 if (arrayPopupURL[i] == strURL) {\r
825                         return i;\r
826                 }\r
827         }\r
828         return -1;\r
829 }\r
830 \r
831 var gnToken = -1;\r
832 function takeToken()\r
833 {\r
834         gnToken ++;\r
835         if (gnToken > 10000) gnToken = 0;\r
836         return gnToken;\r
837 }\r
838 \r
839 function IsValidToken(nToken)\r
840 {\r
841         return (gnToken == nToken);\r
842 }\r
843 \r
844 function addDiv(strURL)\r
845 {\r
846         var i = 0; \r
847         for (i = 0; i < arrayPopupURL.length; i ++) {\r
848                 if (arrayPopupURL[i] == null) {\r
849                         arrayPopupURL[i] = strURL;\r
850                         return i;\r
851                 }\r
852         }       \r
853         arrayPopupURL[i] = strURL;\r
854         arrayDirty[i] = true;\r
855         return i;\r
856 }\r
857 \r
858 function setDirty()\r
859 {\r
860         var i = 0;\r
861         for (i = 0; i < arrayPopupURL.length; i ++ )\r
862                 arrayDirty[i] = true;\r
863 }\r
864 \r
865 function IsDirty(nIndex)\r
866 {\r
867         if (nIndex == -1)\r
868                 return true;\r
869         else \r
870                 if (arrayDirty.length > nIndex) \r
871                         return arrayDirty[nIndex];\r
872                 else\r
873                         return true;\r
874 }\r
875 \r
876 function hideAll()\r
877 {\r
878         var i = 0; \r
879         for (i = 0; i < arrayPopupURL.length; i ++ )\r
880                 getPopupDivStyle(i).visibility = gBsStyVisHide;\r
881 }\r
882 \r
883 function getCurrentPopupIFrame()\r
884 {\r
885         var i = 0;\r
886         for (i = 0; i < arrayPopupURL.length; i ++)\r
887                 if (getPopupDivStyle(i).visibility == gBsStyVisShow)\r
888                         return getPopupIFrame(i);\r
889         return null;\r
890 }\r
891 \r
892 function setClear(nIndex)\r
893 {\r
894         if (nIndex != -1)\r
895                 arrayDirty[nIndex] = false;\r
896 }\r
897 \r
898 function _BSSCCreatePopupDiv(strURL)\r
899 {\r
900         var nIndex = findDiv(strURL);\r
901         if (nIndex == -1 ) {\r
902                 nIndex = addDiv(strURL);\r
903                 BsPopup_CreateDiv(nIndex);\r
904         }\r
905         else {\r
906                 if (IsDirty(nIndex)) {\r
907                         if("object" == typeof(getPopupIFrame(nIndex).document))\r
908                                 getPopupIFrame(nIndex).document.location.href = strURL;\r
909                 }\r
910         }\r
911         return nIndex;\r
912 \r
913 }\r
914 \r
915 //the browser information itself\r
916 function _BSPSBrowserItself()\r
917 {\r
918         var agent  = navigator.userAgent.toLowerCase();\r
919         this.major = parseInt(navigator.appVersion);\r
920         this.minor = parseFloat(navigator.appVersion);\r
921         this.ns    = ((agent.indexOf('mozilla') != -1) && ((agent.indexOf('spoofer') == -1) && (agent.indexOf('compatible') == -1)));\r
922         this.ns2   = ((this.ns) && (this.major == 2));\r
923         this.ns3   = ((this.ns) && (this.major == 3));\r
924         this.ns4   = ((this.ns) && (this.major >= 4));\r
925         this.ns6   = ((this.ns) && (this.major >= 5));\r
926         this.ie    = (agent.indexOf("msie") != -1);\r
927         this.ie3   = ((this.ie) && (this.major == 2));\r
928         this.ie4   = ((this.ie) && (this.major >= 4));\r
929         this.op3   = (agent.indexOf("opera") != -1);\r
930 \r
931         if (this.ns4)\r
932         {\r
933                 gBsDoc          = "document";\r
934                 gBsSty          = "";\r
935                 gBsHtm          = ".document";\r
936                 gBsStyVisShow   = "show";\r
937                 gBsStyVisHide   = "hide";\r
938 \r
939         }\r
940         else if (this.ie4)\r
941         {\r
942                 gBsDoc           = "document.all";\r
943                 gBsSty          = ".style";\r
944                 gBsHtm          = "";\r
945                 gBsStyVisShow   = "visible";\r
946                 gBsStyVisHide   = "hidden";\r
947         }\r
948 }\r
949 \r
950 //Here is the browser type \r
951 function _BSPSGetBrowserInfo()\r
952 {\r
953         gBsBrowser      = new _BSPSBrowserItself();\r
954 }\r
955 \r
956 _BSPSGetBrowserInfo();\r
957 \r
958 //Get client size info\r
959 function _BSPSGetClientSize()\r
960 {\r
961         if (gBsBrowser.ns4)\r
962         {\r
963                 gBsClientWidth  = innerWidth;\r
964                 gBsClientHeight = innerHeight;\r
965 \r
966         }\r
967         else if (gBsBrowser.ie4)\r
968         {\r
969                 gBsClientWidth  = document.body.clientWidth;\r
970                 gBsClientHeight = document.body.clientHeight;\r
971         }\r
972 }\r
973 \r
974 \r
975 var gstrPopupID = 'BSSCPopup';\r
976 var gstrPopupShadowID = 'BSSCPopupShadow';\r
977 var gstrPopupTopicID = 'BSSCPopupTopic';\r
978 var gstrPopupIFrameID = 'BSSCPopupIFrame';\r
979 var gstrPopupIFrameName = 'BSSCPopupIFrameName';\r
980 \r
981 var gstrPopupSecondWindowName = 'BSSCPopup';\r
982 \r
983 var gPopupWindow = null;\r
984 var gnPopupClickX = 0;\r
985 var gnPopupClickY = 0;\r
986 \r
987 var gnPopupScreenClickX = 0;\r
988 var gnPopupScreenClickY = 0;\r
989 \r
990 var gbPopupTimeoutExpired = false;\r
991 \r
992 \r
993 function DHTMLPopupSupport()\r
994 {\r
995         if ((gbBsIE4) && (!gbBsMac)) {\r
996                 return true;\r
997         }\r
998         return false;\r
999 }\r
1000 \r
1001 \r
1002 \r
1003 function BSSCPopup_IsPopup()\r
1004 {\r
1005         if (DHTMLPopupSupport() && (this.name.indexOf(gstrPopupIFrameName) != -1)) {\r
1006                 return true;\r
1007         } else if ((gbBsNS4 || gbBsIE4) && (this.name.indexOf(gstrPopupID) != -1)) {\r
1008                 return true;\r
1009         } else {\r
1010                 return false;\r
1011         }\r
1012 }\r
1013 \r
1014 \r
1015 // If there is a hyperlink in a popup window, display the hyperlink in\r
1016 // the original window.\r
1017 if (BSSCPopup_IsPopup() && !gbBsIE4) {\r
1018         document.write("<base target=\"_parent\">");\r
1019 }\r
1020 \r
1021 // Local functions.\r
1022 function BsPopup_CreateDiv(nIndex)\r
1023 {\r
1024         if(!DHTMLPopupSupport())\r
1025                 return;\r
1026         // DO NOT SET Width and height for the div, otherwize it will make IE4 popup do not work when view the topic alone.\r
1027         var strPopupDiv = "<DIV ID='" + getPopupID(nIndex) + "' STYLE='position:absolute; top:-100; left:0; z-index:600; visibility:hidden;'>";\r
1028         strPopupDiv += "<DIV ID='" + getPopupShadowID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#C0C0C0;\"></DIV>";\r
1029         strPopupDiv += "<DIV ID='" + getPopupTopicID(nIndex) + "' STYLE=\"position:absolute;top:0; left:0;  background-color:#FFFFFF;border:1px #000000 outset;\">";\r
1030         strPopupDiv += "<IFRAME title=\"Popup Window\" ID='" + getPopupIFrameID(nIndex) + "' name='" + getPopupIFrameName(nIndex) + "' src = '" + getPopupURL(nIndex) + "' frameborder=0 scrolling=auto></IFRAME>";\r
1031         strPopupDiv += "</DIV></DIV>";\r
1032 \r
1033         var objBody = document.all.tags("BODY")[0];\r
1034         if( typeof(objBody) != "object" )\r
1035                 return;\r
1036 \r
1037         objBody.insertAdjacentHTML("beforeEnd", strPopupDiv);\r
1038 }\r
1039 \r
1040 function BSSCPopup_Timeout(nIndex, nToken)\r
1041 {\r
1042     if (!IsValidToken(nToken)) return;\r
1043 \r
1044         if ((getPopupIFrame(nIndex).document.readyState == "complete") &&\r
1045                 (getPopupIFrame(nIndex).document.body != null)) {\r
1046                 window.getPopupDivStyle(nIndex).visibility = gBsStyVisShow;\r
1047                 setClear(nIndex);\r
1048                 window.gbPopupTimeoutExpired = true;\r
1049 \r
1050                 BSSCPopup_ChangeTargettoParent(getPopupIFrame(nIndex).document);\r
1051                 getPopupIFrame(nIndex).document.body.onclick = BSSCPopupClicked;\r
1052 \r
1053                 if (!gbOrignalOnMouseDown && document.onmousedown)\r
1054                         gbOrignalOnMouseDown = document.onmousedown;\r
1055 \r
1056                 document.onmousedown = BSSCPopupParentClicked;\r
1057 \r
1058         } else {\r
1059                 setTimeout("BSSCPopup_Timeout(" + nIndex + "," + nToken + ")", 100);\r
1060         }\r
1061 }\r
1062 \r
1063 \r
1064 // VH 08/10/00 \r
1065 // do not change target to parent if the href is using javascript\r
1066 function BSSCPopup_ChangeTargettoParent(tagsObject)\r
1067 {\r
1068         var collA = tagsObject.all.tags("A");\r
1069         BSSCPopup_ChangeTargettoParent2(collA);\r
1070 \r
1071         var collIMG = tagsObject.all.tags("IMG");\r
1072         BSSCPopup_ChangeTargettoParent2(collIMG);\r
1073 }\r
1074 \r
1075 function BSSCPopup_ChangeTargettoParent2(colls)\r
1076 {\r
1077         var j = 0;\r
1078         if (colls != null)  {\r
1079                 for (j = 0; j < colls.length; j ++ )\r
1080                 {\r
1081                         var strtemp = colls[j].href;\r
1082                         strtemp = strtemp.toLowerCase();\r
1083                         if (strtemp.indexOf("javascript:") == -1)\r
1084                         if (colls[j].target == "")\r
1085                                 colls[j].target = "_parent";\r
1086                 }\r
1087 \r
1088         }\r
1089 }\r
1090 \r
1091 function BSPSPopupTopicWinHelp(strURL)\r
1092 {\r
1093         _BSSCPopup(strURL);\r
1094         return;\r
1095 }\r
1096 \r
1097 function _BSSCPopup(strURL, width, height)\r
1098 {\r
1099         var cuswidth = 0;\r
1100         var cusheight = 0;\r
1101         if ("undefined" != typeof(width) && "undefined" != typeof(height)) {\r
1102                 cuswidth = width;\r
1103                 cusheight= height;\r
1104         }\r
1105         \r
1106         if (DHTMLPopupSupport()) {\r
1107                 // If we are already in a popup, replace the contents\r
1108         //      if (BSSCPopup_IsPopup()) {\r
1109         //              parent._BSSCPopup(strURL, cuswidth, cusheight);\r
1110         //      } else {\r
1111                         var nToken = takeToken(); // take  token first.\r
1112                         var nIndex = _BSSCCreatePopupDiv(strURL);\r
1113                         window.gbPopupTimeoutExpired = false;\r
1114                         var ntWidth = gBsClientWidth;\r
1115                         var ntHeight = gBsClientHeight;\r
1116                         _BSPSGetClientSize();\r
1117                         if (ntWidth != gBsClientWidth || ntHeight != gBsClientHeight) {\r
1118                                 setDirty();\r
1119                         }\r
1120 \r
1121 \r
1122                         if (IsDirty(nIndex)) {\r
1123                                 if (gbBsMac) {\r
1124                                         setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight  +")", 400);\r
1125                                 } else {\r
1126                                         setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 100);\r
1127                                 }\r
1128                         }\r
1129                         else {\r
1130                                 MoveDivAndShow(nIndex ,nToken, cuswidth, cusheight);\r
1131                         }\r
1132         //      }\r
1133 \r
1134         } else {\r
1135                 _BSSCPopup2(strURL, cuswidth, cusheight);\r
1136         }\r
1137         return;\r
1138 }\r
1139 \r
1140 if (gbBsIE55)\r
1141 {\r
1142         var ehlpdhtm_fOldBefureUnload = window.onbeforeunload;\r
1143         window.onbeforeunload = window_BUnload;\r
1144 }\r
1145         \r
1146 function window_BUnload()\r
1147 {\r
1148         for (var i = 0; i < arrayPopupURL.length; i ++)\r
1149                 document.all(getPopupID(i)).outerHTML = "";\r
1150         arrayPopupURL.length = 0;       \r
1151         if (ehlpdhtm_fOldBefureUnload)\r
1152                 ehlpdhtm_fOldBefureUnload();\r
1153 }\r
1154 \r
1155 function _BSSCPopup2(strURL, width, height)\r
1156 {\r
1157         if (window.name == gstrPopupSecondWindowName) {\r
1158                 window.location = strURL;\r
1159         } else {\r
1160                 if (!gbBsMac || !gBsBrowser.ns4) {\r
1161                         BSSCHidePopupWindow();\r
1162                 }\r
1163                 var nX = 0;\r
1164                 var nY = 0;\r
1165                 var nHeight = 300;\r
1166                 var nWidth = 400;\r
1167                 if (width > 0 && height > 0) {\r
1168                         nHeight = height;\r
1169                         nWidth = width;\r
1170                 }\r
1171                 _BSPSGetClientSize();\r
1172 \r
1173                 nX = window.gnPopupScreenClickX;\r
1174                 nY = window.gnPopupScreenClickY;\r
1175 \r
1176                 if (nY + nHeight + 40 > screen.availHeight) {\r
1177                         nY = screen.availHeight - nHeight - 40;\r
1178                 }\r
1179                 if (nX + nWidth + 40 > screen.availWidth) {\r
1180                         nX = screen.availWidth - nWidth - 40;\r
1181                 }\r
1182                 // Launch a separate window\r
1183                 var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes";\r
1184                 if (gBsBrowser.ns) {\r
1185                         if (gBsBrowser.ns6) {\r
1186                                 strParam += ",Height=" + nHeight + ",Width=" + nWidth;\r
1187                                 strParam += ",screenX=" + nX + ",screenY=" + nY;\r
1188                         }\r
1189                         else {\r
1190                                 strParam += ",OuterHeight=" + nHeight + ",OuterWidth=" + nWidth;\r
1191                                 strParam += ",screenX=" + nX + ",screenY=" + nY;\r
1192                                 strParam += ",dependent=yes";\r
1193                         }\r
1194                 }\r
1195                 else {\r
1196                         strParam += ",height=" + nHeight + ",width=" + nWidth;\r
1197                         strParam += ",left=" + nX + ",top=" + nY;\r
1198                 }\r
1199                 window.gPopupWindow = window.open(strURL, gstrPopupSecondWindowName, strParam);\r
1200 \r
1201                 if (gBsBrowser.ns4) {\r
1202                         window.gPopupWindow.captureEvents(Event.CLICK | Event.BLUE);\r
1203                         window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
1204                         window.gPopupWindow.onblur = NonIEPopup_HandleBlur;\r
1205                 }\r
1206                 else if (gBsBrowser.ie4)\r
1207                 {\r
1208                         setTimeout("setPopupFocus();", 100);\r
1209                 }\r
1210         }\r
1211         return;\r
1212 }\r
1213 \r
1214 function setPopupFocus()\r
1215 {\r
1216         window.gPopupWindow.focus();\r
1217 }\r
1218 \r
1219 function NonIEPopup_HandleBlur(e)\r
1220 {\r
1221         window.gPopupWindow.focus();\r
1222 }\r
1223 \r
1224 function NonIEPopup_HandleClick(e)\r
1225 {\r
1226         // Because navigator will give the event to the handler before the hyperlink, let's\r
1227         // first route the event to see if we are clicking on a Popup menu in a popup.\r
1228         document.routeEvent(e);\r
1229 \r
1230         // If a popup menu is active then don't do anything with the click\r
1231         if (window.gPopupWindow.gbInPopupMenu) {\r
1232                 window.gPopupWindow.captureEvents(Event.CLICK);\r
1233                 window.gPopupWindow.onclick = NonIEPopup_HandleClick;\r
1234                 return false;\r
1235         }\r
1236 \r
1237         // Close the popup window\r
1238         if (e.target.href) {\r
1239                 if (e.target.target == "")\r
1240                         window.location.href = e.target.href;\r
1241                 else\r
1242                         window.open(e.target.href, e.target.target);\r
1243                         \r
1244                 if (e.target.href.indexOf("javascript:void(0)") == -1 && e.target.href.indexOf("javascript:null") == -1 && e.target.href.indexOf("BsscPopup") == -1) {\r
1245                         this.close();\r
1246                 }\r
1247         } else {\r
1248                 this.close();\r
1249         }\r
1250         return false;\r
1251 \r
1252 }\r
1253 \r
1254 function BSSCPopup_AfterLoad(nIndex, nToken, cuswidth, cusheight)\r
1255 {       \r
1256         if (typeof(window.getPopupIFrame(nIndex).document) == "unknown") {\r
1257                 _BSSCPopup2(getPopupURL(nIndex), cuswidth, cusheight);\r
1258                 return;\r
1259         }\r
1260     if (!IsValidToken(nToken)) return;\r
1261 \r
1262         if ((window.getPopupIFrame(nIndex).document.readyState == "complete") &&\r
1263                 (window.getPopupIFrame(nIndex).document.body != null)) {\r
1264                         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.\r
1265                                 window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
1266                                 setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
1267                         }\r
1268                         else\r
1269                                 {\r
1270                                         setAbsPopupURL(nIndex, window.getPopupIFrame(nIndex).document.location.href); // change URL to abs url.\r
1271                                         BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight);\r
1272                                 }\r
1273         } else {\r
1274                 setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
1275         }\r
1276 }\r
1277 \r
1278 \r
1279 function BSSCPopup_ResizeAfterLoad(nIndex, nToken, cuswidth, cusheight)\r
1280 {\r
1281         if (window.gbPopupTimeoutExpired) return;\r
1282 \r
1283     if (!IsValidToken(nToken)) return;\r
1284 \r
1285         getPopupDivStyle(nIndex).visibility = gBsStyVisHide;\r
1286 \r
1287         // Determine the width and height for the window\r
1288         //var size = new BSSCSize(0, 0);\r
1289         //BSSCGetContentSize(window.getPopupIFrame(nIndex), size);\r
1290         //var nWidth = size.x;\r
1291         //var nHeight = size.y;\r
1292 \r
1293         _BSPSGetClientSize();\r
1294         \r
1295         var size = new BSSCSize(0, 0);\r
1296 \r
1297         if (cuswidth <= 0 || cusheight <= 0)\r
1298                 BSSCGetContentSize(window.getPopupIFrame(nIndex), size);\r
1299         else {\r
1300                 size.x = cuswidth;\r
1301                 size.y = cusheight;\r
1302         }\r
1303 \r
1304         // Determine the width and height for the window\r
1305         var nWidth = size.x;\r
1306         var nHeight = size.y;\r
1307 \r
1308         // for small popup size, we should allow any size.\r
1309         // The popup size should be ok if bigger than 0\r
1310         if (nWidth < 0 || nHeight < 0) return;  // there must be something terribly wrong.              \r
1311         //      if (nWidth < 40 || nHeight < 40) return;  // there must be something terribly wrong.\r
1312 \r
1313         window.getPopupDivStyle(nIndex).pixelWidth = nWidth;\r
1314         window.getPopupDivStyle(nIndex).pixelHeight = nHeight;\r
1315 \r
1316         window.getPopupShadowStyle(nIndex).pixelWidth = nWidth;\r
1317         window.getPopupShadowStyle(nIndex).pixelHeight = nHeight;\r
1318         window.getPopupTopicStyle(nIndex).pixelWidth = nWidth;\r
1319         window.getPopupTopicStyle(nIndex).pixelHeight = nHeight;\r
1320         if (gbBsIE55)\r
1321         {\r
1322                 window.getPopupShadowStyle(nIndex).pixelWidth = nWidth + 2;\r
1323                 window.getPopupShadowStyle(nIndex).pixelHeight = nHeight + 2;\r
1324                 window.getPopupTopicStyle(nIndex).pixelWidth = nWidth + 2;\r
1325                 window.getPopupTopicStyle(nIndex).pixelHeight = nHeight + 2;\r
1326         }\r
1327 \r
1328         window.getPopupIFrameStyle(nIndex).pixelWidth = nWidth;\r
1329         window.getPopupIFrameStyle(nIndex).pixelHeight = nHeight;\r
1330         if (gbBsIE55)\r
1331         {\r
1332                 window.getPopupIFrameStyle(nIndex).top = 0;\r
1333                 window.getPopupIFrameStyle(nIndex).left = 0;\r
1334         }\r
1335         \r
1336         var strURL = getPopupURL(nIndex);\r
1337         if (strURL.indexOf("#") != -1)\r
1338                 getPopupIFrame(nIndex).location.href = strURL;  // reload again, this will fix the bookmark misunderstand in IE5.\r
1339                 \r
1340         MoveDivAndShow(nIndex, nToken, cuswidth, cusheight);\r
1341 }\r
1342 \r
1343 function MoveDivAndShow(nIndex, nToken, cuswidth, cusheight)\r
1344 {\r
1345         if (window.getPopupIFrame(nIndex).document.location.href != getAbsPopupURL(nIndex)) { // if redirect, reload again.\r
1346                         window.getPopupIFrame(nIndex).document.location = getPopupURL(nIndex);\r
1347                         setTimeout("BSSCPopup_AfterLoad(" + nIndex + "," + nToken + "," + cuswidth + "," + cusheight + ")", 200);\r
1348                         return;\r
1349         }\r
1350 \r
1351         // Determine the position of the window\r
1352         var nClickX = window.gnPopupClickX;\r
1353         var nClickY = window.gnPopupClickY;\r
1354         var nTop = 0;\r
1355         var nLeft = 0;\r
1356 \r
1357         var nWidth = window.getPopupDivStyle(nIndex).pixelWidth;\r
1358         var nHeight = window.getPopupDivStyle(nIndex).pixelHeight;\r
1359 \r
1360         if (nClickY + nHeight + 20 < gBsClientHeight + document.body.scrollTop) {\r
1361                 nTop = nClickY + 10;\r
1362         } else {\r
1363                 nTop = (document.body.scrollTop + gBsClientHeight) - nHeight - 20;\r
1364         }\r
1365         if (nClickX + nWidth < gBsClientWidth + document.body.scrollLeft) {\r
1366                 nLeft = nClickX;\r
1367         } else {\r
1368                 nLeft = (document.body.scrollLeft + gBsClientWidth) - nWidth - 8;\r
1369         }\r
1370         \r
1371         if (nTop < document.body.scrollTop ) nTop  = document.body.scrollTop + 1;\r
1372         if (nLeft< document.body.scrollLeft) nLeft = document.body.scrollLeft + 1;\r
1373 \r
1374 \r
1375         window.getPopupDivStyle(nIndex).left = nLeft;\r
1376         window.getPopupDivStyle(nIndex).top = nTop;\r
1377 \r
1378         // Set the location of the background blocks\r
1379         window.getPopupShadowStyle(nIndex).left = 6;\r
1380         window.getPopupShadowStyle(nIndex).top = 6;\r
1381         if (gbBsIE55)\r
1382         {\r
1383                 window.getPopupShadowStyle(nIndex).left = 4;\r
1384                 window.getPopupShadowStyle(nIndex).top = 4;\r
1385         }\r
1386 \r
1387         if (gbBsMac) {\r
1388                 // Total hack on the iMac to get the IFrame to position properly\r
1389                 window.getPopupIFrameStyle(nIndex).pixelLeft = 100;\r
1390                 window.getPopupIFrameStyle(nIndex).pixelLeft = 0;\r
1391                 // Explicitly call BSSCOnLoad because the Mac doesn't seem to do it\r
1392                 window.getPopupIFrame(nIndex).window.BSSCOnLoad();\r
1393         }\r
1394 \r
1395         BSSCPopup_Timeout(nIndex , nToken );\r
1396         \r
1397         return;\r
1398 }\r
1399 \r
1400 function        BSSCSize(x, y)\r
1401 {\r
1402         this.x = x;\r
1403         this.y = y;\r
1404 }\r
1405 \r
1406 function BSSCGetContentSize(thisWindow, size)\r
1407 {\r
1408         if (!((gBsBrowser.ie4) || (gBsBrowser.ns4)))\r
1409                 return;\r
1410 \r
1411         if (gbBsMac) {\r
1412                 size.x = 300;\r
1413                 size.y = 300;\r
1414                 return;\r
1415         }\r
1416 \r
1417         // Resize the width until it is wide enough to handle the content\r
1418         // The trick is to start wide and determine when the scrollHeight changes\r
1419         // because then we know a scrollbar is necessary. We can then go back\r
1420         // to the next widest size (for no scrollbar)\r
1421 \r
1422         var ClientRate = gBsClientHeight / gBsClientWidth;\r
1423 \r
1424         var GoldenSize = new BSSCSize(0,0);\r
1425         GoldenSize.x = gBsClientWidth * gBMaxXOfParent;\r
1426         GoldenSize.y = gBsClientHeight *gBMaxYOfParent ;\r
1427 \r
1428         if (ClientRate > gBRateH_W) {\r
1429                 GoldenSize.y = GoldenSize.x * gBRateH_W;\r
1430         }\r
1431         else {\r
1432                 GoldenSize.x = GoldenSize.y / gBRateH_W;\r
1433         }\r
1434 \r
1435         // Try to using parent specified max x.\r
1436         var x = 0;\r
1437         var maxgoldx = GoldenSize.x;\r
1438         var maxx = gBsClientWidth * gBMaxXOfParent;\r
1439         \r
1440         // This double resize causes the document to re-render (and we need it to)\r
1441         if (!gbBsIE5)\r
1442                 thisWindow.moveTo(10000,10000); // this is used to fix the flash on IE4.\r
1443         thisWindow.resizeTo(1, 1);\r
1444         thisWindow.resizeTo(1, 1);\r
1445         thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
1446         thisWindow.resizeTo(maxgoldx, thisWindow.document.body.scrollHeight + gBscrollHeight);\r
1447                 \r
1448         var miny = thisWindow.document.body.scrollHeight + gBscrollHeight;\r
1449         \r
1450         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\r
1451         {\r
1452                 thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
1453                 thisWindow.resizeTo(maxx , thisWindow.document.body.scrollHeight + gBscrollHeight);\r
1454                 \r
1455                 miny =  thisWindow.document.body.scrollHeight + gBscrollHeight;\r
1456                 maxy = gBsClientHeight * gBMaxYOfParent;\r
1457                 \r
1458                 if (miny > maxy) { // the popup must have a scroll, OK let it be.\r
1459                         miny = maxy;\r
1460                         size.x = maxx;\r
1461                         size.y = maxy;\r
1462                         thisWindow.document.body.scroll = 'yes'; // At this time we do want to show scroll any more. so it will looks better a little.\r
1463                 }\r
1464                 else { // popup still can fit in the parent area by someway. now we choose the same h/w rate as parent.\r
1465                         size.y = miny;\r
1466                         \r
1467                         //  downsize from maxx , now I try to using binary divide.\r
1468                         x = maxx;\r
1469                         deltax = -maxx/2;\r
1470                         //j = 0;\r
1471                         while (true) {\r
1472                                 x = x + deltax;\r
1473                                 thisWindow.resizeTo(x, miny);\r
1474                                 thisWindow.resizeTo(x, miny);\r
1475                                 diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * ClientRate;\r
1476                                 if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
1477                                         deltax = Math.abs(deltax) /2;\r
1478                                 else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
1479                                         deltax = -Math.abs(deltax) /2;\r
1480                                 else \r
1481                                         // the y is close enough to wanted.\r
1482                                         break;\r
1483                                 if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
1484                                         break;\r
1485                         }\r
1486                         size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
1487                         size.y = thisWindow.document.body.scrollHeight;// + gBscrollHeight;     \r
1488                         thisWindow.document.body.scroll = 'no';\r
1489                         \r
1490                 // Handle absurd cases just in case IE flakes\r
1491         //              if (size.y < 100) {\r
1492         //                      size.y = 100;\r
1493         //              }\r
1494                 }\r
1495         }\r
1496         else {\r
1497                 if (thisWindow.document.body.scrollWidth > maxgoldx) {\r
1498                         size.x = maxx; \r
1499                         size.y = miny;  \r
1500                         thisWindow.document.body.scroll = 'yes';\r
1501                 }\r
1502                 else {\r
1503                         //  downsize from maxgoldx , now I try to using binary divide.\r
1504                         x = maxgoldx;\r
1505                         deltax = -maxgoldx/2;\r
1506                         //i = 0;\r
1507                         while (true) {\r
1508                                 x = x + deltax;\r
1509                                 thisWindow.resizeTo(x, miny);\r
1510                                 thisWindow.resizeTo(x, miny);\r
1511                                 diffy = thisWindow.document.body.scrollHeight + gBscrollHeight - x * gBRateH_W;\r
1512                                 if (diffy >  gBpermitYDelta ) // it is higher than wanted, so x need to be wide a little bitter\r
1513                                         deltax = Math.abs(deltax) /2;\r
1514                                 else if (diffy <  -gBpermitYDelta) // it is shorter than wanted, so x need to be narrow a little bitter\r
1515                                         deltax = -Math.abs(deltax) /2;\r
1516                                 else \r
1517                                         // the y is close enough to wanted.\r
1518                                         break;\r
1519                                 if (Math.abs(deltax) < gBpermitXDelta) // the next change is too slight and it can be ignore.\r
1520                                         break;\r
1521                                 //i ++;\r
1522                                 \r
1523                         }\r
1524                         //size.x = x - gBscrollWidth;\r
1525                         size.x = thisWindow.document.body.scrollWidth; //+ gBscrollWidth;\r
1526                         size.y = thisWindow.document.body.scrollHeight ;\r
1527                         thisWindow.document.body.scroll = 'no'; // At this time we do not want to show scroll any more. so it will looks better a little.\r
1528                         thisWindow.resizeTo(size.x, size.y);\r
1529                         if (thisWindow.document.body.scrollWidth > size.x)\r
1530                         {\r
1531                                 size.x = thisWindow.document.body.scrollWidth;\r
1532                         }\r
1533                         if (thisWindow.document.body.scrollHeight > size.y)\r
1534                         {\r
1535                                 size.y = thisWindow.document.body.scrollHeight;\r
1536                         }\r
1537                 }\r
1538         }\r
1539         \r
1540         // no reload no scrollbar.\r
1541         //size.x = size.x + 16;  //reserve a width for scrollbar (IE 4.0 only)\r
1542 \r
1543         thisWindow.resizeTo(size.x, size.y);\r
1544         thisWindow.resizeTo(size.x, size.y);\r
1545         return;\r
1546 }\r
1547 \r
1548 \r
1549 \r
1550 function BSSCPopupParentClicked()\r
1551 {\r
1552         if (!window.gbPopupTimeoutExpired) {\r
1553                 return false;\r
1554         }\r
1555         \r
1556         document.onmousedown = gbOrignalOnMouseDown;\r
1557 \r
1558         // Simply hide the popup\r
1559         hideAll();\r
1560 \r
1561         window.gbPopupTimeoutExpired = false;\r
1562 \r
1563         return true;\r
1564 }\r
1565 \r
1566 \r
1567 function BSSCPopupClicked()\r
1568 {\r
1569         if (!window.gbPopupTimeoutExpired) {\r
1570                 return false;\r
1571         }\r
1572 \r
1573 \r
1574         var popupIFrame = getCurrentPopupIFrame();\r
1575         if (popupIFrame == null) {\r
1576                 return true;\r
1577         }\r
1578 \r
1579 /*\r
1580         if ("undefined" != typeof(popupIFrame.gbInPopupMenu) &&\r
1581                 popupIFrame.gbInPopupMenu) {\r
1582                 return true;\r
1583         }*/\r
1584 \r
1585         if (!((popupIFrame.window.event != null) &&\r
1586             (popupIFrame.window.event.srcElement != null) &&\r
1587             ((popupIFrame.window.event.srcElement.tagName == "A") ||\r
1588             (popupIFrame.window.event.srcElement.tagName == "IMG")))) {\r
1589                 document.onmousedown = gbOrignalOnMouseDown;\r
1590 \r
1591         // Simply hide the popup\r
1592                 hideAll();\r
1593 \r
1594                 window.gbPopupTimeoutExpired = false;\r
1595 \r
1596                 return true;\r
1597         }\r
1598 }\r
1599 \r
1600 \r
1601 //trace the mouse over's position for hotspot\r
1602 function  BSPSPopupOnMouseOver(event)\r
1603 {\r
1604         if (gBsBrowser.ie4) {\r
1605                 window.gnPopupClickX = event.clientX + document.body.scrollLeft;\r
1606                 window.gnPopupClickY = event.clientY + document.body.scrollTop;\r
1607                 window.gnPopupScreenClickX = event.screenX;\r
1608                 window.gnPopupScreenClickY = event.screenY;\r
1609         } else if (gBsBrowser.ns4) {\r
1610                 window.gnPopupClickX = event.pageX - window.pageXOffset;\r
1611                 window.gnPopupClickY = event.pageY - window.pageYOffset;\r
1612                 window.gnPopupScreenClickX = event.screenX - window.pageXOffset;\r
1613                 window.gnPopupScreenClickY = event.screenY - window.pageYOffset;\r
1614         }\r
1615 }\r
1616 \r
1617 \r
1618 function BSSCHidePopupWindow()\r
1619 {\r
1620         if (window.gPopupWindow != null) {\r
1621                 if (gBsBrowser.ns4) {\r
1622                         if ((typeof window.gPopupWindow != "undefined") && (!window.gPopupWindow.closed)) {\r
1623                                 window.gPopupWindow.close();\r
1624                                 window.gPopupWindow = null;\r
1625                         }\r
1626                 }\r
1627         }\r
1628 \r
1629         return;\r
1630 }\r
1631 \r
1632 // Add the PopupOnClick to the onclick array.\r
1633 if (typeof(BsscRegisterOnClick) != "undefined")\r
1634 {\r
1635         BsscRegisterOnClick(BsPopupOnClick);\r
1636 }\r
1637 //End to support previous popup functions\r
1638 \r
1639 /// Section End  - Popup (JavaScript 1.0)\r
1640 \r
1641 /// Section Begin - Embedded Stub (JavaScript 1.0)\r
1642 \r
1643 var s_strAgent = navigator.userAgent.toLowerCase();\r
1644 var s_nVer         = parseInt(navigator.appVersion);\r
1645 \r
1646 var s_bIE  = (s_strAgent.indexOf('msie') != -1);\r
1647 var s_bNS  = (s_strAgent.indexOf('mozilla') != -1) && ((s_strAgent.indexOf('spoofer') == -1) && (s_strAgent.indexOf('compatible') == -1));\r
1648 var s_bOpera    = (s_strAgent.indexOf('opera') != -1);\r
1649 \r
1650 var s_bIE3Before = ((s_bIE) && (s_nVer <= 2));\r
1651 var s_bNS3Before = ((s_bNS) && (s_nVer <= 3));\r
1652 \r
1653 var s_bNS2              = ((s_bNS) && (s_nVer <= 2));\r
1654 var s_bNS3              = ((s_bNS) && (s_nVer == 3));\r
1655 var s_bIE300301 = ((s_bIE) && (s_nVer == 2) && ((s_strAgent.indexOf("3.00") != -1)||(s_strAgent.indexOf("3.0a") != -1)||(s_strAgent.indexOf("3.0b")!=-1)||(s_strAgent.indexOf("3.01")!=-1)));\r
1656 var s_bIE302    = ((s_bIE) && (s_nVer == 2) && (s_strAgent.indexOf("3.02") != -1));\r
1657 \r
1658 \r
1659 function HasExtJs()\r
1660 {\r
1661         if (s_bIE3Before) { return false;}\r
1662         if (s_bNS3Before) {     return false;}\r
1663         if (typeof (BsGeneralOnLoad) == "undefined"){ return false; }\r
1664         return true;\r
1665 }\r
1666 \r
1667 \r
1668 function BSSCCreatePopupDiv()\r
1669 {\r
1670         return;\r
1671 }\r
1672 \r
1673 \r
1674 function WritePopupMenuLayer()\r
1675 {\r
1676         if (HasExtJs()) {_WritePopupMenuLayer();}\r
1677 }\r
1678 \r
1679 function BSSCPopup(strURL, width, height)\r
1680 {\r
1681         if (HasExtJs()) { \r
1682                 _BSSCPopup(strURL, width, height);\r
1683         }else{\r
1684                 //Create a temporary window first to ensure the real popup comes up on top\r
1685                 var wndTemp = null;\r
1686                 if (!s_bNS3) {\r
1687                         wndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
1688                 }\r
1689                 // Create the real popup window\r
1690                 var wndPopup = window.open(strURL, "BSSCPopup", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=300,width=400");\r
1691                 // Close the temporary\r
1692                 if (!s_bNS3) {\r
1693                         wndTemp.close();\r
1694                 } else {\r
1695                         wndPopup.focus();\r
1696                 }\r
1697         }\r
1698 }\r
1699 \r
1700 var gbWndTemp = null, gbWndPopupLinks = null;\r
1701 var gbstrParaTotal = "";\r
1702 \r
1703 function PopupMenu_Invoke()\r
1704 {\r
1705         if (HasExtJs()) {\r
1706                 return _PopupMenu_Invoke(PopupMenu_Invoke.arguments);\r
1707         }\r
1708         if (s_bNS3Before || s_bIE3Before )      {\r
1709                 var argLen      = PopupMenu_Invoke.arguments.length;\r
1710                 if (argLen < 5) {\r
1711                         window.document.location.href = PopupMenu_Invoke.arguments[3];\r
1712                         return false;\r
1713                 }\r
1714                 gbWndTemp = null;\r
1715                 gbWndPopupLinks = null;\r
1716                 gbstrParaTotal = "";\r
1717                 for (var i = 0; i < (argLen - 2) / 2; i++) {\r
1718                         var strParaLine = "";\r
1719                         if (s_bNS2 || s_bOpera){\r
1720                                 strParaLine += "<a href=\"";\r
1721                                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
1722                                 strParaLine += "\">"\r
1723                                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
1724                                 strParaLine += "</a>";\r
1725                         } else {\r
1726                                 strParaLine += "<a href=\"javascript:";\r
1727                                 strParaLine += "gotoUrl(\'";\r
1728                                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 3];\r
1729                                 strParaLine += "\');\"";\r
1730                                 if (PopupMenu_Invoke.arguments[1] != '') {\r
1731                                         strParaLine += " TARGET='" + PopupMenu_Invoke.arguments[1] + "'";\r
1732                                 }\r
1733                                 strParaLine += ">";\r
1734                                 strParaLine += PopupMenu_Invoke.arguments[2 * i + 2];\r
1735                                 strParaLine += "</a>";\r
1736                         }\r
1737                         strParaLine += "<br>";\r
1738                         gbstrParaTotal += strParaLine;\r
1739                 }\r
1740                 var nHeight = argLen * 15;\r
1741                 var nWidth = 400;\r
1742                 var strParam = "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=auto";\r
1743                 strParam += ",height=" + nHeight + ",width=200,resizable";\r
1744                 \r
1745                 //Create a temporary window first to ensure the real popup comes up on top\r
1746                 //var wndTemp = null;\r
1747                 if (!s_bNS3) {\r
1748                         gbWndTemp = window.open("", "temp", "titlebar=no,toolbar=no,status=no,location=no,menubar=no,resizable=yes,scrollbars=yes,height=3,width=4");\r
1749                 } \r
1750                 gbWndPopupLinks = window.open("", "popuplinks", strParam);\r
1751 \r
1752                 setTimeout("Wait_PopupMenuReady()", 100);\r
1753         }\r
1754         return true;\r
1755 }\r
1756 \r
1757 function Wait_PopupMenuReady() \r
1758 {\r
1759         if (gbWndPopupLinks != null && "object" == typeof(gbWndPopupLinks.document)) {\r
1760                 PopupMenu_InvokeReady();\r
1761         }\r
1762         else \r
1763                 setTimeout("Wait_PopupMenuReady()", 100);\r
1764 }\r
1765 \r
1766 \r
1767 function PopupMenu_InvokeReady()\r
1768 {\r
1769         if (gbWndPopupLinks != null) {\r
1770                 gbWndPopupLinks.document.open("text/html");\r
1771                 gbWndPopupLinks.document.write("<html><head>");\r
1772                 if (s_bNS2 || s_bOpera) {\r
1773                         gbWndPopupLinks.document.write("<base href=\"" + location +"\">");\r
1774                 } else {\r
1775                         //YJ: IE301,302 and NS3.x works fine\r
1776                         gbWndPopupLinks.document.write("<");\r
1777                         gbWndPopupLinks.document.write("script>");\r
1778                         gbWndPopupLinks.document.write("function gotoUrl(aUrl) {opener.window.location=aUrl; close();}");\r
1779                         gbWndPopupLinks.document.write("<");\r
1780                         gbWndPopupLinks.document.write("/script>");\r
1781                 }\r
1782                 gbWndPopupLinks.document.write("</head><body onBlur=\'self.focus();\'>");\r
1783                 gbWndPopupLinks.document.write(gbstrParaTotal);\r
1784                 gbWndPopupLinks.document.write("</body></html>");\r
1785                 gbWndPopupLinks.document.close();\r
1786 \r
1787                 // Close the temporary\r
1788                 if (!s_bNS3 && gbWndTemp != null) {\r
1789                         gbWndTemp.close();\r
1790                 }else {\r
1791                         gbWndPopupLinks.focus();\r
1792                 }\r
1793 \r
1794                 return true;\r
1795         }\r
1796         return false;\r
1797 }\r
1798 \r
1799 /// Section End - Embedded Stub (JavaScript 1.0)\r
1800 \r
1801 //// Segment End -- (JavaScript 1.0)\r
1802 \r
1803 //// Segment Begin -- (JavaScript 1.2)\r
1804 /// Section Begin  - kadov DHTM (JavaScript 1.2)\r
1805 \r
1806 //Begin to support extended and dropdown text effects.\r
1807 function kadovIsParagraph(el)\r
1808 {\r
1809         return( el.tagName == "P" || el.tagName.indexOf("H") == 0 ) ? true : false;\r
1810 }\r
1811 \r
1812 function kadovInitEachChild(el)\r
1813 {       \r
1814         for(var i=0; i<el.children.length; i++)\r
1815         {\r
1816                 var child = el.children[i];\r
1817                 if( child.tagName == "SCRIPT" || child.tagName == "!" )\r
1818                         continue;\r
1819 \r
1820                 if( child.id != "" )\r
1821                 {\r
1822                         // to wipe out the onload effects\r
1823                         var onLoadEffect = child.style.getAttribute( "x-on-pageload" );\r
1824                         if( (onLoadEffect != null) && (onLoadEffect > "") )\r
1825                                 child.style.setAttribute( "x-on-pageload", "" );\r
1826                         \r
1827                         var href = child.getAttribute("href")\r
1828                         if( href != null && href > "" && href.indexOf( "BSSCPopup" ) >= 0 )\r
1829                                 kadovFilePopupInit(child.id); // Init for Popup\r
1830                         else if( child.className == "dropspot" || child.className == "expandspot" || \r
1831                                          child.className == "glossterm" )\r
1832                                 kadovTextPopupInit(child.id);// Init for Expanding/Glossary or DropDown text\r
1833                         else if( child.className == "trigger")\r
1834                                 kadovInitTrigger(child.id);// Init for Trigger\r
1835                         else\r
1836                         {\r
1837                                 kadovInitEffects(child.id);// Init for DHTML effects\r
1838                                 CEngine.SetOneTargetInitialState( child.id );\r
1839                         }\r
1840                 }\r
1841                 \r
1842                 if( (child.tagName == "IMG") && (child.getAttribute("dynsrc") > "") )\r
1843                         child.start = "mouseover";// to start a AVI file. fileopen doesn't work\r
1844 \r
1845                 kadovInitEachChild(child);\r
1846         }\r
1847 }\r
1848 \r
1849 function kadovRetrieveTextInner(el)\r
1850 {       \r
1851         var x = "";\r
1852         if( (!el) || (el.tagName == "!") || (el.tagName == "SCRIPT" ))\r
1853                 return x;\r
1854 \r
1855         if( kadovIsParagraph(el) )\r
1856         {\r
1857                 var strNewID = " ";\r
1858                 if( el.id != "" )\r
1859                         strNewID += "id=" + el.id + "_NewSpan ";\r
1860                 x = "<span" + strNewID + "style='" + el.style.cssText + "'>" + el.innerHTML + "</span>";\r
1861         }\r
1862         else\r
1863         {\r
1864                 for(var i=0; i<el.children.length; i++)\r
1865                         x += kadovRetrieveTextInner( el.children[i] );\r
1866         }\r
1867         return x;\r
1868 }\r
1869 \r
1870 function kadovRetrieveCleanHTML( strRawHTML, strTagOpen, strTagClose, nDistance )\r
1871 {       \r
1872         var nTagOpen = strRawHTML.indexOf( strTagOpen, 0 );\r
1873         if( nTagOpen < 0 )\r
1874                 return strRawHTML;\r
1875 \r
1876         var nTagClose = strRawHTML.indexOf( strTagClose, nTagOpen);\r
1877         if( nTagClose < nTagOpen )\r
1878                 return strRawHTML;\r
1879                 \r
1880         if( typeof(nDistance) == "number" && nDistance > 0 )\r
1881                 if( (nTagClose - nTagOpen) != nDistance )\r
1882                         return strRawHTML;\r
1883                 \r
1884         var strCleanOnce = strRawHTML.substring(0, nTagOpen) + strRawHTML.substr(nTagClose + strTagClose.length) ;\r
1885         return  kadovRetrieveCleanHTML( strCleanOnce, strTagOpen, strTagClose );\r
1886 }\r
1887 \r
1888 function kadovAdjustObjectTag(strRawHTML, nStartPos)\r
1889 {// adjust object tag for related topics HTML control, because innerHTML misses out the item settings\r
1890         \r
1891         //Is there any DTC?\r
1892         var strDTCTagOpen = '<!--Metadata type="DesignerControl" startspan';\r
1893         var strDTCTagClose = '<!--Metadata type="DesignerControl" endspan-->';\r
1894         var nDTCTagOpen = strRawHTML.indexOf( strDTCTagOpen, nStartPos );\r
1895         if( nDTCTagOpen < 0 )\r
1896                 return strRawHTML;\r
1897         var nDTCTagClose = strRawHTML.indexOf( strDTCTagClose, nDTCTagOpen );\r
1898         if( nDTCTagClose < nDTCTagOpen)\r
1899                 return strRawHTML; // no Design Time Controls;\r
1900                 \r
1901         //Is the DTC HTML Help Control?\r
1902         var strRTObjTagOpen = 'classid=clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11';\r
1903         var strRTObjTagClose = '</OBJECT>';\r
1904         var nRTObjTagOpen = strRawHTML.indexOf( strRTObjTagOpen, nDTCTagOpen );\r
1905         if( nRTObjTagOpen < nDTCTagOpen )\r
1906                 return strRawHTML;\r
1907         var nRTObjTagClose = strRawHTML.indexOf( strRTObjTagClose, nRTObjTagOpen );\r
1908         if( nRTObjTagClose < nRTObjTagOpen )\r
1909                 return strRawHTML; // is not a HTML help control\r
1910                 \r
1911         // Is it a related Topics html help control?\r
1912         var strRTObjLabel = '<PARAM NAME=\"Command\" VALUE=\"Related Topics';\r
1913         if( strRawHTML.indexOf(strRTObjLabel, nRTObjTagOpen) < 0 )\r
1914                 return strRawHTML;\r
1915         \r
1916         // does the commented object tag contain a items parameters             \r
1917         var strRTItemsOpen = '<param name=Items value="';\r
1918         var strRTItemsClose = '$$**$$" >';\r
1919         var nRTItemsOpen = strRawHTML.indexOf(strRTItemsOpen, nDTCTagOpen);\r
1920         if( nRTItemsOpen < nDTCTagOpen )\r
1921                 return strRawHTML;\r
1922         var nRTItemsClose = strRawHTML.indexOf(strRTItemsClose, nRTItemsOpen);\r
1923         if( nRTItemsClose < nRTItemsOpen )\r
1924                 return strRawHTML;\r
1925                 \r
1926         // found a items string\r
1927         var strItems = strRawHTML.substring( nRTItemsOpen + strRTItemsOpen.length, nRTItemsClose);\r
1928         if( strItems.length < 1 )\r
1929                 return strRawHTML;\r
1930         \r
1931         // to reconstruct the item(s) param tag(s)\r
1932         var strItemsArray = strItems.split('$$**$$');\r
1933         if( strItemsArray.length < 1 )\r
1934                 return strRawHTML;\r
1935         var strRunTimeItemParam = "";\r
1936         for( var i = 0; i < strItemsArray.length; i++ )\r
1937         {\r
1938                 strRunTimeItemParam += '<PARAM  NAME="Item' + (i+1);\r
1939                 strRunTimeItemParam += '"' + '  VALUE="';\r
1940                 strRunTimeItemParam += strItemsArray[i];\r
1941                 strRunTimeItemParam += '">';\r
1942         }\r
1943         \r
1944         // to insert the reconstructed item params into runtime object tag\r
1945         var strAdjustedHTML = strRawHTML.substring(0,nRTObjTagClose) + strRunTimeItemParam + strRawHTML.substring(nRTObjTagClose, strRawHTML.length);\r
1946         return kadovAdjustObjectTag(strAdjustedHTML, nDTCTagClose + strDTCTagClose.length);\r
1947 }\r
1948 \r
1949 function kadovTextPopupOnLoad( el )\r
1950 {\r
1951         if( !CCSSP.bIsWinOS && !CCSSP.bIsSunOS)\r
1952                 return 0;\r
1953 \r
1954         if( typeof(el) == "string" )\r
1955                 el = document.all.item(el);\r
1956 \r
1957         var src = el.getAttribute( "x-use-popup" );\r
1958         if(!src)\r
1959                 return 0;\r
1960 \r
1961         var name = src;\r
1962         if( src.substr(0,1) == "#" ) \r
1963                 name = src.substr(1, src.length-1);\r
1964         var srcDiv = document.all.item(name);\r
1965         if( !srcDiv )\r
1966                 return 1;\r
1967 \r
1968         var type = el.getAttribute( "x-popup-type" );\r
1969         var setup = el.getAttribute( "x-tmp-setup" );\r
1970         var newId = name;\r
1971         if( newId.indexOf( "_tmp") <= 0 )\r
1972                 newId += "_tmp";\r
1973 \r
1974         if( !setup )\r
1975         {\r
1976                 el.setAttribute( "x-tmp-setup", 1 );\r
1977         \r
1978                 if( type == "pulldown"  )\r
1979                 {\r
1980                         var strAdjust = kadovAdjustObjectTag(srcDiv.innerHTML,0);\r
1981                         var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
1982                         strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
1983 \r
1984                         //work around the bug in HH.exe that highlight the phrases when use Search tab\r
1985                         //this approach is just removing the <FONT...> tag inserted by Microsoft in the runtime\r
1986                         strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<FONT color=#", "\">", 52);\r
1987                         \r
1988                         var strStyle = " style='display:none; position:relative;";\r
1989                         var newDiv = "<div class=droptext id=" + newId + strStyle + "'>" + strCleanHTML + "</div>";\r
1990 \r
1991                         srcDiv.outerHTML = ""; // empty the original DIV tag\r
1992                         var elParentPra = kadovFindParentParagraph(el);\r
1993                         if( elParentPra )\r
1994                                 elParentPra.insertAdjacentHTML( "AfterEnd", newDiv );\r
1995                 }\r
1996                 else if( type == "expanding"  )\r
1997                 {\r
1998                         var inner = kadovRetrieveTextInner(srcDiv);\r
1999                         if( inner == "" )\r
2000                                 inner = srcDiv.innerHTML;\r
2001                         var strAdjust = kadovAdjustObjectTag(inner,0);\r
2002                         var strCleanHTML = kadovRetrieveCleanHTML(strAdjust, "<!--", "-->");\r
2003                         strCleanHTML = kadovRetrieveCleanHTML(strCleanHTML, "<SCRIPT", "/SCRIPT>");\r
2004                         var strClassName = (el.className == "glossterm") ? "glosstext" : "expandtext";\r
2005                         var newSpan = "<span class=" + strClassName + " style='display: none;' id=" + newId + ">&nbsp;" + strCleanHTML + "</span>";\r
2006                         srcDiv.outerHTML = ""; // empty the original DIV tag\r
2007                         el.insertAdjacentHTML( "AfterEnd", newSpan );\r
2008                 }\r
2009         }\r
2010         return 0;\r
2011 }\r
2012 \r
2013 function kadovTextPopup( el )\r
2014 {\r
2015         if( (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS) || (window.event == null) )\r
2016                 return;\r
2017         window.event.cancelBubble = true;\r
2018 \r
2019         if( typeof(el) == "string" )\r
2020                 el = document.all.item(el);\r
2021 \r
2022         var src = el.getAttribute( "x-use-popup" );\r
2023         if(!src)\r
2024                 return;\r
2025 \r
2026         var name = src;\r
2027         if( src.substr(0,1) == "#" ) \r
2028                 name = src.substr(1, src.length-1) + "_tmp";\r
2029         var srcDiv = document.all.item(name);\r
2030         if( !srcDiv )\r
2031                 return;\r
2032 \r
2033         var type = el.getAttribute( "x-popup-type" );\r
2034         var setup = el.getAttribute( "x-tmp-setup" );\r
2035         if( srcDiv )\r
2036         {\r
2037                 if( srcDiv.style.display == "" )\r
2038                         srcDiv.style.display = "none";\r
2039                 else\r
2040                 {\r
2041                         srcDiv.style.display = "";\r
2042                         if( typeof(srcDiv.bInitialized) == "undefined" )\r
2043                         {\r
2044                                 srcDiv.bInitialized = true;\r
2045                                 kadovInitEffects(name);\r
2046                                 kadovInitEachChild(srcDiv);\r
2047                         }\r
2048                 }\r
2049         }\r
2050         return;\r
2051 }\r
2052 \r
2053 function kadovFindParentParagraph( el )\r
2054 {\r
2055         if( typeof(el) == "string" )\r
2056                 el = document.all.item(el);\r
2057         if( (!el) || el.tagName == "BODY" )\r
2058                 return null;\r
2059         if( kadovIsParagraph(el.parentElement) )\r
2060                 return el.parentElement;\r
2061         else\r
2062                 return kadovFindParentParagraph( el.parentElement );\r
2063 }\r
2064 \r
2065 //Begin HTML code invoked function\r
2066 function kadovRegisterEventHandler( obj, strEvent, strEventHandler )\r
2067 {\r
2068         if( !gbBsIE4 )\r
2069                 return;\r
2070         CCSSP.RegisterEventHandler( obj, strEvent, strEventHandler );\r
2071 }\r
2072 \r
2073 function kadovTextPopupInit( el )\r
2074 {\r
2075         if( (!gbBsIE4) || (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS))\r
2076                 return;\r
2077                 \r
2078         if( typeof(el) == "string" )\r
2079                 el = document.all.item(el);\r
2080         if( el != null )\r
2081         {\r
2082                 CCSSP.RegisterEventHandler( el, "onclick", "kadovTextPopup(" + el.id +");" );\r
2083                 CCSSP.RegisterEventHandler( window, "onload", "kadovTextPopupOnLoad(" + el.id +");" );\r
2084         }\r
2085 }\r
2086 //End HTML code invoked function\r
2087 \r
2088 //End to support extended and dropdown text effects.\r
2089 \r
2090 //Begin to convert iWrite format to RoboEditor Format for DHTML effects\r
2091 function kadovInitTriggersInHead( )\r
2092 {\r
2093   if( Object.xDelayedInitElements )\r
2094   {\r
2095      var x = Object.xDelayedInitElements;\r
2096      for(i=0; i<x.length; i++)\r
2097         kadovInitTrigger( x[i] );\r
2098   }\r
2099 }\r
2100 \r
2101 //Begin HTML code invoked function\r
2102 function kadovFilePopupInit( el )\r
2103 {\r
2104         if( !gbBsIE4 )\r
2105                 return;\r
2106         if( typeof(el) == "string" )\r
2107                 el = document.all.item(el);\r
2108 \r
2109         if( el != null )\r
2110                 CCSSP.RegisterEventHandler( el, "onmouseover", "BSPSPopupOnMouseOver(event);" );\r
2111 }\r
2112 \r
2113 function kadovInitTrigger( element )\r
2114 {\r
2115         if( !gbBsIE4 )\r
2116                 return;\r
2117         var srcElement = element;\r
2118         if( typeof(srcElement) == "string" )\r
2119         {\r
2120                 srcElement = document.all.item(element,0);\r
2121                 if(srcElement == null)\r
2122                         return;\r
2123         }\r
2124         \r
2125         if( !kadovIsParentVisible(srcElement) )\r
2126                 return;\r
2127 \r
2128         var targets = srcElement.getAttribute( "x-targets" );\r
2129         var arrOneTarget = targets.split( "," );\r
2130         for( var i = 0; i < arrOneTarget.length; i ++ )\r
2131                 bsscFXInit( element, arrOneTarget[i], null, null, null, null );\r
2132 }\r
2133 \r
2134 function kadovIsParentVisible( el )\r
2135 {\r
2136         if( typeof(el) == "string" )\r
2137                 el = document.all.item(el);\r
2138         if( (!el) || el.tagName == "BODY" )\r
2139                 return true;\r
2140         if( el.style.display == 'none' ) //el.visibility == 'hidden' || \r
2141                 return false;\r
2142         else\r
2143                 return kadovIsParentVisible( el.parentElement );\r
2144 }\r
2145 \r
2146 function kadovInitEffects( element )\r
2147 {\r
2148         if( !gbBsIE4 )\r
2149                 return;\r
2150         var srcElement = element;\r
2151         if( typeof(srcElement) == "string" )\r
2152         {\r
2153                 srcElement = document.all.item(element,0);\r
2154                 if(srcElement == null)\r
2155                         return;\r
2156         }\r
2157         \r
2158         if( !kadovIsParentVisible(srcElement) )\r
2159                 return;\r
2160         \r
2161         kadovInitEffect( srcElement, "x-on-hover" );\r
2162         kadovInitEffect( srcElement, "x-on-pageclick" );\r
2163         kadovInitEffect( srcElement, "x-on-pageload" );\r
2164         kadovInitEffect( srcElement, "x-on-trigger-1" );\r
2165         kadovInitEffect( srcElement, "x-on-trigger-2" );\r
2166 }\r
2167 //End HTML code invoked function\r
2168 \r
2169 function kadovInitEffect( element, prop )\r
2170 {\r
2171         var values = null;\r
2172         if( element.getAttribute( "currentStyle" )  && element.currentStyle.getAttribute)\r
2173                 values = element.currentStyle.getAttribute( prop );\r
2174         else  if (element.style.getAttribute)\r
2175                 values = element.style.getAttribute( prop );\r
2176         if( !values )\r
2177                 return;\r
2178 \r
2179         var functions = new Array();\r
2180         var nIdx = 0, nStart = 0;\r
2181         var nNext = values.indexOf( "\)", 0);\r
2182         while( nNext >= 0 && nNext < values.length )\r
2183         {\r
2184                 functions[nIdx] = values.substr( nStart, nNext-nStart+1);\r
2185                 nStart = nNext + 1;\r
2186                 nIdx++;\r
2187                 nNext = values.indexOf( "\)", nStart);\r
2188         }\r
2189                 \r
2190         for( var i=0; i<functions.length; i++)\r
2191         {\r
2192                 var id = element.getAttribute( "id" );\r
2193                 var translatedProp = kadovTranslateProp(prop);\r
2194 \r
2195                 var lp = functions[i].indexOf( "(" );\r
2196                 var fnname = functions[i].substring(0, lp);\r
2197                 var srcargs = functions[i].substring(lp+1, functions[i].length-1);\r
2198                 \r
2199                 var nClickTimes = 1;\r
2200                 var arrForClickCount = srcargs.split( "," );\r
2201                 for( var j = 0; j < arrForClickCount.length; j++ )\r
2202                 {// to locate and get the "clicks=99" settings\r
2203                         var nPageClick = arrForClickCount[j].indexOf("clicks");\r
2204                         if( nPageClick >= 0 )\r
2205                         {\r
2206                                 nPageClick = arrForClickCount[j].indexOf("=");\r
2207                                 if( nPageClick > 0 )\r
2208                                 {\r
2209                                         nClickTimes = arrForClickCount[j].substring( nPageClick + 1, arrForClickCount[j].length) * 1;\r
2210                                         break;\r
2211                                 }\r
2212                         }\r
2213                 }\r
2214                 var args = srcargs;\r
2215                 if( j < arrForClickCount.length )\r
2216                 {// to strip out the "clicks=99" from the arguments string\r
2217                         args = "";\r
2218                         for( var k = 0; k < arrForClickCount.length; k ++ )\r
2219                         {\r
2220                                 if( k != j )\r
2221                                 {\r
2222                                         args += arrForClickCount[k];\r
2223                                         if( k < arrForClickCount.length - 1 )\r
2224                                                 args += ",";\r
2225                                 }\r
2226                         }\r
2227                 }\r
2228                 bsscFXInit( null, id, translatedProp, fnname, args, nClickTimes );\r
2229         }\r
2230 }\r
2231 \r
2232 function kadovTranslateProp( prop )\r
2233 {\r
2234         switch( prop )\r
2235         {\r
2236         case "x-on-hover" :     return "bsschover";\r
2237         case "x-on-pageclick" : return "bsscpageclick";\r
2238         case "x-on-pageload" :  return "bsscpageload";\r
2239         case "x-on-trigger-1" : return "bssctrigger1";\r
2240         case "x-on-trigger-2" : return "bssctrigger2";\r
2241         }\r
2242         return null;\r
2243 }\r
2244 //End to convert iWrite format to RoboEditor Format for DHTML effects\r
2245 \r
2246 //Begin the definition of one entry to DHTML effects\r
2247 function bsscFXInit( trigger_ID, target_ID, event_type, \r
2248         action_type, action_setting, event_addional )\r
2249 {\r
2250         if( (!CCSSP.bIsWinOS && !CCSSP.bIsSunOS ) || typeof(target_ID) != "string" )//MUST have a target_ID\r
2251                 return; // we don't support Navigator yet\r
2252         \r
2253         if( typeof(event_type) == "string" )\r
2254                 event_type = event_type.toLowerCase();\r
2255         if( typeof(action_type) == "string" )\r
2256                 action_type = action_type.toLowerCase();\r
2257         if( typeof(action_setting) == "string" )\r
2258                  action_setting = action_setting.toLowerCase();\r
2259         \r
2260         // to get the target element then add it to the target list\r
2261         var eleTarget = CCSSP.GetObject( target_ID );\r
2262         if( (eleTarget != null) && (event_type != null) && (action_type != null) )\r
2263         {\r
2264                 CEngine.AddOneTarget( target_ID, eleTarget );\r
2265                 CEngine.BuildTargetObject(target_ID, event_type, action_type, action_setting, event_addional);\r
2266         }\r
2267         \r
2268         // to validate the trigger_ID parameter\r
2269         if( typeof(trigger_ID) == "string" && trigger_ID != "" )\r
2270                 CEngine.BuildTriggerObject( trigger_ID, target_ID );\r
2271 }       \r
2272 //End the definition of one entry to DHTML effects\r
2273 \r
2274 \r
2275 /// Section End  - kadov DHTM (JavaScript 1.2)\r
2276 \r
2277 \r
2278 /// Section Begin  - CCSSP DHTM (JavaScript 1.2)\r
2279 \r
2280 //Begin JavaScript libary for cross-platform positioning object.\r
2281 function CCSSP(){} // constructor of CCSSP class\r
2282 \r
2283 CCSSP.strAgent = navigator.userAgent.toLowerCase(); \r
2284 CCSSP.nAppVersion = parseInt(navigator.appVersion);\r
2285 \r
2286 CCSSP.bIsWinOS = ((CCSSP.strAgent.indexOf("win") >= 0) || (CCSSP.strAgent.indexOf("16bit") >= 0));\r
2287 CCSSP.bIsMacOS = (CCSSP.strAgent.indexOf("mac") >= 0);\r
2288 CCSSP.bIsSunOS = (CCSSP.strAgent.indexOf("sunos") != -1);\r
2289 \r
2290 CCSSP.bIsIE = (navigator.appName.indexOf("Microsoft") >= 0);\r
2291 CCSSP.bIsIE4 = (CCSSP.bIsIE && (CCSSP.nAppVersion >= 4));\r
2292 CCSSP.bIsIE5 = (CCSSP.bIsIE4 && (CCSSP.strAgent.indexOf("msie 5") != -1) )\r
2293 \r
2294 CCSSP.bIsNav = (navigator.appName.indexOf("Netscape") >= 0);\r
2295 CCSSP.bIsNav4 = (CCSSP.bIsNav && (CCSSP.nAppVersion >= 4));\r
2296 CCSSP.bIsNav6 = (CCSSP.bIsNav && (CCSSP.nAppVersion >= 5));\r
2297 \r
2298 CCSSP.GetObject = function( obj )\r
2299 {//convert object name string or reference into a valid object reference\r
2300         if( typeof(obj) == "object" )\r
2301                 return obj;\r
2302         else if( typeof(obj) == "string" && obj != "")\r
2303         {\r
2304                 if( CCSSP.bIsNav4 )\r
2305                         return eval("document." + obj);\r
2306                 else\r
2307                         return eval("document.all." + obj);\r
2308         }\r
2309         else\r
2310                 return null;\r
2311 }\r
2312 \r
2313 CCSSP.MoveObjectTo = function(obj, x, y)\r
2314 {//positioning an object at a specific pixel coordinate\r
2315         if( CCSSP.bIsNav4 )\r
2316                 obj.moveTo(x,y);\r
2317         else\r
2318         {\r
2319                 obj.style.pixelLeft = x;\r
2320                 obj.style.pixelTop = y;\r
2321         }\r
2322 }\r
2323 \r
2324 CCSSP.MoveObjectBy = function(obj, dx, dy)\r
2325 {//moveing a object by x and/or y pixel\r
2326         if( CCSSP.bIsNav4 )\r
2327                 obj.moveBy(dx,dy);\r
2328         else\r
2329         {\r
2330                 obj.style.pixelLeft += dx;\r
2331                 obj.style.pixelTop += dy;\r
2332         }\r
2333 }\r
2334 \r
2335 CCSSP.SetObjectBGColor = function(obj, color)\r
2336 {//set the background color of an object\r
2337         if( CCSSP.bIsNav4 )\r
2338                 obj.bgColor = color;\r
2339         else\r
2340                 obj.style.backgroundColor = color;\r
2341 }\r
2342 \r
2343 CCSSP.ShowObject = function(obj, bShow)\r
2344 {// set the object to be visible or invisible\r
2345         if( CCSSP.bIsNav4 )\r
2346                 obj.visibility = (bShow == true) ? 'show' : 'hide';\r
2347         else\r
2348                 obj.style.visibility = (bShow == true) ? 'visible' : 'hidden';// when hidden, it still occupy some space.\r
2349 }\r
2350 \r
2351 CCSSP.GetObjectLeft = function(obj)\r
2352 {// retrieve the x coordinate of a posionable object\r
2353         if( CCSSP.bIsNav4 )\r
2354                 return obj.left;\r
2355         else\r
2356                 return obj.style.pixelLeft;\r
2357 }\r
2358 \r
2359 CCSSP.GetObjectTop = function(obj)\r
2360 {// retrieve the y coordinate of a posionable object\r
2361         if( CCSSP.bIsNav4 )\r
2362                 return obj.top;\r
2363         else\r
2364                 return obj.style.pixelTop;\r
2365 }\r
2366 \r
2367 CCSSP.GetObjectContainLeft = function(obj)\r
2368 {// retrieve the x coordinate of a posionable object relative to it's parent element\r
2369         if( CCSSP.bIsNav4 )\r
2370                 return obj.pageX;\r
2371         else\r
2372         {\r
2373                 if( obj == document.body )\r
2374                         return obj.clientLeft;\r
2375                 else\r
2376                         return obj.offsetLeft;\r
2377         }\r
2378 }\r
2379 \r
2380 CCSSP.GetObjectWindowLeft = function(obj)\r
2381 {// retrieve the x coordinate of a posionable object relative to browser window\r
2382         if( CCSSP.bIsNav4 )\r
2383                 return obj.pageX;\r
2384         else\r
2385         {\r
2386                 var nOffsetWindowLeft = 0;\r
2387                 for(var element = obj; element; element = element.offsetParent)\r
2388                         nOffsetWindowLeft += CCSSP.GetObjectContainLeft(element);\r
2389                 return nOffsetWindowLeft;\r
2390         }\r
2391 }\r
2392 \r
2393 CCSSP.GetObjectContainTop = function(obj)\r
2394 {// retrieve the y coordinate of a posionable object relative to it's parent element\r
2395         if( CCSSP.bIsNav4 )\r
2396                 return obj.pageY;\r
2397         else\r
2398         {\r
2399                 if( obj == document.body )\r
2400                         return obj.clientTop;\r
2401                 else\r
2402                         return obj.offsetTop;\r
2403         }\r
2404 }\r
2405 \r
2406 CCSSP.GetObjectWindowTop = function(obj)\r
2407 {// retrieve the y coordinate of a posionable object relative to browser window\r
2408         if( CCSSP.bIsNav4 )\r
2409                 return obj.pageY;\r
2410         else\r
2411         {\r
2412                 var nOffsetWindowTop = 0;\r
2413                 for(var element = obj; element; element = element.offsetParent)\r
2414                         nOffsetWindowTop += CCSSP.GetObjectContainTop(element);\r
2415                 return nOffsetWindowTop;\r
2416         }\r
2417 }\r
2418 \r
2419 CCSSP.GetObjectHeight = function(obj)\r
2420 {// retrieve the height of a posionable object\r
2421         if( CCSSP.bIsNav4 )\r
2422                 return obj.clip.height;\r
2423         else\r
2424                 return obj.offsetHeight;\r
2425 }\r
2426 \r
2427 CCSSP.GetObjectWidth = function(obj)\r
2428 {// retrieve the width of a posionable object\r
2429         if( CCSSP.bIsNav4 )\r
2430                 return obj.clip.width;\r
2431         else\r
2432                 return obj.offsetWidth;\r
2433 }\r
2434 \r
2435 CCSSP.RegisterEventHandler = function( srcObj, rawEventName, funcHandler )\r
2436 { // to add the "funcHandler" as the "rawEventName" 's handler to the "srcObj" object,the original event handler will be combined\r
2437         if (CCSSP.bIsNav4 && !CCSSP.bIsNav6)\r
2438                 return ;\r
2439         var oldHandler = "";\r
2440         if (CCSSP.bIsMacOS && CCSSP.bIsIE4)\r
2441         {\r
2442                 if (typeof(srcObj[rawEventName.toLowerCase()])=="unknown")\r
2443                 { //search for <SCRIPT> tag which define the event handler\r
2444                         for( var i = 0; i < document.scripts.length; i++ ) \r
2445                         {\r
2446                                 var script = document.scripts[i];\r
2447                                 if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
2448                                 {\r
2449                                         oldHandler = script.innerHTML;\r
2450                                         break;\r
2451                                 }\r
2452                         }\r
2453                 }\r
2454         }\r
2455         else\r
2456         {\r
2457                 var oldInlineHandler = srcObj[rawEventName.toLowerCase()];\r
2458                 if( oldInlineHandler != null && typeof(oldInlineHandler) != "undefined")\r
2459                 {\r
2460                         var functionDefinition = oldInlineHandler.toString();\r
2461                         var bodyStart = functionDefinition.indexOf( "{" );\r
2462                         var bodyEnd = functionDefinition.lastIndexOf( "}" );\r
2463                         if( bodyStart > 0 || bodyEnd > bodyStart )\r
2464                                 oldHandler = functionDefinition.substr( bodyStart + 1, bodyEnd - bodyStart - 2 );\r
2465                 }\r
2466                 else if( CCSSP.bIsIE4 )\r
2467                 { //search for <SCRIPT> tag which define the event handler\r
2468                         for( var i = 0; i < document.scripts.length; i++ ) \r
2469                         {\r
2470                                 var script = document.scripts[i];\r
2471                                 if( (script.htmlFor == srcObj.id || script.htmlFor == srcObj ) && script.event == rawEventName )\r
2472                                 {\r
2473                                         oldHandler = script.innerHTML;\r
2474                                         break;\r
2475                                 }\r
2476                         }\r
2477                 }\r
2478         }       \r
2479         if( oldHandler.indexOf(funcHandler) >= 0 )\r
2480                 return;// to prevent register the funtion twice.\r
2481 \r
2482         if( CCSSP.bIsNav4 ) // only "onload, onresize, onfocus" apply to window\r
2483         {// other raw events will apply to layer\r
2484                 var noOn = rawEventName.substring(2, rawEventName.length);\r
2485                 if( typeof(noOn) == "string" && noOn.length > 3 ) {\r
2486                         srcObj.captureEvents( Event[noOn.toUpperCase()] );\r
2487                 }\r
2488         }\r
2489 \r
2490         var newHandler = oldHandler;\r
2491         if( newHandler.length == 0 )\r
2492                 newHandler = funcHandler;\r
2493         else\r
2494                 newHandler += "; " + funcHandler;\r
2495         srcObj[rawEventName.toLowerCase()] = new Function( newHandler );\r
2496 }\r
2497 \r
2498 CCSSP.GetWindowHeight = function()\r
2499 {// retrieve the height of available content in browser window\r
2500         if( CCSSP.bIsNav4 )\r
2501                 return window.innerHeight;\r
2502         else\r
2503                 return document.body.clientHeight;\r
2504 }\r
2505 \r
2506 CCSSP.GetWindowBottom = function()\r
2507 {// retrieve the bottom postion of browser window\r
2508         if( CCSSP.bIsNav4 )\r
2509                 return window.outerHeight + window.pageYOffset;\r
2510         else\r
2511                 return document.body.clientHeight + document.body.scrollTop;\r
2512 }\r
2513 \r
2514 CCSSP.GetWindowWidth = function()\r
2515 {// retrieve the width of available content in browser window\r
2516         if( CCSSP.bIsNav4 )\r
2517                 return window.innerWidth;\r
2518         else\r
2519                 return document.body.clientWidth;\r
2520 }\r
2521 \r
2522 CCSSP.GetWindowRight = function()\r
2523 {// retrieve the right postion of browser window\r
2524         if( CCSSP.bIsNav4 )\r
2525                 return window.outerWidth + window.pageXOffset;\r
2526         else\r
2527                 return document.body.clientWidth + document.body.scrollLeft;\r
2528 }\r
2529 \r
2530 CCSSP.TrimString = function( objString, subtrim )\r
2531 {// to trim the "subtrim" in the beginning and ending of a string object\r
2532         if( typeof(subtrim) != "string" || subtrim == null )\r
2533                 return objString;\r
2534         var strHead = objString.substring(0, 1);\r
2535         var strRear = objString.substring(objString.length-1, objString.length);\r
2536         if( strHead != subtrim && strRear != subtrim )\r
2537                 return objString;\r
2538         \r
2539         var spacePos = objString.indexOf(subtrim);\r
2540         if( spacePos < 0 )\r
2541                 return objString;\r
2542         else if( spacePos == objString.length - 1 )\r
2543                 return objString.substring(0, spacePos);\r
2544         else\r
2545         {\r
2546                 var newString = objString.substring( spacePos + 1, objString.length);\r
2547                 return CCSSP.TrimString( newString, subtrim );\r
2548         }\r
2549 }\r
2550 \r
2551 CCSSP.TrimSpace = function( objString )\r
2552 {\r
2553         var Trim1 = CCSSP.TrimString( objString, " ");\r
2554         return CCSSP.TrimString( Trim1, "\'");\r
2555 }\r
2556 \r
2557 CCSSP.GetEventElement = function( navEventObject )\r
2558 {// to get the element who fired the current event\r
2559         if(CCSSP.bIsNav4 ) \r
2560                 if (CCSSP.bIsNav6)\r
2561                         return null;\r
2562                 else\r
2563                          navEventObject.target;\r
2564         else\r
2565                 return event.srcElement;\r
2566 }\r
2567 \r
2568 CCSSP.PrepareFilter = function( Obj )\r
2569 {//to prepare for making the filter work\r
2570         Obj.style.filter = "";\r
2571         if( Obj.style.width != "" || Obj.style.height != "" || Obj.style.position == "absolute" )\r
2572                 return;\r
2573         Obj.style.height = CCSSP.GetObjectHeight(Obj);\r
2574 }\r
2575 \r
2576 CCSSP.IsDescendant = function( progenitor, progeny )\r
2577 {\r
2578         if( typeof(progeny) == "undefined" || progeny == null )\r
2579                 return false;\r
2580         else if( progeny == progenitor )\r
2581                 return true; \r
2582         else if( progeny.id == progenitor.id ) \r
2583                 return true; \r
2584         else if( progeny.parentElement == progenitor.parentElement )\r
2585                 return false;\r
2586         else\r
2587                 return CCSSP.IsDescendant( progenitor, progeny.parentElement );\r
2588 }\r
2589 \r
2590 CCSSP.IsTextTag = function( Obj )\r
2591 {\r
2592         if( typeof( Obj.tagName ) == "undefined" )\r
2593                 return false;\r
2594         return( Obj.tagName.indexOf("H") == 0 || Obj.tagName == "P" || \r
2595                         Obj.tagName == "FONT" || Obj.tagName == "SPAN" );\r
2596 }\r
2597 \r
2598 //End JavaScript libary for cross-platform positioning object.\r
2599 \r
2600 /// Section End  - CCSSP DHTM (JavaScript 1.2)\r
2601 \r
2602 /// Section Begin  - CCSSP DHTM 1 (JavaScript 1.2)\r
2603 \r
2604 //Begin the definition of class CTrigger\r
2605 function CTrigger( TriggerElement )\r
2606 {\r
2607         // object : the trigger element. Never be null. \r
2608         this.eleTrigger = TriggerElement;\r
2609         \r
2610         // number : the click counter number: only 3 values: 0,1,2;\r
2611         this.nCounter = 0; \r
2612         \r
2613         //object as associative array of string:\r
2614         // the associate target ID strings; one element at least.                       \r
2615         this.objStrTarget = new Object();\r
2616         this.eleTrigger.style.cursor = "hand";\r
2617         if( this.eleTrigger.tagName == "AREA" && this.eleTrigger.getAttribute("href") == "" )\r
2618                 this.eleTrigger.setAttribute("href", "#") // to make a hand cursor for image map\r
2619 }\r
2620 \r
2621 CTrigger.prototype.AddTargetID = function( strTargetID )\r
2622 {// add one target ID string to the objStrTarget\r
2623         if( typeof(strTargetID) != "string" )\r
2624                 return ;\r
2625         if( typeof(this.objStrTarget[strTargetID]) != "string" )\r
2626                 this.objStrTarget[strTargetID] = strTargetID;\r
2627 }\r
2628 \r
2629 CTrigger.prototype.OnTriggerClick = function()\r
2630 {// to activate all asociated target\r
2631         var strEventType = ( (this.nCounter++)% 2 == 0 ) ? \r
2632                 "bssctrigger1" : "bssctrigger2";\r
2633                 \r
2634         // to enumerate associative target element's ID string\r
2635         for( var strTargetID in this.objStrTarget ) \r
2636                 CEngine.SendEventToOneTarget( strTargetID, strEventType );\r
2637 }\r
2638 //End the definition of class CTrigger\r
2639 \r
2640 //Begin the definition of class CTarget\r
2641 function CTarget( TargetElement )\r
2642 {\r
2643         // object : the target element. Never be null.\r
2644         this.eleTarget = TargetElement;\r
2645         this.objManager = new Object(); // object: the event manager\r
2646\r
2647 \r
2648 CTarget.nPageClickCounter = 0;// static class property.\r
2649 \r
2650 CTarget.prototype.GetAgencyObject = function(str_action_type,action_setting )\r
2651 {// return the action agency ( effect )object's refernece \r
2652         switch( str_action_type )\r
2653         {\r
2654         case "show":return new CAgencyShow( this.eleTarget, true ) ;\r
2655         case "hide":return new CAgencyShow( this.eleTarget, false ) ;\r
2656 \r
2657     case "flyin" : \r
2658         return new CAgencyFly(this.eleTarget, action_setting, true);\r
2659     case "flyout" : \r
2660         return new CAgencyFly(this.eleTarget, action_setting, false);\r
2661     case "spiralin" : \r
2662         return new CAgencySpiral(this.eleTarget, action_setting, true);\r
2663     case "spiralout" : \r
2664         return new CAgencySpiral(this.eleTarget, action_setting, false);\r
2665     case "zoomin" :\r
2666         return new CAgencyZoom(this.eleTarget, action_setting, true);\r
2667     case "zoomout" : \r
2668         return new CAgencyZoom(this.eleTarget, action_setting, false);\r
2669     case "elastic" : \r
2670                 return new CAgencyElastic(this.eleTarget, action_setting);\r
2671                 \r
2672     case "fadein" : \r
2673         return (CCSSP.bIsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, true) : null;\r
2674     case "fadeout" :\r
2675         return (CCSSP.bIsIE4)? new CAgencyAlpha(this.eleTarget, action_setting, false) : null;\r
2676     case "rockrollstatic" :\r
2677     case "rockroll" :\r
2678         return (CCSSP.bIsIE4)? new CAgencyWave(this.eleTarget, action_setting, false) : null;\r
2679  \r
2680     case "glow":\r
2681         return (CCSSP.bIsIE4)? new CAgencyGlow(this.eleTarget,action_setting) : null;\r
2682     case "dropshadow":\r
2683         return (CCSSP.bIsIE4)? new CAgencyDropShadow(this.eleTarget,action_setting) : null;\r
2684     case "transition" :\r
2685         return (CCSSP.bIsIE4)? new CAgencyRevealTrans(this.eleTarget,action_setting) : null;\r
2686     case "blur" :\r
2687         return (CCSSP.bIsIE4)? new CAgencyBlur(this.eleTarget,action_setting) : null;\r
2688 \r
2689     case "fliph" : // all these 4 do NOT need any parameters\r
2690     case "flipv" :\r
2691     case "invert":\r
2692     case "gray" :\r
2693         return (CCSSP.bIsIE4)? new CAgencyChangeFilter(this.eleTarget, str_action_type) : null;\r
2694     \r
2695     case "fontchange": // the effects below change the style on the fly, so won't work in Navigator\r
2696         return (CCSSP.bIsIE4)? new CAgencyFontChange(this.eleTarget,action_setting) : null;\r
2697     case "boderchange": \r
2698     case "stylechange":\r
2699         return (CCSSP.bIsIE4)? new CAgencyChangeStyle(this.eleTarget,action_setting) : null;\r
2700 \r
2701         default: return null;\r
2702         }\r
2703 }\r
2704 \r
2705 CTarget.prototype.SetEventManager = function( \r
2706         one_event_type,str_action_type,action_setting,event_additional)\r
2707 {// to set the event manager with specified action \r
2708         if( typeof( one_event_type ) != "string" ||     \r
2709                 typeof( str_action_type ) != "string"||\r
2710                 typeof( action_setting ) != "string" )\r
2711                 return false;\r
2712         if( typeof(this.objManager[one_event_type]) == "undefined" )\r
2713         {\r
2714                 this.objManager[one_event_type] = new Object();\r
2715                 this.objManager[one_event_type].length = 0;\r
2716         }\r
2717         \r
2718         var eventAgency = this.GetAgencyObject(str_action_type,action_setting);\r
2719         if( eventAgency != null )\r
2720         {\r
2721                 var ct = this.objManager[one_event_type].length ++;\r
2722                 this.objManager[one_event_type][ct] = eventAgency;\r
2723                 \r
2724                 if( one_event_type == "bsscpageclick" )\r
2725                 {// to deal with the "number of pageclick" stuff\r
2726                         if( typeof(event_additional) == "number" )\r
2727                                 this.objManager[one_event_type][ct].nPageClick = event_additional;\r
2728                         else // set the default number \r
2729                                 this.objManager[one_event_type][ct].nPageClick = 1;\r
2730                         \r
2731                         if( (typeof(this.objManager.nMinPageClickIndex) == "undefined") ||\r
2732                             (this.objManager[one_event_type][ct].nPageClick < \r
2733                                         this.objManager[one_event_type][this.objManager.nMinPageClickIndex].nPageClick) )\r
2734                                 this.objManager.nMinPageClickIndex = ct;\r
2735                 }\r
2736                 \r
2737                 //hide the object blindly,SetState function will take care of the final correct state\r
2738                 if( ((one_event_type == "bsscpageclick") && \r
2739                          (this.objManager[one_event_type][ct].nPageClick == 1)) ||\r
2740                         one_event_type == "bsscpageload" ||\r
2741                         one_event_type == "bssctrigger1" )\r
2742                         CCSSP.ShowObject( this.eleTarget, false );\r
2743                 \r
2744                 if( one_event_type == "bssctrigger1" || one_event_type == "bssctrigger2" )\r
2745                         if( typeof( this.strTriggerEvent ) == "undefined" )\r
2746                                 this.strTriggerEvent = ( one_event_type == "bssctrigger1" ) ? "bssctrigger2" : "bssctrigger1";\r
2747                         \r
2748                 return true;\r
2749         }\r
2750         return false;\r
2751 }\r
2752 \r
2753 CTarget.prototype.OnEvent = function( strBsscEvent )\r
2754 {// response to the event ( bssc format )\r
2755         if( typeof(this.objManager[strBsscEvent]) == "object" )\r
2756         { // to get the event agency from the event manager\r
2757                 var eventAgency = this.objManager[strBsscEvent];\r
2758                 for( var i = 0; i < eventAgency.length; i++ )\r
2759                 {\r
2760                         if( strBsscEvent == "bsscpageclick" && \r
2761                                 eventAgency[i].nPageClick != CTarget.nPageClickCounter )\r
2762                                  continue;\r
2763                         else if( strBsscEvent == "bsschover" && event.type == "mouseout" )\r
2764                                 eventAgency[i].EndEffect();\r
2765                         else // to invoke the unified function in effect object \r
2766                                 eventAgency[i].UpdateEffect(); \r
2767                 }\r
2768         }\r
2769 }\r
2770 \r
2771 CTarget.prototype.SetState = function( strBsscEvent )\r
2772 {\r
2773         if( typeof(this.objManager[strBsscEvent]) != "object" )\r
2774                 return false;\r
2775 \r
2776         // to get the event agency from the event manager\r
2777         var eventAgency = this.objManager[strBsscEvent];\r
2778         \r
2779         if( strBsscEvent == "bsscpageclick" )\r
2780         {// we only set the initial state for the minium number of pageclick \r
2781                 eventAgency[this.objManager.nMinPageClickIndex].PrepareEffect();\r
2782                 return true;\r
2783         }\r
2784         else\r
2785         {\r
2786                 for( var i = 0; i < eventAgency.length; i++ )\r
2787                         eventAgency[i].PrepareEffect(); // to invoke the unified function in effect object       \r
2788                 if( i > 0 )\r
2789                         return true;\r
2790                 else\r
2791                         return false;\r
2792         }\r
2793 }\r
2794 //End the definition of class CTarget\r
2795 \r
2796 //Begin the definition of CEngine class\r
2797 function CEngine(){}// all properities are going be "class" properities\r
2798 \r
2799 // object : as associative array of trigger objects\r
2800 CEngine.objTrigger = new Object();\r
2801 // object : as associative array of target objects \r
2802 CEngine.objTarget = new Object(); \r
2803 \r
2804 // Array : each element is a CAgencyXXX animation object\r
2805 CEngine.arrAnimation = new Array();\r
2806 CEngine.PerformAnimation = function( nIndex )\r
2807 {// animation : update effects function\r
2808         CEngine.arrAnimation[nIndex].UpdateEffect();\r
2809 }\r
2810 \r
2811 CEngine.AddOneTrigger = function(TriggerID,TriggerElement)\r
2812 {// add one Trigger object into the trigger array\r
2813         if( typeof(TriggerID) != "string" || TriggerElement == null ||\r
2814             typeof(TriggerElement) != "object" )\r
2815                 return;\r
2816         if( typeof(CEngine.objTrigger[TriggerID] ) != "object" )\r
2817                 CEngine.objTrigger[TriggerID] = new CTrigger(TriggerElement);\r
2818 }\r
2819         \r
2820 CEngine.AddOneTarget = function(TargetID, TargetElement)\r
2821 {// add one Target object into the target array\r
2822         if( typeof(TargetID) != "string" || TargetElement == null ||\r
2823                 typeof(TargetElement) != "object" )\r
2824                 return;\r
2825         if( typeof(CEngine.objTarget[TargetID]) != "object" )\r
2826                 CEngine.objTarget[TargetID] = new CTarget( TargetElement );\r
2827 }\r
2828 \r
2829 CEngine.SendEventToOneTarget = function(strTargetID, strBsscEvent )\r
2830 {// to activate one target object\r
2831         if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
2832         {\r
2833                 if( strBsscEvent == "bssctrigger1" || strBsscEvent == "bssctrigger2" )\r
2834                 {//now, the "bssctrigger1" and "bssctrigger2" work like a toggle\r
2835                         if( strBsscEvent == CEngine.objTarget[strTargetID].strTriggerEvent )\r
2836                                 strBsscEvent = (strBsscEvent == "bssctrigger1") ? "bssctrigger2" : "bssctrigger1";\r
2837                         CEngine.objTarget[strTargetID].strTriggerEvent = strBsscEvent;\r
2838                 }\r
2839                 CEngine.objTarget[strTargetID].OnEvent( strBsscEvent );\r
2840         }\r
2841 }\r
2842 \r
2843 CEngine.SendEventToAllTarget = function( strBsscEvent )\r
2844 { //to activate all target associative to the BSSC event\r
2845         for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
2846                 CEngine.SendEventToOneTarget( strTargetID, strBsscEvent );\r
2847 }\r
2848 \r
2849 CEngine.SetOneTargetInitialState = function( strTargetID )\r
2850 {// only invoked after ALL effects for the target have been set\r
2851         if( typeof(CEngine.objTarget[strTargetID]) == "object" ) \r
2852         {// to get target object\r
2853                 var objTarget = CEngine.objTarget[strTargetID];\r
2854                 if( objTarget.SetState( "bsscpageload" ) == false )\r
2855                 {\r
2856                         objTarget.SetState( "bsscpageclick" );\r
2857                         objTarget.SetState( "bssctrigger1" );\r
2858                 }\r
2859         }\r
2860 }\r
2861 \r
2862 CEngine.AdjustPageClickCounter = function()\r
2863 {\r
2864         var nAdjustedClickCounter = CTarget.nPageClickCounter;\r
2865         var bAdjusted = false;\r
2866         for( var strTargetID in CEngine.objTarget ) //to enumerate all target\r
2867         {// try to find the minum pageCliclConter greater than CTarget.nPageClickCounter\r
2868                 var objEventPageClick = CEngine.objTarget[strTargetID].objManager.bsscpageclick;\r
2869                 if( objEventPageClick != null )\r
2870                 {\r
2871                         for( var i = 0; i < objEventPageClick.length; i++ )\r
2872                         {\r
2873                                 var nOtherPageClick = objEventPageClick[i].nPageClick;\r
2874                                 if( nOtherPageClick == CTarget.nPageClickCounter )\r
2875                                         return;\r
2876                                 if( nOtherPageClick > CTarget.nPageClickCounter )\r
2877                                 {\r
2878                                         if( !bAdjusted )\r
2879                                         {\r
2880                                                 nAdjustedClickCounter = nOtherPageClick;\r
2881                                                 bAdjusted = true;\r
2882                                         }\r
2883                                         else if( nOtherPageClick < nAdjustedClickCounter )\r
2884                                                 nAdjustedClickCounter = nOtherPageClick;\r
2885                                 }\r
2886                         }\r
2887                 }\r
2888         }\r
2889         CTarget.nPageClickCounter = nAdjustedClickCounter;\r
2890 }\r
2891 \r
2892 CEngine.OnPageLoad = function()\r
2893 {       \r
2894         // first, to set all target's initial state\r
2895         for( var strTargetID in CEngine.objTarget )\r
2896                 CEngine.SetOneTargetInitialState( strTargetID );\r
2897         \r
2898         // to invoke all target's onpageload handler\r
2899         CEngine.SendEventToAllTarget( "bsscpageload" );\r
2900 }\r
2901 \r
2902 CEngine.OnPageClick = function()\r
2903 { // to invoke all target's onpageclick handler\r
2904         var src = CCSSP.GetEventElement( arguments[0] );\r
2905         if( src == null )\r
2906                 return;\r
2907                 \r
2908         var objClickedTrigger = null;\r
2909         for( var strTriggerID in CEngine.objTrigger )\r
2910         { // to detect which trigger is clicked\r
2911                 if( CCSSP.IsDescendant( CEngine.objTrigger[strTriggerID].eleTrigger,src) )\r
2912                 {\r
2913                         objClickedTrigger = CEngine.objTrigger[strTriggerID];\r
2914                         break;\r
2915                 }\r
2916         }\r
2917         \r
2918         if( objClickedTrigger != null) // the clicked trigger found\r
2919                 objClickedTrigger.OnTriggerClick();\r
2920         else // no trigger is clicked\r
2921         { // to send PageClick event to all target\r
2922                 CTarget.nPageClickCounter++;\r
2923                 CEngine.AdjustPageClickCounter();\r
2924                 CEngine.SendEventToAllTarget( "bsscpageclick" );\r
2925         }\r
2926 }       \r
2927 \r
2928 CEngine.OnMouseOver = function()\r
2929 { // to invoke all target's onpageload handler\r
2930         var src = CCSSP.GetEventElement( arguments[0] );\r
2931         if( src == null )\r
2932                 return;\r
2933                 \r
2934         var strHoveredTargetID = null;\r
2935         for( var strTargetID in CEngine.objTarget )\r
2936         { // to detect which Target is hovering on\r
2937                 if( CCSSP.IsDescendant( CEngine.objTarget[strTargetID].eleTarget, src ) )\r
2938             {\r
2939                         strHoveredTargetID = strTargetID;\r
2940                         break;\r
2941             }\r
2942         }\r
2943         \r
2944         if( strHoveredTargetID != null ) // the hovered target found\r
2945                 CEngine.SendEventToOneTarget( strHoveredTargetID, "bsschover" );\r
2946 }\r
2947 \r
2948 CEngine.BuildTargetObject = function(target_ID,event_type,action_type,\r
2949                         action_setting, event_additional)\r
2950 {// to build target object \r
2951         // to get the target object\r
2952         if( typeof( CEngine.objTarget[target_ID] ) != "object" )\r
2953                 return false;// the engine's AddOneTarget function might have failed.\r
2954         var TargetObject = CEngine.objTarget[target_ID];\r
2955         \r
2956         // to prepare the parameters for the event manager\r
2957         var arrEvent = event_type.split("|"); // to split the combined event_type string\r
2958         var arrAction = action_type.split("|");//to split the combined action_type string\r
2959         for( var trim = 0; trim < arrEvent.length; trim++ )\r
2960                 arrEvent[trim] = CCSSP.TrimSpace(arrEvent[trim]);\r
2961         \r
2962         for( trim = 0; trim < arrAction.length; trim++ )\r
2963                 arrAction[trim] = CCSSP.TrimSpace(arrAction[trim]);\r
2964         \r
2965         var arrSetting = new Array(); \r
2966         if( typeof(action_setting) == "string" )\r
2967                 arrSetting = action_setting.split("|");// to split the combined action_setting string\r
2968         // to calibrate the arrays\r
2969         for( var i = arrSetting.length; i < arrAction.length; i++ )\r
2970         {\r
2971                 if( typeof(arrSetting[i]) != "string" )\r
2972                          arrSetting[i] = "";\r
2973         }                                \r
2974 \r
2975         // to prepare for dealing with the absolute posioning element\r
2976         TargetObject.eleTarget.ABSX = CCSSP.GetObjectLeft( TargetObject.eleTarget );\r
2977         TargetObject.eleTarget.ABSY = CCSSP.GetObjectTop( TargetObject.eleTarget );\r
2978 \r
2979         if( arrEvent.length > 1 )\r
2980         {// if event is combined, it must be : "bssctrigger1 | bssctrigger2"\r
2981                 if( arrAction.length != 2 )\r
2982                         return false; // if event is combined, there must be 2 actions\r
2983                 for( i = 0 ; i < 2; i++ )\r
2984                 {\r
2985                         if( TargetObject.SetEventManager(arrEvent[i], arrAction[i], \r
2986                                 arrSetting[i], event_additional) == false )\r
2987                                 return false; // the event manager has not been set up\r
2988                 }\r
2989         }\r
2990         else // the event_type string is not combined\r
2991         {\r
2992                 for( i = 0 ; i < arrAction.length; i++ )\r
2993                 {\r
2994                         TargetObject.SetEventManager(event_type, arrAction[i], arrSetting[i], event_additional);\r
2995                         // to validate the event manager\r
2996                         if( typeof(TargetObject.objManager[event_type]) != "object" ||\r
2997                                         typeof(TargetObject.objManager[event_type][i]) != "object" )\r
2998                                 return false; // the event manager has not been set up\r
2999                 }\r
3000         }\r
3001         return true;\r
3002 }\r
3003 \r
3004 CEngine.BuildTriggerObject = function(trigger_ID, target_ID)\r
3005 {// to build the trigger object\r
3006         var arrTrigger = trigger_ID.split("|"); // to split the combined trigger_ID string\r
3007         for( var i = 0; i < arrTrigger.length; i ++ )\r
3008         {// to get the trigger element then add it to the trigger list\r
3009                 arrTrigger[i] = CCSSP.TrimSpace( arrTrigger[i] );\r
3010                 var eleTrigger = CCSSP.GetObject( arrTrigger[i] );\r
3011                 if( eleTrigger == null )\r
3012                         continue; // the trigger_ID string in the HTML code maybe wrong\r
3013                 CEngine.AddOneTrigger( arrTrigger[i], eleTrigger );\r
3014 \r
3015                 // to get the target object\r
3016                 if( typeof( this.objTrigger[arrTrigger[i]] ) != "object" )\r
3017                         continue;// the engine's AddOneTarget function might have failed.\r
3018                 CEngine.objTrigger[arrTrigger[i]].AddTargetID( target_ID );\r
3019         }\r
3020 }\r
3021 //End the definition of CEngine class\r
3022 \r
3023 /// Section End  - CCSSP DHTM 1 (JavaScript 1.2)\r
3024 \r
3025 /// Section Begin  - CCSSP DHTM 2 (JavaScript 1.2)\r
3026 \r
3027 //Begin the definition of CAgencyXXXX classes\r
3028 \r
3029 //Begin of the CAgencyShow definition\r
3030 function CAgencyShow( element, bIsShow )\r
3031 {\r
3032         this.ele = element;\r
3033         this.bIsShow = bIsShow;\r
3034 }\r
3035 \r
3036 CAgencyShow.prototype.PrepareEffect = function()\r
3037 {\r
3038         CCSSP.ShowObject( this.ele, !this.bIsShow );\r
3039 }\r
3040 \r
3041 CAgencyShow.prototype.UpdateEffect = function()\r
3042 {\r
3043         CCSSP.ShowObject( this.ele, this.bIsShow );\r
3044 }\r
3045 \r
3046 CAgencyShow.prototype.EndEffect = function()\r
3047 {\r
3048         CCSSP.ShowObject( this.ele, !this.bIsShow );\r
3049 }\r
3050 // End of the CAgencyShow definition\r
3051 \r
3052 // Begin of CAgencyFly definition\r
3053 function CAgencyFly( element, settings, bIsIn )\r
3054 {\r
3055         this.ele = element;\r
3056         this.bIsIn = bIsIn;\r
3057         this.duration = 1000; // default\r
3058         this.direction = "right";\r
3059 \r
3060         var arrAllSet = settings.split(",");\r
3061         for( var i = 0; i < arrAllSet.length; i ++ )\r
3062         {// to retrieve the setting\r
3063                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3064                 var arrOneSet = arrAllSet[i].split("=");\r
3065                 for( var j = 0; j < arrOneSet.length; j++ )\r
3066                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3067                 switch( arrOneSet[0] )\r
3068                 {\r
3069                 case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
3070                 case "direction" : this.direction = arrOneSet[1]; break;\r
3071                 }\r
3072         }\r
3073                 \r
3074         if( CCSSP.bIsIE5 && this.ele.style.position != "absolute" )\r
3075                 this.ele.style.position = "relative";\r
3076         this.timer = null;\r
3077         this.aniIndex = CEngine.arrAnimation.length;\r
3078         CEngine.arrAnimation[this.aniIndex] = this;\r
3079 }\r
3080 \r
3081 CAgencyFly.prototype.PrepareEffect = function()\r
3082 {\r
3083         CCSSP.ShowObject(this.ele, !this.bIsIn );\r
3084 }\r
3085 \r
3086 CAgencyFly.prototype.UpdateEffect = function()\r
3087 {\r
3088         if( this.timer == null )\r
3089                 this.ResetParameters();\r
3090 \r
3091         var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3092         if( percent >= 1.0 )\r
3093                 this.EndEffect();\r
3094         else\r
3095         {\r
3096                 var newX = this.startX*(1.0-percent) +  this.finalX*percent;\r
3097                 var newY = this.startY*(1.0-percent) +  this.finalY*percent;\r
3098                 CCSSP.MoveObjectTo(this.ele, newX, newY);\r
3099                 if( this.timer == null )\r
3100                         this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
3101         }\r
3102 }\r
3103 \r
3104 CAgencyFly.prototype.EndEffect = function()\r
3105 {\r
3106         clearInterval( this.timer );\r
3107         this.timer = null;\r
3108 \r
3109         if( this.bIsIn ) // FlyIn\r
3110                 CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
3111         else // FlyOut\r
3112                 CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
3113         CCSSP.ShowObject(this.ele, this.bIsIn );\r
3114 }\r
3115 \r
3116 CAgencyFly.prototype.ResetParameters = function()\r
3117 {\r
3118         this.PrepareEffect();\r
3119         CCSSP.ShowObject(this.ele, true );\r
3120 \r
3121         this.startX = 0;\r
3122         this.startY = 0;\r
3123         this.finalX = 0;\r
3124         this.finalY = 0; \r
3125         \r
3126         var offsetLeft = CCSSP.GetObjectWindowLeft(this.ele) + this.ele.offsetWidth;\r
3127         var offsetTop = CCSSP.GetObjectWindowTop(this.ele) + this.ele.offsetHeight;\r
3128         var offsetRight = CCSSP.GetWindowRight();\r
3129         var offsetBottom = CCSSP.GetWindowBottom();\r
3130 \r
3131         if( this.bIsIn )\r
3132         { // FlyIn\r
3133                 this.finalX = this.ele.ABSX;\r
3134                 this.finalY = this.ele.ABSY;\r
3135 \r
3136                 switch( this.direction )\r
3137                 {\r
3138                 case "right": this.startX = offsetRight; this.startY = this.finalY; break;\r
3139                 case "left": this.startX = -offsetLeft;  this.startY = this.finalY; break;\r
3140                 case "down": this.startY = offsetBottom; this.startX = this.finalX; break;\r
3141                 case "up":  this.startY = -offsetTop;    this.startX = this.finalX; break;\r
3142                 case "downright":\r
3143                         this.startX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
3144                         this.startY = this.startX;              break;\r
3145                 case "upright":\r
3146                         this.startX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
3147                         this.startY = -this.startX;             break;\r
3148                 case "upleft":\r
3149                         this.startX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
3150                         this.startY = this.startX;              break;\r
3151                 case "downleft":\r
3152                         this.startX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
3153                         this.startY = -this.startX;     break;\r
3154                 }\r
3155         }\r
3156         else\r
3157         { // FlyOut\r
3158                 this.startX = this.ele.ABSX;\r
3159                 this.startY = this.ele.ABSY;\r
3160 \r
3161                 switch( this.direction )\r
3162                 {\r
3163                 case "right": this.finalX = offsetRight;  this.finalY = this.startY; break;\r
3164                 case "left": this.finalX = -offsetLeft;   this.finalY = this.startY;  break;\r
3165                 case "down": this.finalY = offsetBottom;  this.finalX = this.startX; break;\r
3166                 case "up":  this.finalY = -offsetTop;     this.finalX = this.startX; break;\r
3167                 case "downright":\r
3168                         this.finalX = ( offsetBottom < offsetRight) ? offsetBottom : offsetRight;\r
3169                         this.finalY = this.finalX;              break;\r
3170                 case "upright":\r
3171                         this.finalX = (offsetTop < offsetRight)? offsetTop : offsetRight;\r
3172                         this.finalY = -this.finalX;             break;\r
3173                 case "upleft":\r
3174                         this.finalX = -((offsetTop < offsetRight)? offsetTop : offsetRight);\r
3175                         this.finalY = this.finalX;              break;\r
3176                 case "downleft":\r
3177                         this.finalX = -(( offsetBottom < offsetRight) ? offsetBottom : offsetRight);\r
3178                         this.finalY = -this.finalX;     break;\r
3179                 }\r
3180         }\r
3181         CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
3182         this.startTime = (new Date()).getTime();\r
3183 }\r
3184 // End of the CAgencyFly definition\r
3185 \r
3186 // Begin of CAgencySpiral\r
3187 function CAgencySpiral( element, settings, bIsIn )\r
3188 {\r
3189         this.ele = element;\r
3190         this.bIsIn = bIsIn;\r
3191         this.duration = 1000; // default\r
3192 \r
3193         var arrAllSet = settings.split(",");\r
3194         for( var i = 0; i < arrAllSet.length; i ++ )\r
3195         {// to retrieve the setting\r
3196                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3197                 var arrOneSet = arrAllSet[i].split("=");\r
3198                 for( var j = 0; j < arrOneSet.length; j++ )\r
3199                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3200                 switch( arrOneSet[0] )\r
3201                 {\r
3202                 case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
3203                 }\r
3204         }\r
3205 \r
3206         if( CCSSP.bIsIE5 && this.ele.style.position != "absolute" )\r
3207                 this.ele.style.position = "relative";\r
3208         this.timer = null;\r
3209         this.aniIndex = CEngine.arrAnimation.length;\r
3210         CEngine.arrAnimation[this.aniIndex] = this;\r
3211 }\r
3212 \r
3213 CAgencySpiral.prototype.PrepareEffect = function()\r
3214 {\r
3215         CCSSP.ShowObject(this.ele, !this.bIsIn );\r
3216 }\r
3217 \r
3218 CAgencySpiral.prototype.UpdateEffect = function()\r
3219 {\r
3220         if( this.timer == null )\r
3221                 this.ResetParameters();\r
3222 \r
3223         var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3224         if( percent >= 1.0 )\r
3225                 this.EndEffect();\r
3226         else\r
3227         {\r
3228                 var rf = (this.bIsIn)? (1.0 - percent) : percent; \r
3229                 var t = (1.0-rf) * 4.0 * Math.PI\r
3230                 var rxP = (this.bIsIn)? this.startX : this.finalX; \r
3231                 var ryP = (this.bIsIn)? this.startY : this.finalY; \r
3232                 var rx = (Math.abs(rxP) < 200) ? Math.abs(rxP) : 200;\r
3233                 var ry = (Math.abs(ryP) < 200) ? Math.abs(ryP) : 200;\r
3234 \r
3235                 var newX = Math.ceil(-rf*Math.cos(t)*rx) + this.ele.ABSX;\r
3236                 var newY = Math.ceil(-rf*Math.sin(t)*ry) + this.ele.ABSY;\r
3237                 CCSSP.MoveObjectTo(this.ele, newX, newY);\r
3238                 if( this.timer == null )\r
3239                         this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
3240         }\r
3241 }\r
3242 \r
3243 CAgencySpiral.prototype.EndEffect = function()\r
3244 {\r
3245         clearInterval( this.timer );\r
3246         this.timer = null;\r
3247         \r
3248         if( this.bIsIn ) // In\r
3249                 CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
3250         else // Out\r
3251                 CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
3252         CCSSP.ShowObject(this.ele, this.bIsIn );\r
3253 }\r
3254 \r
3255 CAgencySpiral.prototype.ResetParameters = function()\r
3256 {\r
3257         this.PrepareEffect();\r
3258         CCSSP.ShowObject(this.ele, true );\r
3259         this.startX = (this.bIsIn)? CCSSP.GetWindowRight() : this.ele.ABSX;\r
3260         this.startY = (this.bIsIn)? CCSSP.GetWindowBottom() : this.ele.ABSY;\r
3261         this.finalX = (this.bIsIn)? this.ele.ABSX : CCSSP.GetWindowRight();\r
3262         this.finalY = (this.bIsIn)? this.ele.ABSY : CCSSP.GetWindowBottom(); \r
3263         \r
3264         CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
3265         this.startTime = (new Date()).getTime();\r
3266 }\r
3267 // End of CAgencySpiral\r
3268 \r
3269 // Begin of CAgencyElastic\r
3270 function CAgencyElastic( element, settings)\r
3271 {\r
3272         this.ele = element;\r
3273         this.duration = 1000; // default\r
3274         this.direction = "right";\r
3275 \r
3276         var arrAllSet = settings.split(",");\r
3277         for( var i = 0; i < arrAllSet.length; i ++ )\r
3278         {// to retrieve the setting\r
3279                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3280                 var arrOneSet = arrAllSet[i].split("=");\r
3281                 for( var j = 0; j < arrOneSet.length; j++ )\r
3282                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3283                 switch( arrOneSet[0] )\r
3284                 {\r
3285                 case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
3286                 case "direction" : this.direction = arrOneSet[1]; break;\r
3287                 }\r
3288         }\r
3289                 \r
3290         if( CCSSP.bIsIE5 && this.ele.style.position != "absolute" )\r
3291                 this.ele.style.position = "relative";\r
3292         this.timer = null;\r
3293         this.aniIndex = CEngine.arrAnimation.length;\r
3294         CEngine.arrAnimation[this.aniIndex] = this;\r
3295 }\r
3296 \r
3297 CAgencyElastic.prototype.PrepareEffect = function()\r
3298 {\r
3299         CCSSP.ShowObject(this.ele, false );\r
3300 }\r
3301 \r
3302 CAgencyElastic.prototype.UpdateEffect = function()\r
3303 {\r
3304         if( this.timer == null )\r
3305                 this.ResetParameters();\r
3306 \r
3307         var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3308         if( percent >= 1.0 )\r
3309                 this.EndEffect();\r
3310         else\r
3311         {\r
3312                 var newX = this.startX;\r
3313                 var newY = this.startY;\r
3314                 var rf = Math.exp(-percent*3);\r
3315                 var t = percent * 1.5 * Math.PI\r
3316                 var rx = (Math.abs(this.startX) > Math.abs(this.startY)) ? this.startX : this.startY;\r
3317                 switch (this.direction )\r
3318                 {\r
3319                 case "left":   \r
3320                 case "right" : newX = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
3321                 case "up":         \r
3322                 case "down" :  newY = rf*Math.cos(t)*rx + this.ele.ABSX; break;\r
3323                 }\r
3324                 CCSSP.MoveObjectTo(this.ele, newX, newY);\r
3325                 if( this.timer == null )\r
3326                         this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
3327         }\r
3328 }\r
3329 \r
3330 CAgencyElastic.prototype.EndEffect = function()\r
3331 {\r
3332         CCSSP.MoveObjectTo(this.ele, this.finalX, this.finalY);\r
3333         clearInterval( this.timer );\r
3334         this.timer = null;\r
3335 }\r
3336 \r
3337 CAgencyElastic.prototype.ResetParameters = function()\r
3338 {\r
3339         CCSSP.ShowObject(this.ele, true );\r
3340         this.startX = this.ele.ABSX;\r
3341         this.finalX = this.ele.ABSX;\r
3342         this.startY = this.ele.ABSY;\r
3343         this.finalY = this.ele.ABSY;\r
3344         \r
3345         switch (this.direction)\r
3346         { \r
3347         case "left":  this.startX = -this.ele.offsetWidth; break;\r
3348         case "right": this.startX = this.ele.offsetWidth;  break;\r
3349         case "up":    this.startY = -this.ele.offsetHeight;break;\r
3350         case "down":  this.startY = this.ele.offsetHeight; break;\r
3351         }\r
3352         CCSSP.MoveObjectTo(this.ele, this.startX, this.startY);\r
3353         this.startTime = (new Date()).getTime();\r
3354 }\r
3355 // End of CAgencyElastic\r
3356 \r
3357 // Begin of CAgencyZoom\r
3358 function CAgencyZoom( element, settings, bIsIn)\r
3359 {\r
3360         this.ele = element;\r
3361         this.duration = 1000; // default\r
3362         \r
3363         var arrAllSet = settings.split(",");\r
3364         for( var i = 0; i < arrAllSet.length; i ++ )\r
3365         {// to retrieve the setting\r
3366                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3367                 var arrOneSet = arrAllSet[i].split("=");\r
3368                 for( var j = 0; j < arrOneSet.length; j++ )\r
3369                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3370                 switch( arrOneSet[0] )\r
3371                 {\r
3372                 case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
3373                 }\r
3374         }\r
3375 \r
3376         this.bIsIn = bIsIn;\r
3377         this.timer = null;\r
3378         this.aniIndex = CEngine.arrAnimation.length;\r
3379         CEngine.arrAnimation[this.aniIndex] = this;\r
3380 }\r
3381 \r
3382 CAgencyZoom.prototype.PrepareEffect = function()\r
3383 {\r
3384         CCSSP.ShowObject(this.ele, false);\r
3385 }\r
3386 \r
3387 CAgencyZoom.prototype.UpdateEffect = function()\r
3388 {\r
3389         if( this.timer == null )\r
3390                 this.ResetParameters();\r
3391 \r
3392         var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3393         if( percent >= 1.0 )\r
3394                 this.EndEffect();\r
3395         else\r
3396         {\r
3397                 var nFactorIn = Math.ceil(50+50*percent);\r
3398                 var nFactorOut = Math.ceil(100+200*(1-percent));\r
3399                 var AlterFontsize = ((this.bIsIn)? nFactorIn : nFactorOut) + "%";\r
3400                 var AlterFactor = ((this.bIsIn)? nFactorIn : nFactorOut) / 100;\r
3401                 \r
3402                 this.UpdateEffectAllChildren(this.ele, AlterFontsize, AlterFactor);\r
3403                 for(var index = 0; index < this.ele.all.length; index++)\r
3404                         this.UpdateEffectAllChildren(this.ele.all[index], AlterFontsize, AlterFactor);\r
3405                         \r
3406                 if( this.timer == null )\r
3407                         this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
3408         }\r
3409 }\r
3410 \r
3411 CAgencyZoom.prototype.UpdateEffectAllChildren = function(child, FontSize, Factor)\r
3412 {\r
3413         if( CCSSP.IsTextTag(child) )\r
3414                 child.style.fontSize = FontSize;\r
3415         else\r
3416         {\r
3417                 if( typeof(child.orgWidth) == "number" )\r
3418                         child.style.width = Factor * child.orgWidth;\r
3419                 if( typeof(child.orgHeight) == "number" )\r
3420                         child.style.height = Factor * child.orgHeight;\r
3421         }\r
3422 }\r
3423 \r
3424 CAgencyZoom.prototype.EndEffect = function()\r
3425 {\r
3426         this.EndEffectAllChildren(this.ele);\r
3427         for(var index = 0; index < this.ele.all.length; index++)\r
3428                 this.EndEffectAllChildren(this.ele.all[index]);\r
3429         \r
3430         clearInterval( this.timer );\r
3431         this.timer = null;\r
3432 }\r
3433 \r
3434 CAgencyZoom.prototype.EndEffectAllChildren = function( child )\r
3435 {       \r
3436         if( CCSSP.IsTextTag(child) )\r
3437                 child.style.fontSize = child.orgFontSize;\r
3438         else\r
3439         {\r
3440                 if( typeof(child.intactWidth) != "undefined" )\r
3441                 {\r
3442                         child.width = child.intactWidth;\r
3443                         child.height = child.intactHeight;\r
3444                 }\r
3445                 else if( typeof(child.style.intactPixelWidth) != "undefined" )\r
3446                 {\r
3447                         child.style.pixelWidth = child.style.intactPixelWidth;\r
3448                         child.style.pixelHeight = child.style.intactPixelHeight;\r
3449                 }\r
3450         }\r
3451 }\r
3452 \r
3453 CAgencyZoom.prototype.ResetParameters = function()\r
3454 {\r
3455         this.PrepareEffect();\r
3456         this.ResetParametersAllChildren( this.ele );\r
3457         for(var index = 0; index < this.ele.all.length; index++)\r
3458                 this.ResetParametersAllChildren(this.ele.all[index]);\r
3459                 \r
3460         this.startTime = (new Date()).getTime();\r
3461 }\r
3462 \r
3463 CAgencyZoom.prototype.ResetParametersAllChildren = function( child )\r
3464 {\r
3465         CCSSP.ShowObject(child, true );\r
3466         if( (child.tagName == "DIV") && (child.parentElement.tagName == "TD") )\r
3467                 child.width = "100%";// if the div is inside a cell of table, we need the this hack\r
3468         \r
3469         if( CCSSP.IsTextTag(child) )\r
3470                 child.orgFontSize = child.style.fontSize;\r
3471         else\r
3472         {\r
3473                 if( child.width > "" || child.height > "" )\r
3474                 {\r
3475                         child.orgWidth = child.intactWidth = child.width;\r
3476                         child.orgHeight = child.intactHeight = child.height;\r
3477                 }\r
3478                 else if( ( typeof(child.orgWidth) != "number" ) && (typeof(child.orgHeight) != "number") )\r
3479                 {\r
3480                         child.orgWidth = child.style.intactPixelWidth = child.style.pixelWidth;\r
3481                         child.orgHeight = child.style.intactPixelHeight = child.style.pixelHeight;\r
3482                 }\r
3483         }\r
3484 }\r
3485 // End of CAgencyZoom\r
3486 \r
3487 //// the following effects will use IE's exclusive "filter" function ////\r
3488 // Begin of CAgencyAlpha definition\r
3489 function CAgencyAlpha( element, settings, bIsIn )\r
3490 {// because of "visual filter" style, this won't work in Navigator\r
3491         this.ele = element;\r
3492         this.bIsIn = bIsIn;\r
3493 \r
3494         // to set the default value\r
3495         this.startOpacity = (this.bIsIn) ? 0 : 100;\r
3496         this.endOpacity = (this.bIsIn) ? 100 : 0;\r
3497         \r
3498         this.duration = 1000; // default\r
3499         \r
3500         var arrAllSet = settings.split(",");\r
3501         for( var i = 0; i < arrAllSet.length; i ++ )\r
3502         {// to retrieve the setting\r
3503                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3504                 var arrOneSet = arrAllSet[i].split("=");\r
3505                 for( var j = 0; j < arrOneSet.length; j++ )\r
3506                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3507                 switch( arrOneSet[0] )\r
3508                 {\r
3509                 case "speed" : this.duration = 100000/arrOneSet[1]; break;\r
3510                 }\r
3511         }\r
3512         \r
3513         this.timer = null;\r
3514         this.aniIndex = CEngine.arrAnimation.length;\r
3515         CEngine.arrAnimation[this.aniIndex] = this;\r
3516 }\r
3517 \r
3518 CAgencyAlpha.prototype.PrepareEffect = function()\r
3519 {// to set the visual filter function\r
3520         // the visual filter ONLY work when set by "Width and Height" or\r
3521         // absolute position for DIV, SPAN and normal tag ( such as p )\r
3522         // but, "absolute" cause the following elements overlap, so:\r
3523         CCSSP.PrepareFilter( this.ele );\r
3524         CCSSP.ShowObject(this.ele, !this.bIsIn );\r
3525 }\r
3526 \r
3527 CAgencyAlpha.prototype.UpdateEffect = function()\r
3528 {// to set the visual filter function\r
3529         if( this.timer == null )\r
3530                 this.ResetParameters();\r
3531         if( typeof(this.ele.filters.alpha) != "object" )\r
3532         {\r
3533                 this.EndEffect();\r
3534                 return;\r
3535         }\r
3536 \r
3537         var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3538         if( percent >= 1.0 )\r
3539                 this.EndEffect();\r
3540         else if( typeof(this.ele.filters.alpha) == "object" )\r
3541         {\r
3542                 this.ele.filters.alpha.opacity = this.startOpacity*(1.0-percent) + this.endOpacity*percent;\r
3543                 if( this.timer == null )\r
3544                         this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 20 );\r
3545         }\r
3546 }\r
3547 \r
3548 CAgencyAlpha.prototype.EndEffect = function()\r
3549 {// to remove the visual filter function\r
3550         clearInterval( this.timer );\r
3551         this.timer = null;\r
3552         this.ele.style.filter = "";\r
3553         CCSSP.ShowObject(this.ele, this.bIsIn );\r
3554 }\r
3555 \r
3556 CAgencyAlpha.prototype.ResetParameters = function()\r
3557 {\r
3558         this.PrepareEffect();\r
3559         CCSSP.ShowObject(this.ele, true );\r
3560         this.ele.style.filter = "alpha(opacity=" + this.startOpacity + ")";\r
3561         this.startTime = (new Date()).getTime();\r
3562 }\r
3563 // End of the CAgencyAlpha definition\r
3564 \r
3565 // Begin of CAgencyWave definition\r
3566 function CAgencyWave( element, settings )\r
3567 {// because of "visual filter" style, this won't work in Navigator\r
3568         this.ele = element;\r
3569 \r
3570         this.duration = 0; // default\r
3571         this.strength = 10;\r
3572         this.freq = 1;\r
3573         this.lightstrength = 1;\r
3574         \r
3575         var arrAllSet = settings.split(",");\r
3576         for( var i = 0; i < arrAllSet.length; i ++ )\r
3577         {// to retrieve the setting\r
3578                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3579                 var arrOneSet = arrAllSet[i].split("=");\r
3580                 for( var j = 0; j < arrOneSet.length; j++ )\r
3581                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3582                 switch( arrOneSet[0] )\r
3583                 {\r
3584                 case "duration" : this.duration = 100000/arrOneSet[1]; break;\r
3585                 case "strength" : this.strength = arrOneSet[1]; break;\r
3586                 case "freq" : this.freq = arrOneSet[1]; break;\r
3587                 case "lightstrength" : this.lightstrength = arrOneSet[1]; break;\r
3588                 }\r
3589         }\r
3590 \r
3591         this.timer = null;\r
3592         this.aniIndex = CEngine.arrAnimation.length;\r
3593         CEngine.arrAnimation[this.aniIndex] = this;\r
3594 }\r
3595 \r
3596 CAgencyWave.prototype.PrepareEffect = function()\r
3597 {// to set the visual filter function\r
3598         CCSSP.PrepareFilter(this.ele);\r
3599 \r
3600         CCSSP.ShowObject(this.ele, true );\r
3601 }\r
3602 \r
3603 CAgencyWave.prototype.UpdateEffect = function()\r
3604 {// to set the visual filter function\r
3605         if( this.timer == null )\r
3606                 this.ResetParameters();\r
3607         if( typeof(this.ele.filters.wave) != "object" )\r
3608         {\r
3609                 this.EndEffect();\r
3610                 return;\r
3611         }\r
3612 \r
3613         if( this.duration > 0 )\r
3614         {\r
3615                 var percent = ((new Date()).getTime() - this.startTime)/this.duration;\r
3616                 if( percent >= 1.0 )\r
3617                 {\r
3618                         this.EndEffect();\r
3619                         return;\r
3620                 }\r
3621         }\r
3622         \r
3623         this.ele.filters.wave.phase += 5;\r
3624         this.ele.filters.wave.phase %= 100;\r
3625         if( this.timer == null )\r
3626                 this.timer = setInterval("CEngine.PerformAnimation(" + this.aniIndex + ")", 50 );\r
3627 }\r
3628 \r
3629 CAgencyWave.prototype.EndEffect = function()\r
3630 {// to remove the visual filter function\r
3631         this.ele.style.filter = "";\r
3632         clearInterval( this.timer );\r
3633         this.timer = null;\r
3634 }\r
3635 \r
3636 CAgencyWave.prototype.ResetParameters = function()\r
3637 {\r
3638         this.PrepareEffect();\r
3639         this.ele.style.filter = "wave(strength=" + this.strength + ",freq=" + \r
3640          this.freq +", lightstrength=" + this.lightstrength +",phase=0);";\r
3641         this.startTime = (new Date()).getTime();\r
3642 }\r
3643 // End of the CAgencyWave definition\r
3644 \r
3645 // Begin of CAgencyGlow definition\r
3646 function CAgencyGlow( element, settings )\r
3647 {// because of "visual filter" style, this won't work in Navigator\r
3648         this.ele = element;\r
3649 \r
3650         // to set the default value\r
3651         this.glowColor = "green";\r
3652         this.glowStrength = "3";\r
3653         \r
3654         var arrAllSet = settings.split(",");\r
3655         for( var i = 0; i < arrAllSet.length; i ++ )\r
3656         {\r
3657                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3658                 var arrOneSet = arrAllSet[i].split("=");\r
3659                 for( var j = 0; j < arrOneSet.length; j++ )\r
3660                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3661                 switch( arrOneSet[0] )\r
3662                 {\r
3663                 case "color" : this.glowColor = arrOneSet[1]; break;\r
3664                 case "strength" : this.glowStrength = arrOneSet[1]; break;\r
3665                 }\r
3666         }\r
3667 }\r
3668 \r
3669 CAgencyGlow.prototype.PrepareEffect = function()\r
3670 {\r
3671         CCSSP.PrepareFilter(this.ele);\r
3672         CCSSP.ShowObject(this.ele, true );\r
3673         if( this.ele.style.backgroundColor != "" )\r
3674         {//style.backgroundColor somehow stop the visual filter\r
3675                 this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
3676                 this.ele.style.backgroundColor = "";\r
3677         }\r
3678 }\r
3679 \r
3680 CAgencyGlow.prototype.UpdateEffect = function()\r
3681 {// to set the visual filter function\r
3682         this.PrepareEffect();\r
3683         this.ele.style.filter = "glow(Color=" + this.glowColor + ", Strength=" + \r
3684                 this.glowStrength + ", enabled=true" +")";\r
3685 }\r
3686 \r
3687 CAgencyGlow.prototype.EndEffect = function()\r
3688 {// to remove the visual filter function\r
3689         this.ele.style.filter = "";\r
3690         if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
3691                 this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
3692 }\r
3693 // End of the CAgencyGlow definition\r
3694 \r
3695 // Begin of CAgencyDropShadow definition\r
3696 function CAgencyDropShadow( element, settings )\r
3697 {// because of "visual filter" style, this won't work in Navigator\r
3698         this.ele = element;\r
3699 \r
3700         // to set the default value\r
3701         this.shadowColor = "black"; \r
3702         this.shadowOffx = "1";\r
3703         this.shadowOffy = "1";\r
3704         \r
3705         var arrAllSet = settings.split(",");\r
3706         for( var i = 0; i < arrAllSet.length; i ++ )\r
3707         {\r
3708                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3709                 var arrOneSet = arrAllSet[i].split("=");\r
3710                 for( var j = 0; j < arrOneSet.length; j++ )\r
3711                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3712                 switch( arrOneSet[0] )\r
3713                 {\r
3714                 case "color" : this.shadowColor = arrOneSet[1]; break;\r
3715                 case "offx" : this.shadowOffx = arrOneSet[1]; break;\r
3716                 case "offy" : this.shadowOffy = arrOneSet[1]; break;\r
3717                 }\r
3718         }\r
3719 }\r
3720 \r
3721 CAgencyDropShadow.prototype.PrepareEffect = function()\r
3722 {\r
3723         CCSSP.PrepareFilter(this.ele);\r
3724         CCSSP.ShowObject(this.ele, true );\r
3725         \r
3726         if( this.ele.style.backgroundColor != "" )\r
3727         {//style.backgroundColor somehow stop the visual filter\r
3728                 this.ele.intactBackgroundColor = this.ele.style.backgroundColor;\r
3729                 this.ele.style.backgroundColor = "";\r
3730         }\r
3731 }\r
3732 \r
3733 CAgencyDropShadow.prototype.UpdateEffect = function()\r
3734 {// to set the visual filter function\r
3735         this.PrepareEffect();\r
3736         this.ele.style.filter = "dropshadow(color=" + this.shadowColor + ", offx=" + \r
3737                 this.shadowOffx + ", offy=" + this.shadowOffy + ")";\r
3738 }\r
3739 \r
3740 CAgencyDropShadow.prototype.EndEffect = function()\r
3741 {// to remove the visual filter function\r
3742         this.ele.style.filter = "";\r
3743         if( typeof(this.ele.intactBackgroundColor) != "undefined" )\r
3744                 this.ele.style.backgroundColor = this.ele.intactBackgroundColor;\r
3745 }\r
3746 // End of the CAgencyDropShadow definition\r
3747 \r
3748 // Begin of CAgencyRevealTrans definition\r
3749 function CAgencyRevealTrans( element, settings )\r
3750 {// because of "visual filter" style, this won't work in Navigator\r
3751         this.ele = element;\r
3752 \r
3753         // to set the default value\r
3754         this.duration = 1.0; //The value is specified in seconds.milliseconds format (0.0000).\r
3755         this.transition = 0;\r
3756         \r
3757         var arrAllSet = settings.split(",");\r
3758         for( var i = 0; i < arrAllSet.length; i ++ )\r
3759         {\r
3760                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3761                 var arrOneSet = arrAllSet[i].split("=");\r
3762                 for( var j = 0; j < arrOneSet.length; j++ )\r
3763                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3764                 switch( arrOneSet[0] )\r
3765                 {\r
3766                 case "type" : this.transition = arrOneSet[1]; break;\r
3767                 case "duration" : this.duration = 100/arrOneSet[1];     break;\r
3768                 }\r
3769         }\r
3770 }\r
3771 \r
3772 CAgencyRevealTrans.prototype.PrepareEffect = function()\r
3773 {\r
3774         CCSSP.PrepareFilter(this.ele);\r
3775         CCSSP.ShowObject( this.ele, false);\r
3776 }\r
3777 \r
3778 CAgencyRevealTrans.prototype.UpdateEffect = function()\r
3779 {// to set the visual filter function\r
3780         if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
3781         {\r
3782                 if( this.ele.filters.RevealTrans.status == 2 )\r
3783                         this.ele.filters.RevealTrans.stop();  \r
3784         }\r
3785 \r
3786         this.PrepareEffect();\r
3787         \r
3788         this.ele.style.filter = "RevealTrans(duration=" + this.duration + \r
3789                 ", transition=" + this.transition + ")";\r
3790         \r
3791     if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
3792     {\r
3793                 this.ele.filters.RevealTrans.apply();\r
3794                 CCSSP.ShowObject( this.ele, true);\r
3795                 this.ele.filters.RevealTrans.play();  \r
3796         }\r
3797         else\r
3798                 CCSSP.ShowObject( this.ele, true);\r
3799 }\r
3800 \r
3801 CAgencyRevealTrans.prototype.EndEffect = function()\r
3802 {\r
3803     if( typeof( this.ele.filters.RevealTrans ) == "object" )\r
3804                 this.ele.filters.RevealTrans.stop();  \r
3805         this.ele.style.filter = "";\r
3806 }\r
3807 // End of the CAgencyRevealTrans definition\r
3808 \r
3809 // Begin of CAgencyBlur definition\r
3810 function CAgencyBlur( element, settings )\r
3811 {// because of "visual filter" style, this won't work in Navigator\r
3812         this.ele = element;\r
3813 \r
3814         // to set the default value\r
3815         this.strength = "5";\r
3816         this.direction = "90";\r
3817         \r
3818         var arrAllSet = settings.split(",");\r
3819         for( var i = 0; i < arrAllSet.length; i ++ )\r
3820         {\r
3821                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3822                 var arrOneSet = arrAllSet[i].split("=");\r
3823                 for( var j = 0; j < arrOneSet.length; j++ )\r
3824                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3825                 switch( arrOneSet[0] )\r
3826                 {\r
3827                 case "strength" : this.strength = arrOneSet[1]; break;\r
3828                 case "direction" : this.direction = arrOneSet[1]; break;\r
3829                 }\r
3830         }\r
3831 }\r
3832 \r
3833 CAgencyBlur.prototype.PrepareEffect = function()\r
3834 {\r
3835         CCSSP.PrepareFilter(this.ele);\r
3836         CCSSP.ShowObject(this.ele, true );\r
3837 }\r
3838 \r
3839 CAgencyBlur.prototype.UpdateEffect = function()\r
3840 {// to set the visual filter function\r
3841         CCSSP.PrepareFilter(this.ele);\r
3842         this.ele.style.filter = "blur(strength=" + this.strength + \r
3843                 ", direction=" + this.direction + ")";\r
3844 }\r
3845 \r
3846 CAgencyBlur.prototype.EndEffect = function()\r
3847 {// to remove the visual filter function\r
3848         this.ele.style.filter = "";\r
3849 }\r
3850 // End of the CAgencyBlur definition\r
3851 \r
3852 // Begin of CAgencyChangeFilter definition\r
3853 function CAgencyChangeFilter( element, settings ) // flipH, flipV, invert, grey,\r
3854 {// because of "visual filter" style, this won't work in Navigator\r
3855         this.ele = element;\r
3856 \r
3857         // to set the default value\r
3858         this.filterFunction = settings;\r
3859 }\r
3860 \r
3861 CAgencyChangeFilter.prototype.PrepareEffect = function()\r
3862 {\r
3863         CCSSP.PrepareFilter(this.ele);\r
3864         CCSSP.ShowObject(this.ele, true );\r
3865 }\r
3866 \r
3867 CAgencyChangeFilter.prototype.UpdateEffect = function()\r
3868 {// to set the visual filter function\r
3869         CCSSP.PrepareFilter(this.ele);\r
3870         this.ele.style.filter = this.filterFunction;\r
3871 }\r
3872 \r
3873 CAgencyChangeFilter.prototype.EndEffect = function()\r
3874 {// to remove the visual filter function\r
3875         this.ele.style.filter = "";\r
3876 }\r
3877 // End of the CAgencyChangeFilter definition\r
3878 \r
3879 // The effects below change the style on the fly, so they won't work in Navigator\r
3880 \r
3881 // Begin of CAgencyFontChange definition, \r
3882 function CAgencyFontChange( element, settings )\r
3883 {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
3884         this.ele = element;\r
3885         \r
3886         // to retrieve the original font style\r
3887         this.RetrieveOldFont( this.ele );\r
3888         \r
3889         // to set the default font to change\r
3890         this.newfontFamily = this.ele.oldFontFamily;\r
3891         this.newfColor = this.ele.oldColor;\r
3892         this.newtextDecoration = this.ele.oldTextDecoration;\r
3893         this.newfontWeight = this.ele.oldFontWeight;\r
3894         this.newfontStyle = this.ele.oldFontStyle;\r
3895         this.newfontSize = this.ele.oldFontSize;\r
3896         this.newBackgroundColor = this.ele.oldBackgroundColor;\r
3897         \r
3898         var arrAllSet = settings.split(",");\r
3899         for( var i = 0; i < arrAllSet.length; i ++ )\r
3900         {// to retrieve the setting\r
3901                 arrAllSet[i] = CCSSP.TrimSpace(arrAllSet[i]);\r
3902                 var arrOneSet = arrAllSet[i].split("=");\r
3903                 for( var j = 0; j < arrOneSet.length; j++ )\r
3904                         arrOneSet[j] = CCSSP.TrimSpace(arrOneSet[j]);\r
3905                 switch( arrOneSet[0] )\r
3906                 {\r
3907                 case "font-family" : this.newfontFamily = arrOneSet[1]; break;\r
3908                 case "color" : this.newfColor = arrOneSet[1]; break;\r
3909                 case "underline" : this.newtextDecoration = (arrOneSet[1]=="on")? "underline" : "none"; break;\r
3910                 case "bold" : this.newfontWeight = (arrOneSet[1]=="on")? "bold" : "normal"; break;\r
3911                 case "italic" : this.newfontStyle = (arrOneSet[1]=="on")? "italic" : "normal"; break;\r
3912                 case "size" : this.newfontSize = arrOneSet[1]; break;\r
3913                 case "background-color" : this.newBackgroundColor = arrOneSet[1]; break;\r
3914                 }\r
3915         }\r
3916 }\r
3917 \r
3918 CAgencyFontChange.prototype.RetrieveOldFont = function(objChild)\r
3919 {\r
3920         if( typeof(objChild.oldFontFamily) == "undefined" )\r
3921                 objChild.oldFontFamily = objChild.style.fontFamily;\r
3922         if( typeof(objChild.oldColor) == "undefined" )\r
3923                 objChild.oldColor = objChild.style.color;\r
3924         if( typeof(objChild.oldTextDecoration) == "undefined" )\r
3925                 objChild.oldTextDecoration = objChild.style.textDecoration;\r
3926         if( typeof(objChild.oldFontWeight) == "undefined" )\r
3927                 objChild.oldFontWeight = objChild.style.fontWeight;\r
3928         if( typeof(objChild.oldFontStyle) == "undefined" )\r
3929                 objChild.oldFontStyle = objChild.style.fontStyle;\r
3930         if( typeof(objChild.oldFontSize) == "undefined" )\r
3931                 objChild.oldFontSize = objChild.style.fontSize;\r
3932         if( typeof(objChild.oldBackgroundColor) == "undefined" )\r
3933                 objChild.oldBackgroundColor = objChild.style.backgroundColor;\r
3934 }\r
3935 \r
3936 CAgencyFontChange.prototype.PrepareEffect = function()\r
3937 {\r
3938         // as for expanding text, the child is created after the constructor called\r
3939         for(var index = 0; index < this.ele.all.length; index++)\r
3940                 this.RetrieveOldFont(this.ele.all[index]);\r
3941         CCSSP.ShowObject(this.ele, true );\r
3942 }\r
3943 \r
3944 CAgencyFontChange.prototype.UpdateEffect = function()\r
3945 {// to change the font\r
3946         this.PrepareEffect();\r
3947         this.UpdateEffectAllChildren( this.ele );\r
3948         for( var index = 0; index < this.ele.all.length; index++)\r
3949                 this.UpdateEffectAllChildren(this.ele.all[index]);\r
3950 }\r
3951 \r
3952 CAgencyFontChange.prototype.UpdateEffectAllChildren = function(objChild)\r
3953 {\r
3954         objChild.style.fontFamily = this.newfontFamily;\r
3955         objChild.style.color = this.newfColor;\r
3956         objChild.style.textDecoration = this.newtextDecoration;\r
3957         objChild.style.fontWeight = this.newfontWeight;\r
3958         objChild.style.fontStyle = this.newfontStyle;\r
3959         objChild.style.fontSize = this.newfontSize;\r
3960         objChild.style.backgroundColor = this.newBackgroundColor;\r
3961 }\r
3962 \r
3963 CAgencyFontChange.prototype.EndEffect = function()\r
3964 {// to reinstate the original font style\r
3965         this.EndEffectAllChildren( this.ele );\r
3966         for( var index = 0; index < this.ele.all.length; index++)\r
3967                 this.EndEffectAllChildren(this.ele.all[index]);\r
3968 }\r
3969 \r
3970 CAgencyFontChange.prototype.EndEffectAllChildren = function( objChild )\r
3971 {\r
3972         if( typeof(objChild.oldFontFamily) != "undefined" )\r
3973                 objChild.style.fontFamily = objChild.oldFontFamily;\r
3974         if( typeof(objChild.oldColor) != "undefined" )\r
3975                 objChild.style.color = objChild.oldColor;\r
3976         if( typeof(objChild.oldFontWeight) != "undefined" )\r
3977                 objChild.style.fontWeight = objChild.oldFontWeight;\r
3978         if( typeof(objChild.oldFontStyle) != "undefined" )\r
3979                 objChild.style.fontStyle = objChild.oldFontStyle;\r
3980         if( typeof(objChild.oldFontSize) != "undefined" )\r
3981                 objChild.style.fontSize = objChild.oldFontSize;\r
3982         if( typeof(objChild.oldTextDecoration) != "undefined" )\r
3983                 objChild.style.textDecoration = objChild.oldTextDecoration;\r
3984         if( typeof(objChild.oldBackgroundColor) != "undefined" )\r
3985                 objChild.style.backgroundColor = objChild.oldBackgroundColor;\r
3986 }\r
3987 // End of the CAgencyFontChange definition\r
3988 \r
3989 // Begin of the CAgencyChangeStyle definition\r
3990 function CAgencyChangeStyle( element, settings )\r
3991 {//this class can be replace by CAgencyChangeStyle,provided the "settings" is standard CSS string.\r
3992         this.ele = element;\r
3993         \r
3994         // to retrieve the original style\r
3995         this.oldstyle = this.ele.style.cssText;\r
3996         \r
3997         // to set the default style\r
3998         this.newStyle = this.oldstyle;\r
3999         \r
4000         if( typeof(settings) == "string" && settings.length > 1 )\r
4001                 this.newStyle = this.oldstyle + " " + settings;\r
4002 }\r
4003 \r
4004 CAgencyChangeStyle.prototype.PrepareEffect = function()\r
4005 {\r
4006         CCSSP.ShowObject(this.ele, true );\r
4007 }\r
4008 \r
4009 CAgencyChangeStyle.prototype.UpdateEffect = function()\r
4010 {// to change the style\r
4011         this.ele.style.cssText = this.newStyle;\r
4012 }\r
4013 \r
4014 CAgencyChangeStyle.prototype.EndEffect = function()\r
4015 {// to reinstate the original style\r
4016         this.ele.style.cssText = this.oldStyle;\r
4017 }\r
4018 // End of the CAgencyChangeStyle definition\r
4019 \r
4020 //End the definition of CAgencyXXXX classes\r
4021 \r
4022 //Begin to collaborate with other event handler settings \r
4023 CCSSP.RegisterEventHandler( window, "onload", "CEngine.OnPageLoad();BSSCOnLoad();kadovInitTriggersInHead();");\r
4024 CCSSP.RegisterEventHandler( document, "onclick", "CEngine.OnPageClick();BSSCOnClick();");\r
4025 CCSSP.RegisterEventHandler( document, "onmouseover", "CEngine.OnMouseOver();BSSCOnMouseOver();" );\r
4026 CCSSP.RegisterEventHandler( document, "onmouseout", "CEngine.OnMouseOver();BSSCOnMouseOut();" );\r
4027 CCSSP.RegisterEventHandler( window, "onunload", "BSSCOnUnload();");\r
4028 //End to collaborate with other event handler settings\r
4029 \r
4030 \r
4031 /// Section End  - CCSSP DHTM 2 (JavaScript 1.2)\r
4032 \r
4033 //// Segment End -- (JavaScript 1.2)\r