//
//	COPYRIGHT NOTICE:
// 	Copyright 2002 - 2008 Barry Saxifrage. Stonebreaker Designs. All Rights Reserved.
//	By using this code you agree to indemnify Barry Saxifrage and Stonebreaker Designs 
//	from any liability that might arise from its use. Selling this code or distributing 
//	this code without prior written consent is expressly forbidden. Copyright notice  
//	must remain with this code. For more information: www.stonebreakerdesigns.com	
//

//
//
//	CRITTERS
//
//


	// GLOBALS
	var nScamperDelay   =  100;
	var aCritState = new Array('STOPPED','MOVING','NEVER MOVES','GONE','DRAGGING');
	var Crit_STOPPED 	= 0;
	var Crit_MOVING 	= 1;
	var Crit_DOESNTMOVE = 2;
	var Crit_GONE 		= 3;
	var Crit_DRAG 		= 4;

	var Crit_iIMG 		= 0;
	var Crit_iDX 		= 1;
	var Crit_iDY 		= 2;
	var Crit_iSTILL 	= 3;
	var Crit_iDESC 		= 4;
	var Crit_iX 		= 5;
	var Crit_iY 		= 6;
	var Crit_iSTATE 	= 7;
	var Crit_iINERTIA 	= 8;
	var Crit_iDROP 	= 9;
	
	var aLive 		= new Array(); 	
	var gnAlive 	= 0;			
	var gdomCrit 	= null;
	var giCrit 		= -1;
	var gnCritState = null;
	var gmxDrag 	= 30;
	var gmyDrag 	= 30;
	var gxTidepool 	= 0;		
	var gyTidepool 	= 0;
	var gx2Tidepool = 200;
	var gy2Tidepool = 200;
	var gstrPageID 	= "";
			
	function createTidepool(strPageID, aCrits, xMax, yMax) {
		if (!isID) {return "";}
		gx2Tidepool = xMax;
		gy2Tidepool = yMax;
		gstrPageID 	= strPageID;
		var str = '';
		if (restoreTidepool()) {
			var n = aLive.length;
			gnAlive += n;
			dbg("RESTORING "+n+" CRITTERS");
			for (var i = 0; i < n; i++) {
				var aNew = aLive[i].split('|');
				str += createCritterImgTag(i, aNew);
			}
			document.writeln(str);
		} else {
			drawCrittersFromScratch(strPageID, aCrits, xMax, yMax);
		}
	}
				
	function drawCrittersFromScratch(strPageID, aCrits, xMax,yMax) {
		var str = "";
		var n = aCrits.length - 1 ;
		dbg("CREATING  "+n+" new critters");
		for (var i = 0; i < n; i++) {
			var aC = aCrits[i].split('|');
			var imgNew 			= aC[0];
			var dxMove 			= aC[1];
			var dyMove 			= aC[2];
			var percentStill 	= aC[3];
			var strDesc			= aC[4];
			var nDropInertia	= aC[5];
			var nImgFormat		= aC[6];
			var strImgExt		= '.gif';
			if (nImgFormat == 1) { strImgExt = '.png'; }
			imgNew = imgNew + strImgExt;

			var nState = Crit_MOVING;
			if (percentStill == 100) { nState = Crit_DOESNTMOVE; }
			var x = Math.floor(Math.random() * xMax);
			var y = Math.floor(Math.random() * yMax);

			var aNew = new Array();
				aNew[Crit_iIMG] 	= 	imgNew;
				aNew[Crit_iDX] 	 	= 	dxMove;
				aNew[Crit_iDY] 	 	= 	dyMove;
				aNew[Crit_iSTILL] 	= 	percentStill;
				aNew[Crit_iDESC] 	= 	strDesc;
				aNew[Crit_iX] 		= 	x;
				aNew[Crit_iY] 		= 	y;
				aNew[Crit_iSTATE] 	= 	nState;
				aNew[Crit_iINERTIA] =  0;
				aNew[Crit_iDROP] 	=  nDropInertia;
			aLive[i] = aNew.join('|'); 

			str += createCritterImgTag(i,aNew);
			dbg('CREATED CRIT: ' + aLive[i]);
		}

		gnAlive += n;
		document.write(str);
	}
	function createCritterImgTag(i,aC) {
		var id = getCritterId(i);
		var str = '';
		if(aC[Crit_iSTATE] != Crit_GONE) {
			str = '<img border="0"';
				str += ' id="'+id+'" ';
				str += ' src="bits/critters1/'+aC[Crit_iIMG]+'"';
				str += ' onmousemove="carryCrit(event);"';
				str += ' onmouseup="dropCrit();" ';
				str += ' onmousedown="if (event.preventDefault){event.preventDefault();}; grabCrit(\''+i+'\',event);" ';
				str += ' ondragstart="event.returnValue = false;" ';	
				str += ' alt="'+ aC[Crit_iDESC] +'" ';
				str += ' title="'+ aC[Crit_iDESC] +'" ';
				str += ' style="';
				if(aC[Crit_iSTATE] == Crit_GONE) {
					str += 'visibility=hidden; ';
				}
				str += 'left:'+aC[Crit_iX]+'px;top:'+aC[Crit_iY]+'px;';
				//str += 'filter:blendTrans(duration=1); ';
				str +=	'"';
			str += '>';
		}
		return str;
	}
	

	function startTidepool(nSleep) {
		if (gnAlive <= 0) {
			dbg ("!!NONE STILL ALIVE...END SCAMPER");
		} else {
			if (nSleep == null) { nSleep = 30;} 
			dbg(gnAlive+" STILL ACTIVE SO SLEEPING FOR "+nSleep+" seconds");
			setTimeout('scamper()',(nSleep*1000));
		}
	}
	function scamper(){
		var nAlive    = 0;
		var nActive   = 0;
		var nDontMove = 0;
		for (var i=0; i < aLive.length; i++) {
			var aL = aLive[i].split('|');
			var id	 			= getCritterId(i);
			var nState 			= aL[Crit_iSTATE];
			var x 				= aL[Crit_iX];
			var y 				= aL[Crit_iY];
			var dx 				= aL[Crit_iDX];
			var dy 				= aL[Crit_iDY];
			var nPercentStill 	= aL[Crit_iSTILL];
			var nInertia 		= aL[Crit_iINERTIA];
			var fInPool			= isInTidepool(x,y);
			
			if 	(nState == Crit_DOESNTMOVE) { 
				if (!fInPool) {	aL[Crit_iSTATE] = Crit_GONE; hideCritter(i); } 
				else {	
					nDontMove++; 
				}
			} 
			else if (nState == Crit_DRAG) { 
				nAlive++; 
			} 
			else if (nState == Crit_STOPPED) { 
				if (!fInPool) {	aL[Crit_iSTATE] = Crit_GONE; hideCritter(i);} 
				else if (nInertia <=0) { 				
					// switch to moving
					aL[Crit_iSTATE] 	= Crit_MOVING;
					aL[Crit_iINERTIA] 	= Math.floor(Math.random() * (100-nPercentStill))
					nActive++;
					nAlive++;
				} else {
					// reduce inertia
					aL[Crit_iINERTIA] 	= nInertia - 1;
					nAlive++;
				}
			}
			else if (nState == Crit_MOVING) { 
				if (!fInPool) {	aL[Crit_iSTATE] = Crit_GONE; hideCritter(i);} 
				else if (nInertia <=0) {
					// switch to stopped
					aL[Crit_iSTATE] 	= Crit_STOPPED;
					aL[Crit_iINERTIA] 	= Math.floor(Math.random() * nPercentStill)
					nAlive++;
				} else {
					// reduce inertia
					aL[Crit_iINERTIA] 	= nInertia - 1;
					nAlive++; 
					nActive++;
				}
			}
			aLive[i] = aL.join('|');	
			if (aL[Crit_iSTATE] == Crit_MOVING) { moveCritterBy(i, dx, dy); }
			
		}
		gnAlive = nAlive;
		if (nAlive > 0) {
			setTimeout('scamper()',nScamperDelay);
		} else {
			if (isEmptyTidepool()) { clearTidepool(); }
			dbg("!!NONE LEFT THAT CAN MOVE...END SCAMPER");
		}
	}

	function grabCrit(i, evt) {
		var id = getCritterId(i);
		giCrit = i;
		gdomCrit = getDOM(id,1);
		var x1 = parseInt(getLeft(id));
		var y1 = parseInt(getTop(id));
		var x2 = getMouseX(evt);
		var y2 = getMouseY(evt);
		if (x1 && y1 && x2 && y2) {
			gmxDrag = Math.min((x2-x1), 60);
			gmyDrag = Math.min((y2-y1), 60);
		}
		gnCritState = getCritterState(i);
		dbg("GRAB critter "+i+" ("+aCritState[gnCritState]+")");
		setCritterState(i,Crit_DRAG);
	}
	function carryCrit(evt) { 
		if (gdomCrit) {
			var x = getMouseX(evt) - gmxDrag;
			var y = getMouseY(evt) - gmyDrag;
			gdomCrit.left = x+'px';
			gdomCrit.top  = y+'px';
		}
	}
	function dropCrit() {
		var i = giCrit;
		if (i >= 0) 	{
			if (gnCritState != Crit_DOESNTMOVE) { gnCritState = Crit_STOPPED; }
			setCritterState(i, gnCritState);
			dbg('DROP critter '+i+' ('+aCritState[gnCritState]+")");
			saveCritPos(i);
			resetCritterInertia(i);
			if (isEmptyTidepool()) { clearTidepool(); }
		}	
		gdomCrit 	= null;
		gnCritState = null;
		giCrit 		= -1;
	}

	function saveTidepool() {
		if (aLive != "") {
			var strCookieName = gstrPageID+"Tidepool"+gSiteId
			var strCookieData = aLive.join('#');
			SetCookie(strCookieName, strCookieData);
		}
	}
	function clearTidepool() {
		var strCookieName = gstrPageID+"Tidepool"+gSiteId
		DeleteCookie(strCookieName);
		aLive = "";
		dbg("CLEARED TIDEPOOL...deleted cookie "+strCookieName);
	}
	function restoreTidepool() {
		var fReturn = false;
		var strCookieName = gstrPageID+"Tidepool"+gSiteId
		var strCookieData = GetCookie(strCookieName);
		if (strCookieData && (strCookieData != "")) {
			dbg("COOKIE DATA FOR RESTORED TIDEPOOL cookie "+strCookieName+" now = "+strCookieData);
			aLive = strCookieData.split('#');
			fReturn = true;
		}
		return fReturn;
	}
	function isEmptyTidepool() {
		for (var i = 0; i < aLive.length; i++) {
			var aC = aLive[i].split('|');
			if (aC[Crit_iSTATE] != Crit_GONE) {
				return false;		
			}
		}
		dbg("TIDEPOOL EMPTY");
		return true; 
	}
			
	function getCritterId(i) {
		return "critter"+i;
	}
	function saveCritPos(i) {
		var id = getCritterId(i);
		var x = parseInt(getLeft(id));
		var y = parseInt(getTop(id));
		if (x && y) {
			var aL = aLive[i].split('|');
			aL[Crit_iX] = x;				
			aL[Crit_iY] = y;
			if (!isInTidepool(x,y)) {
				// outside tidepool...so hide
				aL[Crit_iSTATE] = Crit_GONE;
				hideCritter(i);
			}
			aLive[i] = aL.join('|');
		}
	}
	function resetCritterInertia(i) {
		var aL = aLive[i].split('|');
		aL[Crit_iINERTIA] = aL[Crit_iDROP];
		aLive[i] = aL.join('|');
	}
	function setCritterState(i,nState) {
		var aL = aLive[i].split('|');
		aL[Crit_iSTATE] = nState;
		aLive[i] = aL.join('|');
		dbg("critter "+i+" is now ("+aCritState[nState]+")");
	}
	function getCritterState(i) {
		var aL = aLive[i].split('|');
		return (aL[Crit_iSTATE]); 				
	}
	function hideCritter(i) {
		var id = getCritterId(i);	
		var dom = getDOM(id,1);
		if (document.all) {
			//eval(id+'.filters.blendTrans.Apply()');
			dom.visibility = 'hidden';
			//eval(id+'.filters.blendTrans.Play()');
		} else {
			dom.visibility = 'hidden';
		}
		dbg("HIDE critter "+i);
	}
	function moveCritterBy(i,dx,dy){
		var id = getCritterId(i);
		dx = parseInt(dx);
		dy = parseInt(dy);
		var domStyle = getDOM(id,1);
		var dom = getDOM(id,0);
		if (domStyle.pixelLeft) {
			domStyle.pixelLeft += dx;
			domStyle.pixelTop  += dy;
		}
		else {
			if (dom.offsetLeft != null) {
				var x = dom.offsetLeft + dx;
				var y = dom.offsetTop + dy;
				domStyle.left = x + 'px';
				domStyle.top  = y + 'px';
			}
			else {
			dom.moveBy(dx,dy);
			}
		}
		saveCritPos(i);
	}
	function isInTidepool(x,y) {
		if ((x < gxTidepool) || (x > gx2Tidepool) || (y < gyTidepool) || (y > gy2Tidepool)) {
			return false;
		} else {
			return true;
		}
	}
	function dbg (str) {
		return;
	}
			
	
