//\//////////////////////////////////////////////////////////////////////////////////
//\  overLIB 3.51 Beta 2  --  This notice must remain untouched at all times.
//\  Copyright Erik Bosrup 1998-2002. All rights reserved.
//\
//\  WARNING: This is a development copy - do not use in production environments.
//\
//\  By Erik Bosrup (erik@bosrup.com).  Last modified 2002-10-02.
//\  Portions by Dan Steinman (dansteinman.com). Additions by other people are
//\  listed on the overLIB homepage.
//\
//\  Get the latest version at http://www.bosrup.com/web/overlib/
//\
//\  This script is published under an open source license. Please read the license
//\  agreement online at: http://www.bosrup.com/web/overlib/license.html
//\  If you have questions regarding the license please contact erik@bosrup.com.
//\
//\  This script library was originally created for personal use. By request it has
//\  later been made public. This is free software. Do not sell this as your own
//\  work, or remove this copyright notice. For full details on copying or changing
//\  this script please read the license agreement at the link above.
//\
//\  Please give credit on sites that use overLIB and submit changes of the script
//\  so other people can use them as well. This script is free to use, don't abuse.
//\//////////////////////////////////////////////////////////////////////////////////
//\
//\  overlib351mws.js is derived from v3.51 Beta 1 and 2, plus bug-fixes or enhancements
//\  by me, Robert E. Boughner (REB), Dennis Sandow (DS), or Victor D. (VD), or adapted
//\  from Jason Anderson's (JA) jwin library, and not yet included in v3.51. The mods are
//\  flagged with the string "// FM", followed as appropriate by additional slashes and
//\  initials.  The Change History for overlib351mws.js can be accessed via:
//\		http://www.macridesweb.com/oltest/		-- Foteos Macrides
//\//////////////////////////////////////////////////////////////////////////////////
//\mini

////////////////////////////////////////////////////////////////////////////////////
// CONSTANTS
// Don't touch these. :)
////////////////////////////////////////////////////////////////////////////////////
var INARRAY=1;
var CAPARRAY=2;
var STICKY=3;
var BACKGROUND=4;
var NOCLOSE=5;
var CAPTION=6;
var LEFT=7;
var RIGHT=8;
var CENTER=9;
var OFFSETX=10;
var OFFSETY=11;
var FGCOLOR=12;
var BGCOLOR=13;
var CGCOLOR=14; // FM
var TEXTCOLOR=15;
var CAPCOLOR=16;
var CLOSECOLOR=17;
var WIDTH=18;
var WRAP=19; // FM/REB
var BORDER=20;
var BASE=21; // FM
var STATUS=22;
var AUTOSTATUS=23;
var AUTOSTATUSCAP=24;
var HEIGHT=25;
var CLOSETEXT=26;
var SNAPX=27;
var SNAPY=28;
var FIXX=29;
var FIXY=30;
var RELX=31; // FM/DS/REB
var RELY=32; // FM/DS/REB
var MIDX=33; // FM
var MIDY=34; // FM
var FGBACKGROUND=35;
var BGBACKGROUND=36;
var CGBACKGROUND=37; // FM
var PADX=38;
var PADY=39;
var FULLHTML=40;
var ABOVE=41;
var BELOW=42;
var VCENTER=43; // FM
var CAPICON=44;
var TEXTFONT=45;
var CAPTIONFONT=46;
var CLOSEFONT=47;
var TEXTSIZE=48;
var CAPTIONSIZE=49;
var CLOSESIZE=50;
var FRAME=51;
var TIMEOUT=52;
var FUNCTION=53;
var DELAY=54;
var HAUTO=55;
var VAUTO=56;
var NOJUSTX=57; // FM
var NOJUSTY=58; // FM
var DRAGGABLE=59; // FM/VD/REB
var CLOSECLICK=60;
var FGCLASS=61;
var BGCLASS=62;
var CGCLASS=63; // FM
var TEXTFONTCLASS=64;
var CAPTIONFONTCLASS=65;
var CLOSEFONTCLASS=66;
var REF=67; // FM/REB
var REFC=68; // FM/REB
var REFP=69; // FM/REB
var REFX=70; // FM/REB
var REFY=71; // FM/REB

////////////////////////////////////////////////////////////////////////////////////
// DEFAULT CONFIGURATION
// You don't have to change anything here if you don't want to. All of this can be
// changed on your html page or through an overLIB call.
////////////////////////////////////////////////////////////////////////////////////

// Main background color (the large area)
// Usually a bright color (white, yellow etc)
if (typeof ol_fgcolor == 'undefined'){var ol_fgcolor = "#CCCCFF";}

// Border color
// Usually a dark color (black, brown etc)
if (typeof ol_bgcolor == 'undefined'){var ol_bgcolor = "#333399";}

// Caption background color (typically same as border color) // FM
// Usually a dark color (black, brown etc)
if (typeof ol_cgcolor == 'undefined'){var ol_cgcolor = "#333399";}

// Text color
// Usually a dark color
if (typeof ol_textcolor == 'undefined'){var ol_textcolor = "#000000";}

// Color of the caption text
// Usually a bright color
if (typeof ol_capcolor == 'undefined'){var ol_capcolor = "#FFFFFF";}

// Color of "Close" when using Sticky
// Usually a semi-bright color
if (typeof ol_closecolor == 'undefined'){var ol_closecolor = "#9999FF";}

// Font face for the main text
if (typeof ol_textfont == 'undefined'){var ol_textfont = "Verdana,Arial,Helvetica";}

// Font face for the caption
if (typeof ol_captionfont == 'undefined'){var ol_captionfont = "Verdana,Arial,Helvetica";}

// Font face for the close text
if (typeof ol_closefont == 'undefined'){var ol_closefont = "Verdana,Arial,Helvetica";}

// Font size for the main text
if (typeof ol_textsize == 'undefined'){var ol_textsize = "1";}

// Font size for the caption
if (typeof ol_captionsize == 'undefined'){var ol_captionsize = "1";}

// Font size for the close text
if (typeof ol_closesize == 'undefined'){var ol_closesize = "1";}

// Default width of the popups in pixels. 100-300 pixels is typical.
// This value is simply a suggestion to the browser, which may change
// the actual width depending on the content.
if (typeof ol_width == 'undefined'){var ol_width = "200";}

// Intended to keep the popup no wider than its content plus normal padding.
// Overrides the o3_width setting. Default is no wrap (0). // FM/REB
if (typeof ol_wrap == 'undefined'){var ol_wrap = 0;}

// How thick the ol_border should be in pixels
// 1-3 pixels is typical
if (typeof ol_border == 'undefined'){var ol_border = "1";}

// Any additional thickening of the border's base in pixels // FM
if (typeof ol_base == 'undefined'){var ol_base = "0";}

// How many pixels to the right (positive values) or left (negative values)
// of the cursor to show the popup. Values between 3 and 12 are best.
if (typeof ol_offsetx == 'undefined'){var ol_offsetx = 10;}
	
// How many pixels below (positive values) or above (negative values) the
// cursor to show the popup. Values between 3 and 20 are best.
if (typeof ol_offsety == 'undefined'){var ol_offsety = 10;}

// Default text for popups
// Should you forget to pass something to overLIB this will be displayed.
if (typeof ol_text == 'undefined'){var ol_text = "Default Text";}

// Default caption
// You should leave this blank or you will have problems making non caps popups.
if (typeof ol_cap == 'undefined'){var ol_cap = "";}

// Decides if sticky popups are default. 0 for non, 1 for stickies.
if (typeof ol_sticky == 'undefined'){var ol_sticky = 0;}

// Default background image. Better left empty unless you always want one.
if (typeof ol_background == 'undefined'){var ol_background = "";}

// Text for the closing sticky popups. Normal is "Close".
if (typeof ol_close == 'undefined'){var ol_close = "Close";}

