	function closetbdiv() { $('topicbox').remove(); }
	function newtopic(topicid)
	{
		var nid = topicid.match(/\d+/)[0];
		var jsonspanid = 'json_'+nid;
		var incoming = $(jsonspanid).innerHTML;

		args = incoming.evalJSON();
		var placementdiv = args.placementdiv;
		var popuptop = args.popuptop;

		var cancelspan = "<span class=lightboxspan onclick=\"closetbdiv()\">cancel</span>";

		var okbuttonid = 'okbutton_'+nid;
		var okspan = '<span id='+okbuttonid+' name='+okbuttonid+' class=lightboxspan>ok</span>';

		var d = '<div id=topicbox name=topicbox class=genericdialogue style="top:'+popuptop+';">';
		d += "<table>";
		d += "<tr> <td colspan=2 align=center> New Topic </td> </tr>";
		d += "<tr> <td> title </td> <td> <input id=topictitle name=topictitle> </td> </tr>";
		d += "<tr> <td colspan=2 align=right>"+cancelspan+" "+okspan+"</td></tr>";
		d += "</table>";
		d += "</div>";
		$(placementdiv).insert(d);
		$(okbuttonid).observe('click', function(e) { processnewtopic(this.id)});
	}

	function processnewtopic(buttonid)
	{
		var nid = buttonid.match(/\d+/)[0];
		var jsonspanid = 'json_'+nid;
		var incoming = $(jsonspanid).innerHTML;

		args = incoming.evalJSON();
		var ticker    	= args.ticker;
		var startdate 	= args.startdate;
		var enddate 	= args.enddate;
		var timeframe 	= args.timeframe;
		var bbands		= args.bbands;
		var ecbtrend	= args.ecbtrend;
		var user 		= args.user;
		var type			= args.type;

		var placementdiv = args.placementdiv;
		var uploadnumber = args.upload;
		var topictitle = $('topictitle').value;

		var params = '&user='+user;
		params += '&title='+topictitle;
		params += '&action=newtopic';
		if(type == "upload")
		{
			params += '&type=upload';
			params += '&chart='+uploadnumber;
		}
		else if (type == "chartdef")
		{
			params += '&type=chartdef';
			params += '&chart=';
			params += '&startdate=chartdef';
			params += '&enddate=chartdef';
			params += '&timeframe=chartdef';
			params += '&bbands=chartdef';
			params += '&ecbtrend=chartdef';
			params += '&type=chartdef';
		}
			// parameters: '&action=newtopic&topictitle='+topictitle+'&ticker='+ticker+'&startdate='+startdate+'&enddate='+enddate+'&timeframe='+timeframe+'&bbands='+bbands+'&ecbtrend='+ecbtrend+'&user='+user,

		var capture = topictitle+' '+ticker+' '+startdate+' '+enddate+' '+timeframe+' '+bbands+' '+ecbtrend;
		new Ajax.Request('/topics', {
			method: 'post',
			parameters: params,
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				$('topicbox').remove();
				// updatetopics();
			},
			onFailure: function() { alert('Could not create new topic.  Please contact administrator.'); }
		});
	}

	function updatetopics(incoming)
	{
		args = incoming.evalJSON();
		var placementdiv = args.placementdiv;
		var ticker = args.ticker;

		$(placementdiv).innerHTML = "";
		new Ajax.Request('/topics', {
			method: 'pose',
			parameters:'&ticker='+ticker+'&action=read',
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				var rval = rtxt.evalJSON();
				var list = "";
				for(i = 0; i <= rval.count; i++)
				{
					var title = rval[i].title;
					var ticker = rval[i].ticker;
					var startdate = rval[i].startdate;
					var enddate = rval[i].enddate;
					var timeframe = rval[i].timeframe;
					var topicnumber = rval[i].topicnumber;
					var creationdate = rval[i].creationdate;
					var line = ticker+' '+timeframe+' : <a href=/stocktool/index.php?page=bbs&topicnumber='+topicnumber+' target=bbspage>'+title+'</a><br>\\n';
					list += line;
				}
				$(placementdiv).insert(list);
			},
			onFailure: function() { alert("Could not pull topics for $ticker. Please contact administrator."); }
		});
	}

	function opennewchartbookdialogue() 
	{ 
		var cancelspan = "<span class=tinygreenfont onclick=\"closechartbookdialogue()\">[ cancel ]</span>";
		var okspan = "<span class=tinygreenfont onclick=\"callcreate_ncb()\">[ ok ]</span>";
		var cbd = "<div id=newchartbookdialoguediv name=newchartbookdialoguediv class=genericdialogue>";
		var user = $('thisuser').value;

		cbd += "<table border=1><tr><td>";
		cbd += "<table border=0>";
		cbd += "<tr> <td colspan=2 align=center> New Chartbook </td> </tr>";
		cbd += "<tr> <td> name </td> <td> <input id=newchartbookname name=bookname> </td> </tr>";
		cbd += "<tr> <td> desc </td> <td> <input id=newchartdesc name=desc> </td> </tr>";
		cbd += '<tr> <td colspan=2 align=right>'+cancelspan+'  '+okspan+'</td> </tr>';
		cbd += "</table>";
		cbd += "</td></tr></table>";
		cbd += '<input type=hidden id=newchartuser name=newchartuser value='+user+'>';
		cbd += "</div>";
		$('body').insert(cbd); 
	} 

	function closechartbookdialogue() { $('newchartbookdialoguediv').remove(); }

	function callcreate_ncb()
	{
		var rval = createnewchartbook();
		// alert('creating chartbook number '+rval);
		// $('newchartbookdialoguediv').remove();
		// should redraw the list here, since we only use this function from the chartbook page
	}

	function createnewchartbook()
	{
			// asynchronous:false,
		var rval = 'here';
		var newchartbookname = $('newchartbookname').value;
		$('body').style.cursor = "progress";
		new Ajax.Request('/plib', {
			method: 'post',
			parameters: '&action=createnewchartbook&user='+$('thisuser').value+'&bookname='+$('newchartbookname').value+'&desc='+$('newchartdesc').value,
			onComplete: function(request) 
			{ 
				var rtxt = request.responseText;
				rval = rtxt;
				$('body').style.cursor = "default";
				$('newchartbookdialoguediv').remove();
				$('userbooks').insert('<option>'+newchartbookname+'</option>');
				// alert('creating chartbook number '+rval);
			},
			onFailure: function() { alert('Failed to create new chartbook.  Please contact administrator.');}
		});
		return (rval);
	}

	function editchartbook(editid)
	{
		var booknumber = editid.match(/\d+/)[0];
		new Ajax.Request('/ajax/chartbooker.pl', {
			method: 'post',
			parameters: '&action=info&booknumber='+booknumber,
			onSuccess: function(request) 
			{ 
				var rtxt = request.responseText;
				var rval = rtxt.evalJSON();
				editpopup(editid, rval);
			},
			onFailure: function(request) { alert('Failed to get chartbook info.  Please contact administrator.'); }
		});
	}

	function editpopup(editid, json_array)
	{
		var chartbookname = json_array.name;
		var private = json_array.private;
		var author = json_array.author;
		var deftimeframe = json_array.deftimeframe;
		var thisuser = $('thisuser').value;

		var okbutton = "<span id=okbutton name=okbutton class=textbutton>[ close ]</span>";

		var booknumber = editid.match(/\d+/)[0];
		var deletespanid = 'delete_'+booknumber;
		var deletespan = '<span class=textbutton id='+deletespanid+' name='+deletespanid+'><input id=deletebutton name=deletebutton type=submit value="delete chartbook"></span>';

		var defspan = '<span class=textbutton id=defbutton name=defbutton><input id=defbutton name=defbutton type=submit value="set as my default chartbook"></span>';

		var publicspanid = 'public_'+booknumber;
		var publicspan = '<span class=textbutton id='+publicspanid+' name='+publicspanid+'><input type=submit value="set as public"></span>';

		var privatespanid = 'private_'+booknumber;
		// var privatespan = '<span class=textbutton id='+privatespanid+' name='+privatespanid+'><input type=submit value="set as private"></span>';
		var privatespan = '<select name='+privatespanid+' id='+privatespanid+'>';
		if(private == 1)
		{
			privatespan += '<option selected>private</option>';
			privatespan += '<option>public</option>';
		}
		else
		{
			privatespan += '<option selected>public</option>';
			privatespan += '<option>private</option>';
		}
		privatespan += '</select>';

		var timeframeselect = '<select name=timeframeselect id=timeframeselect>';
		if(deftimeframe == "daily") 
		        { timeframeselect += '<option selected>daily</option>'; }
			else { timeframeselect += '<option>daily</option>'; }
		if(deftimeframe == "weekly") 
		        { timeframeselect += '<option selected>weekly</option>'; }
			else { timeframeselect += '<option>weekly</option>'; }
		if(deftimeframe == "monthly") 
		        { timeframeselect += '<option selected>monthly</option>'; }
			else { timeframeselect += '<option>monthly</option>'; }
		if(deftimeframe == "quarterly") 
		        { timeframeselect += '<option selected>quarterly</option>'; }
			else { timeframeselect += '<option>quarterly</option>'; }
		timeframeselect += '</select>';

		var newnamebutton = '<input type=submit id=newnamebutton name=newnamebutton value=go>';
		var newname = '<input id=newname name=newname>'+newnamebutton;
		var blackstyle = ' style="padding:8px; border:black 1px dotted;"';

		var deleteblock = ' <tr> <td colspan=2 align=center '+blackstyle+'>  '+deletespan+' </td> </tr> <tr> <td colspan=2 align=right>  </td> </tr>';
		var visibilityblock = '<tr> <td colspan=2 align=right '+blackstyle+'>  set visability to:'+privatespan+' </td> </tr> <tr> <td colspan=2 align=right>  </td> </tr>';
		var namechangeblock = '<tr> <td colspan=2 align=right '+blackstyle+'>  change name to:'+newname+'</td> </tr> <tr> <td colspan=2 align=right>  </td> </tr>';
		var timeframeblock = '<tr> <td colspan=2 align=right '+blackstyle+'>  set default timeframe to:'+timeframeselect+'</td> </tr> <tr> <td colspan=2 align=right>  </td> </tr>';
		if(author != thisuser)
		{
			deleteblock = ''; 
			visibilityblock = ''; 
			namechangeblock = ''; 
			timeframeblock = '';
		}

		var content = '\
		<table border=1> <tr> <td> \
			<table border=0 width=100%> \
				<tr> <td colspan=2 align=center> Chartbook Settings </td> </tr> \
				<tr> <td colspan=2 align=center>  <span id=popuptitle name=popuptitle class=bigfont>Chartbook:"'+chartbookname+'"</span> </td> </tr> \
				<tr> <td colspan=2 align=center style="border:red 1px dotted;">  \
					<table border=0> \
						<tr> <td colspan=2 align=right>  </td> </tr> \
						'+deleteblock+'\
						<tr> <td colspan=2 align=center '+blackstyle+'>  '+defspan+' </td> </tr> \
						<tr> <td colspan=2 align=right>  </td> </tr> \
						'+visibilityblock+'\
						'+timeframeblock+'\
						'+namechangeblock+'\
					</table> \
				</td> </tr> \
				<tr> <td align=left>  </td><td align=right> '+okbutton+'</td> </tr> \
			</table> \
		</td> </tr> </table>';

		//var overlay = new DialogOverlay(content);
		placedialogbox();
		$('dialogbox').insert(content);
		
		$('okbutton').observe('click', function(e) { $('dialogbox').remove(); });
		$('defbutton').observe('click', function(e) { makemydefchartbook(editid); });
		if(author == thisuser)
		{
			$('timeframeselect').observe('change', function(e) { settimeframe(editid); });
			$(privatespanid).observe('change', function(e) { switchprivacy(editid); });
			$(deletespanid).observe('click', function(e) 
			{ 
				deletechartbook(editid); 
				$('deletebutton').disabled = true;
			}); 
			$('newnamebutton').observe('click', function(e) { changechartbookname(editid); });
		}
		//overlay.show();
	}

	function changechartbookname(id)
	{
		var booknumber = id.match(/\d+/)[0];
		var newname = $('newname').value;
		if(newname != '')
		{
			new Ajax.Request('/ajax/chartbooker.pl', {
				method: 'post',
				parameters: '&action=changename&booknumber='+booknumber+'&newname='+newname,
				onSuccess: function(request) 
				{ 
					var rtxt = request.responseText;
					alert(rtxt);
					$('popuptitle').innerHTML = "Chartbook: "+newname;
					showlist("mychartbooklist");
				},
				onFailure: function(request) { alert('Failed to change chartbook name.  Please contact administrator.'); }
			});
		}
	}

	function settimeframe(id)
	{
		var booknumber = id.match(/\d+/)[0];
		var newtimeframe = $('timeframeselect').value;
		new Ajax.Request('/ajax/chartbooker.pl', {
			method: 'post',
			parameters: '&action=settimeframe&booknumber='+booknumber+'&newtimeframe='+newtimeframe,
			onSuccess: function(request) 
			{ 
				var rtxt = request.responseText;
				alert(rtxt);
			},
			onFailure: function(request) { alert('Failed to set chartbook def timeframe.  Please contact administrator.'); }
		});
	}

	function makemydefchartbook(id)
	{
		var booknumber = id.match(/\d+/)[0];
		var thisuser = $('thisuser').value;
		var thispane = $('thispane').value;
		new Ajax.Request('/ajax/chartbooker.pl', {
			method: 'post',
			parameters: '&action=makemydefault&booknumber='+booknumber+'&thisuser='+thisuser+'&thispane='+thispane,
			onSuccess: function(request) 
			{ 
				var rtxt = request.responseText;
				alert(rtxt);
			},
			onFailure: function(request) { alert('Failed to set chartbook privacy.  Please contact administrator.'); }
		});
	}

	function switchprivacy(id)
	{
		var booknumber = id.match(/\d+/)[0];
		new Ajax.Request('/ajax/chartbooker.pl', {
			method: 'post',
			parameters: '&action=switch&booknumber='+booknumber,
			onSuccess: function(request) 
			{ 
				var rtxt = request.responseText;
				alert('Set to: '+rtxt);
			},
			onFailure: function(request) { alert('Failed to set chartbook privacy.  Please contact administrator.'); }
		});
	}

	function deletechartbook(spanid)
	{
		var booknumber = spanid.match(/\d+/)[0];
		var chartlineid = 'chartline_'+booknumber;
		new Ajax.Request('/plib', {
			method: 'post',
			parameters: '&action=deletechartbook&booknumber='+booknumber,
			onSuccess: function(request) 
			{ 
				alert('Chartbook deleted'); 
				$(chartlineid).remove();
			},
			onFailure: function(request) { alert('Failed to delete chartbook.  Please contact administrator.'); }
		});
	}