//
//
//	EVENTS
//
//

	function drawFrontpageEventArea(aEvents, fIsAdmin, fCanPost, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showCalendar('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var fIsTopic = (idTopic != 0);
		
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 5, 'ev');
			str += '<div class="btn">';
				if (fCanPost) {
					str += '<a href="javascript:alert(\'Click a day number in the calendar to add an event to that day...\');";" class="btn" title="Click to add a new event...">';
						str += '<img src="bits/spacer.gif" class="img_addnew" width="31" height="25" alt="" title="Click to add a new event..." border="0">';
						str += '<span class="btn_offset">';
							str += 'Add your own';
							//if (nTotalAvailable > 0) {
								str += getFooterDivider();
							//}
						str += '</span>';
					str += '</a>';
				} 
				//if (nTotalAvailable > 0) {
					if (fCanPost) {
						str += '<span class="btn_offset">';
					} else {
						str += '<span class="btn">';
					}
					str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All</a>';
					str += '</span>';
				//}
			str += '</div>';
		str += '</div>';
		document.writeln(str);
		str = '';
		document.writeln('<div id="minical_area" style="position:relative">');
		drawMiniCalMonth(0, aEvents, fCanPost, idTopic);
		drawMiniCalMonth(1, aEvents, fCanPost, idTopic); 
		document.writeln('<img src="spacer.gif" width="3" height="160" alt="" border="0"><br>');
		document.writeln('</div>');
		drawEventList(aEvents, fIsAdmin, fCanPost, nFPFormat, nFPMax);
		if (nTotalAvailable > 0) {
			document.writeln('<div class="ev_area"><a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See all events...</a></div>');
		}
		document.writeln('<div  class="fp_vertspacer">&nbsp;</div>');
	}
	function drawEventList(aEventsShow, fIsAdmin, fCanPost, nFPFormat, nFPMax) {
		var str = ''; 	
		var nEvents = aEventsShow.length - 1;
		if (nEvents > nFPMax) { 
			nEvents = nFPMax; 
		}
		for (var i = 0; i < nEvents; i++) {
			var aE = aEventsShow[i].split("|");
			var idEvent			= aE[0];
			var EStart 			= aE[1];
			var EFinish			= aE[2];
			var strAuthor 		= aE[3];
			var strTitle 		= aE[4];
			var strDescription	= aE[5];
			var strLocation		= aE[6];
			var strEmail 		= aE[7];
			var urlWebsite 		= aE[8];
			var nModifiedDays	= aE[9];
			
			str += '<div class="ev_area">';
				// DATE
				var strEDate = getEventDateHTML(EStart, EFinish, 1);
				str += '<div class="ev_date">' + strEDate+ '</div>' ;
				// TITLE
				str += '<div class="ev_title">';
					if (nFPFormat == 0) { str += '<a class="ev_title" href="javascript:togglePopOpen(\'fp_e'+i+'\');" title="click to open and close...">'; }
					str += strTitle;
					if (nModifiedDays <= gnModifiedDaysNew ) { str += '<img src="bits/updated2.gif" width="11" height="11" alt="New or Updated" title="New or Updated" border="0">';					}
					if (nFPFormat == 0) { str += '</a>'; }
				str += '</div>';
				
				if (nFPFormat == 0) { str += '<div id="fp_e'+i+'">'; }
					// TEXT 
					str += '<div class="ev_text">';
						str += strDescription;
						if (isNotEmpty(strLocation)) { str += ' Location: '+strLocation;	}
					str += '</div>';
					
					// FOOTER
					str += '<div class="ev_ftr">';
						fShowDivider = false;
						str += 'by '+strAuthor;
						fShowDivider = true;
						if (strEmail != "") {
							if (fShowDivider) { str += getFooterDivider(); }
							str += '<a class="ev_ftr" href="' + createMailString(strEmail) + '">email</a>';
							fShowDivider = true;
						}
						if (urlWebsite != "") {
							if (fShowDivider) { str += getFooterDivider(); }
							str += '<a class="ev_ftr" ';
							str += getWebsiteHref(urlWebsite);
							str += '>website</a>';
							fShowDivider = true;
						} 
						if (fCanPost) {
							if (fShowDivider) { str += getFooterDivider(); }
							str += '<a class="ev_ftr" href="javascript:editEventPlus('+ idEvent + ')">edit</a>';
							fShowDivider = true;
							if (fShowDivider) { str += getFooterDivider(); }
							str += '<a class="ev_ftr" href="JavaScript:deleteEvent('+ idEvent + ')">del</a>';
							fShowDivider = true;
						}
					str += '</div>';
				if (nFPFormat == 0) { str += '</div>'; }


			str += '</div>';
			document.writeln(str);
			str = '';
		} 
	}

	function drawMiniCalMonth(nMonthOffset, aEvents, fCanPost, idTopic) {
		var fEditOK = true
		var strCal = ""; 	
		
		var tToday =  getNow();
		var msecToday = tToday.getTime(); 		
		var nTodayDay = tToday.getDate();
		var nTodayMonth = tToday.getMonth()+1;
		var nTodayYear = timeGetYear(tToday);
		
		var tDayA = new Date(msecToday);	
		var tDayZ = new Date(msecToday);	
		var tCal = new Date(msecToday);	
		var	nCalMonth; 			
		var	nCalYear; 			
		var	nDayOneOfCal; 		
		var	nDaysInCalMonth;	
		var	fCalThisMonth;		
		var aCalGeneralEvent = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
		var aCalEventIdList  = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);

		tCal.setDate(1);
		tCal.setMonth(tToday.getMonth() + nMonthOffset); 
		tCal.setHours(12);
		tDayA.setTime(tCal.getTime());

		nCalMonth = tCal.getMonth() + 1;
		nCalYear = timeGetYear(tCal);
		if (nCalYear < 1000) {nCalYear += 1900;} //netscape and ie give different values for getYear!
		fCalThisMonth = ((nCalMonth == nTodayMonth) && (nCalYear == nTodayYear));

		nDayOneOfCal = tCal.getDay(); 	

		for (var i=31; i>=28; i--) {
			tCal.setMonth(nCalMonth - 1);
			tCal.setDate(i);
			if (tCal.getMonth() == nCalMonth - 1) {
				nDaysInCalMonth = i;
				break;
			}
		}
		tCal.setMonth(nCalMonth-1);
		tCal.setDate(1);

		tDayZ.setTime(tDayA.getTime());
		tDayZ.setDate(nDaysInCalMonth);			
		
		for (var i = 0; i < aEvents.length - 1; i++) {
			var aP = aEvents[i].split("|");
			var idEvent			= aP[0];
			var strEventDate 	= aP[1];
			var strEventEndDate	= aP[2];
			var strAuthor 		= aP[3];
			var strTitle 		= aP[4];
			var strDescription	= aP[5];
			var strLocation		= aP[6];
			var strEmail 		= aP[7];
			var urlWebsite 		= aP[8];
			var nModifyDays		= aP[9];
			var aDInfo 			= parseMysqlDatetime(strEventDate);
			var nStartYear 		= aDInfo[0];
			var nStartMonth 	= aDInfo[1];
			var nStartDay 		= aDInfo[2];
			var nStartH 		= aDInfo[3];
			var nStartM 		= aDInfo[4];

			if ((nStartYear == nCalYear) && (nStartMonth == nCalMonth)) {
				aCalGeneralEvent[nStartDay - 1] += ' * '+ getTimeString (nStartH,nStartM) + ' ' + strTitle;
				aCalEventIdList[nStartDay - 1] += ':'+idEvent;
			}
			
		}
	
		var strDayA = nCalYear+'-'+nCalMonth+'-01';
		strCal = '';

		var nIdNumber = nMonthOffset + 1;
		strCal += '<div id="cal_mo'+nIdNumber+'">';
		
		strCal += '<div class="cal_mo_area">';
		strCal += '<table cellspacing="0" cellpadding="0" style="width:180px"><tr>';
		strCal += '<td><div class="cal_mo_name"><a href="javascript:showCalendar('+idTopic+')">'+ aMonths[nCalMonth-1]+'</a></div></td>';
		if (fCalThisMonth) {
			strCal += '<td align="right"><a class="cal_mo_arrow" href="javascript: showCal(2);">next month &gt;</a></td>';
		} else {
			strCal += '<td align="right"><a class="cal_mo_arrow" href="javascript: showCal(1);">&lt; this month</a></td>';
		}
		strCal += '</tr></table>';
		strCal += '</div>';
		
		strCal += '<div class="cal_box">';
		var dxCALBOX = 200;
		var dyCALBOX = 130;
		var dxDAYBOX = 28;			
		var dxDAYBOXWEEKEND = 30;	
		var wDAYBOX = 25;			
		var wDAYBOXWEEKEND = 27;	
		var dyDAYBOX = 18;			
		var dyDAYNAMEBOX = 18;			
		var hDAYBOX = 15;			
		var hDAYNAMEBOX = 15;		
		strCal += '<img src="spacer.gif" width="199" height="126" alt="" border="0">';
		for (var j=0; j < 7; j++) {
			var styleExtra = ' style ="position:absolute; height:15px; top: 0px;';
			if (j == 0) {
				styleExtra += ' left:0px; border-left:0px;';
			} else { 
				styleExtra += ' left:'+(dxDAYBOXWEEKEND +((j-1)*dxDAYBOX) -1)+'px;';
			}
			if ((j == 0) || (j == 6)) {
				styleExtra += ' width:27px;';
			} else {
				styleExtra += ' width:25px;';
			}
			styleExtra += '" ';
			strCal += '<div class="cal_dayname"'+styleExtra+'>' + aDaysShort[j] + '</div>';
		}
		var iDay = 0 - nDayOneOfCal; 				
		for (var iW=0; iW<6; iW++) {
			for (var iD=0; iD <7; iD++) {
				var styleExtra = ' style ="position:absolute; height:15px;';
				if ((iD == 0) || (iD == 6)) {
					styleExtra += ' width:27px;';
				} else {
					styleExtra += ' width:25px;';
				}
				if (iD == 0) {
					styleExtra += ' left:0px; border-left:0px;';
				} else { 
					styleExtra += ' left:'+(dxDAYBOXWEEKEND +((iD-1)*dxDAYBOX) -1)+'px;';
				}
				styleExtra += ' top:'+((iW*dyDAYBOX)+dyDAYNAMEBOX)+'px;';
				styleExtra += '" ';
				
				var fInPast = false;
				if ((iDay < 0) || (iDay >= nDaysInCalMonth)) {
					strCal += '<div class="tdcalempty"'+styleExtra+'>&nbsp;</div>';
				} else {
					var fHasGeneralEvents = false;
					if (aCalGeneralEvent[iDay] != 0) {fHasGeneralEvents = true;}
					if ((fCalThisMonth) && (iDay+1 == nTodayDay)) { 
						if (fHasGeneralEvents) {
							strCal += '<div class="tdcaltodayEvents"'+styleExtra+'>';
						} else {
							strCal += '<div class="tdcaltoday"'+styleExtra+'>';
						}

					} else if ((fCalThisMonth) && (iDay+1 < nTodayDay)) { 
						if (fHasGeneralEvents) {
							strCal += '<div class="tdcalinpastEvents"'+styleExtra+'>';
						} else {
							strCal += '<div class="tdcalinpast"'+styleExtra+'>';
						}
						fInPast = true;
					} else {
						if (fHasGeneralEvents) {
							strCal += '<div class="tdcalfutureEvents"'+styleExtra+'>';
						} else {
							strCal += '<div class="tdcalfuture"'+styleExtra+'>';						
						}
					}
					var strLinkTitle = "";
					if (fHasGeneralEvents) {
						strLinkTitle += 'Click to view events for this day...';
						var strTemp = aCalGeneralEvent[iDay];
						strLinkTitle += strTemp.substring(1,strTemp.length);
						var idList = aCalEventIdList[iDay];
						strCal += '<a href="javascript:showCalendar('+idTopic+',\''+strDayA+'\')" title="View events...">';
						strCal += '<img class="cal_clock" src="bits/clock.gif" width="8" height="8" ';
						strCal += 'alt="'+strLinkTitle+'" title="'+strLinkTitle+'" border="0" onmouseover="this.src=\'bits/clock2.gif\'" onmouseout="this.src=\'bits/clock.gif\'">';					
						strCal += '</a>';
					}
					var strClass = "";
					if (fHasGeneralEvents) {
						if (fInPast) {
							strClass = 'calDayEventInPast';
						} else {
							strClass = 'calDayEvent';
						}
						strLinkTitle = '';
						if (fCanPost) {
							strLinkTitle  = 'Click to add a new event on this day...';
						}
					} else {
						if (fInPast) {
							strClass = 'calDayNoEventInPast';
							strLinkTitle = '';
						} else {
							strClass = 'calDayNoEvent';
							strLinkTitle = '';
							if (fCanPost) {
								strLinkTitle  = 'Click to add a new event on this day...';
							}
						}
					}
					strCal += '<a class="'+strClass+'" ';
					if (fEditOK && fCanPost) {
						strCal += 'href="javascript:addEvent('+idTopic+',';
					} else {
						strCal += 'href="javascript:noaddEvent(';
						strLinkTitle = "";
					}
					strCal += (iDay+1) + ',' + nCalMonth  + ',' + nCalYear + '';
					strCal += ')" title="'+ strLinkTitle +'">';
					strCal += (iDay+1);
					strCal += ' </a>';
					strCal += '</div>';
				}
				iDay++;
			}
		}
		strCal += "</div>";
		strCal += "</div>"; 
		document.writeln(strCal);
	}
	
			
	function showCal(nCal) {
		var dom1 = getDOM("cal_mo1",1);
		var dom2 = getDOM("cal_mo2",1);
		if (nCal == 1) {
			dom1.zIndex = 10;
			dom2.zIndex = 8;
		} else {
			dom1.zIndex = 8;
			dom2.zIndex = 10;
		}
	}