// Default vertical alignment for popups.
// It's best to leave RIGHT here. Other options are LEFT and CENTER.
if (typeof ol_hpos == 'undefined'){var ol_hpos = RIGHT;}

// Default status bar text when a popup is invoked.
if (typeof ol_status == 'undefined'){var ol_status = "";}

// If the status bar automatically should load either text or caption.
// 0=nothing, 1=text, 2=caption
if (typeof ol_autostatus == 'undefined'){var ol_autostatus = 0;}

// Default height for popup. Often best left alone.
if (typeof ol_height == 'undefined'){var ol_height = -1;}

// Horizontal grid spacing that popups will snap to.
// 0 makes no grid, anything else will cause a snap to that grid spacing.
if (typeof ol_snapx == 'undefined'){var ol_snapx = 0;}

// Vertical grid spacing that popups will snap to.
// 0 makes no grid, anything else will cause a snap to that grid spacing.
if (typeof ol_snapy == 'undefined'){var ol_snapy = 0;}

// Sets the popup horizontal position to a fixed column.
// Numbers greater than -1 will cause fixed position.
if (typeof ol_fixx == 'undefined'){var ol_fixx = -1;}

// Sets the popup vertical position to a fixed row.
// Numbers greater than -1 will cause fixed position.
if (typeof ol_fixy == 'undefined'){var ol_fixy = -1;}

// Sets the popup horizontal position to a column relative to the window display.
// Anything numeric (non-null) will cause relative position. Positive and 0 is to
// the right from left window margin for left margin of popup. Negative is to the
// left from right window margin for right margin of popup. // FM/DS/REB
if (typeof ol_relx == 'undefined'){var ol_relx = null;}

// Sets the popup vertical position to a row relative to the window display.
// Anything numeric (non-null) will cause relative position. Positive and 0 is down
// from top window margin for top margin of popup. Negaive is up from bottom window
// margin for bottom margin of popup. // FM/DS/REB
if (typeof ol_rely == 'undefined'){var ol_rely = null;}

// Sets the popup horizontal midpoint to a column relative to the window horizontal
// midpoint. Anything numeric (non-null) will cause midpoint position. Positive and
// 0 is to the right from the window midpoint. Negative is to the left. // FM
if (typeof ol_midx == 'undefined'){var ol_midx = null;}

// Sets the popup vertical midpoint to a row relative to the window vertical midpoint.
// Anything numeric (non-null) will cause midpoint position. Positive and 0 is down
// from the window midpoint. Negative is up. // FM
if (typeof ol_midy == 'undefined'){var ol_midy = null;}

// Background image for the popups inside.
if (typeof ol_fgbackground == 'undefined'){var ol_fgbackground = "";}

// Background image for the popups frame (border).
if (typeof ol_bgbackground == 'undefined'){var ol_bgbackground = "";}

// Background image for caption. // FM
if (typeof ol_cgbackground == 'undefined'){var ol_cgbackground = "";}

// How much horizontal left padding text should get by default when BACKGROUND is used.
if (typeof ol_padxl == 'undefined'){var ol_padxl = 1;}

// How much horizontal right padding text should get by default when BACKGROUND is used.
if (typeof ol_padxr == 'undefined'){var ol_padxr = 1;}

// How much vertical top padding text should get by default when BACKGROUND is used.
if (typeof ol_padyt == 'undefined'){var ol_padyt = 1;}

// How much vertical bottom padding text should get by default when BACKGROUND is used.
if (typeof ol_padyb == 'undefined'){var ol_padyb = 1;}

// If the user by default must supply all html for complete control of popup content.
// Set to 1 to activate, 0 otherwise.
if (typeof ol_fullhtml == 'undefined'){var ol_fullhtml = 0;}

// Default vertical position of the popup. Default should normally be BELOW.
if (typeof ol_vpos == 'undefined'){var ol_vpos = BELOW;}

// Default icon to place next to the popups caption.
if (typeof ol_capicon == 'undefined'){var ol_capicon = "";}

// Default frame. We default to current frame if there is no frame defined.
if (typeof ol_frame == 'undefined'){var ol_frame = self;}

// Default timeout. By default there is no timeout.
if (typeof ol_timeout == 'undefined'){var ol_timeout = 0;}

// Default javascript function. By default there is none.
if (typeof ol_function == 'undefined'){var ol_function = null;}

// Default delay. By default there is no delay.
if (typeof ol_delay == 'undefined'){var ol_delay = 0;}

// If overLIB should decide the horizontal placement.
if (typeof ol_hauto == 'undefined'){var ol_hauto = 0;}

// If overLIB should decide the vertical placement.
if (typeof ol_vauto == 'undefined'){var ol_vauto = 0;}

// If overLIB should let popups overrun the left or right window margins.
if (typeof ol_nojustx == 'undefined'){var ol_nojustx = 0;}

// If overLIB should let popups overrun the top or bottom window margins.
if (typeof ol_nojusty == 'undefined'){var ol_nojusty = 0;}

// If sticky should be draggable // FM
if (typeof ol_draggable == 'undefined'){var ol_draggable = 0;}

// If the user has to click to close stickies.
if (typeof ol_closeclick == 'undefined'){var ol_closeclick = 0;}

// Main background class (eqv of fgcolor)
if (typeof ol_fgclass == 'undefined'){var ol_fgclass = "";}

// Frame background class (eqv of bgcolor)
if (typeof ol_bgclass == 'undefined'){var ol_bgclass = "";}

// Caption background class // FM
if (typeof ol_cgclass == 'undefined'){var ol_cgclass = "";}

// Main font class
if (typeof ol_textfontclass == 'undefined'){var ol_textfontclass = "";}

// Caption font class
if (typeof ol_captionfontclass == 'undefined'){var ol_captionfontclass = "";}

// Close font class
if (typeof ol_closefontclass == 'undefined'){var ol_closefontclass = "";}

// The NAME of an anchor or image, or the ID of a layer, to serve as a reference object
// such that a corner of the popup will be positioned relative to a corner of the object.
if (typeof ol_ref == 'undefined'){var ol_ref = "";} // FM/REB

// Corner of the reference object for positioning. // FM/REB
// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'.
if (typeof ol_refc == 'undefined'){var ol_refc = 'UL';}

// Corner of the popup for positioning. // FM/REB
// Value can be: 'UL' (Upper Left), 'UR', 'LR', or 'LL'.
if (typeof ol_refp == 'undefined'){var ol_refp = 'UL';}

// X displacement from the reference point. Positive to the right, negative left. // FM/REB
if (typeof ol_refx == 'undefined'){var ol_refx = 0;}

// Y displacement from the reference point. Positive down, negative up. // FM/REB
if (typeof ol_refy == 'undefined'){var ol_refy = 0;}

////////////////////////////////////////////////////////////////////////////////////
// ARRAY CONFIGURATION
// You don't have to change anything here if you don't want to. The following
// arrays can be filled with text and html if you don't wish to pass it from
// your html page.
////////////////////////////////////////////////////////////////////////////////////

// Array with texts.
if (typeof ol_texts == 'undefined') { var ol_texts = new Array("Text 0", "Text 1"); }

// Array with captions.
if (typeof ol_caps == 'undefined') { var ol_caps = new Array("Caption 0", "Caption 1"); }

////////////////////////////////////////////////////////////////////////////////////
// END CONFIGURATION
// Don't change anything below this line, all configuration is above.
////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////
// INIT
////////////////////////////////////////////////////////////////////////////////////

