<!-- Begin to hide script contents from old browsers.  BE SURE TO UPDATE pops.js for changes in POPup functions
	function fNote(url)
	{	var furl='http://'+url;
		FN = window.open(furl,'FN','resizable=yes,scrollbars=yes,width=550,height=270,left=0,screenX=0,top=0,screenY=0');
		FN.focus();
	}
// There are 2 ID #s for every popNote. One, pIDN, for the note, while wpIDN is for the window.
// These #s are idenitical for all notes on the page. Recursively popped notes have their own pIDN, but the wpIDN of the originating window.
// The pIDN of every popNote [=N= =] is unique. pIDN = ARNn, where n is the sequence # of [=N==]'s within the row. ARN=abs row num
// pIDN's are computed and attached by vLink() and popRow.php. wpIDN's are added by mNote using a search-replace statement.
// This ID#s are added to the "style" parameter string in vLink. "style" is an argument of mNote() js.

// txt = ARN|http://site.com/|root/folder/file|4321
// txt = mOut, when the mouse goes off link or popNote
// style = 'w-50;h-30;s-200;pIDN-43431;wIDN-33452' or after RowHTML returned from getPopRow, ;popRow is tacked on end
// style is missing the wIDN- value untill it is processed by mNote and stored in array popID
	// Some entries are for Windows (screen locations) and some for popNotes (information). 
	// The original page has a set of pNotes, each with its own window (spot). For these, the wIDN==pIDN,
	// For example say on p/123,ARN=4343, there's a popNote that grabs ARN5555 on p/44.
	//		That is note 43431 in window 43431.
	// But ARN5555 may contain a popNote of p/123,ARN2222. If that note is clicked, then pNote 55551 is in window 43431
	// This can result in any window containing any pNote. So 2 lists are needed.
	//	W-list = {wpIDN, wShow, pIDs}.  P-list = {wpIDN, Text}
	// what = pID, or Text, and this tell popInfo, which list to use
	//	Trick: Since the 2 lists do not overlap, we can use 1 Array for the IDNs, some of which will serve twice, some are just pIDN's
	// e.g:	popInfo('save', Type, 40331, 'row')
	// e.g:	popInfo('get',  Type, 40331);  ==> 'row'
	function popInfo(sg, what, IDN, value) {	var ok=0;	// eg: popInfo('save', 'Text', 'POP14321', 'Words..')
		var my = popInfo; if (typeof(my.init)=='undefined') { my.init=1;	my.arrayN=0;
			my.wpIDN = new Array();	// list of IDNs some are for both windows and popNotes on the start page. Some for other pIDNs
			my.wShow = new Array();	// Lists popup last showing in this window. 0 = none. (may be used with visible/hidden.)
			my.State = new Array();	// 1 = the new content in progress should be cancelled.
			my.Pause = new Array();	// 1 = window is on Pause = does not close on-mouse-out.
			my.tymr	= new Array();	// 1 = window is on Pause = does not close on-mouse-out.
			my.pIDs	= new Array();	// list of popIDs used in this window.
			my.pText = new Array();	// list of text for all popups. (a window many contain several.
			my.pStyle= new Array();	// list of styles for all popups
		}
		var i;
		if (sg == 'init') {
			for (i in my.wpIDN) if ( my.wpIDN[i]==IDN ) return;
			i = my.arrayN++;
			my.wpIDN[i] = IDN;										// Add pIDN for new set of entries for a window and/or a popnote
			my.wShow[i] = my.State[i] = my.pText[i] = my.pStyle[i] = "-";			// No popNote posted to window yet (if it's a window).
			my.tymr[i] = "-";	my.Pause[i] = 0;
			my.pIDs[i] = new Array();
		}	
		else if (what=='show' && IDN=='all')
			{	var list = '';
				for (k in my.wShow) if (my.wShow[k]!='-') list += (my.wpIDN[k] + '|');		// list if wIDN's not pIDN's
				return list;
			}
		else
		{
			for (i in my.wpIDN) 
			{	if (my.wpIDN[i]==IDN)
				{	
					if ( sg == 'save' ) 
					{
						if (what=='show') my.wShow[i]= value;		// Window value
						if (what=='state') my.State[i]= value;		// Window value
						if (what=='pause') my.Pause[i]= value;		// Window value
						if (what=='tymr')	 my.tymr[i]= value;		// Window value
						if (what=='pID')  {
							if (value=='clear') { my.pIDs[i] = new Array(); return; }
							my.pIDs[i].push(value);						// Window value
						}
						if (what=='Text') my.pText[i]= value;		// popNote value
						if (what=='style') my.pStyle[i]= value;		// popNote value
					}	
					else if (sg=='show') {		mess('my.pIDs='+i+' => '+my.pIDs[i]);
							return my.pIDs[i]; 
					}		
					else
					{
						if (what=='show')	return my.wShow[i];	// Window value
						if (what=='state') return my.State[i];	// Window value
						if (what=='pause') return my.Pause[i];	// Window value
						if (what=='tymr') return my.tymr[i];	// Window value
						if (what=='pID')  {
							if (value=='LN') return my.pIDs[i].length;
							return my.pIDs[i].pop();	// Window value
						}
						if (what=='Text') return my.pText[i];	// popNote value
						if (what=='style') return my.pStyle[i];	// popNote value
					}
				}
			}
		}
	}
	function getStyle(key, style) {			// get a key's value from the style string: key=val;key=val
		key	= key+   '=';						// returns val or empty string if value missing.
		var re = key+ '[^;]*';					// [^;]* means any # of non semicolons
		var val = 'x' + style.match(re);		// for some reason val will not take replace() until re-converted to a sting, so add 'x'
		return val.replace('x'+key,'');		// => just val or empty
	}