//
//
//	ADS
//
//

		
	function drawFrontpageAdsArea(aAds, fIsAdmin, fCanPost, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showAds('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var fIsTopic			= (idTopic != 0);
	
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 6, 'ad');
			str += '<div class="btn">';
				if (fCanPost) {
					str += '<a href="javascript:addAd('+idTopic+',1);" class="btn" title="Click to post your own...">';
						str += '<img src="bits/spacer.gif" class="img_addnew" width="31" height="25" alt="" title="Click to post your own..." border="0">';
						str += '<span class="btn_offset">';
							str += 'Add your own';
							str += getFooterDivider();
						str += '</span>';
					str += '</a>';
				}
				if (fCanPost) {
					str += '<span class="btn_offset">';
				} else {
					str += '<span class="btn">';
				}
					str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'</a>';
				str += '</span>';
			str += '</div>';
		str += '</div>';
		document.writeln(str);
		drawAdList(aAds, 0, fIsAdmin, fCanPost, 1, nFPFormat, nFPMax);
		if (nTotalAvailable > 0) { document.writeln('<div class="ad_area"><a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'...</a></div>'); }
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}		  
			  
//
//
//	FEATURED SPONSOR
//
//
	var giFPSponsorCur = 0;
	var gnFPSponsorFlipped = 0;
	var gFPSponsorIntervalId;
	var aFPSponsors = new Array();

	function drawFeaturedSponsor(strFeatured, strMPInfo, aMPProd, fIsAdmin, strSectionInfo,  idTopic, nCol) {
		var str = '';
		var htmlPix = '';
		var htmlHead = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'gotoBizCat('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var aO			 		= nFPOther.split(':');
		var nFPRotateOrder		= aO[0];
		var nFPPause			= aO[1];
		if ((nFPPause == null) || isNaN(nFPPause) || (nFPPause <= 0)) { nFPPause = 180; }

		var fPixOnTop 	= (nFPFormat == 2 || nFPFormat == 3);
		var fCompact    = (nFPFormat == 0 || nFPFormat == 2);
		var fIsTopic	= (idTopic != 0);
		var fFlipbook	= (nFPRotateOrder == 4);

		if ((strFeatured != '') && !fFlipbook) {
			var aI = strFeatured.split('|');
			var idBiz	 			= aI[0];
			var strAuthor	 		= aI[1];
			var strTitle	 		= aI[2];
			var strTitleURL 		= scrubTitleForURL(strTitle);
			var strDescriptionShort	= aI[3];
			var urlPhotoMain	 	= aI[4];
			var strCaptionMain	 	= aI[5];
			var strEmail	 		= aI[6];
			var urlWebsite	 		= aI[7];
			var expireDays	 		= aI[8];
			var VendorLevel			= aI[9];
			var VendorOptions		= aI[10];
			var strDescription		= aI[11];
			
			var cchMaxSp = 400;
			if (strDescription == '') { strDescription = strDescriptionShort; }
			strDescription = shortenText(strDescription,cchMaxSp);
			
			var strMPOffering   = 'Offering';
			if (VendorOptions != '') {
				aVO = VendorOptions.split(":");
				var fVOPl 		 = aVO[0];
				var fVOOpt		 = aVO[1];
				var strVOffering = aVO[2]; 
				if (strVOffering != '') { strMPOffering = strVOffering; }
			}
	
			str += '<div id="fp_sponsor">';
				str += '<div class="fp_sponsor_area" style="margin-bottom:18px;">'
				
					htmlHead += '<div class="sponsor_head">';
						htmlHead += strFPTitle;
						if (fIsTopic) { htmlHead += getEdDot(fIsAdmin,107); }
						else		  { htmlHead += getEdDot(fIsAdmin,7);   }
						htmlHead += '<div class="fp_sponsor_btn">';
							htmlHead += '<a href="javascript:javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All</a> ';
						htmlHead += '</div>';
					htmlHead += '</div>';
					
					// picture
					if (urlPhotoMain != "") {
						var dxPix 	  = '';
						var urlThumb  = '';
						if (nCol != 2) { 
							dxPix = 'width="220"'; 
							urlThumb = 'thumb_'; 
						}
						htmlPix += '<a href="javascript:showSponsor('+idBiz+',\''+strTitleURL+'\')" class="bz_title" title="More...">';
						htmlPix += '<img src="biz/biz_'+idBiz+'/'+urlThumb+urlPhotoMain+'" alt="" '+dxPix+' border="1">';
						htmlPix += '</a>';
					}

					if (fPixOnTop) { str += htmlPix; str += htmlHead; }
					else 		   { str += htmlHead; str += htmlPix; }

					// title
					str += '<div class="bz_title">';
						str += '<a class="bz_title" href="javascript:showSponsor('+idBiz+',\''+strTitleURL+'\');" title="Click for more info...">'; 
						str += strTitle;
						str += '</a>'; 
					str += '</div>';
					
					if (fCompact) { str += '<div id="fp_biz_info">';}
						// text
						str += '<div class="bz_text">'+strDescription+'</div>';

						if (VendorLevel > 0) {
							var strMP = '';
							var nP = aMPProd.length - 1;
							if (nP > 0) {
								for (var m = 0; m < nP; m++) {
									var aMP = aMPProd[m].split("|");
									var idMPMem		 	= aMP[0];
									var idMPProd		= aMP[1];
									var strMPProd		= aMP[2];
									var strVNameURL	= scrubTitleForURL(strMPProd);
									strMP += ' &middot <a href="javascript:showProduct('+idMPProd+',\''+strVNameURL+'\')" title="View details..." class="bz_mplist">'+strMPProd+'</a>';
								}
								str += '<div class="bz_mplist"><b>'+strMPOffering+'</b> ';
								str += strMP;
								str += '</div>';
							}
						}

						// footer
						str += '<div class="bz_ftr">';
							fShowDivider = false;
							str += '<a class="bz_ftr" href="javascript:showSponsor('+idBiz+',\''+strTitleURL+'\');" title="Click for more info...">more info</a>'; 
							fShowDivider = true;
							if (strEmail != "") {
								if (fShowDivider) { str += getFooterDivider(); }
								str += '<a class="bz_ftr" href="' + createMailString(strEmail) + '">email</a>';
								fShowDivider = true;
							} 
							if (urlWebsite != "") {
								if (fShowDivider) { str += getFooterDivider(); }
								str += '<a class="bz_ftr" ';
								str += getWebsiteHref(urlWebsite);
								str += '>website</a>';
								fShowDivider = true;
							} 
							if (fIsAdmin) {
								if (fShowDivider) { str += getFooterDivider(); }
								str += '<a class="bz_ftr" href="javascript:editBizPlus('+ idBiz + ')">edit</a>';
								fShowDivider = true;
								if (fShowDivider) { str += getFooterDivider(); }
								str += '<a class="bz_ftr" href="JavaScript:sponsorBiz('+ idBiz + ')">'+expireDays+'</a>';
								fShowDivider = true;
							} 
						str += '</div>'; // end biz_ftr
					if (fCompact) { str += '</div>'; } 
				str += '</div>'; // end sponsor_area
			str += '</div>'; // end sponsor
			document.writeln(str); str = '';
		}
	
		// flipbook
		if ((strFeatured != '') && fFlipbook) {
			aFPSponsors = strFeatured.split('::');
			var aS = aFPSponsors[0].split('|');
			var idBiz	 			= aS[0];
			var strTitle	 		= aS[1];
			var strTitleURL 		= scrubTitleForURL(strTitle);
			var urlPhotoMain	 	= aS[2];
	
			str += '<div id="fp_sponsor">';
				str += '<div class="fp_sponsor_area" style="margin-bottom:18px;">'
					htmlHead += '<div class="sponsor_head">';
						htmlHead += strFPTitle;
						if (fIsTopic) { htmlHead += getEdDot(fIsAdmin,107); }
						else		  { htmlHead += getEdDot(fIsAdmin,7);   }
						htmlHead += '<div class="fp_sponsor_btn">';
							htmlHead += '<a href="javascript:javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All</a> ';
						htmlHead += '</div>';
					htmlHead += '</div>';
					htmlPix += '<div id="fp_sponsor_flip">';
						if (urlPhotoMain != "") {
							var dxPix 	  = '';
							var urlThumb  = '';
							if (nCol != 2) { 
								dxPix = 'width="220"'; 
								urlThumb = 'thumb_'; 
							}
							htmlPix += '<a href="javascript:showSponsor('+idBiz+',\''+strTitleURL+'\')" class="bz_title" title="More about '+strTitle+'...">';
							htmlPix += '<img src="biz/biz_'+idBiz+'/'+urlThumb+urlPhotoMain+'" alt="More about '+strTitle+'..." '+dxPix+' border="1">';
							htmlPix += '</a>';
						}
					htmlPix += '</div>';
					if (fPixOnTop) { str += htmlPix; str += htmlHead; }
					else 		   { str += htmlHead; str += htmlPix; }
				str += '</div>'; // end sponsor_area
			str += '</div>'; // end sponsor
			document.writeln(str); str = '';
	
			// start flip timer
			if (aFPSponsors.length > 1) {
				gFPMxIntervalId = setInterval('flipFPSponsor(aFPSponsors,'+fIsAdmin+','+fPixOnTop+','+nCol+','+idTopic+')',(nFPPause*1000), idTopic);
			}
		}
	}
	
	function flipFPSponsor(aSps, fIsAdmin, fPixOnTop, nCol, idTopic) {
		giFPSponsorCur++;
		gnFPSponsorFlipped++;
		if (giFPSponsorCur >= aSps.length) { giFPSponsorCur = 0; }
		var aS  = aSps[giFPSponsorCur].split("|");
		var idBiz	 			= aS[0];
		var strTitle	 		= aS[1];
		var strTitleURL 		= scrubTitleForURL(strTitle);
		var urlPhotoMain	 	= aS[2];
		var htmlPix = '';
		if (urlPhotoMain != "") {
			var dxPix 	  = '';
			var urlThumb  = '';
			if (nCol != 2) { 
				dxPix = 'width="220"'; 
				urlThumb = 'thumb_'; 
			}
			htmlPix += '<a href="javascript:showSponsor('+idBiz+',\''+strTitleURL+'\')" class="bz_title" title="More about '+strTitle+'...">';
			htmlPix += '<img src="biz/biz_'+idBiz+'/'+urlThumb+urlPhotoMain+'" alt="More about '+strTitle+'..." '+dxPix+' border="1">';
			htmlPix += '</a>';
		}
		var d = getDOM("fp_sponsor_flip");
		d.innerHTML = htmlPix;
		
		if (gnFPSponsorFlipped >= 100) {
			clearInterval(gFPMxIntervalId);
		}
	}	  

//
//
//	ARTICLES
//
//

	function drawFrontpageArticlesArea(aArticles, fIsAdmin, fCanPost, strSectionInfo, nATypes, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var aFPOther			= aI[4].split(':');
			var nWithPix 		= parseInt(aFPOther[0]);
			var cchMax 			= parseInt(aFPOther[1]);
			var nFPOrder		= parseInt(aFPOther[2]);
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showArticlesPage('+idTopic+',0)';
		var nTotalAvailable		= aI[10];

		var fIsTopic			= (idTopic != 0);

			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 8, 'ar');
			str += '<div class="btn">';
				if (fCanPost) {
					str += '<a href="javascript:addArticle('+idTopic+',1);" class="btn" title="Click to post your own...">';
						str += '<img src="bits/spacer.gif" class="img_addnew" width="31" height="25" alt="" title="Click to post your own..." border="0">';
						str += '<span class="btn_offset">';
							str += 'Add your own';
							str += getFooterDivider();
						str += '</span>';
					str += '</a>';
				}
				if (fCanPost) {
					str += '<span class="btn_offset">';
				} else {
					str += '<span class="btn">';
				}
					str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'</a>';
				str += '</span>';
			str += '</div>';
		str += '</div>';
		document.writeln(str);
		drawTopArticles(aArticles, nFPFormat, nFPMax, nWithPix, cchMax, nCol, idTopic, nFPOrder);
		str = '';
		if ((nTotalAvailable >= aArticles.length)) {
			str += '<div class="btn_right">';
				str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'...</a>';
			str += '</div>';
		}
		document.writeln(str);
		document.writeln('<div  class="fp_vertspacer">&nbsp;</div>');
	}

	function drawTopArticles(aArticles, nFormat, nMax, nWithPix, cchMax, nCol, idTopic, nFPOrder) {
		var nArticles = aArticles.length - 1;
		if (nArticles > nMax) { nArticles = nMax; }
		var str = '';
		var fAboveFold = true;
		var strCurCat = '';
		var fShowByDate = true;
		var fShowByCat  = false;
		if (nFPOrder == 1) { 
			fShowByDate = false;
			fShowByCat	= true; 
		}
		var cWithPix = 0;

		for (var i = 0; i < nArticles; i++) {
			var aA = aArticles[i].split("|");
			var idArticle		= aA[0];
			var PostingDate		= aA[1];
			var strAuthor 		= aA[2];
			var strTitle 		= aA[3];
			var strTitleUrl		= scrubTitleForURL(strTitle);
			var strDescription	= aA[4];
			var strEmail 		= aA[5];
			var urlWebsite 		= aA[6];
			var nModifiedDays	= aA[7];
			var urlPix1			= aA[8];
			var strCap1			= aA[9];
			var strLegacyId		= aA[10];
			var strCatName		= aA[11];
			var nAPnuts			= aA[12];
			var fShowPnut		= false;
			if (nAPnuts > 0) { fShowPnut = true; }
						
			// New category header?
			if (fShowByCat && (strCatName != strCurCat)) {
				str += '<div class="fp_ar_lhead">'+strCatName+'</div>' ;
				strCurCat = strCatName;
				cWithPix = 0;
				fAboveFold = true;
			}
			
			//	Enough photos shown yet?
			if (cWithPix == nWithPix) {
				if (fShowByDate) {
					if (nWithPix > 0) {
						// -- "other articles" seperator
						str += '<div class="fp_ar_lhead">More</div>' ;
					}
					fAboveFold = false;
				}
				if (fShowByCat) {
					fAboveFold = false;
				}
			}
			cWithPix++;
			
			var strCapEx = '';
			if ((fAboveFold) && (urlPix1 != '')){ strCapEx = strCap1; }
			str += '<div class="fp_ar_area">';
				str += '<a href="javascript:showArticles('+idTopic+','+idArticle+',\''+strTitleUrl+'\')" title="'+strCapEx+' (Click to view the entire article...)">';
					// -- PIX
					if (fAboveFold) {
						//	-- show pix for articles above fold
						if (urlPix1 != '') {
							str += '<div class="ar_pix_fp">';
								var strPixDir = "articles_"+idArticle;
								var dxPix 	  = 300;
								if (nCol != 2) { dxPix = 220; }
								if (strLegacyId != '') { strPixDir = "ar"+strLegacyId.split(":").join("");	}
								
								str += '<img class="ar_pix_fp" src="articles/'+strPixDir+'/'+urlPix1+'" border="1" width="'+dxPix+'" alt="'+strCap1+'">';
							str += '</div>';
						}
					}
					// -- DATE
					if (nFormat == 1) {
						str += '<div class="ar_date">';
							if (fShowByDate && (nATypes > 1)) {
								str += strCatName+' &middot ';
							}
							str += PostingDate;
						str += '</div>';
					}
					// -- TITLE
					str += '<div class="ar_title">';
						str += strTitle;
						if (nModifiedDays <= gnModifiedDaysNew ) { str += '<img src="bits/updated2.gif" width="11" height="11" alt="New or Updated" border="0">';					}
						// -- COMMENTS
						if (fShowPnut && (!fAboveFold) && (nFormat != 1)) {
							str += ' <span class="btn"><img src="bits/atools_peanut_sm.gif" width="14" height="12" alt="reader comments" title="reader comments" border="0">'+nAPnuts+'</span>';
							fShowPnut = false;
						}
					str += '</div>';
					// -- TEXT
					if (fAboveFold || (nFormat == 1)) {
						str += '<div class="fp_ar_text">';
							str += shortenText(strDescription, cchMax);
							if (fShowPnut) { str += ' <img src="bits/atools_peanut_sm.gif" width="14" height="12" alt="reader comments" title="reader comments" border="0">'+nAPnuts+''; }
						str += '</div>';
					}
				str += '</a>';
			str += '</div>'; // end fp_ar_area
			document.writeln(str);
			str = '';
		}
		return str;
	}


//
//
//	WEATHER
//
//
	var gnWeatherTabs = 0;
	var gnDefaultWeatherTab = 1; 
	
	function showWeather(nW) {
		if (!((nW >= 1) && (nW <= 4))) {
			nW = gnDefaultWeatherTab;
			if (!((nW >= 1) && (nW <= 4))) {
				nW = 1;
			}
		}
		
		for (var i = 1; i <= gnWeatherTabs; i++){
			eval('var dom = getDOM("wea_'+i+'",1)');
			eval('var domTab = getDOM("wea_tab'+i+'",1)');
			if (nW == i) {
				dom.zIndex = 30;
				domTab.zIndex = 31;			
			} else {
				dom.zIndex = (28 - (i*2));
				domTab.zIndex = (29 - (i*2));
			}
		}
		SetCookieYear("wtabs",nW);
	}
			
	function drawWeatherArea(strWeatherData, strWeatherOptions, aWeatherSources, fIsAdmin, nCol) {
		var str = '';
		var aW 		= strWeatherData.split('|');
		var aWOpt 	= strWeatherOptions.split('|');
		// tide options
		var strTTitle			= aWOpt[0];
		var nTScrapeVer			= aWOpt[1];
		var urlTScrape			= aWOpt[2];
		var urlTLink			= aWOpt[3];
		var fShowT				= aWOpt[4];
		if ((fShowT == 1) && (nTScrapeVer > 0)) {
			for (var s = 0; s < aWeatherSources.length - 1; s++) {
				var aS = aWeatherSources[s].split('|');
				var idS   = aS[0];
				var urlS  = aS[1];
				if (idS == nTScrapeVer) { urlTScrape = urlS; break; }
			}
		}
		// weather		
		var strWTitle			= aWOpt[5];
		var nWScrapeVer			= aWOpt[6];
		var urlWScrape			= aWOpt[7];
		var urlWLink			= aWOpt[8];
		var fShowW				= aWOpt[9];
		if ((fShowW == 1) && (nWScrapeVer > 0)) {
			for (var s = 0; s < aWeatherSources.length - 1; s++) {
				var aS = aWeatherSources[s].split('|');
				var idS   = aS[0];
				var urlS  = aS[1];
				if (idS == nWScrapeVer) { urlWScrape = urlS; break; }
			}
		}
		// sun
		var strSTitle			= aWOpt[10];
		var nSScrapeVer			= aWOpt[11];
		var urlSScrape			= aWOpt[12];
		var urlSLink			= aWOpt[13];
		var fShowS				= aWOpt[14];
		if ((fShowS == 1) && (nSScrapeVer > 0)) {
			for (var s = 0; s < aWeatherSources.length - 1; s++) {
				var aS = aWeatherSources[s].split('|');
				var idS   = aS[0];
				var urlS  = aS[1];
				if (idS == nSScrapeVer) { urlSScrape = urlS; break; }
			}
		}
		// moon
		var strMTitle			= aWOpt[15];
		var nMScrapeVer			= aWOpt[16];
		var urlMScrape			= aWOpt[17];
		var urlMLink			= aWOpt[18];
		var fShowM				= aWOpt[19];
		if ((fShowM == 1) && (nMScrapeVer > 0)) {
			for (var s = 0; s < aWeatherSources.length - 1; s++) {
				var aS = aWeatherSources[s].split('|');
				var idS   = aS[0];
				var urlS  = aS[1];
				if (idS == nMScrapeVer) { urlMScrape = urlS; break; }
			}
		}
		// other
		var nDefaultTab			= aWOpt[20]; gnDefaultWeatherTab 	= nDefaultTab;
		var strLocation			= aWOpt[21];
		// overall status
		var fOn					= aWOpt[22];
		
		
		var nCurTab				= 1;
		var nCurBox				= 1;
		var fShowAny 			= false;
		if ( fOn == 1 && ((fShowT > 0) || (fShowW > 0) || (fShowS > 0) || (fShowM > 0))) { fShowAny = true; }
		// any data for this day?
		if (aW.length <= 6) { 
			// no data so populate array with empty values
			for (var w = 0; w < 20; w++) { aW[w] = ''; }			
		}

		if (fShowAny) {
			str += '<div id="fp_wea">';
				// -- create tabs 
				if (fShowT == 1) {
					str += '<div id="wea_tab'+nCurTab+'"><div class="wea_tabtext"><a href="javascript: showWeather('+nCurTab+');">'+strTTitle+'</a></div><img name="imgcaltab2" src="bits/weatab.gif" width="50" height="15" alt="" border="0"></div>';
					nCurTab++;
				}
				if (fShowW == 1) {
					str += '<div id="wea_tab'+nCurTab+'"><div class="wea_tabtext"><a href="javascript: showWeather('+nCurTab+');">'+strWTitle+'</a></div><img name="imgcaltab2" src="bits/weatab.gif" width="50" height="15" alt="" border="0"></div>';
					nCurTab++;
				}
				if (fShowM == 1) {
					str += '<div id="wea_tab'+nCurTab+'"><div class="wea_tabtext"><a href="javascript: showWeather('+nCurTab+');">'+strMTitle+'</a></div><img name="imgcaltab2" src="bits/weatab.gif" width="50" height="15" alt="" border="0"></div>';
					nCurTab++;
				}
				if (fShowS == 1) {
					str += '<div id="wea_tab'+nCurTab+'"><div class="wea_tabtext"><a href="javascript: showWeather('+nCurTab+');">'+strSTitle+'</a></div><img name="imgcaltab2" src="bits/weatab.gif" width="50" height="15" alt="" border="0"></div>';
					nCurTab++;
				}
				// admin button
				if (fIsAdmin) {
					str += '<div id="wea_tab'+nCurTab+'">';
					str += getEdDot(fIsAdmin,20);
					str += '</div>';
				}
				gnWeatherTabs = nCurTab - 1;
				document.writeln(str);
				
				// -- create boxes
				str = '';
				if (fShowT == 1) {
					var strDate		= aW[0];
					var strT1 		= aW[1];
					var strT2 		= aW[2];
					var strT3 		= aW[3];
					var strT4 		= aW[4];
					var strT5 		= aW[5];
					var nTideScale	= aW[6];
					var tSunrise	= aW[13];
					var tSunset		= aW[14];
					str += '<div id="wea_'+nCurBox+'">';
					str += getTideHTML(strDate, strT1, strT2, strT3, strT4, strT5, nTideScale, tSunrise, tSunset, strLocation, urlTLink, urlTScrape);
					str += '</div>';
					nCurBox++;
				}
				if (fShowW == 1) {
					var strDate		= aW[0];
					var strW1 		= aW[7];
					var strW2 		= aW[8];
					var strW3 		= aW[9];
					var strW4 		= aW[10];
					var strW5 		= aW[11];
					var nTempScale	= aW[12];
					str += '<div id="wea_'+nCurBox+'">';
					str += getWeatherHTML(strDate, strW1, strW2, strW3, strW4, strW5, nTempScale, urlWLink, urlWScrape);
					str += '</div>';
					nCurBox++;
				}
				if (fShowM == 1) {
					var strDate		= aW[0];
					str += '<div id="wea_'+nCurBox+'">';
					str += getMoonHTML(strDate,urlMLink, urlMScrape);
					str += '</div>';
					nCurBox++;
				}
				if (fShowS == 1) {
					var strDate		= aW[0];
					var tSunrise	= aW[13];
					var tSunset		= aW[14];
					str += '<div id="wea_'+nCurBox+'">';
					str += getSunHTML(strDate, tSunrise, tSunset, urlSLink, urlSScrape);
					str += '</div>';
					nCurBox++;
				}
				
			str += '</div>'; // end "weather"
			document.writeln(str);
			document.writeln('<img src="spacer.gif" width="3" height="158" alt="" border="0"><br>');
		}
	}
	
	//
	// -- TAB: Tides
	//
	function getTideHTML(strDate, strT1, strT2, strT3, strT4, strT5, nTideScale, tSunrise, tSunset, strLocation, urlTLink, urlTScrape) {
		var nData 		= 0;
		if 		(strT5 != '') { nData = 5; }
		else if (strT4 != '') { nData = 4; }
		else if (strT3 != '') { nData = 3; }
		else if (strT2 != '') { nData = 2; }
		else if (strT1 != '') { nData = 1; }
		var fTideToday  = false;
		if ((strDate != '') && (nData > 0)) { fTideToday = true; }

		// outer table
		var strHTML 	= "";
		strHTML += '<table cellspacing="0" cellpadding="0" bgcolor="white" width="210">';
		strHTML += '<tr><td class="wea_td_box">';
			// inner table
			strHTML += '<table cellspacing="0" cellpadding="0" border="0">';
			if (fTideToday) {
				strHTML += '<tr><td>&nbsp;</td><td align="left" colspan="5" class="tideTitle"><i>'+strLocation+' estimates</i></td></tr>';
				var htmlImages 	= '<tr><td>&nbsp;</td>';
				var aScale		= new Array("feet","meters");
				var aScaleSymbol = new Array("&acute;","m");
				var htmlH 		= '<tr><td class="tdtideLabel">&nbsp;'+aScale[nTideScale]+'</td>';
				var htmlAt 		= '<tr><td class="tdtideLabel">&nbsp;about</td>';
				var aT 			= new Array();
				for (var i = 1; i <= nData; i++) {
					eval("aT = strT"+i+".split('&&')");
					var tDay  		= aT[0]; 		// '2004-08-27'
					var tTime 		= aT[1];		// '02:04'
					var nFeet 		= rnd(aT[2],0);	// '13.27'
					var strLevel 	= aT[3];		// 'High'
					
					var hpxBar 		= 50; // pixels for tide bar chart = 15ft or 3px/feet
					var hpxFoot 	=  2; // 3px/feet
					var hpxSpacer 	= hpxBar - (nFeet * hpxFoot);
					var hpxTide 	= hpxBar - hpxSpacer;
					// tide bars -- spacer on top and then blue bar below
					var iDayPhase = getTimeOfDay(tTime,tSunrise,tSunset);
					if ((iDayPhase == 0) || (iDayPhase == 5)) {
						htmlImages += '<td class="tdtidebar2" width="33">';
					} else if ((iDayPhase == 1) || (iDayPhase == 4)) {
						htmlImages += '<td class="tdtidebar3" width="33">';
					} else {
						htmlImages += '<td class="tdtidebar" width="33">';
					}
					htmlImages += '<img src="spacer.gif" width="10" height="'+hpxSpacer+'" alt="" border=""><br>'
					htmlImages += '<img src="bits/tidebartop.gif" width="30" height="3" alt="" border="0"><br>';
					htmlImages += '<img src="bits/tidebar.gif" width="30" height="'+hpxTide+'" alt="" border="0"></td>';
					// height and time
					htmlH += '<td class="tdtidefoot">'+ nFeet +'<span class="weawee">'+aScaleSymbol[nTideScale]+'</span></td>';
					htmlAt += '<td class="tdtidehour">'+ getApproxHour(tTime) +'</td>';
				}
				for (var i = (nData+1); i <= 5; i++) {
					htmlImages 	+='<td><img src="spacer.gif" width="30" height="3" alt="" border=""></td>';
					htmlH 		+='<td><img src="spacer.gif" width="30" height="3" alt="" border=""></td>';
					htmlAt 		+='<td><img src="spacer.gif" width="30" height="3" alt="" border=""></td>';
				
				}
				htmlImages += 	'</tr>';
				htmlH += 		'</tr>';
				htmlAt += 		'</tr>';
				strHTML += 	htmlImages + htmlH + htmlAt;
			} else {
				strHTML += '<tr><td align="center" colspan="6" class="tideNotAvailable"><br><br>not available for today yet...<br><br><br></td></tr>';
			}
			// fixed width using spacer gif
			strHTML +=  '<tr><td align="right" colspan="6"><img src="spacer.gif" width="219" height="1" alt="" border="0"><br>'
			if (urlTLink != '') {
				strHTML +=  '<a class="wealink" ';
				strHTML += getWebsiteHref(urlTLink);
				strHTML += '>Get more tides...&nbsp;&nbsp;</a>';
			} else {
				strHTML +=  '<a class="wealink" ';
				strHTML += getWebsiteHref(urlTScrape);
				strHTML += '>Get more tides...&nbsp;&nbsp;</a>';			
			}
			strHTML += '</td></tr></table>';
		// end outer table
		// fixed height using spacer gif	
		strHTML += '</td><td><img src="spacer.gif" width="2" height="132" alt="" border="0"></td></tr></table>';
		return strHTML;
	}
	
	function getTimeOfDay(tIn,tSunrise,tSunset) {
		var i;
		var aT = tIn.split(":");
		tIn = (getInt(aT[0]) * 60) + getInt(aT[1]);
		aT = tSunrise.split(":");
		var tRise = (getInt(aT[0]) * 60) + getInt(aT[1]);
		aT = tSunset.split(":");
		var tSet = (getInt(aT[0]) * 60) + getInt(aT[1]);
		// night or dusk?
		if 			(tIn < tRise - 45) 	{ i = 0; } //pre-dawn
		else if 	(tIn < tRise + 45) 	{ i = 1; } //dawn
		else if 	(tIn < (12*60)) 	{ i = 2; } //morning
		else if 	(tIn < tSet - 45) 	{ i = 3; } //afternoon
		else if 	(tIn < tSet + 45) 	{ i = 4; } //dusk
		else 							{ i = 5; } //night
		return i;
	}
	function getApproxHour(timeIn) {
		var aT = timeIn.split(":");
		var h = getInt(aT[0]);
		var m = getInt(aT[1]);
		if (m >= 30) { h++; }
		if (h > 12) { 
			h -= 12; 
			h = h + 'p'; 
		} else {
			if (h == 0) { h = 12;}
			h = h + 'a';
		}
		return h;
	}
	
	//
	// -- TAB: Weather
	//
	function getWeatherHTML(strDate, strW1, strW2, strW3, strW4, strW5, nTempScale, urlWLink, urlWScrape) {
		var nDays 		= 0;
		if 		(strW5 != '') { nDays = 5; }
		else if (strW4 != '') { nDays = 4; }
		else if (strW3 != '') { nDays = 3; }
		else if (strW2 != '') { nDays = 2; }
		else if (strW1 != '') { nDays = 1; }
		if (nDays > 4) { nDays = 4; }
		var fWeatherToday  = false;
		if ((strDate != '') && (nDays > 0)) { fWeatherToday = true; }

		var htmlEmpty 	= 	"<tr><td>&nbsp;</td></tr>";
		var htmlNoData 	= 	'<tr><td align="center" class="tideNotAvailable">not available for today yet...</td></tr>';
		var htmlDays 	= 	"<tr><td>&nbsp;</td>";
		var htmlImages 	= 	"<tr><td>&nbsp;</td>";
		var htmlRain 	= 	"<tr><td class='tdweaLabel'>&nbsp;rain</td>";
		var htmlHigh 	= 	"<tr><td class='tdweaLabel'>&nbsp;high</td>";
		var htmlLow 	= 	"<tr><td class='tdweaLabel'>&nbsp;low</td>";
		var tNow 	= new Date();
		tNow 		= getNow();
		var iCurDay = tNow.getDay();
		
		var strHTML 	= "";
		strHTML += '<table cellspacing="0" cellpadding="0" bgcolor="white" width="210">';
		strHTML += '<tr><td class="wea_td_box">';
			// inner table
			strHTML += '<table cellspacing="0" cellpadding="1" >';
			var aT 		= new Array();
			var aScale	= new Array("C","F");
			var strScale = aScale[nTempScale];
			for (var i = 1; i <= nDays; i++) {
				eval("aT = strW"+i+".split('&&')"); //icon&&rain%&&high temp&&low temp
				var strDayName		= aT[0]; 		
				var strIcon			= aT[1]; 		
				var strWDesc 		= aT[2];		
				var nLow	 		= aT[3];	
				var nHigh		 	= aT[4];		
				var nRainPercent 	= aT[5];		
				htmlDays += '<td class="tdweaDay">';
				if (strDayName.length > 0) { 
					if ((strDayName.length > 3) && (strDayName != 'Today')) { htmlDays += strDayName.substring(0,3); } 
					else { htmlDays += strDayName; }
				}
				htmlDays += '</td>';
				htmlImages += '<td align="center">';
					htmlImages += '<a ';
					htmlImages += getWebsiteHref(urlWLink);
					htmlImages += ' title="'+strWDesc+': click for details...">';
					htmlImages += '<img src="bits/w-'+strIcon+'.gif" width="40" height="30" alt="'+strWDesc+': click for details..." border="0">';
					htmlImages += '</a>';
				htmlImages += '</td>';
				htmlRain += '<td class="tdweaRain">';
					if (nRainPercent != '?') { htmlRain += nRainPercent +'<span class="weawee">%</span>' ;}
				htmlRain += '</td>';
				htmlHigh += '<td class="tdweaHigh">';
					if (nHigh != '?') {htmlHigh +=  nHigh +'<span class="weawee">&deg;'+strScale+'</span>'; }
				htmlHigh += '</td>';
				htmlLow  += '<td class="tdweaLow">';
					 if (nLow != '?') {htmlLow  +=  nLow +'<span class="weawee">&deg;'+strScale+'</span>'; }
				htmlLow  +=  '</td>';
			}
			htmlDays += 	'</tr>';
			htmlImages += 	'</tr>';
			htmlRain += 	'</tr>';
			htmlHigh += 	'</tr>';
			htmlLow += 		'</tr>';
			if (fWeatherToday) {
				strHTML += 	htmlDays + htmlImages + htmlRain + htmlHigh + htmlLow;
			} else {
				strHTML += 	htmlEmpty + htmlNoData + htmlEmpty + htmlEmpty + htmlEmpty;
			}
			// fixed width using spacer gif
			strHTML +=  '<tr><td align="right" colspan="'+(nDays+1)+'"><img src="spacer.gif" width="217" height="1" alt="" border="0"><br>'
			if (urlWLink != '') {
				strHTML +=  '<a class="wealink" ';
				strHTML += getWebsiteHref(urlWLink);
				strHTML += '>Get full weather report...&nbsp;&nbsp;</a>';
			} else {
				strHTML +=  '<a class="wealink" ';
				strHTML += getWebsiteHref(urlWScrape);
				strHTML += '>Get full weather report...&nbsp;&nbsp;</a>';
			}
			strHTML += '</td></tr></table>';
		// fixed height using spacer gif	
		strHTML += '</td><td><img src="spacer.gif" width="1" height="132" alt="" border="0"></td></tr></table>';
		return strHTML;
	}
		
	//
	// -- TAB: Sun
	//
	function getSunHTML(strDate, tSunrise, tSunset, urlSLink, urlSScrape) {
		var str = "";
		// outertable 
		str += '<table cellspacing="0" cellpadding="3" bgcolor="white" width="210" border="0">';
			str += '<tr><td class="wea_td_box">';
				// inner table
				str += '<table cellspacing="0" cellpadding="1" border="0">';
					str += '<tr>';
						str += '<td class="tdsuninfo" bgcolor="black" align="center">';
							str += '<img src="spacer.gif" width="3" height="1" alt="" border="0"><br>';
							str += '<a ';
							str += getWebsiteHref(urlSScrape);
							str += ' alt="'+urlSScrape+'"><img src="data/sun.gif" height="90" width="90" border="0" title="'+urlSScrape+'"></a>';
						str += '</td>';
						str += '<td class="tdsuninfo" align="center">';
							str += '<img src="spacer.gif" width="70" height="1" alt="" border="0"><br>';
							if (tSunrise != '') {
								str += '<span class="sunbig">';
	                			str += getAMPM(tSunrise,0);
								str += '</span><span class="sunwee"> rise<br><br></span>';
							}
							if (tSunset != '') {
								str += '<span class="sunbig">';
				                str += getAMPM(tSunset,0);
								str += '</span><span class="sunwee"> set</span>';
							}
						str += '</td>';
						str += '<td class="tdsuninfo" ><img src="spacer.gif" width="1" height="106" alt="" border="0"></td>';
					str += '</tr>';
					str += '<tr>';
						str += '<td align="right" colspan="3">';
							str += '<div style="font-size:9px;">';
							if (urlSLink != '') {
								str += '<a class="wealink" ';
								str += getWebsiteHref(urlSLink);
								str += '>Get more sun info...</a><br>';
							} else {
								str += '<a class="wealink" ';
								str += getWebsiteHref(urlSScrape);
								str += '>Get more sun info...</a><br>';
							}
							str += '<img src="spacer.gif" width="211" height="1" alt="" border="0"></div>';
						str += '</td>';
					str += '</tr>';
				str += '</table>';
		str += '</td></tr></table>';
		return str;
	}
	
	function getAMPM(timeIn, fAMType) {
		var aT = timeIn.split(":");
		var h = getInt(aT[0]);
		var m = aT[1];
		var strReturn;
		var strAM = "am";
		var strPM = "pm";
		if (fAMType == "0") {
			strAM = "";
			strPM = "";
		}
		//switch to am/pm
		if (h > 12) { 
			h -= 12; 
			strReturn = h + ":" + m + " "+strPM; 
		} else {
			if (h == 0) { h = 12;}
			strReturn = h + ":" +  m + " "+strAM;
		}
		return strReturn;
	}
		
	//
	// -- TAB: Moon
	//
	function getMoonHTML(strDate, urlMLink, urlMScrape){
		var strHTML = "";
		var today = new Date();
		today = getNow();
		var phasePercent = moonPhPer(today);
		var phName = moonPhase(phasePercent);
		var fullness;
		var daysTillNew;
		var daysTillFull;
		if ( phasePercent <= 50.0 ) {
				//new moon (0%) waxing to full moon (50%)
				fullness = phasePercent * 2;
				daysTillFull = (1-(fullness/100))*(synodic/2);
				daysTillNew = daysTillFull + (synodic/2);
		} else {
				//full moon (50%) waning to new moon (100%)
				fullness = ( 100 - phasePercent ) * 2;
				daysTillFull = synodic - ((1-(fullness/100))*(synodic/2));
				daysTillNew = daysTillFull - (synodic/2);
		}
		var newDate = new Date(today.valueOf() + (daysTillNew * msPerDay));
		var fullDate = new Date(today.valueOf() + (daysTillFull * msPerDay));

		// outertable
		//var nCols = 1;
		strHTML += '<table cellspacing="0" cellpadding="3" bgcolor="white" width="210">';
		strHTML += '<tr><td class="wea_td_box">';
			// inner table
			strHTML += '<table cellspacing="0" cellpadding="1" border="0">';
			strHTML += '<tr>';
				strHTML += '<td class="tdmooninfo" bgcolor="black" align="center">';
					strHTML += '<img src="spacer.gif" width="3" height="1" alt="" border="0"><br>';
					strHTML += '<a ';
					strHTML += getWebsiteHref(urlMScrape);
					strHTML += ' alt="'+urlMScrape+'"><img src="data/moon.gif" alt="" border="0" title="'+urlMScrape+'"></a>';
				strHTML += '</td>';
				strHTML += '<td class="tdmooninfo" align="center">';
					strHTML += '<img src="spacer.gif" width="100" height="1" alt="" border="0"><br>';
					strHTML += '<span class="tdmooninfo">';
					// moon info
					strHTML += phName +'<BR>' + rnd(fullness,0)+'%<br>'; //" ~"+ rnd(fullness,0) + "%
					var strNew = "New on "  + aMonthsShort[newDate.getMonth()] + ' ' + newDate.getDate();
					var strFull = "Full on " + aMonthsShort[fullDate.getMonth()] + ' ' + fullDate.getDate();
					if (newDate < fullDate) {
						strHTML +=  strNew + '<br>' + strFull;
					} else {
						strHTML +=  strFull + '<br>' + strNew;			
					}
					strHTML += '<br><br></span>';
				strHTML += '</td>';
				strHTML += '<td class="tdmooninfo" ><img src="spacer.gif" width="1" height="106" alt="" border="0"></td>';
			strHTML += '</tr>';
			strHTML += '<tr>';
				strHTML += '<td align="right" colspan="3">';
					strHTML += '<div style="font-size:9px;">';
					if (urlMLink != '') {
						strHTML += '<a class="wealink" ';
						strHTML += getWebsiteHref(urlMLink);
						strHTML += '">Get more moon info...</a><br>';
					} else {
						strHTML += '<a class="wealink" ';
						strHTML += getWebsiteHref(urlMScrape);
						strHTML += '>Get more moon info...</a><br>';
					}
					strHTML += '<img src="spacer.gif" width="211" height="1" alt="" border="0"></div>';
				strHTML += '</td>';
			strHTML += '</tr>';
			strHTML += '</table>';
		strHTML += '</td>';
		strHTML += '</tr>';
		strHTML += '</table>';
		return strHTML;
	}

	// MOON CALCULATIONS
	var synodic = 29.53058867;     
	var msPerDay = 24 * 60 * 60 * 1000;   

	function rnd(val, prec) {
	  val = val * Math.pow(10,prec);
	  val = Math.round(val);
	  val = val / Math.pow(10,prec);
	  return val;
	 }
	
	function moonPhPer(anyDate)	  {
	  var baseDate = new Date();
	  baseDate.setUTCFullYear(2005);
	  baseDate.setUTCMonth(3);
	  baseDate.setUTCDate(8);
	  baseDate.setUTCHours(20);
	  baseDate.setUTCMinutes(35);
	  baseDate.setUTCSeconds(0);
	
	  var diff = anyDate - baseDate + msPerDay;  
	  if(diff < 0 ) diff = -diff;
	  var phase = diff / (synodic * msPerDay); 
	  phase *=100;       
	
	  while ( phase > 100) {   phase -= 100;   }
	  return phase;
	 }
	
	function moonPhase(phase)  {
	  var p;
	  if     (phase >= 0 && phase <= 2.49)   	{    p = "New Moon";    	}
	  else if(phase >= 2.5 && phase <= 22.49)   {    p = "Waxing crescent"; }
	  else if(phase >= 22.5 && phase <= 27.49)  {    p = "1st Quarter";	    }
	  else if(phase >= 27.5 && phase <= 47.49)  {    p = "Waxing Gibbous";  }
	  else if(phase >= 47.5 && phase <= 52.49)  {    p = "Full Moon";	    }
	  else if(phase >= 52.5 && phase <= 73.49)  {    p = "Waning Gibbous";  }
	  else if(phase >= 73.5 && phase <= 77.49)  {    p = "3rd Quarter";     }
	  else if(phase >= 77.5 && phase <= 97.49)  {    p = "Waning crescent"; }
	  else									    {    p = "New Moon";        }
	  return p;
	 }

//
//
//	GALLERY
//
//
	var giFPGaCur = 0;
	var gnFPGaFlipped = 0;
	var gFPGaIntervalId;

	function drawGalleryArea(aGallery, fIsAdmin, fCanPost, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var strTopicNameUrl		= scrubTitleForURL(strFPTitle);
		var urlOwnPage			= 'showGalleryPage('+idTopic+',\'' +strTopicNameUrl+ '\')';
		var nTotalAvailable		= aI[10];

		var fIsTopic			= (idTopic != 0);
		
		var aO			 		= nFPOther.split(':');
		var nFPMethod 			= aO[1];
		var nFPGaPause			= aO[2];
		if ((nFPGaPause == null) || isNaN(nFPGaPause) || (nFPGaPause <= 0)) { nFPGaPause = 180; }

		if (strFPTitle != '') {
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 12, 'ga');
			str += '</div>';
			document.writeln(str);
		}
		
		if (nFPMethod == 1) {
			// only show one item
			var aG = new Array();
			aG[0] = aGallery[0];
			if (aGallery.length > 1) { aG[1] = '***'; }
			drawGalleryList(aG, fIsAdmin, nFPFormat, 0, idTopic);
			// set timer for next item
			if (aGallery.length > 2) {
				gFPGaIntervalId = setInterval('flipFPGallery(aGallery,'+fIsAdmin+','+nFPFormat+',0)',(nFPGaPause*1000));
			}

		} else {
			drawGalleryList(aGallery, fIsAdmin, nFPFormat, 0, idTopic);
		}
		
		str = '';
		str += '<div class="btn_right">';
			if (fCanPost) {
				str += '<a href="javascript:addGalleryItem('+idTopic+');" class="btn" title="Click to post your own...">';
				str += 'Add your own';
				str += '</a>';
				str += getFooterDivider();
			}
			str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'</a>';
		str += '</div>';
		document.writeln(str);
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}	
	function flipFPGallery(aG, fIsAdmin, nFormat, nLayout, idTopic) {
		giFPGaCur++;
		gnFPGaFlipped++;
		if (giFPGaCur >= (aG.length - 1)) { giFPGaCur = 0; }
		var aA  = aGallery[giFPGaCur].split("|");
		
		var str = htmlInnerOneGallery(aA, fIsAdmin, nFormat, nLayout, idTopic, 1)
		var d = getDOM("ga_area_0");
		d.innerHTML = str;
		
		if (gnFPGaFlipped >= 100) {
			clearInterval(gFPGaIntervalId);
		}
	}	  