// Runtime variables init. Used for runtime only, don't change, not for config!
var o3_text="";
var o3_cap="";
var o3_sticky=0;
var o3_background="";
var o3_close="Close";
var o3_hpos=RIGHT;
var o3_offsetx=10;
var o3_offsety=10;
var o3_fgcolor="";
var o3_bgcolor="";
var o3_cgcolor=""; // FM
var o3_textcolor="";
var o3_capcolor="";
var o3_closecolor="";
var o3_width=200;
var o3_wrap=0; // FM/REB
var o3_border=1;
var o3_base=0; // FM
var o3_status="";
var o3_autostatus=0;
var o3_height= -1;
var o3_snapx=0;
var o3_snapy=0;
var o3_fixx= -1;
var o3_fixy= -1;
var o3_relx=null; // FM/DS/REB
var o3_rely=null; // FM/DS/REB
var o3_midx=null; // FM
var o3_midy=null; // FM
var o3_ref=""; // FM/REB
var o3_refc='UL'; // FM/REB
var o3_refp='UL'; // FM/REB
var o3_refx=0; // FM/REB
var o3_refy=0; // FM/REB
var o3_fgbackground="";
var o3_bgbackground="";
var o3_cgbackground=""; // FM
var o3_padxl=0;
var o3_padxr=0;
var o3_padyt=0;
var o3_padyb=0;
var o3_fullhtml=0;
var o3_vpos=BELOW;
var o3_capicon="";
var o3_textfont="Verdana,Arial,Helvetica";
var o3_captionfont="Verdana,Arial,Helvetica";
var o3_closefont="Verdana,Arial,Helvetica";
var o3_textsize="1";
var o3_captionsize="1";
var o3_closesize="1";
var o3_frame=self;
var o3_timeout=0;
var o3_timerid=0;
var o3_allowmove=0;
var o3_function=null; 
var o3_delay=0;
var o3_delayid=0;
var o3_showid=0; // FM
var o3_hauto=0;
var o3_vauto=0;
var o3_nojustx=0; // FM
var o3_nojusty=0; // FM
var o3_draggable=0; // FM
var o3_closeclick=0;
var o3_fgclass="";
var o3_bgclass="";
var o3_cgclass=""; // FM
var o3_textfontclass="";
var o3_captionfontclass="";
var o3_closefontclass="";

// Display state variables
var o3_x=0;
var o3_y=0;
var o3_allow=0;
var o3_showingsticky=0;
var o3_removecounter=0;
var o3_dragging=0; // FM
var oMMv; // FM/REB

// Our layer
var over=null;
var fnRef;
var hSwitch; // FM/REB for mouseOut feature in IE and NS6

// Decide browser version
var ns4 = (navigator.appName == 'Netscape' && parseInt(navigator.appVersion) == 4);
var ns6 = (document.getElementById)? true:false;
var ie4 = (document.all)? true:false;
if (ie4) var docRoot = 'document.body';
var ie5 = false;
if (ns4) {
  var oW = window.innerWidth;
  var oH = window.innerHeight;
  window.onresize = function () {if (oW!=window.innerWidth||oH!=window.innerHeight) location.reload();}
}

// Microsoft Stupidity Check(tm).
if (ie4) {
	if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0)) {
        if(document.compatMode && document.compatMode == 'CSS1Compat') docRoot = 'document.documentElement';
		ie5 = true;
	}
	if (ns6) {
		ns6 = false;
	}
}