// popNotes in the original page contain no wIDN values in their style arguments in mNote(text, style) calls.
// popNotes inside popNote windows do contain wIDN values corresponding to the windoo they are in.
// txt = [ HTML ] or [ ARN|http://zfact.com/|root/file|3434 ].  3434 is ARN value. 'ARN' is marker.
// 		 HTML can come directly from [=N=] link, or from popRow.php given ARN data
// style = [ w=3;pIDN=34341;wIDN={4242}{;PHP} ] The wIDN value is present only if call comes from a popNote in a popUp window
//		 w & pIDN come from original page (vLink()).  w is optional.
// mNote() Tasks:	(1) Decide if note is already posted. If visible, quit. If Hidden, make visible.
//						(1b) If it's just an "OFF" request, do that and return
//						(2) If ARN note, get HTML from popInfo(), or from popRow.php and save Text in popInfo. 
//						(3) Add wIDN to "style" parameters in Text's [=N=]-links for recursive popNotes
//						(4) Call popUp(wIDN, Text, w).
	function mNote(txt, style, clack)							// Called by N-Link and by popRow.php's JS			
	{	var pIDN, wIDN, lnkID='LNK', inLag=0, inType='note', Text;
		pIDN = getStyle('pIDN', style);							// pIDN is unique popNote #  = (which ARN it's in).(sequence # in ARN)
		wIDN = getStyle('wIDN', style);							// wIDN = pIDN of original note on page. (pIDN changes, if note clicked in popWindow)
		if (wIDN=='')	wIDN = pIDN; 								// Not in popup window (otherwise, wIDN is filled in).
		else 				lnkID = 'LINK'; 							// prevent conflicts between the same popLink inside and outside pop window.
		popInfo('init', 0, wIDN);	popInfo('init', 0, pIDN);	// Initialize everything		

		var showing = popInfo('get', 'show', wIDN, 0);			// What is showing (visible) or ready but hidden
		var state	= popInfo('get', 'state', wIDN, 0);			// State = empty-soon, showing, waiting, waiting-off
		if ( style.match(/PHP/) )				inType = 'PHP';
		if ( style.match(/LAG/) )				inLag = 1;
		if (txt.substring(0,4) == 'ARN|') 	inType = 'ARN';
		if (typeof(clack)=='undefined') clack = '-';			// Click comes from clicking an mNote link (mouseDown, not mouseOver)
//	States = {pIDN, '-'}		Inputs: OFF, ARN, Note, PHP, lagARN, lagNote + (wIDN,pIDN)
// State is set to pIDN when popUp requested. If, after the delay, it is still pIDN, then it is shown.
	if ( txt != 'backUp' ) {
		if (txt=='OFF')	{ 												// Control double underline color
			setTimeout("document.getElementById('" +lnkID+pIDN+ "').className = 'popout';", 500); /// LINK10893 has no properties BUG??
		}
		else if (inType != 'PHP' && !inLag) 
							document.getElementById(lnkID+pIDN).className = 'popover';

		if (txt == "OFF" && pIDN == showing)
		{	
			//ess('txt='+txt+ ', piDN=showing='+pIDN);
			offSoon(wIDN);  return; 								// Hide existing note, no change of "state"
		}
		if (pIDN == showing)											// Show existing note, no change of "state", (cursor just went quickly off and on Link).
		{	
			popUp(wIDN, 'open');	return;                    // Just means keep open.
		}																	// To get here, it must be a request for NEW content (pIDN != showing)
		if (txt == "OFF")												// Turn off some note that has not yet been posted
		{	popInfo('save', 'state', wIDN, '-');				return;
		}
	}
		//ess('txt = '+txt); //ess('style = '+style);
		if ( txt == 'backUp' ) {
			Text  = popInfo('get', 'Text', pIDN, 0);			// pIDN is stored in 'style' in a backup call to mNote()
			style = popInfo('get', 'style', pIDN, 0);
		}
		else if (inType == 'PHP') {								// Just store the PHP result & quit.  It will be retrieved later.
			txt = txt.replace(/sSxQq/g,"'");						// decrypt from encrypt in popNote() in library.php
			Text = txt.replace(/dDxQq/g,'"');					// Store exactly the HTML normally used to make a row
			popInfo('save', 'Text', pIDN, Text);				// If not a call to close popNote, save the Text
			popInfo('save', 'style', pIDN, style);				// saved for backups
			return;
		}
		else if ( ! inLag ) 											// If not a delayed request, a new NEW-content request.
		{	if (state == pIDN && clack!='click') return;		// if a re-request of NEW-content, that is comming ignore, unless there was an actuall click (mouseDown)
			Text = popInfo('get', 'Text', pIDN, 0);
			if ( Text=='-' )											// If Text not stored, store directly or with a call to PHP
			{	if (inType == 'ARN')									// get it. Call popRow.php, which makes JS that calls mNote() with row's HTML.	
				{	txt += '|' +thisAPN+ '|' +style;				// thisAPN is available from page header [main.php/makeHeaders()]
					getPopRow(txt);									// May or may not be shown, but will be stored.
				}	else 
				{	Text = txt.replace(/sSQq/g,"'");				// Local footNotes are encrypted in popNote() in library.php
					Text = Text.replace(/dDQq/g,'"');			// decrypt the quote marks
					popInfo('save', 'Text', pIDN, Text);		// Save Text for backup to previous popNotes (back arrow)
					popInfo('save', 'style', pIDN, style);		// Save styld for backups
				}
			}
			style += ';LAG';
			dt = 400;	if (clack=='click') dt=0;				// if link actually clicked on, don't wait
			setTimeout('mNote("' +txt+ '", "'  +style+ '")', dt);	// Delay so rollovers are not too jumpy.
			popInfo('save', 'state', wIDN, pIDN)				// "State" = waiting for this pIDN
			return;	
		}
		else  															// Delayed (inLag==1) request (either lagged or PHPed).
		{	
			Text = popInfo('get', 'Text', pIDN, 0);
			if ( Text=='-' ) 
			{	setTimeout('mNote("' +txt+ '", "'  +style+ '")', 100);	// PHP must not have delivered yet. Wait 1/10 sec.
				return;
			}		
		}
		Text = Text.replace(/wIDN=;/g, 'wIDN=' +wIDN+ ';');	// Insert popWin #s. Needed for nested popNotes. (Cannot be done earlier. pNotes can appear in differnet windows)
		Text = Text.replace(/POP/g, 'NOT');							// POP is the id of the span tag that holds the popup window (never put a popWin inside a popWin, just replace it.
		Text = Text.replace(/LNK/g, 'LINK');						// LNK is the id of the span tag that holds the link to the popup window. Tracks which link to change the double underline color of.
		state = popInfo('get', 'state', wIDN, 0);
		if (state != pIDN && txt != 'backUp')  return; 			// state must remain undisturbed. If called from backup arrow, just do it.
		popUp(wIDN, Text, style, pIDN);		// <=========	The only call to popUp() that creates a popUp Window. Can be turned on with 'visible'

	}