//
//
//	MAP Xs
//
//
	var giFPMxCur = 0;
	var gnFPMxFlipped = 0;
	var gFPMxIntervalId;

	function drawFPMapArea(aXs, fIsAdmin, fCanPost, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showMap('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var aO			 		= nFPOther.split(':');
		var nFPMapOrX 			= aO[0];
		var nFPMethod 			= aO[1];
		var nFPPause			= aO[2];
		if ((nFPPause == null) || isNaN(nFPPause) || (nFPPause <= 0)) { nFPPause = 180; }

		var fIsTopic			= (idTopic != 0);
		

		// TITLE
		if (strFPTitle != '') {
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 25, 'mx');
			str += '</div>';
		}
		str += '<div class="btn">';
			str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All Maps</a>';
		str += '</div>';
		document.writeln(str);
		str = '';
		
		// Map Xs
		var nMxShow = aMapXs.length - 1;
		if ((nFPMapOrX == 0) && (nFPMethod == 1) && (nMxShow > 1)) { nMxShow = 1; }
		for (var i = 0; i < nMxShow; i++) {
			var aA = aMapXs[i].split("|");
			str += '<div id="mx_area_'+i+'">';
				if (nFPMapOrX == 0) { 
					str += htmlInnerOneMapX(aA, fIsAdmin, nFPFormat, idTopic); 
				} else if (nFPMapOrX == 1) {
					str += htmlInnerOneFPMap(aA, fIsAdmin, nFPFormat, idTopic); 					
				} 
			str += '</div>';
			document.writeln(str);
			str = '';
		}
		// start flip timer
		if ((nFPMapOrX == 0) && (nFPMethod == 1) && (aMapXs.length > 2)) {
			gFPMxIntervalId = setInterval('flipFPMapX(aMapXs,'+fIsAdmin+','+nFPFormat+',0)',(nFPPause*1000), idTopic);
		}
		
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}	
	
	function flipFPMapX(aX, fIsAdmin, nFormat, nLayout, idTopic) {
		giFPMxCur++;
		gnFPMxFlipped++;
		if (giFPMxCur >= (aX.length - 1)) { giFPMxCur = 0; }
		var aA  = aMapXs[giFPMxCur].split("|");
		
		var str =  htmlInnerOneMapX(aA, fIsAdmin, nFormat, idTopic);
		var d = getDOM("mx_area_0");
		d.innerHTML = str;
		
		if (gnFPMxFlipped >= 100) {
			clearInterval(gFPMxIntervalId);
		}
	}	  

	function htmlInnerOneMapX(aA, fIsAdmin, nFormat, idTopic) {
			var idX				= aA[0];
			var strTitle 		= aA[1];
			var strAuthor 		= aA[2];
			var strDescription	= aA[3];
			var urlPhoto 		= aA[4];
			var idMap	 		= aA[5];
			var urlMapPix 		= aA[6];
			var dyThumb		 	= aA[7];
			var strPinTitle 	= aA[8];
			strDescription = shortenText(strDescription,150);
			
			var str = '';
			// MAP IN BACKGROUND 
			str += '<div style="position:relative;left:0px;top:0px;z-index:0;width:1px;height:1px;"><div style="position:absolute;top:0px;left:0px;z-index:0">';
				str += '<a href="javascript:showMap('+idTopic+','+idMap+')" class="mp_ftr" title="View map...">'; 
				str += '<img ';
				str += 'src="maps/map_'+idMap+'/thumb_'+urlMapPix+'" ';
				str += 'alt="View map..." title="View map..." ';
				str += 'width="100" ';
				str += 'border="1">';
				str += '</a>';
			str += '</div></div>';
			
			str += '<div style="position:relative;z-index:2;margin-top:2px; margin-left:12px;">';
				// MAP X
				str += '<table cellspacing="0" cellpadding="0" style="width:100%"><tr><td><img src="bits/spacer.gif" width="1" height="'+dyThumb+'"></td><td valign="top">';
				str += '<div class="mx_area_fp">';					
					if (nFormat == 1) { str += '<div class="mx_pintype">'+ strPinTitle +'</div>'; }
					str += '<div class="mx_title">'+ strTitle +'</div>';
					if (urlPhoto != '') {
						str += '<div class="mx_pix">';
							str += '<a href="javascript:showBigMapX('+idTopic+','+idX+')" alt="view full size...">';
							str += '<img src="maps/x_'+idX+'/thumb_'+urlPhoto+'" alt="Click to view full size..."  title="Click to view full size..." border="1">';
							str += '</a>';
						str += '</div>';
					}
					if ((nFormat == 1) || (urlPhoto == '')) {
						str += '<div class="mx_text">';
							str += makeURLsHot(strDescription);
						str += '</div>';
					}
					// FOOTER
					str += '<div class="mx_ftr_area">';
						str += '<span class="mx_ftr">by '+strAuthor+'</span>';
						str += getFooterDivider();
						str += '<a class="mx_ftr" href="javascript:showBigMapX('+idTopic+','+idX+')">view big</a>';
					str += '</div>'; // footer
				str += '</div>'; // item area
				str += '</td></tr></table>';
			str += '</div>';

			return str;
	}
	
	function htmlInnerOneFPMap(aA, fIsAdmin, nFormat, idTopic) {
			var t1				= aA[0];
			var strTitle 		= aA[1];
			var t2		 		= aA[2];
			var strDescription	= aA[3];
			var t3		 		= aA[4];
			var idMap	 		= aA[5];
			var urlMapPix 		= aA[6];
			var dyThumb		 	= aA[7];
			var t4			 	= aA[8];
			strDescription = shortenText(strDescription,150);
			
			var str = '';
			// MAP
			str += '<div style="margin-bottom:10px;">';
				//image
				str += '<table cellpadding="0" cellspacing="0">';
				str += '<tr><td valign="top">';
				str += '<a href="javascript:showMap('+idTopic+','+idMap+')" class="mp_ftr" title="View map...">'; 
				str += '<img ';
				str += 'src="maps/map_'+idMap+'/thumb_'+urlMapPix+'" ';
				str += 'alt="View map..." title="View map..." ';
				str += 'width="100" ';
				str += 'border="1">';
				str += '</a>';
				str += '</td>';
			
				// title
				str += '<td valign="top">';
				str += '<div class="mx_title" style="margin-left:6px;">'+ strTitle +'</div>';
				str += '<div class="mx_text" style="margin-left:6px;">';
						str += makeURLsHot(strDescription);
				str += '</div>';
				str += '</td></tr>';
				str += '</table>';
			str += '</div>';

			return str;
	}
	  