// Capture events, alt. diffuses the overlib function. // FM/REB
if (ns4||ie4||ns6) {
	var fN,mseHandler=mouseMove,capExtent=document;
	var re=/function[ ]+(\w+)\(/;
	if(document.onmousemove||(window.onmousemove&&!ie4)){
		if(window.onmousemove) capExtent=window;
		fN=capExtent.onmousemove.toString().match(re);
		var str='mouseMove(e); '+fN[1]+'(e);';
		mseHandler=new Function('e',str);
	}
	capExtent.onmousemove=mseHandler;
	if(ns4) capExtent.captureEvents(Event.MOUSEMOVE);
} else {
	overlib=no_overlib;
	nd=no_overlib;
	ver3fix=true;
}

// Fake function for 3.0 users.
function no_overlib() {
	return ver3fix;
}


////////////////////////////////////////////////////////////////////////////////////
// PUBLIC FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////

// overlib(arg0, ..., argN)
// Loads parameters into global runtime variables.
function overlib() {
	// Load defaults to runtime.
	o3_text=ol_text;
	o3_cap=ol_cap;
	o3_sticky=ol_sticky;
	o3_background=ol_background;
	o3_close=ol_close;
	o3_hpos=ol_hpos;
	o3_offsetx=ol_offsetx;
	o3_offsety=ol_offsety;
	o3_fgcolor=ol_fgcolor;
	o3_bgcolor=ol_bgcolor;
	o3_cgcolor=ol_cgcolor; // FM
	o3_textcolor=ol_textcolor;
	o3_capcolor=ol_capcolor;
	o3_closecolor=ol_closecolor;
	o3_width=ol_width;
	o3_wrap=ol_wrap; // FM/REB
	o3_border=ol_border;
	o3_base=ol_base; // FM
	o3_status=ol_status;
	o3_autostatus=ol_autostatus;
	o3_height=ol_height;
	o3_snapx=ol_snapx;
	o3_snapy=ol_snapy;
	o3_fixx=ol_fixx;
	o3_fixy=ol_fixy;
	o3_relx=ol_relx; // FM/DS/REB
	o3_rely=ol_rely; // FM/DS/REB
	o3_midx=ol_midx; // FM
	o3_midy=ol_midy; // FM
	o3_ref=ol_ref; // FM/REB
	o3_refc=ol_refc; // FM/REB
	o3_refp=ol_refp; // FM/REB
	o3_refx=ol_refx; // FM/REB
	o3_refy=ol_refy; // FM/REB
	o3_fgbackground=ol_fgbackground;
	o3_bgbackground=ol_bgbackground;
	o3_cgbackground=ol_cgbackground; // FM
	o3_padxl=ol_padxl;
	o3_padxr=ol_padxr;
	o3_padyt=ol_padyt;
	o3_padyb=ol_padyb;
	o3_fullhtml=ol_fullhtml;
	o3_vpos=ol_vpos;
	o3_capicon=ol_capicon;
	o3_textfont=ol_textfont;
	o3_captionfont=ol_captionfont;
	o3_closefont=ol_closefont;
	o3_textsize=ol_textsize;
	o3_captionsize=ol_captionsize;
	o3_closesize=ol_closesize;
	o3_timeout=ol_timeout;
	o3_function=ol_function;
	o3_delay=ol_delay;
	o3_hauto=ol_hauto;
	o3_vauto=ol_vauto;
	o3_nojustx=ol_nojustx; // FM
	o3_nojusty=ol_nojusty; // FM
	o3_draggable=ol_draggable; // FM
	o3_closeclick=ol_closeclick;
	o3_fgclass=ol_fgclass;
	o3_bgclass=ol_bgclass;
	o3_cgclass=ol_cgclass; // FM
	o3_textfontclass=ol_textfontclass;
	o3_captionfontclass=ol_captionfontclass;
	o3_closefontclass=ol_closefontclass;
	fnRef='';
	hSwitch=false; // FM/REB -- Set mouseover switch

	// Special for frame support, over must be reset...
	if ( (ns4) || (ie4) || (ns6) ) {
		if (over) cClick();
		o3_frame = ol_frame;
		if (ns4) over = o3_frame.document.overDiv
		if (ie4) over = o3_frame.overDiv.style
		if (ns6) over = o3_frame.document.getElementById("overDiv");
	}

	// What the next argument is expected to be.
	var parsemode = -1, udf, v = null;

	var ar = arguments;
	udf = (!ar.length ? 1 : 0);

	for (i = 0; i < ar.length; i++) {
		if (parsemode < 0) {
			// Arg is maintext, unless its a PARAMETER
			if (typeof ar[i] == 'number') {
				udf = (ar[i] == FUNCTION ? 0 : 1);
				i--;
			} else {
				o3_text = ar[i];
			}
			parsemode = 0;
		} else {
			// Note: NS4 doesn't like switch cases with vars.
			if (ar[i] == INARRAY) { o3_text = ol_texts[ar[++i]]; continue; }
			if (ar[i] == CAPARRAY) { o3_cap = ol_caps[ar[++i]]; continue; }
			if (ar[i] == STICKY) { o3_sticky = 1; continue; }
			if (ar[i] == BACKGROUND) { o3_background = ar[++i]; continue; }
			if (ar[i] == NOCLOSE) { opt_NOCLOSE(ar[i]); continue; } // FM/REB
			if (ar[i] == CAPTION) { o3_cap = ar[++i]; continue; }
			if (ar[i] == CENTER || ar[i] == LEFT || ar[i] == RIGHT) { o3_hpos = ar[i]; continue; }
			if (ar[i] == OFFSETX) { o3_offsetx = ar[++i]; continue; }
			if (ar[i] == OFFSETY) { o3_offsety = ar[++i]; continue; }
			if (ar[i] == FGCOLOR) { o3_fgcolor = ar[++i]; continue; }
			if (ar[i] == BGCOLOR) { o3_bgcolor = ar[++i]; continue; }
			if (ar[i] == CGCOLOR) { o3_cgcolor = ar[++i]; continue; } // FM
			if (ar[i] == TEXTCOLOR) { o3_textcolor = ar[++i]; continue; }
			if (ar[i] == CAPCOLOR) { o3_capcolor = ar[++i]; continue; }
			if (ar[i] == CLOSECOLOR) { o3_closecolor = ar[++i]; continue; }
			if (ar[i] == WIDTH) { o3_width = ar[++i]; continue; }
			if (ar[i] == WRAP) { o3_wrap = (o3_wrap == 0) ? 1 : 0; continue; } // FM/REB
			if (ar[i] == BORDER) { o3_border = ar[++i]; continue; }
			if (ar[i] == BASE) { o3_base = ar[++i]; continue; } // FM
			if (ar[i] == STATUS) { o3_status = ar[++i]; continue; }
			if (ar[i] == AUTOSTATUS) { o3_autostatus = (o3_autostatus == 1) ? 0 : 1; continue; } // FM
			if (ar[i] == AUTOSTATUSCAP) { o3_autostatus = (o3_autostatus == 2) ? 0 : 2; continue; } // FM
			if (ar[i] == HEIGHT) { o3_height = ar[++i]; continue; }
			if (ar[i] == CLOSETEXT) { o3_close = ar[++i]; continue; }
			if (ar[i] == SNAPX) { o3_snapx = ar[++i]; continue; }
			if (ar[i] == SNAPY) { o3_snapy = ar[++i]; continue; }
			if (ar[i] == FIXX) { o3_fixx = ar[++i]; continue; }
			if (ar[i] == FIXY) { o3_fixy = ar[++i]; continue; }
			if (ar[i] == RELX) { o3_relx = ar[++i]; continue; } // FM/DS/REB
			if (ar[i] == RELY) { o3_rely = ar[++i]; continue; } // FM/DS/REB
			if (ar[i] == MIDX) { o3_midx = ar[++i]; continue; } // FM
			if (ar[i] == MIDY) { o3_midy = ar[++i]; continue; } // FM
			if (ar[i] == REF) { o3_ref = ar[++i]; continue; } //FM/REB
			if (ar[i] == REFC) { o3_refc = ar[++i]; continue; } //FM/REB
			if (ar[i] == REFP) { o3_refp = ar[++i]; continue; } //FM/REB
			if (ar[i] == REFX) { o3_refx = ar[++i]; continue; } //FM/REB
			if (ar[i] == REFY) { o3_refy = ar[++i]; continue; } //FM/REB
			if (ar[i] == FGBACKGROUND) { o3_fgbackground = ar[++i]; continue; }
			if (ar[i] == BGBACKGROUND) { o3_bgbackground = ar[++i]; continue; }
			if (ar[i] == CGBACKGROUND) { o3_cgbackground = ar[++i]; continue; } // FM
			if (ar[i] == PADX) { o3_padxl = ar[++i]; o3_padxr = ar[++i]; continue; }
			if (ar[i] == PADY) { o3_padyt = ar[++i]; o3_padyb = ar[++i]; continue; }
			if (ar[i] == FULLHTML) { o3_fullhtml = 1; continue; }
			if (ar[i] == BELOW || ar[i] == ABOVE || ar[i] == VCENTER) { o3_vpos = ar[i]; continue; } // FM
			if (ar[i] == CAPICON) { o3_capicon = ar[++i]; continue; }
			if (ar[i] == TEXTFONT) { o3_textfont = ar[++i]; continue; }
			if (ar[i] == CAPTIONFONT) { o3_captionfont = ar[++i]; continue; }
			if (ar[i] == CLOSEFONT) { o3_closefont = ar[++i]; continue; }
			if (ar[i] == TEXTSIZE) { o3_textsize = ar[++i]; continue; }
			if (ar[i] == CAPTIONSIZE) { o3_captionsize = ar[++i]; continue; }
			if (ar[i] == CLOSESIZE) { o3_closesize = ar[++i]; continue; }
			if (ar[i] == FRAME) { opt_FRAME(ar[++i]); continue; }
			if (ar[i] == TIMEOUT) { o3_timeout = ar[++i]; continue; }
			if (ar[i] == FUNCTION) { if (typeof ar[i+1] != 'number') v = ar[++i]; opt_FUNCTION(v); continue; } 
			if (ar[i] == DELAY) { o3_delay = ar[++i]; continue; }
			if (ar[i] == HAUTO) { o3_hauto = (o3_hauto == 0) ? 1 : 0; continue; }
			if (ar[i] == VAUTO) { o3_vauto = (o3_vauto == 0) ? 1 : 0; continue; }
			if (ar[i] == NOJUSTX) { o3_nojustx = (o3_nojustx == 0) ? 1 : 0; continue; } //FM
			if (ar[i] == NOJUSTY) { o3_nojusty = (o3_nojusty == 0) ? 1 : 0; continue; } //FM
			if (ar[i] == DRAGGABLE) { o3_draggable = (o3_draggable == 0) ? 1 : 0; continue; } // FM
			if (ar[i] == CLOSECLICK) { o3_closeclick = (o3_closeclick == 0) ? 1 : 0; continue; }
			if (ar[i] == FGCLASS) { o3_fgclass = ar[++i]; continue; }
			if (ar[i] == BGCLASS) { o3_bgclass = ar[++i]; continue; }
			if (ar[i] == CGCLASS) { o3_cgclass = ar[++i]; continue; } // FM
			if (ar[i] == TEXTFONTCLASS) { o3_textfontclass = ar[++i]; continue; }
			if (ar[i] == CAPTIONFONTCLASS) { o3_captionfontclass = ar[++i]; continue; }
			if (ar[i] == CLOSEFONTCLASS) { o3_closefontclass = ar[++i]; continue; }
		}
	}
	if (udf && o3_function) o3_text = o3_function();

	if (o3_delay == 0) {
		return overlib350();
	} else {
		o3_delayid=setTimeout("overlib350()",o3_delay);
		// Set status line now if specified. // FM
		if(o3_autostatus==2&&o3_cap!="") o3_status=o3_cap;
		else if(o3_autostatus==1&&o3_text!="") o3_status=o3_text;
		if(o3_status!="") self.status=o3_status;
		return(o3_status!="");
	}
}

// Clears popups if appropriate
function nd() {
	if(o3_removecounter>=1) o3_showingsticky=0;
	if (ns4||ie4||ns6) {
		if(o3_showingsticky==0) {
			o3_allowmove=0;
			if(over!=null) hideObject(over);
		} else {
			o3_removecounter++;
		}
	}
	return true;
}


////////////////////////////////////////////////////////////////////////////////////
// OVERLIB 3.50 FUNCTION
////////////////////////////////////////////////////////////////////////////////////

// This function decides what it is we want to display and how we want it done.
function overlib350() {
	// Make layer content
	var layerhtml,sTyp; // FM/REB

	// Initiate dragging if wanted, and this is a sticky, and it is in our frame,
	// otherwise, make sure dragging is off // FM/REB/VictorD
	if(o3_draggable&&o3_sticky&&(o3_frame==self)) {
		if(!o3_dragging) initDrag();
	} else {
		if(o3_dragging) clearDrag();
	}

	if (o3_background != "" || o3_fullhtml) {
		// Use background instead of box.
		layerhtml = ol_content_background(o3_text, o3_background, o3_fullhtml);
	} else {
		// They want a popup box.

		// Prepare popup background
		if (o3_fgbackground != "") {
			o3_fgbackground = " BACKGROUND=\""+o3_fgbackground+"\"";
		}
		if (o3_bgbackground != "") {
			o3_bgbackground = " BACKGROUND=\""+o3_bgbackground+"\"";
		} // FM/REB

		if (o3_cgbackground != "") {
			o3_cgbackground = " BACKGROUND=\""+o3_cgbackground+"\"";
		} // FM

		// Prepare popup colors
		if (o3_fgcolor != "") {
			o3_fgcolor = " BGCOLOR=\""+o3_fgcolor+"\"";
		} // FM/REB
		if (o3_bgcolor != "") {
			o3_bgcolor = " BGCOLOR=\""+o3_bgcolor+"\"";
		} // FM/REB
		if (o3_cgcolor != "") {
			o3_cgcolor = " BGCOLOR=\""+o3_cgcolor+"\"";
		} // FM

		// Prepare popup height // FM/REB
		if (o3_height > 0) {
			o3_height = " HEIGHT=" + o3_height;
		} else {
			o3_height = "";
		}

		// Decide which kinda box.
		if (o3_cap == "") {
			// Plain
			layerhtml = ol_content_simple(o3_text);
		} else {
			// With caption
			if (o3_sticky) {
				// Show close text
				layerhtml = ol_content_caption(o3_text, o3_cap, o3_close);
			} else {
				// No close text
				layerhtml = ol_content_caption(o3_text, o3_cap, "");
			}
		}
	}

	// We want it to stick!
	if (o3_sticky) {
		if (o3_timerid > 0) {
			clearTimeout(o3_timerid);
			o3_timerid = 0;
		}
		o3_showingsticky = 1;
		o3_removecounter = 0;
	}

	// Write layer
	if(o3_wrap&&!ns4&&!o3_fullhtml) { // FM
		if(ie4) over.pixelWidth=0; // FM/REB
		else if(ns6) repositionTo(over,o3_frame.pageXOffset,o3_frame.pageYOffset);
	}
	layerWrite(layerhtml);
	if(o3_wrap&&!o3_fullhtml) { // FM
		o3_width=(ns4?over.clip.width:(ie4?o3_frame.overDiv.offsetWidth:over.offsetWidth));
		o3_wrap=0;
		if(o3_background!="") {
			layerhtml=ol_content_background(o3_text,o3_background,o3_fullhtml);
		} else {
			if(o3_cap=="") {
				layerhtml=ol_content_simple(o3_text);
			} else {
				if(o3_sticky) {
					layerhtml=ol_content_caption(o3_text,o3_cap,o3_close);
				} else {
					layerhtml=ol_content_caption(o3_text,o3_cap,"");
				}
			}
		}
		layerWrite(layerhtml);
	}

	// Prepare status bar
	if (o3_autostatus > 0) {
		o3_status = o3_text;
		if (o3_autostatus > 1) {
			o3_status = o3_cap;
		}
	}

	// Initiate a timer for timeout
	if(o3_timeout>0) {
		if(o3_timerid>0) clearTimeout(o3_timerid);
		o3_timerid=setTimeout("cClick()",o3_timeout);
	}

	// Use reference object if requested // FM/REB
	if(o3_ref) refPosition=getRefLocation(o3_ref);
	if(o3_ref&&refPosition[0]==null) {
		// Center popup on failure // FM
		o3_ref="";
		o3_midx=0;
		o3_midy=0;
	}

	// Place and show layer
	disp(o3_status);
	return (o3_status!=""); // FM
}


////////////////////////////////////////////////////////////////////////////////////
// DRAGGABLE FUNCTIONS // FM/REB/VictorD
////////////////////////////////////////////////////////////////////////////////////

function initDrag() {
	oMMv=capExtent.onmousemove;
	if(ns4) {
		document.captureEvents(Event.MOUSEDOWN|Event.CLICK);
		document.onmousedown=grabEl;
		document.onclick=function(e) {return routeEvent(e);}
	} else {
		var ovObj=(ie4?o3_frame.document.all['overDiv']:over);
		ovObj.onmousedown=grabEl;
		if(ie4) ovObj.onselectstart=function() {return false;}
		ovObj.style.cursor="move";
	} 
	o3_dragging=1;
	return true;
}

function grabEl(e) {
	var e=(e)?e:event;
	var ovObj=(ie4?o3_frame.document.all['overDiv']:over);
	var cKy=(ns4?e.modifiers&Event.ALT_MASK:e.altKey);
	if(cKy) {
		if(ie4) ovObj.onselectstart=null;
		if(!ns4) ovObj.style.cursor="auto";
		document.onmouseup=function() {
			if(!ns4) {
				if(ie4) ovObj.onselectstart=function() {return false;}
				if(!ns4) ovObj.style.cursor="move";
			}
		}
		return (ns4?routeEvent(e):true);
	}
	oMMv(e);
	if(ns4) {
		cX=e.pageX;
		cY=e.pageY;
	} else {
		cX=o3_x-(ie4?parseInt(over.left):parseInt(over.style.left));
		cY=o3_y-(ie4?parseInt(over.top):parseInt(over.style.top));
	}
	if(ns4) document.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
	capExtent.onmousemove=moveEl;
	document.onmouseup=dropEl;
	return (ns4?routeEvent(e):false);
}

function moveEl(e) {
	oMMv(e);
	if(ns4) {
		newX=e.pageX;newY=e.pageY;
		over.moveBy(newX-cX,newY-cY);
		cX=newX;cY=newY;
	} else repositionTo(over,o3_x-cX,o3_y-cY);
	return false;
}

function dropEl() {
	capExtent.onmousemove=oMMv;
	document.onmouseup=null;
}

function clearDrag() {
	if(ns4) {
		document.releaseEvents(Event.MOUSEDOWN|Event.MOUSEUP|Event.CLICK);
		document.onmousedown=document.onmouseup=document.onclick=null;
	} else if(ns6) {
		over.onmousedown=null;
		over.style.cursor="auto";
	} else {
		var ovObj=(ie4?o3_frame.document.all['overDiv']:over);
		ovObj.onmousedown=null;
		if(ie4) ovObj.onselectstart=null;
		ovObj.style.cursor="auto";
      }
	o3_dragging=0;
}


////////////////////////////////////////////////////////////////////////////////////
// LAYER GENERATION FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////

// Makes simple table without caption // FM
function ol_content_simple(text) {
	txt=
"<TABLE"+(o3_wrap?"":" WIDTH="+o3_width)+o3_height+" BORDER=0 CELLPADDING="+o3_border+
" CELLSPACING=0"+(o3_bgclass?" class=\""+o3_bgclass+"\"":o3_bgcolor+o3_bgbackground)+
"><TR><TD><TABLE WIDTH=100%"+o3_height+" BORDER=0 CELLPADDING=2 CELLSPACING=0"+(o3_fgclass?
" class=\""+o3_fgclass+"\"":o3_fgcolor+o3_fgbackground)+"><TR><TD VALIGN=TOP"+(o3_fgclass?
" class=\""+o3_fgclass+"\"":"")+"><FONT "+(o3_textfontclass?"class=\""+o3_textfontclass+"\">":
"COLOR=\""+o3_textcolor+"\" FACE=\""+o3_textfont+"\" SIZE=\""+o3_textsize+"\">")+
text+
"</FONT></TD></TR></TABLE>"+((o3_base>0)?
("<TABLE width=100% BORDER=0 CELLPADDING=0 CELLSPACING=0>"+"<TR><TD height="+o3_base+
"></TD></TR></TABLE>") : "")+"</TD></TR></TABLE>";
	set_background("");
	return txt;
} // FM

// Makes table with caption and optional close link //FM
function ol_content_caption(text,title,close) {
	closing="";
	closeevent="onMouseOver";
	if(o3_closeclick==1) closeevent="onClick";
	if(o3_capicon!="") o3_capicon="<IMG SRC=\""+o3_capicon+"\"> ";
	if(close!="") {
closing="<TD ALIGN=RIGHT><A HREF=\"javascript:return "+fnRef+"cClick();\" "+closeevent+
"=\"return "+fnRef+"cClick();\""+(o3_closefontclass?" class=\""+o3_closefontclass+"\">":
"><FONT COLOR=\""+o3_closecolor+"\" FACE=\""+o3_closefont+"\" SIZE=\""+o3_closesize+"\">")+
close+
(o3_closefontclass?"":"</FONT>")+"</A></TD>";
	}
	txt=
"<TABLE"+(o3_wrap?"":" WIDTH="+o3_width)+o3_height+" BORDER=0 CELLPADDING="+o3_border+
" CELLSPACING=0"+(o3_bgclass?" class=\""+o3_bgclass+"\"":o3_bgcolor+o3_bgbackground)+
"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0"+(o3_cgclass?" class=\""+
o3_cgclass+"\"":o3_cgcolor+o3_cgbackground)+"><TR><TD"+(o3_cgclass?" class=\""+o3_cgclass+
"\">":">")+(o3_captionfontclass?"<FONT class=\""+o3_captionfontclass+"\">":"<B><FONT COLOR=\""+
o3_capcolor+"\" FACE=\""+o3_captionfont+"\" SIZE=\""+o3_captionsize+"\">")+
o3_capicon+
title+
"</FONT>"+(o3_captionfontclass?"":"</B>")+"</TD>"+
closing+
"</TR></TABLE><TABLE WIDTH=100% "+o3_height+" BORDER=0 CELLPADDING=2 CELLSPACING=0"+(o3_fgclass?
" class=\""+o3_fgclass+"\"":o3_fgcolor+o3_fgbackground)+"><TR><TD VALIGN=TOP"+(o3_fgclass?
" class=\""+o3_fgclass+"\"":"")+"><FONT "+(o3_textfontclass?"class=\""+o3_textfontclass+"\">":
"COLOR=\""+o3_textcolor+"\" FACE=\""+o3_textfont+"\" SIZE=\""+o3_textsize+"\">")+
text+
"</FONT></TD></TR></TABLE>"+((o3_base>0)?("<TABLE width=100% BORDER=0 CELLPADDING=0 "+
"CELLSPACING=0><TR><TD height="+o3_base+"></TD></TR></TABLE>"):"")+"</TD></TR></TABLE>";
	set_background("");
	return txt;
} // FM

// Sets the background picture, padding and lots more. :) // FM
function ol_content_background(text, picture, hasfullhtml) {
	if (hasfullhtml) {
		txt=text;
	} else {
		txt=
"<TABLE"+(o3_wrap?"":" 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"+(o3_wrap?"":" WIDTH="+(o3_width-o3_padxl-o3_padxr))+"><FONT "+
(o3_textfontclass?"class=\""+o3_textfontclass+"\">":"FACE=\""+o3_textfont+"\" COLOR=\""+
o3_textcolor+"\" SIZE=\""+o3_textsize+"\">")+
text+
"</FONT></TD><TD WIDTH="+o3_padxr+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+
"></TD></TR></TABLE>";
	}
	set_background(picture);
	return txt;
} // FM

// Loads a picture into the div.
function set_background(pic) {
	if(pic=="") {
		if(ns4) over.background.src=null; // FM/REB
		if(ie4) over.backgroundImage="none";
		if(ns6) over.style.backgroundImage="none";
	} else {
		if(ns4) {
			over.background.src=pic;
		} else if(ie4) {
			over.backgroundImage="url("+pic+")";
		} else if(ns6) {
			over.style.backgroundImage="url("+pic+")";
		}
	}
}


////////////////////////////////////////////////////////////////////////////////////
// HANDLING FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////

// Displays the popup
function disp(statustext) {
	if(ns4||ie4||ns6) {
		if(o3_allowmove==0) {
			placeLayer();
			(ns6?o3_showid=setTimeout("showObject(over)",1):showObject(over)); // FM/REB
			o3_allowmove=(o3_sticky?0:1); // FM/JA/REB
		}
	}
	if(statustext!="") {
		self.status=statustext;
	}
}

// Decides where we want the popup.
function placeLayer() {
	var placeX,placeY,iwidth=100,iheight=100,SBfactor=0;
	var winoffset,scrolloffset,popwidth,popheight;
	if(ie4||(o3_frame.document.body&&typeof o3_frame.document.body.clientWidth=='number'&&
	   o3_frame.document.body.clientWidth>0))
		iwidth=eval('o3_frame.'+(ns6?'document.body':docRoot)+'.clientWidth');
	else if(typeof(o3_frame.innerWidth)=='number') {
		SBfactor=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth));
		iwidth = o3_frame.innerWidth;
	} // FM/DS/REB
	winoffset=(ie4)?eval('o3_frame.'+docRoot+'.scrollLeft'):o3_frame.pageXOffset; // FM/REB
	popwidth=(ns4?over.clip.width:(ie4?o3_frame.overDiv.offsetWidth:over.offsetWidth)); // FM

	// HORIZONTAL PLACEMENT
	if(o3_ref!=""||o3_fixx> -1||o3_relx!=null||o3_midx!=null) {
		if(o3_ref!="") {
			// Position relative to a reference object // FM/REB
			placeX=refPosition[0];
		} else {
			if(o3_midx!=null) {
				// Position middle of popup relative to middle of window // FM
				placeX=winoffset+((iwidth-popwidth-SBfactor)/2)+o3_midx;
			} else {
				if(o3_relx!=null) {
					// Position relative to window margins // FM/DS
					if(o3_relx>=0) placeX=winoffset+o3_relx;
					else placeX=winoffset+o3_relx+iwidth-popwidth-SBfactor;
				} else {
					// Fixed position
					placeX=o3_fixx;
				}
			}
		}
	} else {
		// If HAUTO, decide what to use.
		if (o3_hauto == 1) {
			if ((o3_x - winoffset)>((eval(iwidth))/2)) {
				o3_hpos = LEFT;
			} else {
				o3_hpos = RIGHT;
			}
		}
		// From mouse
		if (o3_hpos == CENTER) { // Center
			placeX = (o3_x-eval(popwidth)/2)+o3_offsetx;
		}
		if (o3_hpos == RIGHT) { // Right
			placeX = o3_x+o3_offsetx;
		}
		if (o3_hpos == LEFT) { // Left
			placeX = o3_x-o3_offsetx-popwidth;
		}
		// Snapping!
		if (o3_snapx > 1) {
			var snapping = placeX % o3_snapx;
			if (o3_hpos == LEFT) {
				placeX = placeX - (o3_snapx + snapping);
			} else {
				// CENTER and RIGHT
				placeX = placeX + (o3_snapx - snapping);
			}
		}
	}
	if (!o3_nojustx && (eval(placeX) + eval(popwidth)) > (winoffset + iwidth-SBfactor))
		placeX = iwidth + winoffset - popwidth - SBfactor; // FM/DS
	if (!o3_nojustx && placeX < winoffset) placeX = winoffset; // FM/DS

	// VERTICAL PLACEMENT
	scrolloffset=(ie4)?eval('o3_frame.'+docRoot+'.scrollTop'):o3_frame.pageYOffset; // FM/REB
	if(ie4||(o3_frame.document.body&&typeof o3_frame.document.body.clientHeight=='number'&&
	   o3_frame.document.body.clientHeight>0))
		iheight=eval('o3_frame.'+(ns6?'document.body':docRoot)+'.clientHeight');
	else if(typeof(o3_frame.innerHeight)=='number')
		iheight = o3_frame.innerHeight;
	divObj=(ie4)?o3_frame.document.all['overDiv']:over; // FM
	popheight=(ns4)?divObj.clip.height:divObj.offsetHeight; // FM
	if(o3_ref!=""||o3_fixy> -1||o3_rely!=null||o3_midy!=null) {
		if(o3_ref!="") {
			// Position relative to a reference object // FM/REB
			placeY=refPosition[1];
		} else {
			if(o3_midy!=null) {
				// Position middle of popup relative to middle of window // FM
				placeY=scrolloffset+((iheight-popheight)/2)+o3_midy;
			} else {
				if(o3_rely!=null) {
					// Position relative to window margins // FM/DS
					if(o3_rely>=0) placeY=scrolloffset+o3_rely;
					else placeY=scrolloffset+o3_rely+iheight-popheight;
				} else {
					// Fixed position
					placeY=o3_fixy;
				}
			}
		}
	} else {
		// If VAUTO, decide what to use.
		if (o3_vauto == 1) {
			iheightv = (eval(iheight)) / 2;
			if ( (o3_y - scrolloffset) > iheightv) {
				o3_vpos = ABOVE;
			} else {
				o3_vpos = BELOW;
			}
		}
		// From mouse
		if (o3_vpos == VCENTER) { // FM
			placeY = (o3_y - eval(popheight)/2) + o3_offsety;
		}
		if (o3_vpos == ABOVE) {
			placeY = o3_y - (popheight + o3_offsety);
		}
		if (o3_vpos == BELOW) {
			placeY = o3_y + o3_offsety;
		}
		// Snapping!
		if (o3_snapy > 1) {
			var snapping = placeY % o3_snapy;
			if (popheight > 0 && o3_vpos == ABOVE) {
				placeY = placeY - (o3_snapy + snapping);
			} else {
				placeY = placeY + (o3_snapy - snapping);
			}
		}
	}
	if (!o3_nojusty && (placeY + popheight) > (scrolloffset + iheight))
		placeY = scrolloffset + iheight - popheight; // FM/DS
	if (!o3_nojusty && placeY < scrolloffset) placeY = scrolloffset; // FM/DS

	// Actually move the object.
	repositionTo(over, placeX, placeY);
}