// ============================ popUp() and subfunctions, popOut, popOver, offSoon & tScroll ===== START
// ---------------------------- These should be accessed only through popUp().  This group call winClose(wIDN), when popUp window closed.
// popUp puts Text (HTML) into a box associated with span-id='POP'+wIDN.  w, h  will override automatic width, height if not empty.
// popBox = BOX#{ BOX2#{ scroll{ up, down } TXT#{} BOT#{} } }. # =wIDN, and is part of all id's. scroll, up, down are div's without id's.
// backup cause an a backup arrow linked to popBack() to be included.
// popUp(wIDN, {'open','close'}) will close window or open re-make window with previous content. Use all parameters for new content.
// There are no delays. It works as fast as it can.
	function popUp(wIDN, Text, style, pIDN) {
//ess('popUp Text='+Text.substring(0,10)+ ', wIDN='+wIDN+', pIDN='+pIDN);
		offSoon(wIDN, 'stopTimer');									// Stop any off-timesr, An open/close decision has been made.
		if (Text == 'pause')	{	winPause(wIDN);	return;	}
		if (Text == 'close')	{	winClose(wIDN, '');	return;	}	// Turn off now
		if (Text == 'open') return;									// If no pIDN, then just Keep Open = stop tymr (done). [Text=='open']
		if ( pIDN == popInfo('get', 'show', wIDN) ) {
			mess("IMPOSSIBLE open what's open");	return;	// Seems impossible, but can't hurt. No use re-displaying.
		}
		// ========= New Contents ========
		w = getStyle('w', style);
		h = getStyle('h', style);
		hSize = popInfo('get', 'pID', wIDN, 'LN');				// History-stack size
		backup = hSize ? 1 : 0;											// If stack is already 1 or more, need backup arrow
		if (hSize == 2)  winPause(wIDN, 1);							//
		bodyClick('inside');												// Signal that this is not an outside-window click
		popInfo('save', 'show', wIDN, pIDN);						// pIDN is showing in window wIDN.
	//ess('Make Pop Win, wIDN='+wIDN+ ', pIDN='+pIDN);
		makePopWin(wIDN, Text, w, h, backup);
		winPause(wIDN, 'show');
		popInfo('save', 'state', wIDN, '-');						// Not waiting for any new contents (helps enforce opening delays)
		setTimeout('popInfo("save", "state", "' +wIDN+ '", "-")', 150);	// Anything click that happens in the first 150ms is meaningless. Cancel.
		popInfo('save', 'pID', wIDN, pIDN);							// Save latest content # in history stack of window's contents (for backup).
	}
	function winClose(wIDN, how) {
		if (how=='delayedClose')
			if ( popInfo('get', 'pause', wIDN) ) return;			// If paused ignore delayed closes from popOut and linkOut.
		popInfo('save', 'show', wIDN, '-');							// It's actualy off, so need a fresh start (e.g. no backArrow.)
		popInfo('save', 'pID', wIDN, 'clear');						// Clear history stack used for backups
		popInfo('save', 'pause', wIDN, 0);							// Pause off, window will close automatically
		//ess('Win Close Id =POP'+wIDN);
		document.getElementById('POP'+wIDN).innerHTML = '';
	}
	function winPause(wIDN, onOff)	{							/// Pause on means window will NOT close automatically
		var bgC, fC, isOn = popInfo('get', 'pause', wIDN);	// 1=on, 0=off
		if ( typeof(onOff)=='undefined') onOff= -1;			// toggle
		if ( onOff!='show' & onOff!=isOn )						// If toggling
		{	isOn = 1 - isOn;											// Toggle
			popInfo('save', 'pause', wIDN, isOn);				// Save setting
		}
		if (isOn)	{ bgC = '#F69';	fC = '#900'; }	
		else			{ bgC = '#9F9';	fC = '#FF6'; }
		document.getElementById('PAU'+wIDN).style.backgroundColor = bgC;	// button background
		document.getElementById('PTX'+wIDN).style.color = fC;					// show or hide "keep on" text
	}	
	function popBack(wIDN) {
		popInfo('get', 'pID', wIDN);							// pops present pIDN of stack
		var pIDN = popInfo('get', 'pID', wIDN);			// pops previous pIDN of stack
		mNote( 'backUp', ';wIDN='+wIDN+';pIDN='+pIDN+';' );		
	}
	// makePopWin makes and displays a popWin in tag with id=wIDN. If backup=1, it puts makes a backArrow that call popBack(wIDN)
	// If w,h are not empty, they over-ride the automatic calculations.
	function makePopWin(wIDN, Text, w, h, backup) {
//ess('makePopWin, wIDN='+wIDN+ ', Text='+Text.substring(0,30));
		var BGC = 'background-color:',  W = 'width:',	H = 'height:', PX = 'px; ', Transparent = BGC +'transparent;';
		var minWd=250, maxWd=450, minHt=20, maxHt=200, headHt=12; w2h = 4;			// w2h = box width to height ratio.
		var borderColor=BGC+'#090; ', textBGColor=BGC+'#FFD; ', headBGC=BGC+'#FF6; '; 	headerHt= H + headHt +PX;		// arrow image height is set below	
		var outerSpan = document.getElementById('POP'+wIDN);
		var txtTest =
				'<div id="txtWin' +wIDN+ '" style="position:absolute; top:0px; left:2000px; width:200px; height:200px; font-size:13px; line-height:18px; overflow:hidden; background-color:transparent; visibility:hidden; ">'
				+ '<div style="height:10px; visibility:hidden; background-color:transparent; margin:0px; padding:0px;"> &nbsp; </div>'
				+ '<div id="TXT' +wIDN+ '" style="position:absolute; top:0px; left:0px; width:200px; position:relative; background-color:transparent; visibility:hidden;'
					+ 'text-align:left; padding:0px; margin:0px;">'	+Text+ '</div>'
				+ '<div id="bMark' +wIDN+ '" style="height:1px; width:20px; background-color:transparent;"></div>'
			+ '</div>';
		outerSpan.innerHTML = txtTest;
		var tWin = document.getElementById('txtWin'+wIDN);
		var bMark = document.getElementById('bMark'+wIDN);
		var tBox = document.getElementById('TXT'+wIDN);
		var tBoxOffSet = tBox.offsetTop;							// This is used to make IE and FF more compatible in  2 ways. (used 3 times)
		var h0 = bMark.offsetTop-tBoxOffSet;					// Height of text in trial box
		var area = h0*200;											// Area of text in trial box with hardwired width=192
		var wd = w*1;													// If user specified width, w, use it
		if ( w == '' ) {
			var ht = Math.floor(Math.sqrt(area/w2h));			// Height of box with w-to-h ratio of w2h
			wd = Math.min(maxWd, Math.max(minWd, w2h*ht));	// wd x ht = same area as text initially fit in.
		}
		tWin.style.width = wd+'px';								// Resize text window and box to measure height
		tBox.style.width = wd+'px';								// 
		ht = bMark.offsetTop-tBoxOffSet;							//	Final Height of TXT text box. (Though it's height is not fixed.)
		outerSpan.innerHTML = '';						// {wd, ht} computed by test. Remove text box to limit flash duration if any.
		
		var tWinHt = ht + 6;											// Scrolling is automatic
		tWinHt = Math.max(minHt, Math.min(maxHt, tWinHt));	// Respect min/max limits.  Can only need scroll if tWinHt=maxHt
		if ( h != '') tWinHt = h*1;								// If user is setting h = tWin height

		var needScroll = ( ht+1 > tWinHt ) ? 1 : 0;
		var tOverflow = ( needScroll )? ':auto;' : ':hidden;';	// Need 1 px to spare to squeek by without a scroll bar
		var rtPad = (needScroll) ? 2 : 0;						// Scroll box uses room that would be right padding for text
		var tBwd = wd + rtPad;						// text Box width, 2 wider scroll bar
		var tWwd = wd + 6;							// text Window, 4 padding on left 
		var pB2wd = tWwd;								// text Window fits Box2 exactly.
		var pBwd = pB2wd + 3;						// Box is 2 bigger to make a 1px border for Box2.
		var pBLft = '-'+Math.floor(wd/4);			// Left shift for popBox.
		
		var pB2ht = tWinHt + headHt;			// Box 2 height
		var pBht  = pB2ht + 3;						// pBox height
		var adj = (tBoxOffSet > 14) ? 8 : 20;					// If IE give 18 extra height, IE give 8
//mess('tBoxOffSet='+tBoxOffSet+ ',adj='+adj);
		var pBtop = -( pB2ht +adj );
		
		tBwd = W +tBwd +PX;		tWwd = W +tWwd +PX;		pB2wd = W +pB2wd +PX;		pBwd = W +pBwd +PX;
		tWht = H +tWinHt +PX;	tBht = tWht;				pB2ht = H + pB2ht +PX; 		pBht	= H +pBht +PX;
		pBLft = 'left:' +pBLft +PX;		pBtop = 'top:' +pBtop +PX;		var overFlow = 'overflow:' +tOverflow+ ';';
		
	var popBox1	= 
	'<div style=\"position:absolute; ' +pBtop +pBLft +pBwd +pBht +borderColor+ ' margin:0; border:0; padding:0; '
	+ 'z-index:99; opacity:1.0; -moz-opacity:1.0; filter:Alpha(opacity=100);">'
		+ '<div style="position:absolute; top:1px; left:1px;' +pB2wd +pB2ht +textBGColor
			+ 'font-weight:normal; text-decoration:none;">'
			+ '<div id="popHead' +wIDN+ '" style="' +headBGC +headerHt+ '">';
	var bArrow = '<img onmousedown=\'popBack(' +wIDN+ ')\' src="http://zfacts.com/metaPage/prog/images/back2.jpg" width="20px" height="12px" style="cursor:pointer; cursor:hand;">';
	var popBox2 =
				'<span id="PTX' +wIDN+ '" style="color:#FF6; line-' +headerHt +headerHt+ 'font-size:12px; font-family:sans-serif; position:absolute; right:40px;">keep window on</span>'
				+ '<div id="PAU' +wIDN+ '" class="popArrow" onmousedown=\'popUp(' +wIDN+ ', "pause")\' style="width:16px; line-' +headerHt+ headerHt+ ' font-size:12px; '
					+ 'font-weight:bold; font-family:sans-serif; background-color:#9F9; position:absolute; top:0px; right:18px;">II</div>'
				+ '<div class="popArrow" onmousedown=\'popUp(' +wIDN+ ', "close")\' style="width:16px; line-' +headerHt+ headerHt+' font-size:20px; font-weight:bold; position:absolute; top:0px; right:0px;">&times;</div>'
			+ '</div>'
			+ '<div style="font-size:13px; line-height:18px; ' +tWht +tWwd+ Transparent+ ' overflow:hidden;">'
				+ '<div id="NEW' +wIDN+ '" style="position:relative; top:0px; left:4px; ' +tBwd +tBht +Transparent+ 'overflow'+tOverflow
					+ 'text-align:left; padding:0px; margin:0px;">'	+Text+ '</div>'
//				+ '<div id="bMark' +wIDN+ '" style="height:1px; width:20px; ' +Transparent+ '"></div>'
			+ '</div>'
		+ '</div>'
	+ '</div>';
				
	if ( ! backup ) bArrow = '';
	outerSpan.innerHTML = popBox1 + bArrow + popBox2;
//ess(popBox1 + bArrow + popBox2);
	outerSpan.onmouseover = popOver;
	outerSpan.onmouseout = popOut;
	outerSpan.onclick = bodyClick;
	var bodyTag = document.getElementsByTagName('body')[0];
	bodyTag.onclick = bodyClick;
	}
	function popOut(e) {											// Valid iff  To is not inside-or-equal-to popBox
		if (!e) var e = window.event;							// MS or W3C: e = event
		var pBox = this.firstChild;
		var related = e.relatedTarget || e.toElement;	// This is the 'To" area (MS or W3C).
		while (related && related != pBox && related.nodeName != 'BODY')  {
			related = related.parentNode;
		}
		if (related == pBox) return;
		wIDN = this.id.replace(/\D*/g, '');
//ess('OFF BOX pop OUT this.id=' +this.id+ ', pBox.id=' +pBox.id);
		offSoon(wIDN);
	}
	function popOver(e) {										// Valid iff  From is not inside-or-equal-to popBox.
		if (!e) var e = window.event;							// MS or W3C: e = event
		var pBox = this.firstChild;
		var related = e.relatedTarget || e.fromElement;	// This is the "From" area
		while (related && related != pBox && related.nodeName != 'BODY')
			related = related.parentNode;
//			mess('related='+related);
		if (related == pBox) return;
//ess('ON BOX pop OVER this.id=' +this.id+ ', pBox.id=' +pBox.id);
		wIDN = this.id.replace(/\D*/g, '');
		popUp(wIDN, 'open');										// Just means keep open
	}
	
	function offSoon(wIDN, stopTimer) {					// Called by popBox with popOut() & popOver. Called by N-link with popUp
		var tymr = popInfo('get', 'tymr', wIDN);
		if ( typeof(stopTimer) != 'undefined' )	{
			if ( tymr != '-' ) 	clearTimeout(tymr); 
			popInfo('save', 'tymr', wIDN, '-');
			return;
		}
		if ( tymr != '-' ) return;						// If going off anyway, let tymr continue.
		var dt = Math.min(2.5, popInfo('get', 'pID', wIDN, 'LN')) * 1000;
		tymr = setTimeout('winClose("'  +wIDN+ '", "delayedClose")', dt);	
		popInfo('save', 'tymr', wIDN, tymr);
	}
		
	function bodyClick(what, text, style) {				// text & style are just used to pass through with a link-click to mNote
		my = bodyClick;	if (typeof(my.w)=='undefined') my.w='';	// static w remembers where was clicked
		var wIDN;
		switch (what) {
			case 'link':	setTimeout('bodyClick("inside")', 20); break;	// clicked on link to popNote
			case 'outside':										// Delayed return from a click
				if (my.w != 'inside') {							// If not inside, close open windows
					var list = new Array();
					list = popInfo('get', 'show', 'all').split('|');	// In case multiple windows open
					for (i in list)
						if (list[i] != '') 						// list[i] = wIDN of open window
							popUp(list[i], 'close');			// close each open window 
				}
				break;
			case 'inside':	my.w = 'inside';	break;		// Mark down that it was an inside click
			default:													// Initial call from click (outside, and possibly inside as well)
				if (this.id + 'x' == 'x')						// Outside of Window click (no id on Body tag, where the listener is registered)
				{	my.w = '';										// Clear out any old in-window clicks
						setTimeout('bodyClick("outside")', 100);	// Return to check if it was an inside click
				}	
				else 	setTimeout('bodyClick("inside")', 20);		// Return and marke insid click after clear out of old clicks	
		}
	}
