
<!--
// last tooltip: 48
// Note from Kristina: The below JavaScript is what makes those nifty
// little info boxes pop out when you run your mouse ove the links on this
// page. It's pretty nifty, eh? You can download the code to use yourself
// by following the links to "SimplytheBest.net" or directly to the author's
// site. I did NOT write this JavaScript! It was written by Sharon Paine as
// outlined below. FYI. :-)
//
// This code is from Dynamic Web Coding www.dyn-web.com 
// Copyright 2002 by Sharon Paine Permission granted to use this code as long as this entire notice is included.
// Permission granted to SimplytheBest.net to feature script in its
// DHTML script collection at http://simplythebest.net/scripts/dhtml_scripts.html

var dom = (document.getElementById) ? true : false;
var ns5 = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
var ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
var ns4 = (document.layers && !dom) ? true : false;
var ie4 = (document.all && !dom) ? true : false;
var nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

var origWidth, origHeight;
if (ns4) {
	origWidth = window.innerWidth; origHeight = window.innerHeight;
	window.onresize = function() { if (window.innerWidth != origWidth || window.innerHeight != origHeight) history.go(0); }
}

if (nodyn) { event = "nope" }
var tipFollowMouse	= true;	
var tipWidth		= 160;
var offX		 	= 12;	// how far from mouse to show tip
var offY		 	= 12; 
var tipFontFamily 	= "Verdana, arial, helvetica, sans-serif";
var tipFontSize		= "8pt";
var tipFontColor		= "#000000";
var tipBgColor		= "#DDECFF"; 
var origBgColor 		= tipBgColor; // in case no bgColor set in array
var tipBorderColor 	= "#000080";
var tipBorderWidth 	= 2;
var tipBorderStyle 	= "ridge";
var tipPadding	 	= 4;