//
//
//	MARKETPLACE PRODUCTS
//
//
	function drawFrontpageMPProds(aMPProd, strMPInfo, fIsAdmin, nCol) {
		drawMPProdsCore(aMPProd, strMPInfo, fIsAdmin, nCol, 0);
	}
//
//
//	POLL
//
//

	function drawPollArea(strPollInfo, fIsAdmin, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showPolls('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var fIsTopic			= (idTopic != 0);

		if (strFPTitle != '') {
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 16, 'po');
			str += '</div>';
			document.writeln(str);
		}
		
		if (strPollInfo != '') {
			document.writeln('<div id="po_box_fp">');
			// params: info, isEd, compact v open, fOnFrontpage
			drawPoll(strPollInfo, fIsAdmin, nFPFormat, true, idTopic);
			document.writeln('</div>');
		}
		
		str = '';
		str += '<div class="btn_right">';
			str += '<a href="javascript:sendMessage(\'Poll Suggestion\');" class="btn" title="Suggest a poll...">';
				str += 'Suggest a Poll';
			str += '</a>';
			str += getFooterDivider();
			str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'</a>';
		str += '</div>';
		document.writeln(str);
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}		  

//
//
//	FAVORITE LINKS
//
//

	function drawFrontpageLinksArea(aLinks, aLinkTypes, fIsAdmin, strSectionInfo, idTopic, nCol) {
		var str = '';
		var aI = strSectionInfo.split('|');
		var idSection			= aI[0];
		var strFPTitle			= aI[1];
		var nFPFormat			= aI[2];
		var nFPMax				= aI[3];
		var nFPOther			= aI[4];
		var nOwnPTitle			= aI[5];
		var urlOwnPage			= 'showLinks('+idTopic+')';
		var nTotalAvailable		= aI[10];

		var fIsTopic			= (idTopic != 0);

		if (strFPTitle != '') { 
			str += getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, 10, 'li');
			str += '</div>'; 
		}
		document.writeln(str);
		drawLinkList(aLinks, aLinkTypes, fIsAdmin, nFPFormat, nFPMax);
		str = '';
		if (nTotalAvailable > (aLinks.length - 1)) {
			str += '<div class="btn_right">';
				str += '<a href="javascript:'+urlOwnPage+'" class="btn" title="Click to view all...">See All '+nTotalAvailable+'</a>';
			str += '</div>';
		}
		document.writeln(str);
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}
			  
	function drawLinkList(aLinks, aLinkTypes, fIsAdmin, nFPFormat, nFPMax) {
		var str = '';
		var idCurType = -1;

		for (var i = 0; i < aLinks.length - 1; i++) {
			var aA = aLinks[i].split("|");
			var strTitle		= aA[0];
			var strURL			= aA[1];
			var fInternalURL	= aA[2];
			var fOwnWindow		= aA[3];
			var idType			= aA[4];
			// category heading
			if ((idCurType != idType) && (nFPFormat == 1)) {
				for (var t = 0; t < aLinkTypes.length - 1; t++) {
					var aT = aLinkTypes[t].split("|");
					var idThisType 	= aT[0];
					var strTypeName = aT[1];
					//alert(idThisType+' = '+idType);
					if (idThisType == idType) {
						str += '<div class="fp_li_cat_title">'+strTypeName+'</div>';
						break;
					}
				}
				idCurType = idType;
			}
			// links
			str += '<div class="fp_li_area">'; 
				//str += '<table><tr><td valign="top"><img src="bits/listdot_tiny.gif" border="0" class="li_dottiny"></td><td>';
				if (fInternalURL == 1) {
					str += '<a href="javascript:showPage(\''+strURL+'\')" class="fp_li_title"><img src="spacer.gif" width="8" height="8" border="0" class="li_dottiny"> ' + strTitle + '</a>';
				} else {
					if (fOwnWindow == 1) {
						str += '<a ';
						str += getWebsiteHref(strURL);
						str += ' class="fp_li_title"><img src="spacer.gif" width="8" height="8" border="0" class="li_dottiny"> ' + strTitle + '</a>';
					} else {
						str += '<a ';
						str += getWebsiteHrefPlus(strURL,1);
						str += ' class="fp_li_title"><img src="spacer.gif" width="8" height="8" border="0" class="li_dottiny"> ' + strTitle + '</a>';
					}
				}
				//str += '</td></tr></table>';
			str += '</div>';
		}
		document.write(str);
	}		  
			  