// Gets location of a reference object // FM/JA/REB
function getRefLocation(ref){
	var mn=ref,mref=getRefById(mn,o3_frame.document);
	var mkObj,of,offsets;
	if(mref==null) mref=getRefByName(mn,o3_frame.document);
	if(mref==null) return [null,null];
	mkObj=mref;
	offsets=[o3_refx,o3_refy];
	if(document.layers){
		if(typeof mref.length!='undefined'&&mref.length>1){
			mkObj=mref[0];
			offsets[0] += mref[0].x+mref[1].pageX;
			offsets[1] += mref[0].y+mref[1].pageY;
		}else{
			if((mref.toString().indexOf('Image')!= -1)||
			   (mref.toString().indexOf('Anchor')!= -1)){
				offsets[0] += mref.x;
				offsets[1] += mref.y;
			}else{
				offsets[0] += mref.pageX;
				offsets[1] += mref.pageY;
			}
		}
	}else{
		offsets[0] += pageLocation(mref,'Left');
		offsets[1] += pageLocation(mref,'Top');
	}
	of=getRefOffsets(mkObj);
	offsets[0] += of[0];
	offsets[1] += of[1];
	return offsets;
}

// Gets popup versus reference object offsets //FM/JA/REB
function getRefOffsets(mkObj){
	var ovObj=(ie4?o3_frame.document.all['overDiv']:over);
	var mc=o3_refc.toUpperCase();mp=o3_refp.toUpperCase();
	var mW=mH=pW=pH=0;
	var off=[0,0];
	pW=(ns4?ovObj.clip.width:ovObj.offsetWidth);
	pH=(ns4?ovObj.clip.height:ovObj.offsetHeight);
	if(mkObj.toString().indexOf('Image')!= -1) {
		mW=mkObj.width;
		mH=mkObj.height;
	} else if(mkObj.toString().indexOf('Anchor')!= -1){
		mc=o3_refc='UL';
	} else {
		mW=(ns4)?mkObj.clip.width:mkObj.offsetWidth;
		mH=(ns4)?mkObj.clip.height:mkObj.offsetHeight;
	}
	if(mc=='UL'){
		if(mp=='UR') off=[-pW,0];
		else if(mp=='LL') off=[0,-pH];
		else if(mp=='LR') off=[-pW,-pH];
	} else if(mc=='UR') {
		if(mp=='UR') off=[mW-pW,0];
		else if(mp=='LL') off=[mW,-pH];
		else if(mp=='LR') off=[mW-pW,-pH];
		else off=[mW,0];
	}else if(mc=='LL') {
		if(mp=='UR') off=[-pW,mH];
		else if(mp=='LL') off=[0,mH-pH];
		else if(mp=='LR') off=[-pW,mH-pH];
		else off=[0,mH];
	} else if(mc=='LR') {
		if(mp=='UR') off=[mW-pW,mH];
		else if(mp=='LL') off=[mW,mH-pH];
		else if(mp=='LR') off=[mW-pW,mH-pH];
		else off=[mW,mH];
	}
	return off;
}