var messages = new Array();
messages[0] = new Array('http://tesol.net/scripts/images/quiztest.jpg','Create multiple choice, true/false, and short-answer quizzes online for multiple instructors.',"#FFFFFF");
messages[1] = new Array('http://tesol.net/scripts/images/randomquiz.jpg','Create online quizzes with randomized questions and answers.',"#FFFFFF");
messages[2] = new Array('http://tesol.net/scripts/images/sfesurvey.jpg','Create surveys with weighted answers, such as personality profiles.',"#FFFFFF");
messages[3] = new Array('http://tesol.net/scripts/images/sillysite.jpg','Create simple HTML pages and email them to yourself. Fun for students just learning about HTML',"#FFFFFF");
messages[4] = new Array('http://tesol.net/scripts/images/sillycount.jpg','Make a simple text counter script for your website in different fonts and colors.',"#FFFFFF");
messages[5] = new Array('http://tesol.net/scripts/images/autocgimail.jpg','This program will let you create a custom email form and script for your site.',"#FFFFFF");
messages[6] = new Array('http://tesol.net/scripts/images/remindme.jpg','Set up your own email reminder service for your site\'s visitors.',"#FFFFFF");
messages[7] = new Array('http://tesol.net/scripts/images/cgisubscribe.jpg','A simple online, double-opt-in, mailing list manager. Send newsletters from your site and let people signup online.',"#FFFFFF");
messages[8] = new Array('http://tesol.net/scripts/images/chatntime.jpg','Put a chatroom on your website for instant support or discussion.',"#FFFFFF");
messages[9] = new Array('http://tesol.net/scripts/images/votesie.jpg','Run polls and let your visitors vote on issues of the day.',"#FFFFFF");
messages[10] = new Array('http://tesol.net/scripts/images/makebook.jpg','It\'s a guestbook! It\'s an ongoing story! It\'s a page comments script! MakeBook can be used in several ways - check it out!',"#FFFFFF");
messages[11] = new Array('http://tesol.net/scripts/images/veryinteresting.jpg','Loan payment calculator and amortization table generator. How much would you expect to pay? Find out!',"#FFFFFF");
messages[12] = new Array('http://tesol.net/scripts/images/affordabilly.jpg','Given a payment amount that you can afford and an interest rate, AffordaBilly will tell you how big a loan you can afford to take out.',"#FFFFFF");
messages[13] = new Array('http://tesol.net/scripts/images/paybacktime.jpg','Paying the minimum payments on your credit card? Find out how long it will take to pay off that debt!',"#FFFFFF");
messages[14] = new Array('http://tesol.net/scripts/images/quadraticomatic.jpg','Solve quadratic equations instantly online. Amaze your friends! Amuse your math teacher!',"#FFFFFF");
messages[15] = new Array('http://tesol.net/scripts/images/sillysearch.jpg','Let visitors search pages on your website for what they\'re looking for.',"#FFFFFF");
messages[16] = new Array('http://tesol.net/scripts/images/vocabsearch.jpg','Create a searchable list of vocabulary words, book reviews, or whatever you like.',"#FFFFFF");
messages[17] = new Array('http://tesol.net/scripts/images/qamaker.jpg','Create a searchable Frequently Asked Questions list for your site.',"#FFFFFF");
messages[18] = new Array('http://tesol.net/scripts/images/addrbook.jpg','Make an online, searchable address book, contact list, or other database.',"#FFFFFF");
messages[19] = new Array('http://tesol.net/scripts/images/crosswordmaker.jpg','Create crossword puzzles for your website. The program will tell your visitors if they\'ve solved it!',"#FFFFFF");
messages[20] = new Array('http://tesol.net/scripts/images/sfewordsearch.jpg','Make printable word search puzzles for your students, or let them make their own!',"#FFFFFF");
messages[21] = new Array('http://tesol.net/scripts/images/sfebanner.jpg','Rotate banners, quotes, images, or almost anything you like. Requires SSI or JavaScript.',"#FFFFFF");
messages[22] = new Array('http://tesol.net/scripts/images/gradeorama.jpg','Online gradebook server lets multiple instructors post password-protected grades online. Students can log in and check their own grades.',"#FFFFFF");
messages[23] = new Array('http://tesol.net/scripts/images/webbmail.jpg','Web-B-Mail is NOT web-based email. In fact, it doesn\'t interact with regular email at all. Rather, it is a self-contained, private message system for the web. Only members can mail other members, and users can upload images if they wish.',"#FFFFFF");
messages[24] = new Array('http://tesol.net/scripts/images/placeholder.gif','Find out more about me, why this site got started, and why I keep doing this.',"#FFFFFF");
messages[25] = new Array('http://tesol.net/scripts/images/placeholder.gif','This page has some tips, hints, and things you should know if you\'re just getting started with these scripts. Remember: <b>Don\'t Panic.</b> :-)',"#FFFFFF");
messages[26] = new Array('http://tesol.net/scripts/images/placeholder.gif','The FAQ or "Frequently Asked Questions" contains a list of things that people have emailed me about most often over the years. There are hints on troubleshooting scripts, tips on how to make them fit in with the look and feel of your site, and other helpful stuff.',"#FFFFFF");
messages[27] = new Array('http://tesol.net/scripts/images/placeholder.gif','I\'m hoping that the discussion forum will allow users to help other users of these programs. I pop in from time to time as well to see if I can help. Feel free to post questions or problems in here!',"#FFFFFF");
messages[28] = new Array('http://tesol.net/scripts/images/placeholder.gif','When all else fails, you can email me for help. I don\'t bite, honest! If your problem is covered in the FAQ, though, I\'ll probably send you there first. I\'m completely willing to answer specific questions if you don\'t understand something, or to help with bugs!',"#FFFFFF");
messages[29] = new Array('http://tesol.net/scripts/images/placeholder.gif','Each CGI script on this site has its own bug-fix/update announcement list. It is <b>strongly</b> recommended that you sign up for the appropriate list or lists if you\'re using one of these scripts so you can be informed of security and other fixes. Traffic is extremely low.',"#FFFFFF");
messages[30] = new Array('http://tesol.net/scripts/images/placeholder.gif','This page has some links to other CGI scripts sites, and stuff that I\'ve found useful.',"#FFFFFF");
messages[31] = new Array('http://tesol.net/scripts/images/placeholder.gif','So, you want a website but you\'re not sure how to get one! This page lists a few web hosting providers, both free and paid, with a list of some features they offer.',"#FFFFFF");
messages[32] = new Array('http://tesol.net/scripts/images/placeholder.gif','There is a ton of information about CGI, HTML, and other basic web stuff out there on the net. Here are a few tutorials that might help you get going.',"#FFFFFF");
messages[33] = new Array('http://tesol.net/scripts/images/placeholder.gif','Due to my current employment agreement at my "day job," I\'m not allowed to do custom programming for a fee. CGILance is a site where you can have CGI programmers bid on your project. Rates are generally very low.',"#FFFFFF");
messages[34] = new Array('http://tesol.net/scripts/images/placeholder.gif','There are over 20 different CGI scripts on this site right now, but you might need something different. HotScripts.com has hundreds of scripts of all different types, so you might take a look there!',"#FFFFFF");
messages[35] = new Array('http://tesol.net/scripts/images/placeholder.gif','Sites for Teachers is a nifty site that takes websites of interest to teachers and other educators, and ranks them in order of interest. Fun stuff!',"#FFFFFF");
messages[36] = new Array('http://tesol.net/scripts/images/placeholder.gif','From just saying "Thanks" to doing something nice for someone else to giving actual cash, there are a lot of ways that you can be supportive. I know people come here for free scripts and you might not have money: don\'t feel bad! Check out this page for other stuff you can do!',"#FFFFFF");
messages[37] = new Array('http://tesol.net/scripts/images/placeholder.gif','If you buy mousepads, mugs, posters and other gifts from VisualPeace, I get a cut! Monet, Degas, and beautiful nature photos are available here.',"#FFFFFF");
messages[38] = new Array('http://tesol.net/scripts/images/placeholder.gif','MonsterMadness is an Amazon Affiliate store. They\'ve gathered together monster-related books, movies, toys, games and more. Buy from Amazon through them and I get a piece of the action. From Godzilla to Chupacabras, they\'ve got monstrously nifty stuff. :-)',"#FFFFFF");
messages[39] = new Array('http://tesol.net/scripts/images/placeholder.gif','Here\'s a list of books that are currently on my bookshelf. Mostly reference material about CGI/Perl programming, and other web and Internet services. If you buy one of them from Amazon -- you guessed it! -- I make a few cents!',"#FFFFFF");
messages[40] = new Array('http://tesol.net/scripts/images/placeholder.gif','This tooltip deliberately left blank.',"#FFFFFF");
messages[41] = new Array('http://tesol.net/scripts/images/placeholder.gif','Everything\'s Online is another Amazon Affiliate store, but this one is pretty cool. You can even add things to your Amazon shopping cart, and keep track of them before you check out. Great search option too. Buy from Amazon through them and I get a piece of the action. :-)',"#FFFFFF");
messages[42] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFEBlackJack is a simple online blackjack game for your website. This one is just a fun time-waster, for those spare moments of boredom. I have way too much fun playing this. :-)',"#FFFFFF");
messages[43] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFEPoker is a simple online video poker type game for your website. Like SFEBlackJack, it has no other purpose than having some fun and wasting some time, and can be addictive. I like it better than the real thing because no money is involved, and I always lose!',"#FFFFFF");
messages[44] = new Array('http://tesol.net/scripts/images/placeholder.gif','HeadCount is a little program that will let teachers log in with how many of their students will be attending Lunch or a field trip, or just attendance numbers.',"#FFFFFF");
messages[45] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFEHangman lets you put a Hangman game on your website. You can create wordlists on any topic, and even set up others to add their own wordlists if you wish. Contains EXPERIMENTAL support for accented characters of French, Spanish, Italian, Portuguese, German, Norwegian, and Swedish.',"#FFFFFF");
messages[46] = new Array('http://tesol.net/scripts/images/placeholder.gif','Quotesie is a simple random quote generator. You can add, edit, or delete quotations, Bible verses, fortunes, or just random silliness, and Quotesie will display them on your web page. You can use SSI if your server supports it, or try a Javascript emulation.',"#FFFFFF");
messages[47] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFEBMIcalc is a simple body mass index calculator. You can choose to use kilograms or pounds for weight, and inches or centimeters for height.',"#FFFFFF");
messages[48] = new Array('http://tesol.net/scripts/images/placeholder.gif','MetaboCalc gives you an approximation of how many calories you need per day, your resting metabolic rate, and your body mass index. You can choose to use kilograms or pounds for weight, and inches or centimeters for height.',"#FFFFFF");
messages[49] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFEChat is a slightly more advanced Chat script than Chat-N-Time. It allows things like /kick and /ban as well as /unban, topic changing, etc.',"#FFFFFF");
messages[50] = new Array('http://tesol.net/scripts/images/placeholder.gif','SFELinkAdd is a very simple script to let users submit a link for your links page. It works in a similar way to MakeBook, allowing moderation and emailing of submissions to prevent link spam from showing up on your links page.',"#FFFFFF");