//
//
//	EDITORS NOTE
//
//

	function writeFrontpageEditorNote (strEdInfo, nCol) {
		var str = "";
		
		var aA = strEdInfo.split("|");
		var strTitle		= aA[0];
		var strText			= aA[1];
		var fOn				= aA[2];
		var urlMainPhoto	= aA[3];
		
		if (fOn == 1) {
			if (urlMainPhoto != '') {
				var dxCol = 220;
				if (nCol == 2) { dxCol = 300; }
				if (fIsFlash(urlMainPhoto)) {
					str += getFlashHTML('data/ednote/'+urlMainPhoto, 'HomeFlash', dxCol, 0, true) ;
				} else {
					if (nCol == 2) {
						str += '<img src="data/ednote/'+urlMainPhoto+'" alt="" border="0"  title="">';
					} else {
						str += '<img src="data/ednote/thumb_'+urlMainPhoto+'" alt="" border="0"  title="">';					
					}
				}
			}
			// title
			if (strTitle != '') { 
				var strExCSS = '';
				if (urlMainPhoto != '') { strExCSS = 'margin-top: 2px;'; }
				str += '<div class="fp_head" id="fp_head_ednote" style="margin-bottom:8px;'+strExCSS+'">';
				str += strTitle;
				str += getEdDot(fIsAdmin,27);
				str += '</div>'; 
			}
			// text
			str += '<div class="ednote_text">';
			str += makeURLsHot(strText);
			str += '</div>';
			// edit link
			if (fIsAdmin && (strTitle == '')) {
				str += '<div class="ev_ftr">';
				str += '<a class="ev_ftr" href="javascript:adminCommand(27)">edit</a>';
				str += '</div>';
			}
			document.writeln(str);
			document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
		}
	}
		
		