// Gets location of object in page //FM/JA/REB
function pageLocation(o,t){
	var x=0;
	while(o.offsetParent&&o.offsetParent.tagName!="BODY"){
		x += o['offset'+t];
		o=o.offsetParent;
	}
	x += o['offset'+t];
	return x;
} 

// Gets reference object by ID (or NAME synonym for post-NS4 browsers) // FM/JA/REB 
function getRefById(l,d){
	var r="",j;
	d=(d||document);
	if(d.all) {
		return d.all[l];
	} else if(d.getElementById){
		return d.getElementById(l);
	} else if(d.layers&&d.layers.length>0){
		if(d.layers[l]) return d.layers[l];
		for(j=0;j<d.layers.length;j++){
			r=getRefById(l,d.layers[j].document);
			if(r) return r;
		}
	}
	return null;
}

// Seek reference object by NAME if not found by ID // FM/JA/REB
function getRefByName(l,d){
	var r=null,j;
	d=(d||document);
	if(typeof d.images[l]!='undefined'&&d.images[l]){
		return d.images[l];
	} else if(typeof d.anchors[l]!='undefined'&&d.anchors[l]) {
		return d.anchors[l];
	} else if(d.layers&&d.layers.length>0){
		for(j=0;j<d.layers.length;j++){
			r=getRefByName(l,d.layers[j].document);
			if(r&&r.length>0) return r;
			else if(r) return [r,d.layers[j]]; 
		}
	}
	return null;
}

