2 //\ overLIB 4.21 - You may not remove or change this notice.
3 //\ Copyright Erik Bosrup 1998-2004. All rights reserved.
5 //\ Contributors are listed on the homepage.
6 //\ This file might be old, always check for the latest version at:
7 //\ http://www.bosrup.com/web/overlib/
9 //\ Please read the license agreement (available through the link above)
10 //\ before using overLIB. Direct any licensing questions to erik@bosrup.com.
12 //\ Do not sell this as your own work or remove this copyright notice.
13 //\ For full details on copying or changing this script please read the
14 //\ license agreement at the link above. Please give credit on sites that
15 //\ use overLIB and submit changes of the script so other people can use
23 // Ignore these lines, configuration is below.
25 var olLoaded
= 0;var pmStart
= 10000000; var pmUpper
= 10001000; var pmCount
= pmStart
+1; var pmt
=''; var pms
= new Array(); var olInfo
= new Info('4.21', 1);
26 var FREPLACE
= 0; var FBEFORE
= 1; var FAFTER
= 2; var FALTERNATE
= 3; var FCHAIN
=4;
27 var olHideForm
=0; // parameter for hiding SELECT and ActiveX elements in IE5.5+
28 var olHautoFlag
= 0; // flags for over-riding VAUTO and HAUTO if corresponding
29 var olVautoFlag
= 0; // positioning commands are used on the command line
30 var hookPts
= new Array(), postParse
= new Array(), cmdLine
= new Array(), runTime
= new Array();
32 registerCommands('donothing,inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,cellpad,status,autostatus,autostatuscap,height,closetext,snapx,snapy,fixx,fixy,relx,rely,fgbackground,bgbackground,padx,pady,fullhtml,above,below,capicon,textfont,captionfont,closefont,textsize,captionsize,closesize,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,mouseoff,closetitle,cssoff,compatmode,cssclass,fgclass,bgclass,textfontclass,captionfontclass,closefontclass');
35 // DEFAULT CONFIGURATION
36 // Settings you want everywhere are set here. All of this can also be
37 // changed on your html page or through an overLIB call.
39 if (typeof ol_fgcolor
=='undefined') var ol_fgcolor
="#CCCCFF";
40 if (typeof ol_bgcolor
=='undefined') var ol_bgcolor
="#333399";
41 if (typeof ol_textcolor
=='undefined') var ol_textcolor
="#000000";
42 if (typeof ol_capcolor
=='undefined') var ol_capcolor
="#FFFFFF";
43 if (typeof ol_closecolor
=='undefined') var ol_closecolor
="#9999FF";
44 if (typeof ol_textfont
=='undefined') var ol_textfont
="Verdana,Arial,Helvetica";
45 if (typeof ol_captionfont
=='undefined') var ol_captionfont
="Verdana,Arial,Helvetica";
46 if (typeof ol_closefont
=='undefined') var ol_closefont
="Verdana,Arial,Helvetica";
47 if (typeof ol_textsize
=='undefined') var ol_textsize
="1";
48 if (typeof ol_captionsize
=='undefined') var ol_captionsize
="1";
49 if (typeof ol_closesize
=='undefined') var ol_closesize
="1";
50 if (typeof ol_width
=='undefined') var ol_width
="200";
51 if (typeof ol_border
=='undefined') var ol_border
="1";
52 if (typeof ol_cellpad
=='undefined') var ol_cellpad
=2;
53 if (typeof ol_offsetx
=='undefined') var ol_offsetx
=10;
54 if (typeof ol_offsety
=='undefined') var ol_offsety
=10;
55 if (typeof ol_text
=='undefined') var ol_text
="Default Text";
56 if (typeof ol_cap
=='undefined') var ol_cap
="";
57 if (typeof ol_sticky
=='undefined') var ol_sticky
=0;
58 if (typeof ol_background
=='undefined') var ol_background
="";
59 if (typeof ol_close
=='undefined') var ol_close
="Close";
60 if (typeof ol_hpos
=='undefined') var ol_hpos
=RIGHT
;
61 if (typeof ol_status
=='undefined') var ol_status
="";
62 if (typeof ol_autostatus
=='undefined') var ol_autostatus
=0;
63 if (typeof ol_height
=='undefined') var ol_height
=-1;
64 if (typeof ol_snapx
=='undefined') var ol_snapx
=0;
65 if (typeof ol_snapy
=='undefined') var ol_snapy
=0;
66 if (typeof ol_fixx
=='undefined') var ol_fixx
=-1;
67 if (typeof ol_fixy
=='undefined') var ol_fixy
=-1;
68 if (typeof ol_relx
=='undefined') var ol_relx
=null;
69 if (typeof ol_rely
=='undefined') var ol_rely
=null;
70 if (typeof ol_fgbackground
=='undefined') var ol_fgbackground
="";
71 if (typeof ol_bgbackground
=='undefined') var ol_bgbackground
="";
72 if (typeof ol_padxl
=='undefined') var ol_padxl
=1;
73 if (typeof ol_padxr
=='undefined') var ol_padxr
=1;
74 if (typeof ol_padyt
=='undefined') var ol_padyt
=1;
75 if (typeof ol_padyb
=='undefined') var ol_padyb
=1;
76 if (typeof ol_fullhtml
=='undefined') var ol_fullhtml
=0;
77 if (typeof ol_vpos
=='undefined') var ol_vpos
=BELOW
;
78 if (typeof ol_aboveheight
=='undefined') var ol_aboveheight
=0;
79 if (typeof ol_capicon
=='undefined') var ol_capicon
="";
80 if (typeof ol_frame
=='undefined') var ol_frame
=self
;
81 if (typeof ol_timeout
=='undefined') var ol_timeout
=0;
82 if (typeof ol_function
=='undefined') var ol_function
=null;
83 if (typeof ol_delay
=='undefined') var ol_delay
=0;
84 if (typeof ol_hauto
=='undefined') var ol_hauto
=0;
85 if (typeof ol_vauto
=='undefined') var ol_vauto
=0;
86 if (typeof ol_closeclick
=='undefined') var ol_closeclick
=0;
87 if (typeof ol_wrap
=='undefined') var ol_wrap
=0;
88 if (typeof ol_followmouse
=='undefined') var ol_followmouse
=1;
89 if (typeof ol_mouseoff
=='undefined') var ol_mouseoff
=0;
90 if (typeof ol_closetitle
=='undefined') var ol_closetitle
='Close';
91 if (typeof ol_compatmode
=='undefined') var ol_compatmode
=0;
92 if (typeof ol_css
=='undefined') var ol_css
=CSSOFF
;
93 if (typeof ol_fgclass
=='undefined') var ol_fgclass
="";
94 if (typeof ol_bgclass
=='undefined') var ol_bgclass
="";
95 if (typeof ol_textfontclass
=='undefined') var ol_textfontclass
="";
96 if (typeof ol_captionfontclass
=='undefined') var ol_captionfontclass
="";
97 if (typeof ol_closefontclass
=='undefined') var ol_closefontclass
="";
100 // ARRAY CONFIGURATION
103 // You can use these arrays to store popup text here instead of in the html.
104 if (typeof ol_texts
=='undefined') var ol_texts
= new Array("Text 0", "Text 1");
105 if (typeof ol_caps
=='undefined') var ol_caps
= new Array("Caption 0", "Caption 1");
108 // END OF CONFIGURATION
109 // Don't change anything below this line, all configuration is above.
119 // Runtime variables init. Don't change for config!
123 var o3_background
="";
124 var o3_close
="Close";
132 var o3_closecolor
="";
145 var o3_fgbackground
="";
146 var o3_bgbackground
="";
153 var o3_aboveheight
=0;
155 var o3_textfont
="Verdana,Arial,Helvetica";
156 var o3_captionfont
="Verdana,Arial,Helvetica";
157 var o3_closefont
="Verdana,Arial,Helvetica";
159 var o3_captionsize
="1";
160 var o3_closesize
="1";
165 var o3_function
=null;
172 var o3_followmouse
=1;
174 var o3_closetitle
='';
179 var o3_textfontclass
="";
180 var o3_captionfontclass
="";
181 var o3_closefontclass
="";
183 // Display state variables
186 var o3_showingsticky
= 0;
187 var o3_removecounter
= 0;
191 var fnRef
, hoveringSwitch
= false;
194 // Decide browser version
195 var isMac
= (navigator
.userAgent
.indexOf("Mac") != -1);
196 var olOp
= (navigator
.userAgent
.toLowerCase().indexOf('opera') > -1 && document
.createTextNode
); // Opera 7
197 var olNs4
= (navigator
.appName
=='Netscape' && parseInt(navigator
.appVersion
) == 4);
198 var olNs6
= (document
.getElementById
) ? true : false;
199 var olKq
= (olNs6
&& /konqueror/i.test(navigator
.userAgent
));
200 var olIe4
= (document
.all
) ? true : false;
202 var olIe55
= false; // Added additional variable to identify IE5.5+
203 var docRoot
= 'document.body';
205 // Resize fix for NS4.x to keep track of layer
207 var oW
= window
.innerWidth
;
208 var oH
= window
.innerHeight
;
209 window
.onresize = function() { if (oW
!= window
.innerWidth
|| oH
!= window
.innerHeight
) location
.reload(); }
212 // Microsoft Stupidity Check(tm).
214 var agent
= navigator
.userAgent
;
215 if (/MSIE/.test(agent
)) {
216 var versNum
= parseFloat(agent
.match(/MSIE[ ](\d\.\d+)\.*/i)[1]);
219 olIe55
=(versNum
>=5.5&&!olOp
) ? true : false;
220 if (olNs6
) olNs6
=false;
223 if (olNs6
) olIe4
= false;
226 // Check for compatability mode.
227 if (document
.compatMode
&& document
.compatMode
== 'CSS1Compat') {
228 docRoot
= ((olIe4
&& !olOp
) ? 'document.documentElement' : docRoot
);
231 // Add window onload handlers to indicate when all modules have been loaded
232 // For Netscape 6+ and Mozilla, uses addEventListener method on the window object
233 // For IE it uses the attachEvent method of the window object and for Netscape 4.x
234 // it sets the window.onload handler to the OLonload_handler function for Bubbling
235 if(window
.addEventListener
) window
.addEventListener("load",OLonLoad_handler
,false);
236 else if (window
.attachEvent
) window
.attachEvent("onload",OLonLoad_handler
);
244 // overlib(arg0,...,argN)
245 // Loads parameters into global runtime variables.
247 if (!olLoaded
|| isExclusive(overlib
.arguments
)) return true;
248 if (olCheckMouseCapture
) olMouseCapture();
250 over
= (typeof over
.id
!= 'string') ? o3_frame
.document
.all
['overDiv'] : over
;
254 // Load defaults to runtime.
259 o3_background
=ol_background
;
262 o3_offsetx
=ol_offsetx
;
263 o3_offsety
=ol_offsety
;
264 o3_fgcolor
=ol_fgcolor
;
265 o3_bgcolor
=ol_bgcolor
;
266 o3_textcolor
=ol_textcolor
;
267 o3_capcolor
=ol_capcolor
;
268 o3_closecolor
=ol_closecolor
;
271 o3_cellpad
=ol_cellpad
;
273 o3_autostatus
=ol_autostatus
;
281 o3_fgbackground
=ol_fgbackground
;
282 o3_bgbackground
=ol_bgbackground
;
287 o3_fullhtml
=ol_fullhtml
;
289 o3_aboveheight
=ol_aboveheight
;
290 o3_capicon
=ol_capicon
;
291 o3_textfont
=ol_textfont
;
292 o3_captionfont
=ol_captionfont
;
293 o3_closefont
=ol_closefont
;
294 o3_textsize
=ol_textsize
;
295 o3_captionsize
=ol_captionsize
;
296 o3_closesize
=ol_closesize
;
297 o3_timeout
=ol_timeout
;
298 o3_function
=ol_function
;
302 o3_closeclick
=ol_closeclick
;
304 o3_followmouse
=ol_followmouse
;
305 o3_mouseoff
=ol_mouseoff
;
306 o3_closetitle
=ol_closetitle
;
308 o3_compatmode
=ol_compatmode
;
309 o3_fgclass
=ol_fgclass
;
310 o3_bgclass
=ol_bgclass
;
311 o3_textfontclass
=ol_textfontclass
;
312 o3_captionfontclass
=ol_captionfontclass
;
313 o3_closefontclass
=ol_closefontclass
;
315 setRunTimeVariables();
319 // Special for frame support, over must be reset...
322 if(!(over
=createDivContainer())) return false;
324 parseTokens('o3_', overlib
.arguments
);
325 if (!postParseChecks()) return false;
328 return runHook("olMain", FREPLACE
);
330 o3_delayid
= setTimeout("runHook('olMain', FREPLACE)", o3_delay
);
335 // Clears popups if appropriate
337 if (olLoaded
&& !isExclusive()) {
338 hideDelay(time
); // delay popup close if time specified
340 if (o3_removecounter
>= 1) { o3_showingsticky
= 0 };
342 if (o3_showingsticky
== 0) {
344 if (over
!= null && o3_timerid
== 0) runHook("hideObject", FREPLACE
, over
);
353 // The Close onMouseOver function for stickies
356 runHook("hideObject", FREPLACE
, over
);
357 o3_showingsticky
= 0;
362 // Method for setting page specific defaults.
363 function overlib_pagedefaults() {
364 parseTokens('ol_', overlib_pagedefaults
.arguments
);
369 // OVERLIB MAIN FUNCTION
372 // This function decides what it is we want to display and how we want it done.
374 var layerhtml
, styleType
;
375 runHook("olMain", FBEFORE
);
377 if (o3_background
!="" || o3_fullhtml
) {
378 // Use background instead of box.
379 layerhtml
= runHook('ol_content_background', FALTERNATE
, o3_css
, o3_text
, o3_background
, o3_fullhtml
);
381 // They want a popup box.
382 styleType
= (pms
[o3_css
-1-pmStart
] == "cssoff" || pms
[o3_css
-1-pmStart
] == "cssclass");
384 // Prepare popup background
385 if (o3_fgbackground
!= "") o3_fgbackground
= "background=\""+o3_fgbackground
+"\"";
386 if (o3_bgbackground
!= "") o3_bgbackground
= (styleType
? "background=\""+o3_bgbackground
+"\"" : o3_bgbackground
);
388 // Prepare popup colors
389 if (o3_fgcolor
!= "") o3_fgcolor
= (styleType
? "bgcolor=\""+o3_fgcolor
+"\"" : o3_fgcolor
);
390 if (o3_bgcolor
!= "") o3_bgcolor
= (styleType
? "bgcolor=\""+o3_bgcolor
+"\"" : o3_bgcolor
);
392 // Prepare popup height
393 if (o3_height
> 0) o3_height
= (styleType
? "height=\""+o3_height
+"\"" : o3_height
);
396 // Decide which kinda box.
399 layerhtml
= runHook('ol_content_simple', FALTERNATE
, o3_css
, o3_text
);
404 layerhtml
= runHook('ol_content_caption', FALTERNATE
, o3_css
, o3_text
, o3_cap
, o3_close
);
407 layerhtml
= runHook('ol_content_caption', FALTERNATE
, o3_css
, o3_text
, o3_cap
, "");
412 // We want it to stick!
414 if (o3_timerid
> 0) {
415 clearTimeout(o3_timerid
);
418 o3_showingsticky
= 1;
419 o3_removecounter
= 0;
422 // Created a separate routine to generate the popup to make it easier
423 // to implement a plugin capability
424 if (!runHook("createPopup", FREPLACE
, layerhtml
)) return false;
426 // Prepare status bar
427 if (o3_autostatus
> 0) {
429 if (o3_autostatus
> 1) o3_status
= o3_cap
;
432 // When placing the layer the first time, even stickies may be moved.
435 // Initiate a timer for timeout
436 if (o3_timeout
> 0) {
437 if (o3_timerid
> 0) clearTimeout(o3_timerid
);
438 o3_timerid
= setTimeout("cClick()", o3_timeout
);
442 runHook("disp", FREPLACE
, o3_status
);
443 runHook("olMain", FAFTER
);
445 return (olOp
&& event
&& event
.type
== 'mouseover' && !o3_status
) ? '' : (o3_status
!= '');
449 // LAYER GENERATION FUNCTIONS
451 // These functions just handle popup content with tags that should adhere to the W3C standards specification.
453 // Makes simple table without caption
454 function ol_content_simple(text
) {
455 var cpIsMultiple
= /,/.test(o3_cellpad
);
456 var txt
= '<table width="'+o3_width
+ '" border="0" cellpadding="'+o3_border
+'" cellspacing="0" '+(o3_bgclass
? 'class="'+o3_bgclass
+'"' : o3_bgcolor
+' '+o3_height
)+'><tr><td><table width="100%" border="0" '+((olNs4
||!cpIsMultiple
) ? 'cellpadding="'+o3_cellpad
+'" ' : '')+'cellspacing="0" '+(o3_fgclass
? 'class="'+o3_fgclass
+'"' : o3_fgcolor
+' '+o3_fgbackground
+' '+o3_height
)+'><tr><td valign="TOP"'+(o3_textfontclass
? ' class="'+o3_textfontclass
+'">' : ((!olNs4
&&cpIsMultiple
) ? ' style="'+setCellPadStr(o3_cellpad
)+'">' : '>'))+(o3_textfontclass
? '' : wrapStr(0,o3_textsize
,'text'))+text
+(o3_textfontclass
? '' : wrapStr(1,o3_textsize
))+'</td></tr></table></td></tr></table>';
462 // Makes table with caption and optional close link
463 function ol_content_caption(text
,title
,close
) {
464 var nameId
, txt
, cpIsMultiple
= /,/.test(o3_cellpad
);
465 var closing
, closeevent
;
468 closeevent
= "onmouseover";
469 if (o3_closeclick
== 1) closeevent
= (o3_closetitle
? "title='" + o3_closetitle
+"'" : "") + " onclick";
470 if (o3_capicon
!= "") {
471 nameId
= ' hspace = \"5\"'+' align = \"middle\" alt = \"\"';
472 if (typeof o3_dragimg
!= 'undefined' && o3_dragimg
) nameId
=' hspace=\"5\"'+' name=\"'+o3_dragimg
+'\" id=\"'+o3_dragimg
+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';
473 o3_capicon
= '<img src=\"'+o3_capicon
+'\"'+nameId
+' />';
477 closing
= '<td '+(!o3_compatmode
&& o3_closefontclass
? 'class="'+o3_closefontclass
: 'align="RIGHT')+'"><a href="javascript:return '+fnRef
+'cClick();"'+((o3_compatmode
&& o3_closefontclass
) ? ' class="' + o3_closefontclass
+ '" ' : ' ')+closeevent
+'="return '+fnRef
+'cClick();">'+(o3_closefontclass
? '' : wrapStr(0,o3_closesize
,'close'))+close
+(o3_closefontclass
? '' : wrapStr(1,o3_closesize
,'close'))+'</a></td>';
478 txt
= '<table width="'+o3_width
+ '" border="0" cellpadding="'+o3_border
+'" cellspacing="0" '+(o3_bgclass
? 'class="'+o3_bgclass
+'"' : o3_bgcolor
+' '+o3_bgbackground
+' '+o3_height
)+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0"><tr><td'+(o3_captionfontclass
? ' class="'+o3_captionfontclass
+'">' : '>')+(o3_captionfontclass
? '' : '<b>'+wrapStr(0,o3_captionsize
,'caption'))+o3_capicon
+title
+(o3_captionfontclass
? '' : wrapStr(1,o3_captionsize
)+'</b>')+'</td>'+closing
+'</tr></table><table width="100%" border="0" '+((olNs4
||!cpIsMultiple
) ? 'cellpadding="'+o3_cellpad
+'" ' : '')+'cellspacing="0" '+(o3_fgclass
? 'class="'+o3_fgclass
+'"' : o3_fgcolor
+' '+o3_fgbackground
+' '+o3_height
)+'><tr><td valign="TOP"'+(o3_textfontclass
? ' class="'+o3_textfontclass
+'">' :((!olNs4
&&cpIsMultiple
) ? ' style="'+setCellPadStr(o3_cellpad
)+'">' : '>'))+(o3_textfontclass
? '' : wrapStr(0,o3_textsize
,'text'))+text
+(o3_textfontclass
? '' : wrapStr(1,o3_textsize
)) + '</td></tr></table></td></tr></table>';
484 // Sets the background picture,padding and lots more. :)
485 function ol_content_background(text
,picture
,hasfullhtml
) {
489 txt
='<table width="'+o3_width
+'" border="0" cellpadding="0" cellspacing="0" height="'+o3_height
+'"><tr><td colspan="3" height="'+o3_padyt
+'"></td></tr><tr><td width="'+o3_padxl
+'"></td><td valign="TOP" width="'+(o3_width
-o3_padxl
-o3_padxr
)+(o3_textfontclass
? '" class="'+o3_textfontclass
: '')+'">'+(o3_textfontclass
? '' : wrapStr(0,o3_textsize
,'text'))+text
+(o3_textfontclass
? '' : wrapStr(1,o3_textsize
))+'</td><td width="'+o3_padxr
+'"></td></tr><tr><td colspan="3" height="'+o3_padyb
+'"></td></tr></table>';
492 set_background(picture
);
496 // Loads a picture into the div.
497 function set_background(pic
) {
500 over
.background
.src
= null;
501 } else if (over
.style
) {
502 over
.style
.backgroundImage
= "none";
506 over
.background
.src
= pic
;
507 } else if (over
.style
) {
508 over
.style
.width
=o3_width
+ 'px';
509 over
.style
.backgroundImage
= "url("+pic
+")";
515 // HANDLING FUNCTIONS
519 // Displays the popup
520 function disp(statustext
) {
521 runHook("disp", FBEFORE
);
523 if (o3_allowmove
== 0) {
524 runHook("placeLayer", FREPLACE
);
525 (olNs6
&&olShowId
<0) ? olShowId
=setTimeout("runHook('showObject', FREPLACE, over)", 1) : runHook("showObject", FREPLACE
, over
);
526 o3_allowmove
= (o3_sticky
|| o3_followmouse
==0) ? 0 : 1;
529 runHook("disp", FAFTER
);
531 if (statustext
!= "") self
.status
= statustext
;
534 // Creates the actual popup structure
535 function createPopup(lyrContent
){
536 runHook("createPopup", FBEFORE
);
539 var wd
,ww
,theObj
= (olNs4
? over
: over
.style
);
540 theObj
.top
= theObj
.left
= ((olIe4
&&!olOp
) ? 0 : -10000) + (!olNs4
? 'px' : 0);
541 layerWrite(lyrContent
);
542 wd
= (olNs4
? over
.clip
.width
: over
.offsetWidth
);
543 if (wd
> (ww
=windowWidth())) {
544 lyrContent
=lyrContent
.replace(/\ /g, ' ');
550 layerWrite(lyrContent
);
552 // Have to set o3_width for placeLayer() routine if o3_wrap is turned on
553 if (o3_wrap
) o3_width
=(olNs4
? over
.clip
.width
: over
.offsetWidth
);
555 runHook("createPopup", FAFTER
, lyrContent
);
560 // Decides where we want the popup.
561 function placeLayer() {
562 var placeX
, placeY
, widthFix
= 0;
564 // HORIZONTAL PLACEMENT, re-arranged to work in Safari
565 if (o3_frame
.innerWidth
) widthFix
=18;
566 iwidth
= windowWidth();
568 // Horizontal scroll offset
569 winoffset
=(olIe4
) ? eval('o3_frame.'+docRoot
+'.scrollLeft') : o3_frame
.pageXOffset
;
571 placeX
= runHook('horizontalPlacement',FCHAIN
,iwidth
,winoffset
,widthFix
);
573 // VERTICAL PLACEMENT, re-arranged to work in Safari
574 if (o3_frame
.innerHeight
) {
575 iheight
=o3_frame
.innerHeight
;
576 } else if (eval('o3_frame.'+docRoot
)&&eval("typeof o3_frame."+docRoot
+".clientHeight=='number'")&&eval('o3_frame.'+docRoot
+'.clientHeight')) {
577 iheight
=eval('o3_frame.'+docRoot
+'.clientHeight');
580 // Vertical scroll offset
581 scrolloffset
=(olIe4
) ? eval('o3_frame.'+docRoot
+'.scrollTop') : o3_frame
.pageYOffset
;
582 placeY
= runHook('verticalPlacement',FCHAIN
,iheight
,scrolloffset
);
584 // Actually move the object.
585 repositionTo(over
, placeX
, placeY
);
589 function olMouseMove(e
) {
590 var e
= (e
) ? e
: event
;
595 } else if (e
.clientX
) {
596 o3_x
= eval('e.clientX+o3_frame.'+docRoot
+'.scrollLeft');
597 o3_y
= eval('e.clientY+o3_frame.'+docRoot
+'.scrollTop');
600 if (o3_allowmove
== 1) runHook("placeLayer", FREPLACE
);
603 if (hoveringSwitch
&& !olNs4
&& runHook("cursorOff", FREPLACE
)) {
604 (olHideDelay
? hideDelay(olHideDelay
) : cClick());
605 hoveringSwitch
= !hoveringSwitch
;
609 // Fake function for 3.0 users.
610 function no_overlib() { return ver3fix
; }
612 // Capture the mouse and chain other scripts.
613 function olMouseCapture() {
614 capExtent
= document
;
615 var fN
, str
= '', l
, k
, f
, wMv
, sS
, mseHandler
= olMouseMove
;
616 var re
= /function[ ]*(\w*)\(/;
618 wMv
= (!olIe4
&& window
.onmousemove
);
619 if (document
.onmousemove
|| wMv
) {
620 if (wMv
) capExtent
= window
;
621 f
= capExtent
.onmousemove
.toString();
625 } else if (fN
[1] == 'anonymous' || fN
[1] == 'olMouseMove' || (wMv
&& fN
[1] == 'onmousemove')) {
627 l
= f
.indexOf('{')+1;
628 k
= f
.lastIndexOf('}');
629 sS
= f
.substring(l
,k
);
630 if ((l
= sS
.indexOf('(')) != -1) {
631 sS
= sS
.substring(0,l
).replace(/^\s+/,'').replace(/\s+$/,'');
632 if (eval("typeof " + sS
+ " == 'undefined'")) window
.onmousemove
= null;
633 else str
= sS
+ '(e);';
637 olCheckMouseCapture
= false;
641 if (fN
[1]) str
= fN
[1]+'(e); ';
643 l
= f
.indexOf('{')+1;
644 k
= f
.lastIndexOf('}');
645 str
= f
.substring(l
,k
) + '\n';
648 str
+= 'olMouseMove(e); ';
649 mseHandler
= new Function('e', str
);
652 capExtent
.onmousemove
= mseHandler
;
653 if (olNs4
) capExtent
.captureEvents(Event
.MOUSEMOVE
);
660 // Does the actual command parsing.
661 function parseTokens(pf
, ar
) {
662 // What the next argument is expected to be.
663 var v
, i
, mode
=-1, par
= (pf
!= 'ol_');
664 var fnMark
= (par
&& !ar
.length
? 1 : 0);
666 for (i
= 0; i
< ar
.length
; i
++) {
668 // Arg is maintext,unless its a number between pmStart and pmUpper
669 // then its a command.
670 if (typeof ar
[i
] == 'number' && ar
[i
] > pmStart
&& ar
[i
] < pmUpper
) {
671 fnMark
= (par
? 1 : 0);
672 i
--; // backup one so that the next block can parse it
676 ol_text
= ar
[i
].toString();
679 o3_text
=ar
[i
].toString();
684 // Note: NS4 doesn't like switch cases with vars.
685 if (ar
[i
] >= pmCount
|| ar
[i
]==DONOTHING
) { continue; }
686 if (ar
[i
]==INARRAY
) { fnMark
= 0; eval(pf
+'text=ol_texts['+ar
[++i
]+'].toString()'); continue; }
687 if (ar
[i
]==CAPARRAY
) { eval(pf
+'cap=ol_caps['+ar
[++i
]+'].toString()'); continue; }
688 if (ar
[i
]==STICKY
) { if (pf
!='ol_') eval(pf
+'sticky=1'); continue; }
689 if (ar
[i
]==BACKGROUND
) { eval(pf
+'background="'+ar
[++i
]+'"'); continue; }
690 if (ar
[i
]==NOCLOSE
) { if (pf
!='ol_') opt_NOCLOSE(); continue; }
691 if (ar
[i
]==CAPTION
) { eval(pf
+"cap='"+escSglQuote(ar
[++i
])+"'"); continue; }
692 if (ar
[i
]==CENTER
|| ar
[i
]==LEFT
|| ar
[i
]==RIGHT
) { eval(pf
+'hpos='+ar
[i
]); if(pf
!='ol_') olHautoFlag
=1; continue; }
693 if (ar
[i
]==OFFSETX
) { eval(pf
+'offsetx='+ar
[++i
]); continue; }
694 if (ar
[i
]==OFFSETY
) { eval(pf
+'offsety='+ar
[++i
]); continue; }
695 if (ar
[i
]==FGCOLOR
) { eval(pf
+'fgcolor="'+ar
[++i
]+'"'); continue; }
696 if (ar
[i
]==BGCOLOR
) { eval(pf
+'bgcolor="'+ar
[++i
]+'"'); continue; }
697 if (ar
[i
]==TEXTCOLOR
) { eval(pf
+'textcolor="'+ar
[++i
]+'"'); continue; }
698 if (ar
[i
]==CAPCOLOR
) { eval(pf
+'capcolor="'+ar
[++i
]+'"'); continue; }
699 if (ar
[i
]==CLOSECOLOR
) { eval(pf
+'closecolor="'+ar
[++i
]+'"'); continue; }
700 if (ar
[i
]==WIDTH
) { eval(pf
+'width='+ar
[++i
]); continue; }
701 if (ar
[i
]==BORDER
) { eval(pf
+'border='+ar
[++i
]); continue; }
702 if (ar
[i
]==CELLPAD
) { i
=opt_MULTIPLEARGS(++i
,ar
,(pf
+'cellpad')); continue; }
703 if (ar
[i
]==STATUS
) { eval(pf
+"status='"+escSglQuote(ar
[++i
])+"'"); continue; }
704 if (ar
[i
]==AUTOSTATUS
) { eval(pf
+'autostatus=('+pf
+'autostatus == 1) ? 0 : 1'); continue; }
705 if (ar
[i
]==AUTOSTATUSCAP
) { eval(pf
+'autostatus=('+pf
+'autostatus == 2) ? 0 : 2'); continue; }
706 if (ar
[i
]==HEIGHT
) { eval(pf
+'height='+pf
+'aboveheight='+ar
[++i
]); continue; } // Same param again.
707 if (ar
[i
]==CLOSETEXT
) { eval(pf
+"close='"+escSglQuote(ar
[++i
])+"'"); continue; }
708 if (ar
[i
]==SNAPX
) { eval(pf
+'snapx='+ar
[++i
]); continue; }
709 if (ar
[i
]==SNAPY
) { eval(pf
+'snapy='+ar
[++i
]); continue; }
710 if (ar
[i
]==FIXX
) { eval(pf
+'fixx='+ar
[++i
]); continue; }
711 if (ar
[i
]==FIXY
) { eval(pf
+'fixy='+ar
[++i
]); continue; }
712 if (ar
[i
]==RELX
) { eval(pf
+'relx='+ar
[++i
]); continue; }
713 if (ar
[i
]==RELY
) { eval(pf
+'rely='+ar
[++i
]); continue; }
714 if (ar
[i
]==FGBACKGROUND
) { eval(pf
+'fgbackground="'+ar
[++i
]+'"'); continue; }
715 if (ar
[i
]==BGBACKGROUND
) { eval(pf
+'bgbackground="'+ar
[++i
]+'"'); continue; }
716 if (ar
[i
]==PADX
) { eval(pf
+'padxl='+ar
[++i
]); eval(pf
+'padxr='+ar
[++i
]); continue; }
717 if (ar
[i
]==PADY
) { eval(pf
+'padyt='+ar
[++i
]); eval(pf
+'padyb='+ar
[++i
]); continue; }
718 if (ar
[i
]==FULLHTML
) { if (pf
!='ol_') eval(pf
+'fullhtml=1'); continue; }
719 if (ar
[i
]==BELOW
|| ar
[i
]==ABOVE
) { eval(pf
+'vpos='+ar
[i
]); if (pf
!='ol_') olVautoFlag
=1; continue; }
720 if (ar
[i
]==CAPICON
) { eval(pf
+'capicon="'+ar
[++i
]+'"'); continue; }
721 if (ar
[i
]==TEXTFONT
) { eval(pf
+"textfont='"+escSglQuote(ar
[++i
])+"'"); continue; }
722 if (ar
[i
]==CAPTIONFONT
) { eval(pf
+"captionfont='"+escSglQuote(ar
[++i
])+"'"); continue; }
723 if (ar
[i
]==CLOSEFONT
) { eval(pf
+"closefont='"+escSglQuote(ar
[++i
])+"'"); continue; }
724 if (ar
[i
]==TEXTSIZE
) { eval(pf
+'textsize="'+ar
[++i
]+'"'); continue; }
725 if (ar
[i
]==CAPTIONSIZE
) { eval(pf
+'captionsize="'+ar
[++i
]+'"'); continue; }
726 if (ar
[i
]==CLOSESIZE
) { eval(pf
+'closesize="'+ar
[++i
]+'"'); continue; }
727 if (ar
[i
]==TIMEOUT
) { eval(pf
+'timeout='+ar
[++i
]); continue; }
728 if (ar
[i
]==FUNCTION
) { if (pf
=='ol_') { if (typeof ar
[i
+1]!='number') { v
=ar
[++i
]; ol_function
=(typeof v
=='function' ? v
: null); }} else {fnMark
= 0; v
= null; if (typeof ar
[i
+1]!='number') v
= ar
[++i
]; opt_FUNCTION(v
); } continue; }
729 if (ar
[i
]==DELAY
) { eval(pf
+'delay='+ar
[++i
]); continue; }
730 if (ar
[i
]==HAUTO
) { eval(pf
+'hauto=('+pf
+'hauto == 0) ? 1 : 0'); continue; }
731 if (ar
[i
]==VAUTO
) { eval(pf
+'vauto=('+pf
+'vauto == 0) ? 1 : 0'); continue; }
732 if (ar
[i
]==CLOSECLICK
) { eval(pf
+'closeclick=('+pf
+'closeclick == 0) ? 1 : 0'); continue; }
733 if (ar
[i
]==WRAP
) { eval(pf
+'wrap=('+pf
+'wrap == 0) ? 1 : 0'); continue; }
734 if (ar
[i
]==FOLLOWMOUSE
) { eval(pf
+'followmouse=('+pf
+'followmouse == 1) ? 0 : 1'); continue; }
735 if (ar
[i
]==MOUSEOFF
) { eval(pf
+'mouseoff=('+pf
+'mouseoff==0) ? 1 : 0'); v
=ar
[i
+1]; if (pf
!= 'ol_' && eval(pf
+'mouseoff') && typeof v
== 'number' && (v
< pmStart
|| v
> pmUpper
)) olHideDelay
=ar
[++i
]; continue; }
736 if (ar
[i
]==CLOSETITLE
) { eval(pf
+"closetitle='"+escSglQuote(ar
[++i
])+"'"); continue; }
737 if (ar
[i
]==CSSOFF
||ar
[i
]==CSSCLASS
) { eval(pf
+'css='+ar
[i
]); continue; }
738 if (ar
[i
]==COMPATMODE
) { eval(pf
+'compatmode=('+pf
+'compatmode==0) ? 1 : 0'); continue; }
739 if (ar
[i
]==FGCLASS
) { eval(pf
+'fgclass="'+ar
[++i
]+'"'); continue; }
740 if (ar
[i
]==BGCLASS
) { eval(pf
+'bgclass="'+ar
[++i
]+'"'); continue; }
741 if (ar
[i
]==TEXTFONTCLASS
) { eval(pf
+'textfontclass="'+ar
[++i
]+'"'); continue; }
742 if (ar
[i
]==CAPTIONFONTCLASS
) { eval(pf
+'captionfontclass="'+ar
[++i
]+'"'); continue; }
743 if (ar
[i
]==CLOSEFONTCLASS
) { eval(pf
+'closefontclass="'+ar
[++i
]+'"'); continue; }
744 i
= parseCmdLine(pf
, i
, ar
);
748 if (fnMark
&& o3_function
) o3_text
= o3_function();
750 if ((pf
== 'o3_') && o3_wrap
) {
753 var tReg
=/<.*\n*>/ig;
754 if (!tReg
.test(o3_text
)) o3_text
= o3_text
.replace(/[ ]+/g, ' ');
755 if (!tReg
.test(o3_cap
))o3_cap
= o3_cap
.replace(/[ ]+/g, ' ');
757 if ((pf
== 'o3_') && o3_sticky
) {
758 if (!o3_close
&& (o3_frame
!= ol_frame
)) o3_close
= ol_close
;
759 if (o3_mouseoff
&& (o3_frame
== ol_frame
)) opt_NOCLOSE(' ');
769 function layerWrite(txt
) {
772 var lyr
= o3_frame
.document
.layers
['overDiv'].document
775 } else if (typeof over
.innerHTML
!= 'undefined') {
776 if (olIe5
&& isMac
) over
.innerHTML
= '';
777 over
.innerHTML
= txt
;
779 range
= o3_frame
.document
.createRange();
780 range
.setStartAfter(over
);
781 domfrag
= range
.createContextualFragment(txt
);
783 while (over
.hasChildNodes()) {
784 over
.removeChild(over
.lastChild
);
787 over
.appendChild(domfrag
);
791 // Make an object visible
792 function showObject(obj
) {
793 runHook("showObject", FBEFORE
);
795 var theObj
=(olNs4
? obj
: obj
.style
);
796 theObj
.visibility
= 'visible';
798 runHook("showObject", FAFTER
);
802 function hideObject(obj
) {
803 runHook("hideObject", FBEFORE
);
805 var theObj
=(olNs4
? obj
: obj
.style
);
806 if (olNs6
&& olShowId
>0) { clearTimeout(olShowId
); olShowId
=0; }
807 theObj
.visibility
= 'hidden';
808 theObj
.top
= theObj
.left
= ((olIe4
&&!olOp
) ? 0 : -10000) + (!olNs4
? 'px' : 0);
810 if (o3_timerid
> 0) clearTimeout(o3_timerid
);
811 if (o3_delayid
> 0) clearTimeout(o3_delayid
);
817 if (obj
.onmouseout
||obj
.onmouseover
) {
818 if (olNs4
) obj
.releaseEvents(Event
.MOUSEOUT
|| Event
.MOUSEOVER
);
819 obj
.onmouseout
= obj
.onmouseover
= null;
822 runHook("hideObject", FAFTER
);
826 function repositionTo(obj
, xL
, yL
) {
827 var theObj
=(olNs4
? obj
: obj
.style
);
828 theObj
.left
= xL
+ (!olNs4
? 'px' : 0);
829 theObj
.top
= yL
+ (!olNs4
? 'px' : 0);
832 // Check position of cursor relative to overDiv DIVision; mouseOut function
833 function cursorOff() {
834 var left
= parseInt(over
.style
.left
);
835 var top
= parseInt(over
.style
.top
);
836 var right
= left
+ (over
.offsetWidth
>= parseInt(o3_width
) ? over
.offsetWidth
: parseInt(o3_width
));
837 var bottom
= top
+ (over
.offsetHeight
>= o3_aboveheight
? over
.offsetHeight
: o3_aboveheight
);
839 if (o3_x
< left
|| o3_x
> right
|| o3_y
< top
|| o3_y
> bottom
) return true;
849 // Calls callme or the default function.
850 function opt_FUNCTION(callme
) {
851 o3_text
= (callme
? (typeof callme
=='string' ? (/.+\(.*\)/.test(callme
) ? eval(callme
) : callme
) : callme()) : (o3_function
? o3_function() : 'No Function'));
857 function opt_NOCLOSE(unused
) {
858 if (!unused
) o3_close
= "";
861 over
.captureEvents(Event
.MOUSEOUT
|| Event
.MOUSEOVER
);
862 over
.onmouseover = function () { if (o3_timerid
> 0) { clearTimeout(o3_timerid
); o3_timerid
= 0; } }
863 over
.onmouseout = function (e
) { if (olHideDelay
) hideDelay(olHideDelay
); else cClick(e
); }
865 over
.onmouseover = function () {hoveringSwitch
= true; if (o3_timerid
> 0) { clearTimeout(o3_timerid
); o3_timerid
=0; } }
871 // Function to scan command line arguments for multiples
872 function opt_MULTIPLEARGS(i
, args
, parameter
) {
873 var k
=i
, re
, pV
, str
='';
875 for(k
=i
; k
<args
.length
; k
++) {
876 if(typeof args
[k
] == 'number' && args
[k
]>pmStart
) break;
877 str
+= args
[k
] + ',';
879 if (str
) str
= str
.substring(0,--str
.length
);
881 k
--; // reduce by one so the for loop this is in works correctly
882 pV
=(olNs4
&& /cellpad/i.test(parameter
)) ? str
.split(',')[0] : str
;
883 eval(parameter
+ '="' + pV
+ '"');
888 // Remove in texts when done.
889 function nbspCleanup() {
891 o3_text
= o3_text
.replace(/\ /g, ' ');
892 o3_cap
= o3_cap
.replace(/\ /g, ' ');
896 // Escape embedded single quotes in text strings
897 function escSglQuote(str
) {
898 return str
.toString().replace(/'/g,"\\'");
901 // Onload handler for window onload event
902 function OLonLoad_handler(e) {
903 var re = /\w+\(.*\)[;\s]+/g, olre = /overlib\(|nd\(|cClick\(/, fn, l, i;
905 if(!olLoaded) olLoaded=1;
907 // Remove it for Gecko based browsers
908 if(window.removeEventListener && e.eventPhase == 3) window.removeEventListener("load
",OLonLoad_handler,false);
909 else if(window.detachEvent) { // and for IE and Opera 4.x but execute calls to overlib, nd, or cClick()
910 window.detachEvent("onload
",OLonLoad_handler);
911 var fN = document.body.getAttribute('onload');
913 fN=fN.toString().match(re);
914 if (fN && fN.length) {
915 for (i=0; i<fN.length; i++) {
916 if (/anonymous/.test(fN[i])) continue;
917 while((l=fN[i].search(/\)[;\s]+/)) != -1) {
918 fn=fN[i].substring(0,l+1);
919 fN[i] = fN[i].substring(l+2);
920 if (olre.test(fn)) eval(fn);
928 // Wraps strings in Layer Generation Functions with the correct tags
929 // endWrap true(if end tag) or false if start tag
930 // fontSizeStr - font size string such as '1' or '10px'
931 // whichString is being wrapped -- 'text', 'caption', or 'close'
932 function wrapStr(endWrap,fontSizeStr,whichString) {
933 var fontStr, fontColor, isClose=((whichString=='close') ? 1 : 0), hasDims=/[%\-a-z]+$/.test(fontSizeStr);
934 fontSizeStr = (olNs4) ? (!hasDims ? fontSizeStr : '1') : fontSizeStr;
935 if (endWrap) return (hasDims&&!olNs4) ? (isClose ? '</span>' : '</div>') : '</font>';
937 fontStr='o3_'+whichString+'font';
938 fontColor='o3_'+((whichString=='caption')? 'cap' : whichString)+'color';
939 return (hasDims&&!olNs4) ? (isClose ? '<span style="font
-family
: '+quoteMultiNameFonts(eval(fontStr))+'; color
: '+eval(fontColor)+'; font
-size
: '+fontSizeStr+';">' : '<div style="font
-family
: '+quoteMultiNameFonts(eval(fontStr))+'; color
: '+eval(fontColor)+'; font
-size
: '+fontSizeStr+';">') : '<font face="'+eval(fontStr)+'" color="'+eval(fontColor)+'" size="'+(parseInt(fontSizeStr)>7 ? '7' : fontSizeStr)+'">';
943 // Quotes Multi word font names; needed for CSS Standards adherence in font-family
944 function quoteMultiNameFonts(theFont) {
945 var v, pM=theFont.split(',');
946 for (var i=0; i<pM.length; i++) {
948 v=v.replace(/^\s+/,'').replace(/\s+$/,'');
949 if(/\s/.test(v) && !/['"]/.test(v
)) {
957 // dummy function which will be overridden
958 function isExclusive(args
) {
962 // Sets cellpadding style string value
963 function setCellPadStr(parameter
) {
964 var Str
='', j
=0, ary
= new Array(), top
, bottom
, left
, right
;
967 ary
=parameter
.replace(/\s+/g,'').split(',');
987 Str
+= ((ary
.length
==1) ? ary
[0] + 'px;' : top
+ 'px ' + right
+ 'px ' + bottom
+ 'px ' + left
+ 'px;');
992 // function will delay close by time milliseconds
993 function hideDelay(time
) {
994 if (time
&&!o3_delay
) {
995 if (o3_timerid
> 0) clearTimeout(o3_timerid
);
997 o3_timerid
=setTimeout("cClick()",(o3_timeout
=time
));
1001 // Was originally in the placeLayer() routine; separated out for future ease
1002 function horizontalPlacement(browserWidth
, horizontalScrollAmount
, widthFix
) {
1003 var placeX
, iwidth
=browserWidth
, winoffset
=horizontalScrollAmount
;
1004 var parsedWidth
= parseInt(o3_width
);
1006 if (o3_fixx
> -1 || o3_relx
!= null) {
1008 placeX
=(o3_relx
!= null ? ( o3_relx
< 0 ? winoffset
+o3_relx
+ iwidth
- parsedWidth
- widthFix
: winoffset
+o3_relx
) : o3_fixx
);
1010 // If HAUTO, decide what to use.
1011 if (o3_hauto
== 1) {
1012 if ((o3_x
- winoffset
) > (iwidth
/ 2)) {
1020 if (o3_hpos
== CENTER
) { // Center
1021 placeX
= o3_x
+o3_offsetx
-(parsedWidth
/2);
1023 if (placeX
< winoffset
) placeX
= winoffset
;
1026 if (o3_hpos
== RIGHT
) { // Right
1027 placeX
= o3_x
+o3_offsetx
;
1029 if ((placeX
+parsedWidth
) > (winoffset
+iwidth
- widthFix
)) {
1030 placeX
= iwidth
+winoffset
- parsedWidth
- widthFix
;
1031 if (placeX
< 0) placeX
= 0;
1034 if (o3_hpos
== LEFT
) { // Left
1035 placeX
= o3_x
-o3_offsetx
-parsedWidth
;
1036 if (placeX
< winoffset
) placeX
= winoffset
;
1041 var snapping
= placeX
% o3_snapx
;
1043 if (o3_hpos
== LEFT
) {
1044 placeX
= placeX
- (o3_snapx
+snapping
);
1047 placeX
= placeX
+(o3_snapx
- snapping
);
1050 if (placeX
< winoffset
) placeX
= winoffset
;
1057 // was originally in the placeLayer() routine; separated out for future ease
1058 function verticalPlacement(browserHeight
,verticalScrollAmount
) {
1059 var placeY
, iheight
=browserHeight
, scrolloffset
=verticalScrollAmount
;
1060 var parsedHeight
=(o3_aboveheight
? parseInt(o3_aboveheight
) : (olNs4
? over
.clip
.height
: over
.offsetHeight
));
1062 if (o3_fixy
> -1 || o3_rely
!= null) {
1064 placeY
=(o3_rely
!= null ? (o3_rely
< 0 ? scrolloffset
+o3_rely
+iheight
- parsedHeight
: scrolloffset
+o3_rely
) : o3_fixy
);
1066 // If VAUTO, decide what to use.
1067 if (o3_vauto
== 1) {
1068 if ((o3_y
- scrolloffset
) > (iheight
/ 2) && o3_vpos
== BELOW
&& (o3_y
+ parsedHeight
+ o3_offsety
- (scrolloffset
+ iheight
) > 0)) {
1070 } else if (o3_vpos
== ABOVE
&& (o3_y
- (parsedHeight
+ o3_offsety
) - scrolloffset
< 0)) {
1076 if (o3_vpos
== ABOVE
) {
1077 if (o3_aboveheight
== 0) o3_aboveheight
= parsedHeight
;
1079 placeY
= o3_y
- (o3_aboveheight
+o3_offsety
);
1080 if (placeY
< scrolloffset
) placeY
= scrolloffset
;
1083 placeY
= o3_y
+o3_offsety
;
1088 var snapping
= placeY
% o3_snapy
;
1090 if (o3_aboveheight
> 0 && o3_vpos
== ABOVE
) {
1091 placeY
= placeY
- (o3_snapy
+snapping
);
1093 placeY
= placeY
+(o3_snapy
- snapping
);
1096 if (placeY
< scrolloffset
) placeY
= scrolloffset
;
1103 // checks positioning flags
1104 function checkPositionFlags() {
1105 if (olHautoFlag
) olHautoFlag
= o3_hauto
=0;
1106 if (olVautoFlag
) olVautoFlag
= o3_vauto
=0;
1110 // get Browser window width
1111 function windowWidth() {
1113 if (o3_frame
.innerWidth
) w
=o3_frame
.innerWidth
;
1114 else if (eval('o3_frame.'+docRoot
)&&eval("typeof o3_frame."+docRoot
+".clientWidth=='number'")&&eval('o3_frame.'+docRoot
+'.clientWidth'))
1115 w
=eval('o3_frame.'+docRoot
+'.clientWidth');
1119 // create the div container for popup content if it doesn't exist
1120 function createDivContainer(id
,frm
,zValue
) {
1121 id
= (id
|| 'overDiv'), frm
= (frm
|| o3_frame
), zValue
= (zValue
|| 1000);
1122 var objRef
, divContainer
= layerReference(id
);
1124 if (divContainer
== null) {
1126 divContainer
= frm
.document
.layers
[id
] = new Layer(window
.innerWidth
, frm
);
1127 objRef
= divContainer
;
1129 var body
= (olIe4
? frm
.document
.all
.tags('BODY')[0] : frm
.document
.getElementsByTagName("BODY")[0]);
1130 if (olIe4
&&!document
.getElementById
) {
1131 body
.insertAdjacentHTML("beforeEnd",'<div id="'+id
+'"></div>');
1132 divContainer
=layerReference(id
);
1134 divContainer
= frm
.document
.createElement("DIV");
1135 divContainer
.id
= id
;
1136 body
.appendChild(divContainer
);
1138 objRef
= divContainer
.style
;
1141 objRef
.position
= 'absolute';
1142 objRef
.visibility
= 'hidden';
1143 objRef
.zIndex
= zValue
;
1144 if (olIe4
&&!olOp
) objRef
.left
= objRef
.top
= '0px';
1145 else objRef
.left
= objRef
.top
= -10000 + (!olNs4
? 'px' : 0);
1148 return divContainer
;
1151 // get reference to a layer with ID=id
1152 function layerReference(id
) {
1153 return (olNs4
? o3_frame
.document
.layers
[id
] : (document
.all
? o3_frame
.document
.all
[id
] : o3_frame
.document
.getElementById(id
)));
1156 // UTILITY FUNCTIONS
1159 // Checks if something is a function.
1160 function isFunction(fnRef
) {
1163 if (typeof fnRef
== 'object') {
1164 for (var i
= 0; i
< fnRef
.length
; i
++) {
1165 if (typeof fnRef
[i
]=='function') continue;
1169 } else if (typeof fnRef
!= 'function') {
1176 // Converts an array into an argument string for use in eval.
1177 function argToString(array
, strtInd
, argName
) {
1178 var jS
= strtInd
, aS
= '', ar
= array
;
1179 argName
=(argName
? argName
: 'ar');
1181 if (ar
.length
> jS
) {
1182 for (var k
= jS
; k
< ar
.length
; k
++) aS
+= argName
+'['+k
+'], ';
1183 aS
= aS
.substring(0, aS
.length
-2);
1189 // Places a hook in the correct position in a hook point.
1190 function reOrder(hookPt
, fnRef
, order
) {
1191 var newPt
= new Array(), match
, i
, j
;
1193 if (!order
|| typeof order
== 'undefined' || typeof order
== 'number') return hookPt
;
1195 if (typeof order
=='function') {
1196 if (typeof fnRef
=='object') {
1197 newPt
= newPt
.concat(fnRef
);
1199 newPt
[newPt
.length
++]=fnRef
;
1202 for (i
= 0; i
< hookPt
.length
; i
++) {
1204 if (typeof fnRef
== 'function' && hookPt
[i
] == fnRef
) {
1207 for(j
= 0; j
< fnRef
.length
; j
++) if (hookPt
[i
] == fnRef
[j
]) {
1212 if (!match
) newPt
[newPt
.length
++] = hookPt
[i
];
1215 newPt
[newPt
.length
++] = order
;
1217 } else if (typeof order
== 'object') {
1218 if (typeof fnRef
== 'object') {
1219 newPt
= newPt
.concat(fnRef
);
1221 newPt
[newPt
.length
++] = fnRef
;
1224 for (j
= 0; j
< hookPt
.length
; j
++) {
1226 if (typeof fnRef
== 'function' && hookPt
[j
] == fnRef
) {
1229 for (i
= 0; i
< fnRef
.length
; i
++) if (hookPt
[j
] == fnRef
[i
]) {
1234 if (!match
) newPt
[newPt
.length
++]=hookPt
[j
];
1237 for (i
= 0; i
< newPt
.length
; i
++) hookPt
[i
] = newPt
[i
];
1240 for (j
= 0; j
< hookPt
.length
; j
++) {
1242 for (i
= 0; i
< order
.length
; i
++) {
1243 if (hookPt
[j
] == order
[i
]) {
1248 if (!match
) newPt
[newPt
.length
++] = hookPt
[j
];
1250 newPt
= newPt
.concat(order
);
1259 // PLUGIN ACTIVATION FUNCTIONS
1262 // Runs plugin functions to set runtime variables.
1263 function setRunTimeVariables(){
1264 if (typeof runTime
!= 'undefined' && runTime
.length
) {
1265 for (var k
= 0; k
< runTime
.length
; k
++) {
1271 // Runs plugin functions to parse commands.
1272 function parseCmdLine(pf
, i
, args
) {
1273 if (typeof cmdLine
!= 'undefined' && cmdLine
.length
) {
1274 for (var k
= 0; k
< cmdLine
.length
; k
++) {
1275 var j
= cmdLine
[k
](pf
, i
, args
);
1286 // Runs plugin functions to do things after parse.
1287 function postParseChecks(pf
,args
){
1288 if (typeof postParse
!= 'undefined' && postParse
.length
) {
1289 for (var k
= 0; k
< postParse
.length
; k
++) {
1290 if (postParse
[k
](pf
,args
)) continue;
1291 return false; // end now since have an error
1299 // PLUGIN REGISTRATION FUNCTIONS
1302 // Registers commands and creates constants.
1303 function registerCommands(cmdStr
) {
1304 if (typeof cmdStr
!='string') return;
1306 var pM
= cmdStr
.split(',');
1307 pms
= pms
.concat(pM
);
1309 for (var i
= 0; i
< pM
.length
; i
++) {
1310 eval(pM
[i
].toUpperCase()+'='+pmCount
++);
1314 // Registers no-parameter commands
1315 function registerNoParameterCommands(cmdStr
) {
1316 if (!cmdStr
&& typeof cmdStr
!= 'string') return;
1317 pmt
=(!pmt
) ? cmdStr
: pmt
+ ',' + cmdStr
;
1320 // Register a function to hook at a certain point.
1321 function registerHook(fnHookTo
, fnRef
, hookType
, optPm
) {
1322 var hookPt
, last
= typeof optPm
;
1324 if (fnHookTo
== 'plgIn'||fnHookTo
== 'postParse') return;
1325 if (typeof hookPts
[fnHookTo
] == 'undefined') hookPts
[fnHookTo
] = new FunctionReference();
1327 hookPt
= hookPts
[fnHookTo
];
1329 if (hookType
!= null) {
1330 if (hookType
== FREPLACE
) {
1331 hookPt
.ovload
= fnRef
; // replace normal overlib routine
1332 if (fnHookTo
.indexOf('ol_content_') > -1) hookPt
.alt
[pms
[CSSOFF
-1-pmStart
]]=fnRef
;
1334 } else if (hookType
== FBEFORE
|| hookType
== FAFTER
) {
1335 var hookPt
=(hookType
== 1 ? hookPt
.before
: hookPt
.after
);
1337 if (typeof fnRef
== 'object') {
1338 hookPt
= hookPt
.concat(fnRef
);
1340 hookPt
[hookPt
.length
++] = fnRef
;
1343 if (optPm
) hookPt
= reOrder(hookPt
, fnRef
, optPm
);
1345 } else if (hookType
== FALTERNATE
) {
1346 if (last
=='number') hookPt
.alt
[pms
[optPm
-1-pmStart
]] = fnRef
;
1347 } else if (hookType
== FCHAIN
) {
1348 hookPt
= hookPt
.chain
;
1349 if (typeof fnRef
=='object') hookPt
=hookPt
.concat(fnRef
); // add other functions
1350 else hookPt
[hookPt
.length
++]=fnRef
;
1357 // Register a function that will set runtime variables.
1358 function registerRunTimeFunction(fn
) {
1359 if (isFunction(fn
)) {
1360 if (typeof fn
== 'object') {
1361 runTime
= runTime
.concat(fn
);
1363 runTime
[runTime
.length
++] = fn
;
1368 // Register a function that will handle command parsing.
1369 function registerCmdLineFunction(fn
){
1370 if (isFunction(fn
)) {
1371 if (typeof fn
== 'object') {
1372 cmdLine
= cmdLine
.concat(fn
);
1374 cmdLine
[cmdLine
.length
++] = fn
;
1379 // Register a function that does things after command parsing.
1380 function registerPostParseFunction(fn
){
1381 if (isFunction(fn
)) {
1382 if (typeof fn
== 'object') {
1383 postParse
= postParse
.concat(fn
);
1385 postParse
[postParse
.length
++] = fn
;
1391 // PLUGIN REGISTRATION FUNCTIONS
1394 // Runs any hooks registered.
1395 function runHook(fnHookTo
, hookType
) {
1396 var l
= hookPts
[fnHookTo
], k
, rtnVal
= null, optPm
, arS
, ar
= runHook
.arguments
;
1398 if (hookType
== FREPLACE
) {
1399 arS
= argToString(ar
, 2);
1401 if (typeof l
== 'undefined' || !(l
= l
.ovload
)) rtnVal
= eval(fnHookTo
+'('+arS
+')');
1402 else rtnVal
= eval('l('+arS
+')');
1404 } else if (hookType
== FBEFORE
|| hookType
== FAFTER
) {
1405 if (typeof l
!= 'undefined') {
1406 l
=(hookType
== 1 ? l
.before
: l
.after
);
1409 arS
= argToString(ar
, 2);
1410 for (var k
= 0; k
< l
.length
; k
++) eval('l[k]('+arS
+')');
1413 } else if (hookType
== FALTERNATE
) {
1415 arS
= argToString(ar
, 3);
1417 if (typeof l
== 'undefined' || (l
= l
.alt
[pms
[optPm
-1-pmStart
]]) == 'undefined') {
1418 rtnVal
= eval(fnHookTo
+'('+arS
+')');
1420 rtnVal
= eval('l('+arS
+')');
1422 } else if (hookType
== FCHAIN
) {
1423 arS
=argToString(ar
,2);
1426 for (k
=l
.length
; k
> 0; k
--) if((rtnVal
=eval('l[k-1]('+arS
+')'))!=void(0)) break;
1433 // OBJECT CONSTRUCTORS
1436 // Object for handling hooks.
1437 function FunctionReference() {
1439 this.before
= new Array();
1440 this.after
= new Array();
1441 this.alt
= new Array();
1442 this.chain
= new Array();
1445 // Object for simple access to the overLIB version used.
1446 // Examples: simpleversion:351 major:3 minor:5 revision:1
1447 function Info(version
, prerelease
) {
1448 this.version
= version
;
1449 this.prerelease
= prerelease
;
1451 this.simpleversion
= Math
.round(this.version
*100);
1452 this.major
= parseInt(this.simpleversion
/ 100);
1453 this.minor
= parseInt(this.simpleversion
/ 10) - this.major
* 10;
1454 this.revision
= parseInt(this.simpleversion
) - this.major
* 100 - this.minor
* 10;
1458 // checks for Core Version required
1459 function meets(reqdVersion
) {
1460 return (!reqdVersion
) ? false : this.simpleversion
>= Math
.round(100*parseFloat(reqdVersion
));
1465 // STANDARD REGISTRATIONS
1467 registerHook("ol_content_simple", ol_content_simple
, FALTERNATE
, CSSOFF
);
1468 registerHook("ol_content_caption", ol_content_caption
, FALTERNATE
, CSSOFF
);
1469 registerHook("ol_content_background", ol_content_background
, FALTERNATE
, CSSOFF
);
1470 registerHook("ol_content_simple", ol_content_simple
, FALTERNATE
, CSSCLASS
);
1471 registerHook("ol_content_caption", ol_content_caption
, FALTERNATE
, CSSCLASS
);
1472 registerHook("ol_content_background", ol_content_background
, FALTERNATE
, CSSCLASS
);
1473 registerPostParseFunction(checkPositionFlags
);
1474 registerHook("hideObject", nbspCleanup
, FAFTER
);
1475 registerHook("horizontalPlacement", horizontalPlacement
, FCHAIN
);
1476 registerHook("verticalPlacement", verticalPlacement
, FCHAIN
);
1477 if (olNs4
||(olIe5
&&isMac
)||olKq
) olLoaded
=1;
1478 registerNoParameterCommands('sticky,autostatus,autostatuscap,fullhtml,hauto,vauto,closeclick,wrap,followmouse,mouseoff,compatmode');
1480 // ESTABLISH MOUSECAPTURING
1483 // Capture events, alt. diffuses the overlib function.
1484 var olCheckMouseCapture
=true;
1485 if ((olNs4
|| olNs6
|| olIe4
)) {
1488 overlib
= no_overlib
;