function tickeradder_visible()
{
	$('addtochartbook_waitpic').show();
	var bookname = $('userbooks').value;
	var ticker = $('tickertoadd').value;
  	new Ajax.Request('/plib', {
  		method: 'post',
  		parameters:'&action=addtickertochartbook&ticker='+ticker+'&bookname='+bookname,
  		onSuccess: function(request)
  		{
  			alert("added to: "+bookname);
  			$('addtochartbook_waitpic').hide();
  		}
  	});
}

	function tickeradder()
	{
		var bookname = $($('userbooks')).value;
		var ticker = $($('tickertoadd')).value;
		new Ajax.Request('/plib', {
			method: 'post',
			parameters:'&action=addtickertochartbook&ticker='+ticker+'&bookname='+bookname,
			onSuccess: function(request) { }
		});
	}

	function forkbox()
	{
		var submitbutton = "<span id=submitbutton name=submitbutton class=textbutton>[ close ]</span>";
		var thisuser = $('thisuser').value;
		var apoint = $('apoint').value;
		var bpoint = $('bpoint').value;
		var cpoint = $('cpoint').value;

		var anchorplacement = $('anchorplacement').value;
		var ischeckedhigh = ' checked'; var ischeckedlow = '';
		// if(anchorplacement == 'high') { ischeckedhigh = ' checked'; ischeckedlow = ''; }
		// if(anchorplacement == 'low') { ischeckedhigh = ''; ischeckedlow = ' checked'; }

		var content = '\
		<table border=1> <tr> <td> \
			<table width=100%> \
				<tr> <td colspan=2 align=center> iSet Fork Points </td> </tr> \
				<tr> <td colspan=2> \
				<form> \
					<span style="font-size:.8em;"> \
		         	Forkpoints: \
						(A <input class=smallinput id=box_apoint name=box_apoint size=9 value='+apoint+'> \
						<input type=radio id=box_anchorplacement name=box_anchorplacement value=low'+ischeckedlow+'> low \
						<input type=radio id=box_anchorplacement name=box_anchorplacement value=high'+ischeckedhigh+'> high) \
						B <input class=smallinput id=box_bpoint name=box_bpoint size=9 value='+bpoint+'> \
						C <input class=smallinput id=box_cpoint name=box_cpoint size=9 value='+cpoint+'> \
					</span> \
				</form> \
				Calendar.setup({ inputField : "box_apoint", ifFormat   : "%Y-%m-%d", showTime   : false }); \
				Calendar.setup({ inputField : "box_bpoint", ifFormat   : "%Y-%m-%d", showTime   : false }); \
				Calendar.setup({ inputField : "box_cpoint", ifFormat   : "%Y-%m-%d", showTime   : false }); \
				</td> </tr> \
				<tr> <td align=left>  </td><td align=right> '+submitbutton+' </td> </tr> \
			</table> \
		</td> </tr> </table> \
		<script type="text/javascript"> \
		</script>';
		//var overlay = new DialogOverlay(content);
		placedialogbox();
		alert(content);
		// $('dialogbox').insert(content);
		
		$('submitbutton').observe('click', function(e) { 
			$('apoint').value = $('box_apoint').value;
			$('bpoint').value = $('box_bpoint').value;
			$('cpoint').value = $('box_cpoint').value;
			$('dialogbox').remove(); 
		});
		//$(overlay).show();
	}

	function fibbox()
	{
		var submitbutton = "<span id=submitbutton name=submitbutton class=textbutton>[ close ]</span>";
		var thisuser = $('thisuser').value;
		var fpoint = $('fpoint').value;
		var content = '\
		<table border=1> <tr> <td> \
			<table width=100%> \
				<tr> <td colspan=2 align=center> Add Fibonacci Target </td> </tr> \
				<tr> <td colspan=2> \
					set date <input name=fibdate id=fibdate value='+fpoint+'>\
				</td> </tr> \
				<tr> <td align=left> </td><td align=right> '+submitbutton+' </td> </tr> \
			</table> \
		</td> </tr> </table>';
		//var overlay = new DialogOverlay(content);
		placedialogbox();
		$('dialogbox').insert(content);
		
		$('submitbutton').observe('click', function(e) { 
			$('fpoint').value = $('fibdate').value;
			$('dialogbox').remove(); 
		});
		//overlay.show();
	}

	function suggest_resource()
	{
		var killbutton = "<span id=killbutton name=killbutton class=textbutton>[ cancel ]</span>";
		var submitbutton = "<span id=submitbutton name=submitbutton class=textbutton>[ send ]</span>";
		var thisuser = $('thisuser').value;
		var content = '\
		<table border=1> <tr> <td> \
			<table width=100%> \
				<tr> <td colspan=2 align=center> Suggestion Box </td> </tr> \
				<tr> <td colspan=2 align=center> Suggest a new resource </td> </tr> \
				<tr> <td colspan=2> \
					<textarea name=text id=text class=suggestionbox></textarea> \
					<input type=hidden name=viewername id=viewername value='+thisuser+'>\
					<input type=hidden name=vieweremail id=vieweremail value='+thisuser+'>\
				</td> </tr> \
				<tr> <td align=left> '+killbutton+' </td><td align=right> '+submitbutton+' </td> </tr> \
			</table> \
		</td> </tr> </table>';
		// var overlay = new DialogOverlay(content);
		// var d = '<div id=dialogbox name=dialogbox></div>';
		placedialogbox();
		$('dialogbox').insert(content);
		
		$('killbutton').observe('click', function(e) { $('dialogbox').remove(); });
		$('submitbutton').observe('click', function(e) { 
			var text = $('text').value;
			sendmessage("resource_suggestion", "text");
			$('dialogbox').remove(); 
		});
		// overlay.show();
	}

	function placedialogbox()
	{
		// var d = '<div id=dialogbox name=dialogbox style="position:absolute; top:50%; left:30%; background-color:white; z-index:60;"></div>';
		var d = '<div id=dialogbox name=dialogbox style="position:fixed; top:20%; left:30%; background-color:white; z-index:60;"></div>';
		$('body').insert(d);
	}

	function contact_admin()
	{
		var killbutton = "<span id=killbutton name=killbutton class=textbutton>[ cancel ]</span>";
		var submitbutton = "<span id=submitbutton name=submitbutton class=textbutton>[ send ]</span>";
		var content = '\
		<table border=1> <tr> <td> \
			<table width=100%> \
				<tr> <td colspan=2 align=center> Contact Ezra\'s Chartbooks</td> </tr> \
				<tr> <td align=right> Your Name </td><td> <input id=viewername name=viewername size=40> </td> </tr> \
				<tr> <td align=right> Your Email </td><td> <input id=vieweremail name=vieweremail size=40> </td> </tr> \
				<tr> <td colspan=2> <textarea name=text id=text class=suggestionbox></textarea> </td> </tr> \
				<tr> <td align=left> '+killbutton+' </td><td align=right> '+submitbutton+' </td> </tr> \
			</table> \
		</td> </tr> </table>';
		// var overlay = new DialogOverlay(content);
		placedialogbox();
		$('dialogbox').insert(content);
		
		$('killbutton').observe('click', function(e) { $('dialogbox').remove(); });
		$('submitbutton').observe('click', function(e) { 
			var text = $('text').value;
			// alert(text);
			sendmessage("customer_contact", "text");
			$('dialogbox').remove(); 
		});
		//overlay.show();
	}

	function sendmessage(thissubject, boxname)
	{
		// var thistext = $(boxname).serialize();
		var thisuser = encodeURIComponent($('thisuser').value);
		var thistext = encodeURIComponent($(boxname).value);
		var viewername = encodeURIComponent("<br>\n"+$('viewername').value);
		var vieweremail = encodeURIComponent("<br>\n"+$('vieweremail').value);
		var params = '&subject='+thissubject+'&text='+thistext+viewername+vieweremail+'&thisuser='+thisuser;
		// var params = '&subject='+thissubject+'&text='+thistext;
		// alert(params);
		new Ajax.Request('/mailtoadmin', {
			method: 'post',
			parameters: params,
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				// alert('what is being sent: '+rtxt);
			},
			onFailure: function() { alert('Could not send message. Please contact administrator.'); }
		});
	}

	function lost(boxname)
	{

		var thistext = encodeURIComponent($(boxname).value);
		var thisuser = thistext;
		var thissubject = "lost email";

		var params = '&subject='+thissubject+'&text='+thistext+'&thisuser='+thisuser;
		new Ajax.Request('/mailtoadmin', {
			method: 'post',
			parameters: params,
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
			},
			onFailure: function() { alert('Could not send message. Please contact administrator.'); }
		});
	}

	function authorbox(author)
	{
		var user = $('thisuser').value;
		var matched = author.match("bookauthor_")[0];
		if(matched)
		{
			author = author.replace(/.*bookauthor_/, '');
		}
		var params = '&action=getsyndicate&user='+user;
		new Ajax.Request('/ajax/syndicate.pl', {
			method: 'post',
			parameters: params,
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				var rval = rtxt.evalJSON();
				addauthor(rval, author);
			},
			onFailure: function() { alert('Failed to load Syndicate Manager.  Please contant admin.');}
		});
	}

	function addauthor(rval, author)
	{
		var commandline = '<input type=submit id=submitbutton name=submitbutton value="Add '+author+' to your Syndicate?">';
		var list = '';
		if(rval.count) 
		{
			var seen = 0;
			var hitlist = [];
			list += '<div style="text-align:left; max-height:90px; overflow:auto;"> ';
			list += '<span style="font-size:1.3em;">Your Syndicate</span>';
			for(i = 0; i <= rval.count; i++)
			{
				var person = rval[i].targetuser;
				var killid = person;
				var persondiv = 'person_'+person;
				list += '<div id='+persondiv+' name='+persondiv+'> <span class=textbutton id='+killid+' name='+killid+'>[ remove ]</span>'+person+'</div>';
				hitlist[i] = killid;
				if(killid == author) 
				{ 
					commandline = '<b>'+author+'</b> is already in your Syndicate'; 
					seen = 1;
				}
			}
			list += '</div>';
		}
		var blackstyle = ' style="padding:8px; border:black 1px dotted;"';
		var killbutton = "<span id=killbutton name=killbutton class=textbutton>[ close ]</span>";
		// var submitbutton = "<span id=submitbutton name=submitbutton class=textbutton>[ ok ]</span>";
		var content = '\
		<table border=1> <tr> <td> \
			<table width=100%> \
				<tr> <td colspan=2 align=center '+blackstyle+'> '+list+'</td> </tr> \
				<tr> <td colspan=2 align=center '+blackstyle+'> '+commandline+'</td> </tr> \
				<tr> <td align=left>  </td><td align=right> '+killbutton+'  </td> </tr> \
			</table> \
		</td> </tr> </table>';
		//var overlay = new DialogOverlay(content);
		placedialogbox();
		$('dialogbox').insert(content);

		if(hitlist)
		{
			hitlist.each(function(item)
			{
				// alert(item);
				$(item).observe('click', function(e) { desyndicate(item);});
			});
		}
		
		$('killbutton').observe('click', function(e) { $('dialogbox').remove(); });
		if(!seen)
		{
			$('submitbutton').observe('click', function(e) { 
				addtopeeklist(author);
				$('dialogbox').remove(); 
			});
		}
		// overlay.show();
	}

	function desyndicate(killid)
	{
		var user = $('thisuser').value;
		var params = '&action=desyndicate&user='+user+'&killid='+killid;
		new Ajax.Request('/ajax/syndicate.pl', {
			method: 'post',
			parameters: params,
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				// var rval = rtxt.evalJSON();
				var persondiv = 'person_'+killid;
				$(persondiv).remove();
				alert(rtxt);
			},
			onFailure: function() { alert('Failed to desyndicate '+killid+'.  Please contant admin.');}
		});
	}

	function addtopeeklist(author)
	{
		var thisuser = $('thisuser').value;
		new Ajax.Request('/ajax/addusertopeeklist.pl', {
			method: 'post',
			parameters:'&user='+thisuser+'&targetuser='+author,
			onSuccess: function(request)
			{
				var rval = request.response;
				alert("added "+author+" to peek list");
			},
				onFailure: function() { alert('Failed to add user to peek list comment. Please contact administrator.'); ;}
		});
	}

	function twitterdialog() 
	{ 
		var cancelspan = "<span class=tinygreenfont onclick=\"closetwitterdialog()\">[ cancel ]</span>";
		var okspan = "<span class=tinygreenfont onclick=\"updatetwitterinfo()\">[ ok ]</span>";
		var user = $('thisuser').value;

		var cbd = "<div id=twitterdialog name=twitterdialog class=genericdialogue>";

		cbd += "<table border=1><tr><td>";
		cbd += "<table border=0>";
		cbd += "<tr> <td colspan=2 align=center> Set Twitter Info </td> </tr>";
		cbd += "<tr> <td> Twitter Username </td> <td> <input id=twitter_username name=twitter_username> </td> </tr>";
		cbd += "<tr> <td> Twitter Password </td> <td> <input id=twitter_password name=twitter_password> </td> </tr>";
		cbd += '<tr> <td colspan=2 align=right>'+cancelspan+'  '+okspan+'</td> </tr>';
		cbd += "</table>";
		cbd += "</td></tr></table>";
		cbd += "</div>";
		$('body').insert(cbd); 
	} 

	function closetwitterdialog() { $('twitterdialog').remove(); }
	function updatetwitterinfo()
	{
		var twitter_username = $('twitter_username').value;
		var twitter_password = $('twitter_password').value;

		var namematch = '';
		var passmatch = '';
		if(twitter_username) { namematch = twitter_username.match(/\w+/)[0]; }
		if(twitter_password) { passmatch = twitter_password.match(/\w+/)[0]; }
		// if((namematch != '') && (passmatch != '')) { alert('matched'); }
		// else { alert('not matched'); }

		if((namematch != '') && (passmatch != ''))
		{
			var thisuser = $('thisuser').value;
			new Ajax.Request('/plib', {
				method: 'post',
				parameters:'&action=updatetwitterinfo&thisuser='+thisuser+'&twitter_username='+twitter_username+'&twitter_password='+twitter_password,
				onSuccess: function(request)
				{
					var rtxt = request.responseText;
					// alert(rtxt);
					$('twitterdialog').remove();
				},
				onFailure: function() { alert('Failed to update twitter info. Please contact administrator.'); ;}
			});
		}
	}