// Moves the layer
function mouseMove(e) {
	if ( (ns4) || (ns6) ) {o3_x=e.pageX; o3_y=e.pageY;}
	if (ie4) {o3_x=event.x; o3_y=event.y;}
	if (ie5) {o3_x=eval('event.x+o3_frame.'+docRoot+'.scrollLeft'); o3_y=eval('event.y+o3_frame.'+docRoot+'.scrollTop');}

	if (o3_allowmove == 1) {
		placeLayer();
	}
      // FM/REB -- for mouseOut handler
	if (hSwitch && !ns4 && cursorOff()) {
	   cClick();
	   hSwitch = !hSwitch;
	}
}

// The Close onMouseOver function for stickies
function cClick() {
	hideObject(over);
	o3_showingsticky=0;
	return false;
}

// Makes sure target frame has overLIB
function compatibleframe(frameid) {        
	if (ns4) {
		if (typeof frameid.document.overDiv =='undefined') return false;
	} else if (ie4) {
		if (typeof frameid.document.all["overDiv"] =='undefined') return false;
	} else if (ns6) {
		if (frameid.document.getElementById('overDiv') == null) return false;
	}

	return true;
}


////////////////////////////////////////////////////////////////////////////////////
// LAYER FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////

// Writes to a layer
function layerWrite(txt) {
	txt += "\n";

	if (ns4) {
		var lyr=o3_frame.document.overDiv.document;
		lyr.write(txt);
		lyr.close();
	} else if (ie4) {
		o3_frame.document.all["overDiv"].innerHTML=txt;
	} else if (ns6) {
		range = o3_frame.document.createRange();
		range.setStartAfter(over);  // FM/REB
		domfrag = range.createContextualFragment(txt);
		while (over.hasChildNodes()) {
			over.removeChild(over.lastChild);
		}
		over.appendChild(domfrag);
	}
}