// ============================ popUp() and subfunctions, popOut, popOver, offSoon, & tScroll ===== END
	function mess(t) {
		t = t.replace(/</g, '[');
		var m = document.getElementById('mess').innerHTML; 
		m = t+ '||<br>' +m;
		document.getElementById('mess').innerHTML = m;
	}
	function getPopRow(rowInfo) {				// sends rowInfo to a php program that finds the row data and makes the HTML
//	alert('rowInfo='+rowInfo);
		var info = rowInfo.split('|')
		var file = info[1] + 'popRow.php?info=' + rowInfo;  // popRow.php must return a JS script calling mNote().
		var script = document.createElement('script');
		script.src = file
		script.type = 'text/javascript';				
		document.getElementsByTagName('head').item(0).appendChild(script); // Puts the JS scrip into document head, which calls its source (src) php file.
	}
// ============================================================ End of Popups
	function oWin(mn,wx,wy,cap) {		// Only for photo Rows
		if (1)
		{  wx = Math.min(wx,700); wy=Math.min(wy,500);
			mWin=window.open('','mW','resizable=yes,scrollbars=yes,width='+wx+',height='+wy+',left=0,screenX=0,top=0,screenY=0');
			var wd = mWin.document;
			wd.open();
			wd.write("<html><body leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>");
			wd.write("<img src='"+mn+"'>"+cap+"</body></html>");
			wd.close();
			mWin.focus();
		}
	}
function dyna(url, repl)				// Used to open a linked web page with a JS link  (directories is NS specific)
{	var furl='http://'+url;
	if (repl) var wh = '_self';		else var wh = '_blank';
	DW=window.open(furl, wh,'resizable=yes,menubar=yes,toolbar=yes,location=yes,directories=yes,status=yes,scrollbars=yes,left=0,screenX=0,top=0,screenY=0');
	DW.focus();
}
function edWin(url)				// Used to open a linked web page with a JS link  (directories is NS specific)
{	var furl='http://'+url;
	var wh = '_blank';
	EWin=window.open(furl, 'EWin','resizable=yes,menubar=yes,toolbar=yes,location=yes,directories=no,status=no,scrollbars=yes,left=0,screenX=0,top=0,screenY=0,width=800,height=600');
	EWin.focus();
}
// End the hiding here.-->