//
//
//	TOPIC LIST
//
//

	function writeFrontpageTopicList (strTopicInfo, aTopics, nCol) {
		var str = "";
		var aA = strTopicInfo.split("|");
		var strX			= aA[0];
		var fOn				= aA[1];
		var aFPOpts			= aA[2].split(':');
		
		if (fOn == 1) {
			var nFPOrder		 	= aFPOpts[0]; //<0=list 1=cat 2=lastmodified>
			var nFPMaxShow		 	= aFPOpts[1];
			var nFPTextType		 	= aFPOpts[2]; //<0=none, 1=ednote+pix, 2=latestArticle+pix, 3=ednote, 4=latestart, 5=2arTitle, 6=3arTitles>
			var nFPMaxWithText	 	= aFPOpts[3];
			var cchFPMaxText		= aFPOpts[4];
			var strFPHeading	 	= aFPOpts[5];
			var nFPNameStyle	 	= aFPOpts[6]; 
			// head
			if (strFPHeading != '') { 
				str += '<div class="fp_head" id="fp_head_topics" style="margin-bottom:8px;">';
				str += '<a href="javascript:showTopics()" title="Click to view all...">'+strFPHeading+'</a>';
				str += getEdDot(fIsAdmin,28);
				str += '</div>'; 
			}
			// topics
				var strCurCat = '';
				var idCurT 	= 0;
				var nTSoFar = 0;
				var fNewT	= true;
				for (var i = 0; i < aTopics.length - 1; i++) {
					var aS = aTopics[i].split("|");
					var idTopic				= aS[0];
					var strTitle			= aS[1];
					var strTopicNameUrl		= scrubTitleForURL(strTitle);
					var strCat				= aS[2];
					var idA					= aS[3];
					var strATitle			= aS[4];
					var strATitleUrl		= scrubTitleForURL(strATitle);
					var strABy				= aS[5];
					var strText				= aS[6];
					var strPix				= aS[7];
					var nAPnuts				= aS[8];
					var fShowPnut			= false;
					if (nAPnuts > 0) { fShowPnut = true; }
					var fShowPixText		= false;
					if (idCurT != idTopic) { 
						fNewT = true; 
						nTSoFar++; 
						idCurT = idTopic;
					} else { 
						fNewT = false; 
					}
					if ((nFPTextType >= 1) && (nFPTextType <= 6) && (nTSoFar <= nFPMaxWithText)) { fShowPixText = true; }
					//	cat
					if ((nFPOrder == 1) && (strCat != strCurCat)) {
						str += '<div class="fp_tp_catarea"><span class="fp_tp_title">'+strCat+'</span></div>'; 
						strCurCat = strCat;
					}
					// new topic box
					if (fNewT) {
						if (nTSoFar > 1) { str += '</div>'; }
						if (fPNG() && fShowPixText) { str += '<div class="fp_tp_area_png">'; } 
						else 		{ str += '<div class="fp_tp_area">'; }
						// title
						if (nFPNameStyle == 0) { str += '<div class="tp_brow">'; }
						else				   { str += '<div class="fp_tp_brow1">'; }
							str += '<a href="javascript:showTopic('+idTopic+',\''+strTopicNameUrl+'\')" title="View...">'+strTitle+'</a>'; 
						str += '</div>';
					}
						// pix & text
						if (fShowPixText) {
							if (strPix != '') {
								str += '<div style="float:left;margin-top:2px;margin-right:3px;margin-bottom:3px;">';
								str += '<a href="javascript:showTopic('+idTopic+',\''+strTopicNameUrl+'\')" class="fp_tp_text" title="View...">'; 
								str += '<img src="topics/topic_'+idTopic+'/thumb_'+strPix+'" alt="'+strTitle+'" title="'+strTitle+'" width="60" border="1">';
								str += '</a>';
								str += '</div>';
							}
							if (strText != '') {
								if ((nFPTextType == 1) || (nFPTextType == 3)){
									str += '<div class="fp_tp_text">'; 
									str += '<a href="javascript:showTopic('+idTopic+',\''+strTopicNameUrl+'\')" class="fp_tp_text" title="View...">'; 
									str += shortenText(strText,cchFPMaxText);
									str += '</a>';
									str += '</div>';
								}
								else if ((nFPTextType == 2) || (nFPTextType == 4)) {
									str += '<div class="fp_tp_text">';
									if (strATitle != '') { 
										str += '<a href="javascript:showArticles('+idTopic+','+idA+',\''+strATitleUrl+'\')" title="View..."><div class="ar_title" style="font-size:11px;">'+strATitle+'</div></a>';
									}
									str += '<a href="javascript:showArticles('+idTopic+','+idA+',\''+strATitleUrl+'\')" class="fp_tp_text" title="View...">'; 
									// if (strABy != '')    { str += '<i>'+strABy+'</i><br>';}
									str += shortenText(strText,cchFPMaxText);
									if (fShowPnut) { str += ' <img src="bits/atools_peanut_sm.gif" width="14" height="12" alt="reader comments" title="reader comments" border="0">'+nAPnuts+''; }
									str += '</a>';
									str += '</div>';
								}
							}
							if ((nFPTextType == 5) || (nFPTextType == 6)) {
								str += '<div class="fp_li_title" style="margin-left:4px;margin-top:1px;"><img src="bits/listdot_tiny.gif" border="0" style="padding-right:4px;">';
								str += '<a href="javascript:showArticles('+idTopic+','+idA+',\''+strATitleUrl+'\')" title="View...">'+strATitle;
								if (fShowPnut) { str += ' <img src="bits/atools_peanut_sm.gif" width="14" height="12" alt="reader comments" title="reader comments" border="0">'+nAPnuts+''; }
								str += '</a>';
								str += '</div>';
							}
						}
				}
				if (nTSoFar > 0) {	str += '</div>'; }
			document.writeln(str);
			document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
		}
	}
		