if (document.images) {
	var theImgs = new Array();
	for (var i=0; i<messages.length; i++) {
  	theImgs[i] = new Image();
		theImgs[i].src = messages[i][0];
		theImgs[i].alt = messages[i][1];

  }
}

var startStr = '<table width="' + tipWidth + '"><tr><td align="center" width="100%"><img src="';
var midStr = '" border="0"></td></tr><tr><td valign="top">';
var endStr = '</td></tr></table>';

var tooltip, tipcss;
function initTip() {
	if (nodyn) return;
	tooltip = (ns4)? document.tipDiv.document: (ie4)? document.all['tipDiv']: (ie5||ns5)? document.getElementById('tipDiv'): null;
	tipcss = (ns4)? document.tipDiv: tooltip.style;
	if (ie4||ie5||ns5) {	// ns4 would lose all this on rewrites
		tipcss.width = tipWidth+"px";
		tipcss.fontFamily = tipFontFamily;
		tipcss.fontSize = tipFontSize;
		tipcss.color = tipFontColor;
		tipcss.backgroundColor = tipBgColor;
		tipcss.borderColor = tipBorderColor;
		tipcss.borderWidth = tipBorderWidth+"px";
		tipcss.padding = tipPadding+"px";
		tipcss.borderStyle = tipBorderStyle;
	}
	if (tooltip&&tipFollowMouse) {
		if (ns4) document.captureEvents(Event.MOUSEMOVE);
		document.onmousemove = trackMouse;
	}
}

