//\//////////////////////////////////////////////////////////////////////////////////
//\  overLIB 3.51 Beta 1  --  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-08-17.
//\  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.
//\//////////////////////////////////////////////////////////////////////////////////
//\
//\  overlib351b1mws.js is derived from v3.51 Beta 1, plus bug-fixes or enhancements
//\  from Robert E. Boughner's overLIB Patch File not yet included in v3.51 Beta 1.
//\  The mods are flagged with the string "// FM", or "// FM/REB" for ones derived
//\  from REB's patch file.  The Change History for overlib351b1mws.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/REB
var RELY=32; // FM/REB
var FGBACKGROUND=33;
var BGBACKGROUND=34;
var CGBACKGROUND=35; // FM
var PADX=36;
var PADY=37;
var FULLHTML=38;
var ABOVE=39;
var BELOW=40;
var CAPICON=41;
var TEXTFONT=42;
var CAPTIONFONT=43;
var CLOSEFONT=44;
var TEXTSIZE=45;
var CAPTIONSIZE=46;
var CLOSESIZE=47;
var FRAME=48;
var TIMEOUT=49;
var FUNCTION=50;
var DELAY=51;
var HAUTO=52;
var VAUTO=53;
var CLOSECLICK=54;
var FGCLASS=55;
var BGCLASS=56;
var CGCLASS=57; // FM
var TEXTFONTCLASS=58;
var CAPTIONFONTCLASS=59;
var CLOSEFONTCLASS=60;

////////////////////////////////////////////////////////////////////////////////////
// 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";}

// Width of the popups in pixels
// 100-300 pixels is typical
if (typeof ol_width == 'undefined') { var ol_width = "200";}

// WRAP will cause the popup to be no wider than the content of the popup, except
// for normal padding. It overides the o3_width setting.  Not allowed when using 
// fullhtml code. 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
// Can create a shadow-like effect
if (typeof ol_base == 'undefined') { var ol_base = "0";}

// How many pixels to the right/left 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 to the below the cursor to show the popup
// Values between 3 and 12 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, andthing else will cause a snap to that grid spacing.
if (typeof ol_snapy == 'undefined') { var ol_snapy = 0; }

// Sets the popups horizontal position to a fixed column.
// Anything above -1 will cause fixed position.
if (typeof ol_fixx == 'undefined') { var ol_fixx = -1; }

// Sets the popups vertical position to a fixed row.
// Anything above -1 will cause fixed position.
if (typeof ol_fixy == 'undefined') { var ol_fixy = -1; }

// Sets the popups horizontal position to a fixed column relative to browser window
// Anything above -1 will cause fixed position. // FM/REB
if (typeof ol_relx == 'undefined') { var ol_relx = -1; }

// Sets the popups vertical position to a fixed row relative to browser window
// Anything above -1 will cause fixed position.
if (typeof ol_rely == 'undefined') { var ol_rely = -1; }

// 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 popup control.
// 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.
// ABOVE only works when HEIGHT is defined.
if (typeof ol_vpos == 'undefined') { var ol_vpos = BELOW; }

// Default height of popup to use when placing the popup above the cursor.
if (typeof ol_aboveheight == 'undefined') { var ol_aboveheight = 0; }

// 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 funktion. By default there is none.
if (typeof ol_function == 'undefined') { var ol_function = null; }

// Default timeout. By default there is no timeout.
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 = 1; }

// 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 = ""; }


////////////////////////////////////////////////////////////////////////////////////
// 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=2;
var o3_offsety=2;
var o3_fgcolor="";
var o3_bgcolor="";
var o3_cgcolor=""; // FM
var o3_textcolor="";
var o3_capcolor="";
var o3_closecolor="";
var o3_width=100;
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= -1; // FM/REB
var o3_rely= -1; // 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_aboveheight=0;
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_hauto=0;
var o3_vauto=0;
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;

// 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.
if ( (ns4) || (ie4) || (ns6)) {
	document.onmousemove = mouseMove
	if (ns4) document.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/REB
	o3_rely=ol_rely; // 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_aboveheight=ol_aboveheight;
	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_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");
	}
	// FM/REB -- Cancel any previous settings of mouseouts or mouseovers
	var Obj = (ie4) ? o3_frame.document.all['overDiv'] : over;
	if (ie4 || ns6) Obj.onmouseover = null;
	if (ns4) Obj.onmouseout = null;

	// 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 = 1; continue; }
			if (ar[i] == AUTOSTATUSCAP) { o3_autostatus = 2; continue; }
			if (ar[i] == HEIGHT) { o3_height = ar[++i]; o3_aboveheight = ar[i]; continue; } // Same param again.
			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/REB
			if (ar[i] == RELY) { o3_rely = 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) { o3_vpos = ar[i]; continue; }
			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] == 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);

		// FM -- When we have a tool-tip-like delay, regulate the
                // status line string the same as what we will do when the
                // overlib350() call is made after the delay.
                if (o3_autostatus == 2 && o3_cap != "") {
			return true;
		} else {
			if (o3_autostatus == 1 && o3_text != "") {
				return true;
			} else {
				if (o3_status != "") return true;
			}
		}
		return false;
	}
}

// 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

	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 // FM/REB
		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
	layerWrite(layerhtml);
      // have to set o3_width for placeLayer() routine // FM/REB
      if (o3_wrap) o3_width = (ns4 ? over.clip.width : (ie4 ? o3_frame.overDiv.offsetWidth :
                                                        over.offsetWidth));

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

	// When placing the layer the first time, even stickies may be moved.
	o3_allowmove = 0;

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

	// Show layer
	disp(o3_status);

	// Stickies should stay where they are.	
	if (o3_sticky) o3_allowmove = 0;

	// FM -- Return true or false depending whether we
        // will be setting the status line display ourselves.
	return (o3_status != "");
}


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

