//\//////////////////////////////////////////////////////////////////////////////////
//\  Overlib Plug-in Core Module.  This code is adapted from 
//\
//\  overLIB 3.50  --  This notice must remain untouched at all times.
//\  Copyright Erik Bosrup 1998-2001. All rights reserved.
//\
//\  By Erik Bosrup (erik@bosrup.com).  Last modified 2002-08-10.
//\  Portions by Dan Steinman (dansteinman.com). Additions by other people are
//\  listed on the overLIB homepage.
//\
//\  It is a demonstration project for one way of establishing a plug-in capability
//\  within the overlib library.  It is in no way,endorsed by overlib's author,
//\  Erik Bosrup.
//\
//\  It is made up of a core library which provides essentially the same functionality as
//\  overlib v3.33 which just a few additions.  Additional libraries provide support for
//\  CSS Styling,DropShadow feature,Draggable popups,the Reference Mark properties,and
//\  other features.
//\
//\//////////////////////////////////////////////////////////////////////////////////
//\proposed
////////////////////////////////////////////////////////////////////////////////////
// CONSTANTS
// They are generated on the fly via javascript.  In the mini-version,these
// constants should be maintained and not replaced by their numerical values
// since they are subject to change as parameters are added and/or deleted.
////////////////////////////////////////////////////////////////////////////////////
//  pmCnt > running count of the parameters, initialized to 1.
/////////////////////////////////////////////////////////////////////////////////////
var olLoaded=false;
var pmCnt=1;
var pMtr=new Array();
var FREPLACE=0;
var FBEFORE=1;
var FAFTER=2;
var FALTERNATE=3;
var olInfo=new Info();
coreCmds=
 'inarray,caparray,sticky,background,noclose,caption,left,right,center,offsetx,offsety,' +
 'fgcolor,bgcolor,textcolor,capcolor,closecolor,width,border,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,frame,timeout,function,delay,hauto,vauto,closeclick,wrap,followmouse,' +
 'mouseoff,closetitle,cssoff'