window.onload = initTip;

var t1,t2;	// for setTimeouts
var tipOn = false;	// check if over tooltip link
function doTooltip(evt,num) {

	if (!tooltip) return;
	if (t1) clearTimeout(t1);	if (t2) clearTimeout(t2);
	tipOn = true;
	// set colors if included in messages array
	if (messages[num][2])	var curBgColor = messages[num][2];
	else curBgColor = tipBgColor;
	if (messages[num][3])	var curFontColor = messages[num][3];
	else curFontColor = tipFontColor;
	if (ns4) {
		var tip = '<table bgcolor="' + tipBorderColor + '" width="' + tipWidth + '" cellspacing="0" cellpadding="' + tipBorderWidth + '" border="0"><tr><td><table bgcolor="' + curBgColor + '" width="100%" cellspacing="0" cellpadding="' + tipPadding + '" border="0"><tr><td>'+ startStr + messages[num][0] + midStr + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + messages[num][1] + '</span>' + endStr + '</td></tr></table></td></tr></table>';
		tooltip.write(tip);
		tooltip.close();
	} else if (ie4||ie5||ns5) {
		var tip = startStr + messages[num][0] + midStr + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + messages[num][1] + '</span>' + endStr;
		tipcss.backgroundColor = curBgColor;
	 	tooltip.innerHTML = tip;
	}
	if (!tipFollowMouse) positionTip(evt);
	else t1=setTimeout("tipcss.visibility='visible'",100);
}

var mouseX, mouseY;
function trackMouse(evt) {
	mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
	mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
	if (tipOn) positionTip(evt);
}

function positionTip(evt) {
	if (!tipFollowMouse) {
		mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
		mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
	}
	// tooltip width and height
	var tpWd = (ns4)? tooltip.width: (ie4||ie5)? tooltip.clientWidth: tooltip.offsetWidth;
	var tpHt = (ns4)? tooltip.height: (ie4||ie5)? tooltip.clientHeight: tooltip.offsetHeight;
	// document area in view (subtract scrollbar width for ns)
	var winWd = (ns4||ns5)? window.innerWidth-20+window.pageXOffset: document.body.clientWidth+document.body.scrollLeft;
	var winHt = (ns4||ns5)? window.innerHeight-20+window.pageYOffset: document.body.clientHeight+document.body.scrollTop;
	// check mouse position against tip and window dimensions
	// and position the tooltip 
	if ((mouseX+offX+tpWd)>winWd) 
		tipcss.left = (ns4)? mouseX-(tpWd+offX): mouseX-(tpWd+offX)+"px";
	else tipcss.left = (ns4)? mouseX+offX: mouseX+offX+"px";
	if ((mouseY+offY+tpHt)>winHt) 
		tipcss.top = (ns4)? winHt-(tpHt+offY): winHt-(tpHt+offY)+"px";
	else tipcss.top = (ns4)? mouseY+offY: mouseY+offY+"px";
	if (!tipFollowMouse) t1=setTimeout("tipcss.visibility='visible'",100);
}

function hideTip() {
	if (!tooltip) return;
	t2=setTimeout("tipcss.visibility='hidden'",100);
	tipOn = false;
}
//-->