// Makes simple table without caption // FM
function ol_content_simple(text) {
	txt =
"<TABLE" + (o3_wrap ? "" : " 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 CELLPADDING=2 CELLSPACING=0 "+
(o3_fgclass ? "class=\""+o3_fgclass+"\"" :
 o3_fgcolor+" "+o3_fgbackground+" "+o3_height)+
"><TR><TD VALIGN=TOP><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 "+
((o3_closeclick == 1) ? "HREF=\"JavaScript:return " + fnRef + "cClick();\" " : "HREF=\"/\" ")+
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)+
" 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=0 CELLSPACING=0 "+
(o3_cgclass ? "class=\""+o3_cgclass+"\"" :
 o3_cgcolor+" "+o3_cgbackground)+
"><TR><TD><B><FONT "+
(o3_captionfontclass ? "class=\""+o3_captionfontclass+"\">" :
 "COLOR=\""+o3_capcolor+"\" FACE=\""+o3_captionfont+
 "\" SIZE=\""+o3_captionsize+"\">")+
o3_capicon+
title+
"</FONT></B></TD>"+
closing+
"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+
(o3_fgclass ? "class=\""+o3_fgclass+"\"" :
 o3_fgcolor+" "+o3_fgbackground+" "+o3_height)+
"><TR><TD VALIGN=TOP><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 = '';
		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();
			showObject(over);
			o3_allowmove = 1;
		}
	}

	if (statustext != "") {
		self.status = statustext;
	}
}

// Decides where we want the popup.
function placeLayer() {
	var placeX, placeY;
	
	// HORIZONTAL PLACEMENT
      // Horizontal scroll offset // FM/REB
	winoffset = (ie4) ? eval('o3_frame.'+docRoot+'.scrollLeft') :
                   o3_frame.pageXOffset; // FM/REB -- IE6 fix
	if (o3_fixx > -1 || o3_relx > -1) {
		// Fixed position
		placeX = (o3_relx > -1 ? winoffset + o3_relx : o3_fixx); // FM/REB
	} else {
		if (ie4) iwidth = eval('o3_frame.'+docRoot+'.clientWidth');
		if (ns4 || ns6) iwidth = o3_frame.innerWidth;
		
		// 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+o3_offsetx-(o3_width/2);
			if (placeX < winoffset) placeX = winoffset;
		}
		if (o3_hpos == RIGHT) { // Right
			placeX = o3_x+o3_offsetx;
			if ( (eval(placeX) + eval(o3_width)) > (winoffset + iwidth) ) {
				placeX = iwidth + winoffset - o3_width;
				if (placeX < 0) placeX = 0;
			}
		}
		if (o3_hpos == LEFT) { // Left
			placeX = o3_x-o3_offsetx-o3_width;
			if (placeX < winoffset) placeX = winoffset;
		}
	
		// 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 (placeX < winoffset) placeX = winoffset;
		}
	}

	
	
	// VERTICAL PLACEMENT
      // Vertical scroll offset // FM/REB
	scrolloffset = (ie4) ? eval('o3_frame.'+docRoot+'.scrollTop') :
                                   o3_frame.pageYOffset; // FM/REB -- IE6 fix
	if (o3_fixy > -1 || o3_rely > -1) { // FM/REB
            // Fixed position
		placeY = (o3_rely > -1 ? scrolloffset + o3_rely : o3_fixy); // FM/REB
	} else {
		// If VAUTO, decide what to use.
		if (o3_vauto == 1) {
			if (ie4) iheight = eval('o3_frame.'+docRoot+'.clientHeight');
			if (ns4 || ns6) iheight = o3_frame.innerHeight;

			iheight = (eval(iheight)) / 2;
			if ( (o3_y - scrolloffset) > iheight) {
				o3_vpos = ABOVE;
			} else {
				o3_vpos = BELOW;
			}
		}


		// From mouse
		if (o3_vpos == ABOVE) {
			if (o3_aboveheight == 0) {
				var divref = (ie4) ? o3_frame.document.all['overDiv'] : over;
				o3_aboveheight = (ns4) ? divref.clip.height : divref.offsetHeight;
			}

			placeY = o3_y - (o3_aboveheight + o3_offsety);
			if (placeY < scrolloffset) placeY = scrolloffset;
		} else {
			// BELOW
			placeY = o3_y + o3_offsety;
		}

		// Snapping!
		if (o3_snapy > 1) {
			var snapping = placeY % o3_snapy;
			
			if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
				placeY = placeY - (o3_snapy + snapping);
			} else {
				placeY = placeY + (o3_snapy - snapping);
			}
			
			if (placeY < scrolloffset) placeY = scrolloffset;
		}
	}


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


// 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) 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 = "";
}

// 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";
	}
}

// FM/REB -- Check position of cursor relative to overDiv DIVision; mouseOut function
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;
}

// FM/REB -- Sets use of close text and set mouseOut functions
function opt_NOCLOSE(unused) {
	o3_close = "";
	var Obj = (ie4) ? o3_frame.document.all['overDiv'] : over;
	if (ns4) {
	  Obj.captureEvents(Event.MOUSEOUT);
	  Obj.onmouseout = cClick;
	}
	if (ie4 || ns6) Obj.onmouseover = function () {hSwitch = true;}
	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);}