// processnominate functions

	function closediv(divname) { $(divname).remove(); }
	function closenbdiv() { $('nominatebox').remove(); }

	function nominate()
	{
		var cancelspan = "<span class=tinygreenfont onclick=\"closenbdiv()\">cancel</span>";
		var okspan = "<span class=tinygreenfont onclick=\"processnomination()\">ok</span>";
		var d = "<div id=nominatebox name=nominatebox class=newtopicdialogue>";
		d += "<table>";
		d += "<tr> <td colspan=2 align=center> New Pattern </td> </tr>";
		d += "<tr> <td> title </td> <td> <input id=patterntitle name=patterntitle> </td> </tr>";
		d += "<tr> <td colspan=2 align=right>"+cancelspan+" "+okspan+"</td></tr>";
		d += "</table>";
		d += "</div>";
		$('resourcebox').insert(d);
	}

	function processnomination()
	{
		var title = $('patterntitle').value;
		var ticker = $('ticker').value;
		var startdate = $('startdate').value;
		var enddate = $('enddate').value;
		var timeframe = $('timeframe').value;
		new Ajax.Request('/ajax/filterforms.pl', {
			method: 'post',
			parameters: '&action=nominate&ticker='+ticker+'&timeframe='+timeframe+'&startdate='+startdate+'&enddate='+enddate+'&title='+title,
			onSuccess: function(request)
			{
				var rval = request.responseText;
				$('nominatebox').remove();
				alert(rval);
			},
			onFailure: function() { alert('Nomination failed.  Please contact administrator'); }
		});
	}
	
	function __newtopic()
	{
		var cancelspan = "<span class=lightboxspan onclick=\"closetbdiv()\">cancel</span>";
		var okspan = "<span class=lightboxspan onclick=\"__processnewtopic()\">ok</span>";
		var d = "<div id=topicbox name=topicbox class=newtopicdialogue>";
		d += "<table>";
		d += "<tr> <td colspan=2 align=center> New Topic </td> </tr>";
		d += "<tr> <td> title </td> <td> <input id=topictitle name=topictitle> </td> </tr>";
		d += "<tr> <td colspan=2 align=right>"+cancelspan+" "+okspan+"</td></tr>";
		d += "</table>";
		d += "</div>";
		$('resourcebox').insert(d);
	}

	function __processnewtopic(topicbox)
	{
		var topictitle = $('topictitle').value;
		// var ticker    	= "$ticker";
		// var startdate 	= "$startdate";
		// var enddate 	= "$enddate";
		// var timeframe 	= "$timeframe";
		// var bbands		= "$bbands";
		// var ecbtrend	= "$ecbtrend";

		var ticker 		= $('ticker').value;
		var startdate 	= $('startdate').value;
		var enddate 	= $('enddate').value;
		var timeframe 	= $('timeframe').value;
		var bbands 		= $('bbands').value;
		var ecbtrend 	= $('ecbtrend').value;

		var capture = topictitle+' '+ticker+' '+startdate+' '+enddate+' '+timeframe+' '+bbands+' '+ecbtrend;
		// alert(capture);
		//new Ajax.Request('/topics', {
		new Ajax.Request('/ajax/topic.pl', {
			method: 'post',
			parameters: '&action=newtopic&topictitle='+topictitle+"&ticker=$ticker&startdate=$startdate&enddate=$enddate&timeframe=$timeframe&bbands=$bbands&ecbtrend=$ecbtrend&user=$user",
			onSuccess: function(request)
			{
				var rval = request.responseText;
				alert(rval);
				$('topicbox').remove();
				__updatetopics();
			},
			onFailure: function() { alert('Could not create new topic.  Please contact administrator.'); }
		});
	}

	function __updatetopics()
	{
		$('topiclist').innerHTML = "";
		new Ajax.Request('/topics', {
			method: 'pose',
			parameters:'&ticker=$ticker&action=read',
			onSuccess: function(request)
			{
				var rtxt = request.responseText;
				var rval = rtxt.evalJSON();
				var list = "";
				for(i = 0; i <= rval.count; i++)
				{
					var title = rval[i].title;
					var ticker = rval[i].ticker;
					var startdate = rval[i].startdate;
					var enddate = rval[i].enddate;
					var timeframe = rval[i].timeframe;
					var topicnumber = rval[i].topicnumber;
					var creationdate = rval[i].creationdate;
					var line = ticker+' '+timeframe+' : <a href=/index.php?page=bbs&topicnumber='+topicnumber+' target=bbspage>'+title+'</a><br>\\n';
					list += line;
				}
				$('topiclist').insert(list);
			},
			onFailure: function() { alert("Could not pull topics for $ticker. Please contact administrator."); }
		});
	}