//
//
//	SEARCH BOX
//
//

	function drawFrontpageSearchbox (nCol) {
		var str = "";
		var pxInput = 80;
		if (nCol == 2) { pxInput = 160; }
		str += '<div class="search_bar_mini">';
			str += '<form name="frmSearch" method="POST" action="'+gCGIPath + 'show_search.cgi" enctype="multipart/form-data" style="padding:0px;margin:0px;">';
				str += 'Search ';
				str += '<input type="text" name="SEARCH" maxlength="100" class="search_edit" style="font-weight:bold;width:'+pxInput+'px;" value="">';
				str += '&nbsp;<input type="SUBMIT" value=">>" class="form_button">';
			str += '</form>';
		str += '</div>';
		document.writeln(str);
		document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
	}
		
//
//
//	SUBSCRIBE
//
//

	function drawFrontpageSubscribeBox(iconRSS, strRSS, strClass, fEmailOn, fRSS, nFormat, strText, nCol) {
		var str = '';
		var urlRSSIcon = '';
		if (iconRSS > 0 )   { urlRSSIcon = 'rss_'+iconRSS+'.gif'; }
		if (fRSS || fEmailOn) {
			if (nFormat == 1) {
				str += '<div class="fp_head">Subscribe';
					str += getEdDot(fIsAdmin,42);
				str += '</div>'; 
				str += '<div class="ednote_text">';
					if (strText != '') { str += makeURLsHot(strText) + '<br>'; }
					if (fEmailOn) {	
						str += '<a href="javascript:addSubscriptions()" class="btn">'; 
						str += '<img src="bits/news-icon.gif" border="0">&nbsp;Email Subscriptions';
						str += '</a><br>'; 
					}
					if (fRSS) {	
						str += '<a href="javascript:showRSSList()" class="btn">'
						if (urlRSSIcon != '') { str += '<img src="bits/'+urlRSSIcon+'" alt="View list of RSS Feeds..." border="0">&nbsp;'; }
						str += 'RSS Feeds</a>'; 
					}
				str += '</div>';

			} else if (nFormat == 2) {
				var pxBtn = 200;
				if (nCol == 2) { pxBtn = 280; }
				str += '<div class="search_bar_mini">';
					if (strText != '') { str += makeURLsHot(strText) + '<br>'; }
					else {str += 'Subscribe<br>'; }
					if (fEmailOn) {	str += '<input type="BUTTON" value="Email" class="form_button" onClick="addSubscriptions()" style="width:'+pxBtn+'px;"><br>'; }
					if (fRSS) {	str += '<input type="BUTTON" value="RSS" class="form_button" onClick="showRSSList()"  style="width:'+pxBtn+'px;"><br>'; }
				str += '</div>';
			} else {
				if (strRSS == '')   { strRSS = 'RSS'; }
				if (strClass != '') { strClass = ' class="'+strClass+'" ';	}		
				str = '<div style="margin-top:10px;margin-bottom:10px;"'+strClass+'>';
				str += '<table cellspacing="1" cellpadding="0"><tr>';
					str += '<td valign="middle" '+strClass+'>Subscribe via&nbsp;</td>';
					if (fRSS) {
						if (urlRSSIcon != '') {
							str += '<td valign="middle" '+strClass+'>';
								str += '<a href="javascript:showRSSList()" title="View list of RSS Feeds..." '+strClass+'>';
								str += '<img src="bits/'+urlRSSIcon+'" alt="View list of RSS Feeds..." border="0">';				
								str += '</a>';
							str += '</td>';
						}
						str += '<td valign="middle" '+strClass+'>';
							str += '&nbsp;<a href="javascript:showRSSList()" title="View list of RSS Feeds..." '+strClass+'>' + strRSS + '</a>';
						str += '</td>';
					}
					if (fEmailOn) {
						str += '<td valign="middle" '+strClass+'>&nbsp;'+getFooterDivider()+'&nbsp;<a href="javascript:addSubscriptions();" '+strClass+'>email</a></td>';
					}
				str += '</tr></table>';
				str += '</div>';
			}
			document.writeln(str);
			document.writeln('<div class="fp_vertspacer">&nbsp;</div>');
		}
	}

		
		
		
		
//
//	helper functions
//

function getFpHeadOpening(fIsAdmin, fIsTopic, gstrCurTopic, urlOwnPage, strFPTitle, nCmd, strType) {
	var str = '';
	var nCmd100 = nCmd + 100;
	if (fIsTopic) { 
		str += '<div class="fp_head" id="tp_head_'+strType+'">';
		str += '<div class="tp_brow">'+gstrCurTopic+'</div>'; 
		str += '<a href="javascript:'+urlOwnPage+'" title="Click to view all...">'+strFPTitle+'</a>';
		str += getEdDot(fIsAdmin,nCmd100);
	} else {
		str += '<div class="fp_head" id="fp_head_'+strType+'">';
		str += '<a href="javascript:'+urlOwnPage+'" title="Click to view all...">'+strFPTitle+'</a>';
			str += getEdDot(fIsAdmin,nCmd);   
	}
	return str;
}		

	