// Make an object visible
function showObject(obj) {
	if(ns4) obj.visibility="show";
	else if(ie4) obj.visibility="visible";
	else if(ns6) obj.style.visibility="visible";
}

// Hides an object
function hideObject(obj) {
	if(ns4) obj.visibility="hide";
	else if(ie4) obj.visibility="hidden";
	else if(ns6) {
		if(o3_showid>0){clearTimeout(o3_showid);o3_showid=0;} // FM
		obj.style.visibility="hidden";
	}
	if(o3_timerid>0) clearTimeout(o3_timerid);
	if(o3_delayid>0) clearTimeout(o3_delayid);
	o3_timerid=0;
	o3_delayid=0;
	self.status="";
	if(o3_dragging) clearDrag(); // FM
	// Cancel any previous settings of mouseouts or mouseovers // FM/REB
	var Obj=(ie4)?o3_frame.document.all['overDiv']:over;
	if((ie4||ns6)&&Obj.onmouseover) Obj.onmouseover=null;
	if(ns4&&(Obj.onmouseout||Obj.onmouseover)) {
		Obj.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);
		Obj.onmouseout=Obj.onmouseover=null;
	}
}

// Move a layer
function repositionTo(obj,xL,yL) {
	if ( (ns4) || (ie4) ) {
	        obj.left = (ie4 ? xL + 'px' : xL);
	        obj.top = (ie4 ? yL + 'px' : yL);
	} else if (ns6) {
		obj.style.left = xL + "px";
		obj.style.top = yL+ "px";
	}
}

// Check position of cursor relative to overDiv DIVision; mouseOut function // FM/REB
function cursorOff() {
	var Obj=(ie4)?o3_frame.document.all['overDiv']:over;
	var left=parseInt(Obj.style.left);
	var top=parseInt(Obj.style.top);
	var right=left+Obj.offsetWidth;
	var bottom=top+Obj.offsetHeight;
	if(o3_x<left||o3_x>right||o3_y<top||o3_y>bottom) return true;
	return false;
}

function getFrameRef(thisFrame, ofrm) {
	var retVal = '';
	for (var i=0; i<thisFrame.length; i++) {
 	if (thisFrame[i].length > 0) { 
		retVal = getFrameRef(thisFrame[i],ofrm);
		if (retVal == '') continue;
	}
	else if (thisFrame[i] != ofrm) continue;
	retVal = '['+i+']' + retVal;
	break;
	}
	return retVal;
}


////////////////////////////////////////////////////////////////////////////////////
// PARSER FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////

// Defines which frame we should point to.
function opt_FRAME(frm) {
	o3_frame = compatibleframe(frm) ? frm : ol_frame;
	if (o3_frame != ol_frame) {
		var tFrm = getFrameRef(top.frames, o3_frame);
		var sFrm = getFrameRef(top.frames, ol_frame);
		if (sFrm.length == tFrm.length) {
			l = tFrm.lastIndexOf('[');
			if (l) {
				while(sFrm.substring(0,l) != tFrm.substring(0,l))
				l = tFrm.lastIndexOf('[',l-1);
				tFrm = tFrm.substr(l);
				sFrm = sFrm.substr(l);
			}
		}
		var cnt = 0, p = '', str = tFrm;
		while((k = str.lastIndexOf('[')) != -1) {
			cnt++;
			str = str.substring(0,k);
		}
		for (var i=0; i<cnt; i++) p = p + 'parent.';
		fnRef = p + 'frames' + sFrm + '.';
	}
	if ( (ns4) || (ie4 || (ns6)) ) {
		if (ns4) over = o3_frame.document.overDiv;
		if (ie4) over = o3_frame.overDiv.style;
		if (ns6) over = o3_frame.document.getElementById("overDiv");
	}
	return 0;
}

// Calls an external function // FM/REB
function opt_FUNCTION(callme) {
	o3_text = (callme ? (typeof callme == 'string' ? (/.+\(.*\)/.test(callme) ? eval(callme) :
			callme) : callme()) : (o3_function ? o3_function() : 'No Function'));
	return 0;
}

// Sets up mouseOver, mouseOut and Timeout handling for NOCLOSE stickies // FM/REB
function opt_NOCLOSE(unused) {
	o3_close="";
	var Obj=(ie4)?o3_frame.document.all['overDiv']:over;
	if (ns4) {
		Obj.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);
		Obj.onmouseover=function(){
			if(o3_timerid>0) {clearTimeout(o3_timerid);o3_timerid=0;}}
		Obj.onmouseout = cClick;
	}
	if(ie4||ns6) Obj.onmouseover=function(){
		hSwitch=true;if(o3_timerid>0) {clearTimeout(o3_timerid);o3_timerid=0;}}
	return 0;
}

//end (For internal purposes.)
////////////////////////////////////////////////////////////////////////////////////
// OVERLIB 2 COMPATABILITY FUNCTIONS
// If you aren't upgrading you can remove the below section.
////////////////////////////////////////////////////////////////////////////////////
// Converts old 0=left, 1=right and 2=center into constants.
function vpos_convert(d){if(d==0){d=LEFT;}else{if(d==1){d=RIGHT;}else{d=CENTER;}}return d;}
// Simple popup
function dts(d,text){o3_hpos=vpos_convert(d);overlib(text,o3_hpos,CAPTION,"");}
// Caption popup
function dtc(d,text,title){o3_hpos=vpos_convert(d);overlib(text,CAPTION,title,o3_hpos);}
// Sticky
function stc(d,text,title){o3_hpos=vpos_convert(d);overlib(text,CAPTION,title,o3_hpos,STICKY);}
// Simple popup right
function drs(text){dts(1,text);}
// Caption popup right
function drc(text,title){dtc(1,text,title);}
// Sticky caption right
function src(text,title){stc(1,text,title);}
// Simple popup left
function dls(text){dts(0,text);}
// Caption popup left
function dlc(text,title){dtc(0,text,title);}
// Sticky caption left
function slc(text,title){stc(0,text,title);}
// Simple popup center
function dcs(text){dts(2,text);}
// Caption popup center
function dcc(text,title){dtc(2,text,title);}
// Sticky caption center
function scc(text,title){stc(2,text,title);}

