function rnd(i) { return Math.floor(Math.random()*i); }

function dw(t) { document.write('' + t); }

function mod(x,y) { return x - Math.floor(x/y)*y; }

function _gel(thing) { return document.getElementById(thing); }

function _elText(thing, t) { _gel(thing).innerHTML = '' + t; }
 
function _showel(thing) { _gel(thing).style.display='inline'; }

function _hideel(thing) { _gel(thing).style.display='none'; }

function _visel(thing) { _gel(thing).style.visibility='visible'; }

function _invisel(thing) { _gel(thing).style.visibility='hidden'; }


function toggleshow(thing) {
  if (_gel(thing).style.display == "none") {
    _showel(thing);
    _elText(thing + "_ShowHide", "Hide "+thing);
  } else {
    _hideel(thing);
    _elText(thing + "_ShowHide", "Show "+thing);
  }
}

function MakeShowHide(thing) {
  dw( '<span id="' + thing + '_ShowHide" ' +
      'style="cursor:pointer;cursor:hand;color:blue;text-decoration:underline" ' +
      'onclick="toggleshow(' + Quote(thing) + ');">Hide ' + thing + '</span>' );
}

function Quote(t) { return "'" + t + "'"; }

function isAlpha(c) { return c.match(/^[a-zA-Z]+$/) != null; }

function isDigit(c) { return c.match(/^\d+$/) != null; }

function hex(i) {
  i = 256 + (Math.floor(i)%256);
  return i.toString(16).slice(-2);
}

function hexcolor(r,g,b) { return '#' + hex(r) + hex(g) + hex(b); }

var stack = new Array();
var SP = 0;

function push(x) { stack[SP++] = x; }

function pop() { return stack[--SP]; }


// safeemail function
// From the JavaScript Source!! http://javascript.internet.com -->
// Original:  William Rozell Jr (elranzer@nospam.com ) -->
// Web Site:  http://www.elranzer.com -->
// altText added by Darryl Nester -- 05/05/2003

function safeemail(domain, suffix, user, altText){
 var addr = user+'@'+domain+'.'+suffix;
 var link = addr;
 return '<a href="' + 'mailto:' + addr+'">'+link+'</a>';
}


function TopOfPage(title, subtitle, Optional){
  var modified = document.lastModified;
  DateArray = modified.split(':');
  modified = DateArray[0].substring(0,DateArray[0].length-2) + DateArray[2].substring(2,100);
  modified = modified.replace(/GMT/,"");
/*  modified = modified.substring(0,10);
  var DateArray = modified.split('/');
  var monthname=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
  modified = monthname[parseInt(DateArray[0])-1]+" "+parseInt(DateArray[1])+", "+DateArray[2];

*/
  dw('<table border=0 cellspacing=1 width=100% align=center>');
  dw('<tr align=left valign=top>');
  dw('<td width=60%><h1>' + title + '</h1><hr>');
  dw('<h3>' + subtitle + '</h3>');
  dw('<span class="note">Last modified '+modified+'</span>');
  dw('</td><td width=40%>');
  dw('<h4><ul class="square">');
  dw('<li><A HREF="http://www.bluffton.edu/" target="_top">Bluffton University home page</A></li>');
  dw('<li><A HREF="http://www.bluffton.edu/mat/" target="_top">Mathematics Department home page</A></li>');
  dw('<li><a href="http://www.bluffton.edu/~nesterd/" target="_top">Darryl Nester\'s home page</A></li>');
  dw('<li>E-mail: ' + safeemail("bluffton", "edu", "nesterd") + '</li>');
  dw('<li><A HREF="/~nesterd/contact.html" target="_top">Other ways to contact me</A></li>');
  if (Optional != "")
    dw('<li>'+Optional+'</li>');
  dw('</ul></h4></td></tr></table><hr>');
}

// BrowserDetect
// from http://www.quirksmode.org/js/detect.html
// last updated 18 Sept 2009
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();


// SmallCaps function -- Darryl Nester, 4/24/2003
// modified 9/9/2003: If the first character of a word is "@", it
//   is displayed without alteration.

function SmallCaps(phrase,bigsize){
  WordArray = phrase.split(' ');
  dw('<font size='+bigsize+'>');
  for (var i=0; i < WordArray.length; i++) {
      if (WordArray[i].charAt(0)=='@') {
        dw(WordArray[i].slice(1));
      }else{
        dw (WordArray[i].charAt(0));
        if (WordArray[i].length>1)
          dw ('<font size='+(bigsize-1)+'>'+WordArray[i].slice(1) + '</font>');
      }
        dw(' ');
  }
  dw('</font>');
}
//-->
//  End -->