registerCommands(coreCmds);
////////////////////////////////////////////////////////////////////////////////////
// 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.
////////////////////////////////////////////////////////////////////////////////////
// Define reasonable default values for the core parameters
if (typeof ol_fgcolor=='undefined') var ol_fgcolor="#CCCCFF";
if (typeof ol_bgcolor=='undefined') var ol_bgcolor="#333399";
if (typeof ol_textcolor=='undefined') var ol_textcolor="#000000";
if (typeof ol_capcolor=='undefined') var ol_capcolor="#FFFFFF";
if (typeof ol_closecolor=='undefined') var ol_closecolor="#9999FF";
if (typeof ol_textfont=='undefined') var ol_textfont="Verdana,Arial,Helvetica";
if (typeof ol_captionfont=='undefined') var ol_captionfont="Verdana,Arial,Helvetica";
if (typeof ol_closefont=='undefined') var ol_closefont="Verdana,Arial,Helvetica";
if (typeof ol_textsize=='undefined') var ol_textsize="11";
if (typeof ol_captionsize=='undefined') var ol_captionsize="11";
if (typeof ol_closesize=='undefined') var ol_closesize="11";
if (typeof ol_width=='undefined') var ol_width="200";
if (typeof ol_border=='undefined') var ol_border="1";
if (typeof ol_offsetx=='undefined') var ol_offsetx=10;
if (typeof ol_offsety=='undefined') var ol_offsety=10;
if (typeof ol_text=='undefined') var ol_text="Default Text";
if (typeof ol_cap=='undefined') var ol_cap="";
if (typeof ol_sticky=='undefined') var ol_sticky=0;
if (typeof ol_background=='undefined') var ol_background="";
if (typeof ol_close=='undefined') var ol_close="Close";
if (typeof ol_hpos=='undefined') var ol_hpos=RIGHT;
if (typeof ol_status=='undefined') var ol_status="";
if (typeof ol_autostatus=='undefined') var ol_autostatus=0;
if (typeof ol_height=='undefined') var ol_height=-1;
if (typeof ol_snapx=='undefined') var ol_snapx=0;
if (typeof ol_snapy=='undefined') var ol_snapy=0;
if (typeof ol_fixx=='undefined') var ol_fixx=-1;
if (typeof ol_fixy=='undefined') var ol_fixy=-1;
if (typeof ol_relx=='undefined') var ol_relx=null;
if (typeof ol_rely=='undefined') var ol_rely=null;
if (typeof ol_fgbackground=='undefined') var ol_fgbackground="";
if (typeof ol_bgbackground=='undefined') var ol_bgbackground="";
if (typeof ol_padxl=='undefined') var ol_padxl=1;
if (typeof ol_padxr=='undefined') var ol_padxr=1;
if (typeof ol_padyt=='undefined') var ol_padyt=1;
if (typeof ol_padyb=='undefined') var ol_padyb=1;
if (typeof ol_fullhtml=='undefined') var ol_fullhtml=0;
if (typeof ol_vpos=='undefined') var ol_vpos=BELOW;
if (typeof ol_aboveheight=='undefined') var ol_aboveheight=0;
if (typeof ol_capicon=='undefined') var ol_capicon="";
if (typeof ol_frame=='undefined') var ol_frame=self;
if (typeof ol_timeout=='undefined') var ol_timeout=0;
if (typeof ol_function=='undefined') var ol_function=null;
if (typeof ol_delay=='undefined') var ol_delay=0;
if (typeof ol_hauto=='undefined') var ol_hauto=0;
// Added REB -- default behavior is auto align vertically
if (typeof ol_vauto=='undefined') var ol_vauto=1;
if (typeof ol_closeclick=='undefined') var ol_closeclick=0;
if (typeof ol_wrap=='undefined') var ol_wrap=0;
if (typeof ol_followmouse=='undefined') var ol_followmouse=1;
if (typeof ol_mouseoff=='undefined') var ol_mouseoff=0;
if (typeof ol_closetitle=='undefined') var ol_closetitle='Click to Close';
if (typeof ol_css=='undefined') var ol_css=CSSOFF;
////////////////////////////////////////////////////////////////////////////////////
// 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 and caps
if (typeof ol_texts=='undefined') var ol_texts=new Array("Text 0","Text 1");
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 core variables init. Used for runtime only,don't change,not for config!
// Make sure they have some value in case not set any where else.
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_textcolor="";
var o3_capcolor="";
var o3_closecolor="";
var o3_width=100;
var o3_border=1;
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;
var o3_rely=null;
var o3_fgbackground="";
var o3_bgbackground="";
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="11";
var o3_captionsize="11";
var o3_closesize="11";
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_wrap=0;
var o3_followmouse=1;
var o3_mouseoff=0;
var o3_closetitle='';
var o3_css=CSSOFF;
// 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 hSwitch,fnRef;
var isMac=(navigator.userAgent.indexOf("Mac")!=-1);
// Decide browser version
var olOp=(navigator.userAgent.toLowerCase().indexOf('opera 7.') > -1);
var olNs4=(navigator.appName=='Netscape'&&parseInt(navigator.appVersion)==4);
var olNs6=(document.getElementById)? true : false;
var olIe4=(document.all) ? true : false;
var olIe5=false;
var docRoot='document.body';
// Resize fix for NS4.x to keep track of layer
if (olNs4) {
	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 (olIe4) {
	if ((navigator.userAgent.indexOf('MSIE 5') > 0)||(navigator.userAgent.indexOf('MSIE 6') > 0)){
		olIe5=true;
		if (olNs6) olNs6=false;
	}
	if (olNs6) olIe4=false;
}
if(document.compatMode&&document.compatMode=='CSS1Compat') docRoot= ((olIe4&&!olOp) ? 'document.documentElement' : docRoot);
// Capture events,alt. diffuses the overlib function.
var capExtent, olChkMseCapture=true;
if ((olNs4||olNs6||olIe4)) olMouseCapture();
else {
	overlib=no_overlib;
	nd=no_overlib;
	ver3fix=true;
}
// Fake function for 3.0 users.
function no_overlib() {return ver3fix;}
function olMouseCapture() {
	capExtent=document;
	var fN,mseHandler=olMouseMove;
	var re=/function[ ]+(\w+)\(/;
	if(document.onmousemove||(!olIe4&&window.onmousemove)){
	  if(window.onmousemove) capExtent=window
	  fN=capExtent.onmousemove.toString().match(re)
		if(fN[1]=='anonymous'||fN[1]=='olMouseMove') {
			olChkMseCapture=false;
			return
		}
	  var str=fN[1]+'(e); ' + 'olMouseMove(e); '
	  mseHandler=new Function('e',str)
	}
	capExtent.onmousemove=mseHandler
	if (olNs4) capExtent.captureEvents(Event.MOUSEMOVE)
}
////////////////////////////////////////////////////////////////////////////////////
// PUBLIC FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////
// overlib(arg0,...,argN)
// Loads parameters into global runtime variables.
function overlib() {
	if(!olLoaded) return;
	if(olChkMseCapture) olMouseCapture();
	// 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_textcolor=ol_textcolor;
	o3_capcolor=ol_capcolor;
	o3_closecolor=ol_closecolor;
	o3_width=ol_width;
	o3_border=ol_border;
	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;
	o3_rely=ol_rely;
	o3_fgbackground=ol_fgbackground;
	o3_bgbackground=ol_bgbackground;
	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_wrap=ol_wrap;	
	o3_followmouse=ol_followmouse;
	o3_mouseoff=ol_mouseoff;
	o3_closetitle=ol_closetitle;
	o3_css=ol_css;
	setRunTimeVariables();
	hSwitch=false;
	fnRef=''	
	// Special for frame support,over must be reset...
	if (over) cClick();
	o3_frame=ol_frame;
	if (olNs4) over=o3_frame.document.layers['overDiv'];
	else if (document.all) over=o3_frame.document.all['overDiv'];
	else if (document.getElementById) over=o3_frame.document.getElementById("overDiv");
	parseTokens('o3_',overlib.arguments);
	if (!postParseChecks()) return false;
	if (o3_delay==0) {
		return runHKFun("olMain",FREPLACE);
	} else {
		o3_delayid=setTimeout("runHKFun('olMain',FREPLACE)",o3_delay);
		return false;
	}
}
// Clears popups if appropriate
function nd(time) {
	if (time&&!o3_delay) {
		if (o3_timerid > 0) clearTimeout(o3_timerid);
		o3_timerid=setTimeout("cClick()",(o3_timeout=time));
	} else {
		if ( o3_removecounter >= 1 ) { o3_showingsticky=0 };
		if ( o3_showingsticky==0 ) {
			o3_allowmove=0;
			if (over!=null) runHKFun("hideObject",FREPLACE,over);
		} else o3_removecounter++;
	}
	return true;
}
////////////////////////////////////////////////////////////////////////////////////
// OVERLIB MAIN FUNCTION FOR SETTING UP THE POPUPS
////////////////////////////////////////////////////////////////////////////////////
// This function decides what it is we want to display and how we want it done.
function olMain() {
	// Make layer content
	var layerhtml,sTyp;
 	runHKFun("olMain",FBEFORE);
	if (o3_background!=""||o3_fullhtml) {
		// Use background instead of box.
		layerhtml=runHKFun('ol_content_background',FALTERNATE,o3_css,o3_text,o3_background,o3_fullhtml);
	} else {
		// They want a popup box.
		// Prepare popup background
		if (o3_fgbackground!="") o3_fgbackground="background=\""+o3_fgbackground+"\"";
  	sTyp=(pMtr[o3_css-1]=="cssoff"||pMtr[o3_css-1]=="cssclass");
		if (o3_bgbackground!="") o3_bgbackground=( sTyp ? "background=\""+o3_bgbackground+"\"" : o3_bgbackground);
		// Prepare popup colors
		if (o3_fgcolor!="") o3_fgcolor=(sTyp ? "bgcolor=\""+o3_fgcolor+"\"" : o3_fgcolor);
		if (o3_bgcolor!="") o3_bgcolor=(sTyp ? "bgcolor=\""+o3_bgcolor+"\"" : o3_bgcolor);
		// Prepare popup height
		if (o3_height > 0) o3_height=(sTyp ? "height=\""+o3_height+"\"" : o3_height);
		else o3_height="";
		// Decide which kinda box.
		if (o3_cap=="") {
			// Plain
			layerhtml=runHKFun('ol_content_simple',FALTERNATE,o3_css,o3_text);
		} else {
			// With caption
			if (o3_sticky) {
				// Show close text
				layerhtml=runHKFun('ol_content_caption',FALTERNATE,o3_css,o3_text,o3_cap,o3_close);
			} else {
				// No close text
				layerhtml=runHKFun('ol_content_caption',FALTERNATE,o3_css,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;
	}
	// Created a separate routine to generate the popup to make it easier
	// to implement a plugin capability
	if(!runHKFun("createPopup",FREPLACE,layerhtml)) return false;
	// 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);
	}
	// Show layer
	runHKFun("disp",FREPLACE,o3_status);
	runHKFun("olMain",FAFTER);
	if (o3_status!='') return true;
	else return;
}
////////////////////////////////////////////////////////////////////////////////////
// LAYER GENERATION FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////
// These functions just handle popup content with tags that should adhere to the W3C
// standards specification.
// Makes simple table without caption
function ol_content_simple(text) {
	txt='<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+o3_bgcolor+' '+o3_height+'><tr><td><table width="100%" border="0" cellpadding="2" cellspacing="0" '+o3_fgcolor+' '+o3_fgbackground+' '+o3_height+'><tr><td valign="TOP"><span style="font-family: '+o3_textfont+'; color: '+o3_textcolor+'; font-size: '+o3_textsize+'px;">'+text+'</span></td></tr></table></td></tr></table>';
	set_background("");
	return txt;
}
// Makes table with caption and optional close link
function ol_content_caption(text,title,close) {
	var nameId;
	closing="";
	closeevent="onMouseOver";
	if (o3_closeclick==1) closeevent= (o3_closetitle ? "title='" + o3_closetitle +"'" : "") + " onClick";
	if (o3_capicon!="") {
	  nameId=' hspace=\"5\"'+' align=\"middle\" alt=\"\"';
	  if (typeof o3_dragimg!='undefined'&&o3_dragimg) nameId=' hspace=\"5\"'+' name=\"'+o3_dragimg+'\" id=\"'+o3_dragimg+'\" align=\"middle\" alt=\"Drag Enabled\" title=\"Drag Enabled\"';
	  o3_capicon='<img src=\"'+o3_capicon+'\"'+nameId+'>';
	}
	if (close!="")
	 closing='<td align="RIGHT"><a href="javascript:return '+fnRef+'cClick();" '+closeevent+'="return '+fnRef+'cClick();"><span style="color: '+o3_closecolor+'; font-family: '+o3_closefont+'; font-size: '+o3_closesize+'px;">'+close+'</span></a></td>';
	txt='<table width="'+o3_width+ '" border="0" cellpadding="'+o3_border+'" cellspacing="0" '+o3_bgcolor+' '+o3_bgbackground+' '+o3_height+'><tr><td><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td><b><span style="color: '+o3_capcolor+'; font-family: '+o3_captionfont+'; font-size: '+o3_captionsize+'px;">'+o3_capicon+title+'</span></b></td>'+closing+'</tr></table><table width="100%" border="0" cellpadding="2" cellspacing="0" '+o3_fgcolor+' '+o3_fgbackground+' '+o3_height+'><tr><td valign="TOP"><span style="color: '+o3_textcolor+'; font-family: '+o3_textfont+'; font-size: '+o3_textsize+'px;">'+text+'</span></td></tr></table></td></tr></table>';
	set_background("");
	return txt;
}
// Sets the background picture,padding and lots more. :)
function ol_content_background(text,picture,hasfullhtml) {
	if (hasfullhtml) {
		txt=text;
	} else {
		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)+'"><span style="font-family: '+o3_textfont+'; color: '+o3_textcolor+'; font-size: '+o3_textsize+'px;">'+text+'</span></td><td width="'+o3_padxr+'"></td></tr><tr><td colspan="3" height="'+o3_padyb+'"></td></tr></table>';
	}
	set_background(picture);
	return txt;
}
// Loads a picture into the div.
function set_background(pic) {
	if (pic=="") {
	  if (olNs4) over.background.src=null; 
		else if (over.style) over.style.backgroundImage="none";
	} else {
		if (olNs4) over.background.src=pic;
		else if (over.style) over.style.backgroundImage="url("+pic+")";
	}
}
////////////////////////////////////////////////////////////////////////////////////
// HANDLING FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////
// Displays the popup
function disp(statustext) {
  // call any routine needed before showing popup
  runHKFun("disp",FBEFORE);
	if (o3_allowmove==0) 	{
		if (olIe4) runHKFun("placeLayer",FREPLACE);
		runHKFun("showObject",FREPLACE,over);
		o3_allowmove=1;
	}
	runHKFun("disp",FAFTER);
	if (statustext!="") self.status=statustext;
}
// Creates the actual popup structure
function createPopup(lyrContent){
	// Write layer
	runHKFun("createPopup",FBEFORE);
	if (o3_wrap&&!(olNs4||olOp)) {
		if (olIe4) over.style.pixelWidth=0;
		else if (olNs6) repositionTo(over,0,-(olNs4 ? over.clip.height : over.offsetHeight));
	}
	layerWrite(lyrContent);
	// have to set o3_width for placeLayer() routine if o3_wrap is turned on
	if (o3_wrap) o3_width=(olNs4 ? over.clip.width : over.offsetWidth);
	runHKFun("createPopup",FAFTER,lyrContent);
	return true;
}
// Decides where we want the popup.
function placeLayer() {
	var placeX,placeY,ssN=0;
	if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientWidth=='number'")&&eval('o3_frame.'+docRoot+'.clientWidth')) 
		iwidth=eval('o3_frame.'+docRoot+'.clientWidth');
	else if (typeof(o3_frame.innerWidth)=='number') {
		ssN=Math.ceil(1.2*(o3_frame.outerWidth - o3_frame.innerWidth));
		iwidth=o3_frame.innerWidth;
	}
	// HORIZONTAL PLACEMENT
	// Horizontal scroll offset
	winoffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollLeft') : o3_frame.pageXOffset;
	var pWd=parseInt(o3_width);
	if (o3_fixx > -1||o3_relx!=null) {
		// Fixed position
		placeX=(o3_relx!=null ? ( o3_relx < 0 ? winoffset +o3_relx+ iwidth - pWd - ssN : winoffset+o3_relx) : o3_fixx);
	} else {  
		// If HAUTO,decide what to use.
		if (o3_hauto==1) {
			if ((o3_x - winoffset) > (iwidth / 2)) {
				o3_hpos=LEFT;
			} else {
				o3_hpos=RIGHT;
			}
		}  		
		// From mouse
		if (o3_hpos==CENTER) { // Center
			placeX=o3_x+o3_offsetx-(pWd/2);
			if (placeX < winoffset) placeX=winoffset;
		}
		if (o3_hpos==RIGHT) { // Right
			placeX=o3_x+o3_offsetx;
			if ((placeX+pWd) > (winoffset+iwidth - ssN)) {
				placeX=iwidth+winoffset - pWd - ssN;
				if (placeX < 0) placeX=0;
			}
		}
		if (o3_hpos==LEFT) { // Left
			placeX=o3_x-o3_offsetx-pWd;
			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
	scrolloffset=(olIe4) ? eval('o3_frame.'+docRoot+'.scrollTop') : o3_frame.pageYOffset;
	if (eval('o3_frame.'+docRoot)&&eval("typeof o3_frame."+docRoot+".clientHeight=='number'")&&eval('o3_frame.'+docRoot+'.clientHeight')) 
		iheight=eval('o3_frame.'+docRoot+'.clientHeight');
	else if (typeof(o3_frame.innerHeight)=='number') 
		iheight=o3_frame.innerHeight;
	var pHt=(o3_aboveheight ? parseInt(o3_aboveheight) : (olNs4 ? over.clip.height : over.offsetHeight));
	if (o3_fixy > -1||o3_rely!=null) {
		// Fixed position
		placeY=(o3_rely!=null ? (o3_rely < 0 ? scrolloffset+o3_rely+iheight - pHt : scrolloffset+o3_rely) : o3_fixy);
	} else {
		// If VAUTO,decide what to use.
		if (o3_vauto==1) {  
			if ((o3_y - scrolloffset) > (iheight/2)) {
				o3_vpos=ABOVE;
			} else {
				o3_vpos=BELOW;
			}
		}
		// From mouse
		if (o3_vpos==ABOVE) {
			if (o3_aboveheight==0) o3_aboveheight=pHt; 
			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 olMouseMove(e) {
	var e=(e)?e:event;
	if (e.pageX) {o3_x=e.pageX; o3_y= e.pageY;}
	else if (e.clientX) {o3_x=eval('e.clientX+o3_frame.'+docRoot+'.scrollLeft'); o3_y=eval('e.clientY+o3_frame.'+docRoot+'.scrollTop');}
	if (o3_allowmove==1) runHKFun("placeLayer",FREPLACE);
	if (o3_sticky||o3_followmouse==0) o3_allowmove=0;
  // MouseOut handler
	if (hSwitch&&!olNs4&&runHKFun("cursorOff",FREPLACE)) {
	   cClick();
	   hSwitch=!hSwitch;
	}
}
// The Close onMouseOver function for stickies
function cClick() {
	runHKFun("hideObject",FREPLACE,over);
	o3_showingsticky=0;	
	return false;
}
// Makes sure target frame has overLIB
function compatibleframe(frameid) { 
	if (olNs4&&typeof frameid.document.overDiv=='undefined') return false;
 	else if (document.all&&typeof frameid.document.all["overDiv"]=='undefined')return false;
	else if (document.getElementById&&frameid.document.getElementById('overDiv')==null) return false;
	return true;
}
// Suggested way to handle default setting
function setOLParams() {
	parseTokens('ol_',setOLParams.arguments);
}
function parseTokens(pf,argArray) {
	// What the next argument is expected to be.
	var v,udf,md=-1,par=(pf!='ol_');	
	var ar=argArray;
	udf=(par&&!ar.length ? 1 : 0);
	for (i=0; i < ar.length; i++) {
		if (md < 0) {
			// Arg is maintext,unless its a number
			if (typeof ar[i]=='number') {
				udf=(par ? 1 : 0);
				i--;   // backup one so that the next block can parse it
			} else {
				switch(pf) {
					case 'ol_':
						ol_text=ar[i];
						break;
					default:
						o3_text=ar[i];  // REB
				}
			}
			md=0;
		} else {
			// Note: NS4 doesn't like switch cases with vars.
			if (ar[i]==INARRAY) { udf=0; eval(pf+'text=ol_texts['+ar[++i]+']'); continue; }
			if (ar[i]==CAPARRAY) { eval(pf+'cap=ol_caps['+ar[++i]+']'); continue; }
			if (ar[i]==STICKY) { eval(pf+'sticky=1'); continue; }
			if (ar[i]==BACKGROUND) { eval(pf+'background="'+ar[++i]+'"'); continue; }
			if (ar[i]==NOCLOSE) { if (pf!='ol_') opt_NOCLOSE(); continue; }
			if (ar[i]==CAPTION) { eval(pf+'cap="'+ar[++i]+'"'); continue; }
			if (ar[i]==CENTER||ar[i]==LEFT||ar[i]==RIGHT) { eval(pf+'hpos='+ar[i]); continue; }
			if (ar[i]==OFFSETX) { eval(pf+'offsetx='+ar[++i]); continue; }
			if (ar[i]==OFFSETY) { eval(pf+'offsety='+ar[++i]); continue; }
			if (ar[i]==FGCOLOR) { eval(pf+'fgcolor="'+ar[++i]+'"'); continue; }
			if (ar[i]==BGCOLOR) { eval(pf+'bgcolor="'+ar[++i]+'"'); continue; }
			if (ar[i]==TEXTCOLOR) { eval(pf+'textcolor="'+ar[++i]+'"'); continue; }
			if (ar[i]==CAPCOLOR) { eval(pf+'capcolor="'+ar[++i]+'"'); continue; }
			if (ar[i]==CLOSECOLOR) { eval(pf+'closecolor="'+ar[++i]+'"'); continue; }
			if (ar[i]==WIDTH) { eval(pf+'width='+ar[++i]); continue; }
			if (ar[i]==BORDER) { eval(pf+'border='+ar[++i]); continue; }
			if (ar[i]==STATUS) { eval(pf+'status="'+ar[++i]+'"'); continue; }
			if (ar[i]==AUTOSTATUS) { eval(pf +'autostatus=('+pf+'autostatus==1) ? 0 : 1'); continue; }
			if (ar[i]==AUTOSTATUSCAP) { eval(pf +'autostatus=('+pf+'autostatus==2) ? 0 : 2'); continue; }
			if (ar[i]==HEIGHT) { eval(pf+'height='+pf+'aboveheight='+ar[++i]); continue; } // Same param again.
			if (ar[i]==CLOSETEXT) { eval(pf+'close="'+ar[++i]+'"'); continue; }
			if (ar[i]==SNAPX) { eval(pf+'snapx='+ar[++i]); continue; }
			if (ar[i]==SNAPY) { eval(pf+'snapy='+ar[++i]); continue; }
			if (ar[i]==FIXX) { eval(pf+'fixx='+ar[++i]); continue; }
			if (ar[i]==FIXY) { eval(pf+'fixy='+ar[++i]); continue; }
			if (ar[i]==RELX) { eval(pf+'relx='+ar[++i]); continue; }
			if (ar[i]==RELY) { eval(pf+'rely='+ar[++i]); continue; }
			if (ar[i]==FGBACKGROUND) { eval(pf+'fgbackground="'+ar[++i]+'"'); continue; }
			if (ar[i]==BGBACKGROUND) { eval(pf+'bgbackground="'+ar[++i]+'"'); continue; }
			if (ar[i]==PADX) { eval(pf+'padxl='+ar[++i]); eval(pf+'padxr='+ar[++i]); continue; }
			if (ar[i]==PADY) { eval(pf+'padyt='+ar[++i]); eval(pf+'padyb='+ar[++i]); continue; }
			if (ar[i]==FULLHTML) { eval(pf+' fullhtml=1'); continue; }
			if (ar[i]==BELOW||ar[i]==ABOVE) { eval(pf+'vpos='+ar[i]); continue; }
			if (ar[i]==CAPICON) { eval(pf+'capicon="'+ar[++i]+'"'); continue; }
			if (ar[i]==TEXTFONT) { eval(pf+'textfont="'+ar[++i]+'"'); continue; }
			if (ar[i]==CAPTIONFONT) { eval(pf+'captionfont="'+ar[++i]+'"'); continue; }
			if (ar[i]==CLOSEFONT) { eval(pf+'closefont="'+ar[++i]+'"'); continue; }
			if (ar[i]==TEXTSIZE) { eval(pf+'textsize='+ar[++i]); continue; }
			if (ar[i]==CAPTIONSIZE) { eval(pf+'captionsize='+ar[++i]); continue; }
			if (ar[i]==CLOSESIZE) { eval(pf+'closesize='+ar[++i]); continue; }
			if (ar[i]==FRAME) { v= ar[++i]; if(pf=='ol_'&&compatibleframe(v)) ol_frame=v; else opt_FRAME(v); continue; }
			if (ar[i]==TIMEOUT) { eval(pf+'timeout='+ar[++i]); continue; }
			if (ar[i]==FUNCTION) { if (pf=='ol_') { if (typeof ar[i+1]!='number') { v=ar[++i]; ol_function=(typeof v=='function' ? v : null); }} else {udf=0; v=null; if (typeof ar[i+1]!='number') v=ar[++i];  opt_FUNCTION(v); } continue; }
			if (ar[i]==DELAY) { eval(pf+'delay='+ar[++i]); continue; }
			if (ar[i]==HAUTO) { eval(pf+'hauto=('+pf+'hauto==0) ? 1 : 0'); continue; }
			if (ar[i]==VAUTO) { eval(pf+'vauto=('+pf+'vauto==0) ? 1 : 0'); continue; }
			if (ar[i]==CLOSECLICK) { eval(pf +'closeclick=('+pf+'closeclick==0) ? 1 : 0'); continue; }
			if (ar[i]==WRAP) { eval(pf +'wrap=('+pf+'wrap==0) ? 1 : 0'); continue; }
			if (ar[i]==FOLLOWMOUSE) { eval(pf +'followmouse=('+pf+'followmouse==1) ? 0 : 1'); continue; }
			if (ar[i]==MOUSEOFF) { eval(pf +'mouseoff=('+pf+'mouseoff==0) ? 1 : 0'); continue; }
			if (ar[i]==CLOSETITLE) { eval(pf+'closetitle="'+ar[++i]+'"'); continue; }
			if (ar[i]==CSSOFF) { eval(pf+'css='+ar[i]); continue; }
   		i=parseCmdLine(pf,i,ar);
		}
	}
	if (udf&&o3_function) o3_text=o3_function();
	if ((pf=='o3_')&&o3_wrap) {
		o3_width=0;
		if (olOp||(olIe4&&isMac)) {
			var tReg=/<.*\n*>/ig;
			if(!tReg.test(o3_text)) o3_text=o3_text.replace(/[ ]+/g,'&nbsp;');
			if(!tReg.test(o3_cap))o3_cap=o3_cap.replace(/[ ]+/g,'&nbsp;');
		}
	}
	if ((pf=='o3_')&&o3_sticky) {
		if(!o3_close&&(o3_frame!=ol_frame)) o3_close=ol_close;
		if (o3_mouseoff&&(o3_frame==ol_frame)) opt_NOCLOSE(' ');
	}
}
////////////////////////////////////////////////////////////////////////////////////
// LAYER FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////
// Writes to a layer
function layerWrite(txt) {
	txt += "\n";
	if (olNs4) {
		var lyr=o3_frame.document.overDiv.document
		lyr.write(txt)
		lyr.close()
	} else if (typeof over.innerHTML != 'undefined') {
		over.innerHTML=txt
	} else {
		range=o3_frame.document.createRange();
		range.setStartAfter(over);
		domfrag=range.createContextualFragment(txt);
		while (over.hasChildNodes()) {over.removeChild(over.lastChild);}
		over.appendChild(domfrag);
	}
}
// Make an object visible
function showObject(obj) {
	runHKFun("showObject",FBEFORE);
	var theObj=(olNs4 ? obj : obj.style);
	theObj.visibility='visible';
	runHKFun("showObject",FAFTER);
}
// Hides an object
function hideObject(obj) {
  runHKFun("hideObject",FBEFORE);
	var theObj=(olNs4 ? obj : obj.style);
	theObj.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 (over.onmouseout||over.onmouseover) {
		if(olNs4) over.releaseEvents(Event.MOUSEOUT||Event.MOUSEOVER);
		over.onmouseout=over.onmouseover=null;
	}
	runHKFun("hideObject",FAFTER);
}
// Move a layer
function repositionTo(obj,xL,yL) {
	var theObj=(olNs4 ? obj : obj.style);
	theObj.left=xL + (!olNs4 ? 'px' : 0);
	theObj.top=yL + (!olNs4 ? 'px' : 0);
}
// Check position of cursor relative to overDiv DIVision; mouseOut function
function cursorOff() {
	var left= parseInt(over.style.left);
	var top=parseInt(over.style.top);
	var right=left+over.offsetWidth;
	var bottom=top+ over.offsetHeight;
	if (o3_x < left||o3_x > right||o3_y < top||o3_y > bottom) return true;
	return false;
}
////////////////////////////////////////////////////////////////////////////////////
// PARSER FUNCTIONS
////////////////////////////////////////////////////////////////////////////////////
// Defines which frame we should point to.
function opt_FRAME(frm) {
 	o3_frame=compatibleframe(frm) ? frm : ol_frame;
	if (olNs4) over=o3_frame.document.layers['overDiv'];
	else if (document.all) over=o3_frame.document.all['overDiv'];
	else if (document.getElementById) over=o3_frame.document.getElementById("overDiv");
	return 0;
}
function opt_FUNCTION(callme) {
	o3_text=(callme ? (typeof callme=='string' ? (/.+\(.*\)/.test(callme) ? eval(callme) : callme) : callme()) : (o3_function ? o3_function() : 'No Function'));
	return 0;
}
function opt_NOCLOSE(unused) {
	if(!unused) o3_close="";
	if (olNs4) {
	  over.captureEvents(Event.MOUSEOUT||Event.MOUSEOVER);
	  over.onmouseover=function () {if(o3_timerid > 0) {clearTimeout(o3_timerid); o3_timerid=0;}}
	  over.onmouseout=cClick;
	} else 
		over.onmouseover=function () {hSwitch=true; if(o3_timerid > 0) {clearTimeout(o3_timerid); o3_timerid=0;}}
	return 0;
}
function nonBrkSpCleanup() {
	if (o3_wrap&&(olOp||(olIe4&&isMac))) {
		o3_text=o3_text.replace(/\&nbsp;/g,' ');
		o3_cap=o3_cap.replace(/\&nbsp;/g,' ');
	}
}
function resetOverDiv() {  // fix for IE5/Mac problems
	if(!(isMac&&olIe5)) return;
	var theDiv='overDiv',oldNode;
	oldNode=olIe4 ? o3_frame.document.all[theDiv] : o3_frame.document.getElementById(theDiv);
	var body = (olIe4 ? o3_frame.document.all.tags('BODY')[0] : o3_frame.document.getElementsByTagName("BODY")[0]);
	var sho=o3_frame.document.createElement("DIV");
	sho.id=theDiv;
	with(sho.style) {
		position='absolute';
		visibility='hidden';
		zIndex=1000;
	}
	if(oldNode) body.replaceChild(sho,oldNode);
	else body.insertBefore(sho,body.firstChild);
}
//////////////////////////////////////////////////////////////////////////////////
//  REGISTRATION ROUTINES
//////////////////////////////////////////////////////////////////////////////////
function setRunTimeVariables(){
	if(typeof runTime!='undefined'&&runTime.length) 
		for (var k=0; k<runTime.length; k++) runTime[k]();
}
function parseCmdLine(pf,i,args) {
	if(typeof cmdLine!='undefined'&&cmdLine.length) { 
		for(var k=0; k<cmdLine.length; k++) { 
			var j=cmdLine[k](pf,i,args);
			if(j>-1) {i=j; break;}
		}
	}
	return i;
}
function postParseChecks(){
	if (typeof postParse!='undefined'&&postParse.length) {
		for (var k=0; k<postParse.length; k++) {
			if (postParse[k]()) continue;
			return false;  // end now since have an error
		}
	}
	return true;
}
function isFunction(fnRef) {
	var rtn=true;
	if (typeof fnRef=='object') {
		for(var i=0; i<fnRef.length; i++) {
			if (typeof fnRef[i]=='function') continue;
			rtn=false;
			break;
		}
	} else if (typeof fnRef!='function') rtn=false;
	return rtn;
}
function fnReference() {
	this.ovload=null;
	this.before=new Array();
	this.after=new Array();
	this.alt=new Array();
}
function Info(version, author, revised) {
	if (version) this.version=version;
	else this.version=3.610;
	this.major=parseInt(10*this.version)/10;
	this.minor=(parseInt(1000*this.version)-1000*this.major)/100;
	if (author) this.author=author;
	else this.author="Erik Bosrup, R.E.Boughner";
	if (revised) this.revised=revised;
	else this.revised="January 17, 2003";
}
function registerCommands(cmdStr) {
	if (typeof cmdStr!='string') return;
	var pM=cmdStr.split(',');
	pMtr=pMtr.concat(pM);
	for (var i=0; i< pM.length; i++) 
		eval(pM[i].toUpperCase()+'='+pmCnt++);
}
function registerFunction(fnHookTo,fnRef,Typ,optPm) {
	var l,last=typeof optPm;
	if (fnHookTo=='plgIn'||fnHookTo=='postParse') return;
	if (typeof hookPts=='undefined') hookPts=new Array();
	if (typeof hookPts[fnHookTo]=='undefined') hookPts[fnHookTo]=new fnReference();
	l=hookPts[fnHookTo];
	if (Typ!=null) {
		switch (Typ) {
			case 0:
				l.ovload=fnRef;  // replace normal overlib routine
				if (fnHookTo.indexOf('ol_content_') > -1) l.alt[pMtr[CSSOFF-1]]=fnRef; 
				break;
			case 1:
			case 2: 
				var l=(Typ==1 ? l.before : l.after);
				if (typeof fnRef=='object') l=l.concat(fnRef);
				else l[l.length++]=fnRef;
				if (optPm) l=reorder(l,fnRef,optPm);
				break;
			case 3:
				if (last=='number') l.alt[pMtr[optPm-1]]=fnRef;
				break;
		}
	return;
	}
}
function registerRunTimeFunction(functions) {
	if (isFunction(functions)) {
		if (typeof runTime=='undefined') runTime=new Array();
		if (typeof functions=='object') runTime=runTime.concat(functions);
		else runTime[runTime.length++]=functions;
	}
}
function registerCmdLineFunction(functions){
	if (isFunction(functions)) {
		if (typeof cmdLine=='undefined') cmdLine=new Array();
		if (typeof functions=='object') cmdLine=cmdLine.concat(functions);
		else cmdLine[cmdLine.length++]=functions;
	}
}
function registerPostParseFunction(functions){
	if (isFunction(functions)) {
		if (typeof postParse=='undefined') postParse=new Array();
		if (typeof functions=='object') postParse=postParse.concat(functions);
		else postParse[postParse.length++]=functions;
	}
}
function runHKFun(fnHookTo,Typ) {
	var l=hookPts[fnHookTo],optPm,arS,ar=runHKFun.arguments;
	switch(Typ) {
		case 0:
			arS=argToString(ar,2);
			if (typeof l=='undefined'||!(l=l.ovload)) return eval(fnHookTo+'('+arS+')');
			else return eval('l('+arS+')');
			break;
		case 1:
		case 2:
			if (typeof l=='undefined') return;
			l=(Typ==1 ? l.before : l.after);
			if (!l.length) return;
			arS=argToString(ar,2);
			for (var k=0; k < l.length; k++) eval('l[k]('+arS+')'); 
			break;
		case 3:
			optPm=ar[2];
			arS=argToString(ar,3);
			if(typeof l=='undefined'||(l=l.alt[pMtr[optPm-1]])=='undefined') return eval(fnHookTo+'('+arS+')');
			else return eval('l('+arS+')');
	}
}
function argToString(array,strtInd,argName) {
  var jS=strtInd,aS='',ar=array;
  argName=(argName ? argName : 'ar');
  if (ar.length > jS) {
    for (var k=jS; k<ar.length; k++) aS+=argName+'['+k+'], ';
    aS=aS.substring(0,aS.length-2);
  }
  return aS;
}
function reorder(l,fnRef,order) {
	if (!order||typeof order=='undefined'||typeof order=='number') return;
	var k=new Array(),match;
	if (typeof order=='function') {
		if (typeof fnRef=='object') k=k.concat(fnRef);
		else k[k.length++]=fnRef;
		for (var i=0; i<l.length; i++) {
			match=false;
			if (typeof fnRef=='function'&&l[i]==fnRef) continue;
			else {
				for(var j=0; j<fnRef.length; j++) if (l[i]==fnRef[j]) {
					match=true;
					break;
				}
			}
			if(!match) k[k.length++]=l[i];
		}
		k[k.length++]=order;
	} else if (typeof order=='object') {
		if (typeof fnRef=='object') k=k.concat(fnRef);
		else k[k.length++]=fnRef;
		for (var j=0; j<l.length; j++) {
			match=false;
			if (typeof fnRef=='function'&&l[j]==fnRef) continue;
			else {
				for(var i=0; i<fnRef.length; i++) if (l[j]==fnRef[i]) {
					match=true;
					break;
				}
			}
			if(!match) k[k.length++]=l[j];
		}
		for(i=0; i<k.length; i++) l[i]=k[i];
		k.length=0;
		for (var j=0; j<l.length; j++) {
			match=false;
			for (var i=0; i<order.length; i++) {
				if (l[j]==order[i]) {
					match=true;
					break;
				}
			}
			if (!match) k[k.length++]=l[j];
		}
		k=k.concat(order);
	}
	for(i=0; i<k.length; i++) l[i]=k[i];
	return l;
}
/////////////////////////////////////////////////////////////////////////////////////
registerFunction("ol_content_simple",ol_content_simple,FALTERNATE,CSSOFF);
registerFunction("ol_content_caption",ol_content_caption,FALTERNATE,CSSOFF);
registerFunction("ol_content_background",ol_content_background,FALTERNATE,CSSOFF);
registerFunction("hideObject",nonBrkSpCleanup,FAFTER);
registerFunction("hideObject",resetOverDiv,FAFTER);
olLoaded=true;
//end (For internal purposes.)
