/*	az.js . Alexanderz.net . 20090430 . tba . Table Menu */

var defaultStatusMsg = "Welcome to AlexanderZ.net : E-solutions : A to Z!";

function highLight(that, i) {
	var desc = folio[i].blurb;
	that.style.background = '#ffd'; 
//	that.style.color = '#000'; 
	document.getElementById('Details').innerHTML = desc;
	window.status="Click to see page";
	return true;
}
function unLight(that,i) {
	that.style.background =  '#a5d8f6'; 
//	that.style.color = '#000';
	document.getElementById('Details').innerHTML='&nbsp;'
	window.status=defaultStatusMsg;
	return true;
}
// object Folio
function Folio(href, text, flag) {
	this.href = href;
	this.text = text;
	this.flag = flag;
	this.blurb = blurb;
}
var folio = new Array(); 
folio[0] = new Folio("href", "text", "flag"); //  "blurb" template for Folio object instances
folio[1] = new Folio("http://www.eWaukegan.com", "eWaukegan.com: Web Guide", 0);
folio[2] = new Folio("adams/aass.htm", "Ansel Adams Photography", 0);
folio[3] = new Folio("/scotus/", "Supreme Court of the United States. Roberts Court, 2008", 0);
folio[4] = new Folio("/XML/sbX.xml", "Super Bowl information", 0);
folio[5] = new Folio("http://www.waukeganmainstreet.org", "Waukegan Main Street, Business Association", 0);
folio[6] = new Folio("http://michaeljkarakourtisdds.com/", "Dental surgury practice, Naperville, IL", 0);
folio[7] = new Folio("/Flash/MonthCalendar.html", "Flash Interactive Calendar", 0);
folio[8] = new Folio("/Calendar/CUS.html", "Calendar: US format", 0);
folio[9] = new Folio("/Calendar/CISO.html", "Calendar: ISO format", 0);
folio[10] = new Folio("azc0.asp", "Contact Us", 0);
/* Pending
folio[9] = new Folio("azc0.asp", "Contact Us", 0);
folio[9] = new Folio("azc0.asp", "Contact Us", 0);
*/
var blurb = new Array();
blurb[0] = "blurb";
blurb[1] = "eWaukegan.com - Greater Waukegan and Lake County, IL, Web Guide and eYellow Pages";
blurb[2] = "CSS and image prelaoding are used. Change images with mouseovers rather than clicks. Slide show preview.";
blurb[3] = "Different methods are used: frames, mouseovers and mouse-clicks, ASP.";
blurb[4] = "Information in windows that can be scrolled as needed. Uses XML, XSL and CSS to produce DHTML. ";
blurb[5] = "Business association client web site with several HTML pages, calendar and events pages.";
blurb[6] = "Oral and maxillofacial surgical services practice. Features frames";
blurb[7] = "Macromedia Flash calendar. Animated and interactive multimedia with audio controls.";
blurb[8] = "Calendar - US format. Sunday to Saturday. Weekend days and week numbers highlighted.";
blurb[9] = "Calendar - ISO format. Monday to Sunday. Weekend days and week numbers highlighted.";
blurb[10] = "Contact Us: Questions, comments, suggestions. Form and email links.";

for (var i = 0; i < folio.length; i++) folio[i].blurb = blurb[i];

var mmyy, label, theDays, theXten;
var curDay, curMonth, curYear, mo, yr;

var today = new Date();
var curDay = today.getDate();
var curMonth = today.getMonth();
var curYear = today.getYear();
if (curYear < 2000)      
		curYear = curYear + 1900;
		
var lblDays = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");

var dayAbbrev = new Array(lblDays.length);
for (i = 0; i < lblDays.length; i++) {
	dayAbbrev[i] = lblDays[i].substring(0, 3);
}

var lblMonths=new Array("January","February","March","April","May","June");
lblMonths = lblMonths.concat("July","August","September","October","November","December");

var monthAbbrev = new Array(lblMonths.length);
for (i = 0; i < lblMonths.length; i++) {
	monthAbbrev[i] = lblMonths[i].substring(0, 3);
}

function monthNumberOfDays(m, y) {
	var d = 31;	// most months (7) have 31 days
	if (m==3 || m==5 || m==8 || m==10) d = 30; // 4 months have 30
//	February LeapYear calulation 
	if (m==1) { d = (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) ? 29 : 28; } // Feb
	return (d);
}
var hdrDays = popDays();

function popDays() {
	var	s = "<tr>";
	for (var i = 0; i <= 6; i++) { // lblDays abbrev
		s += "</td>" + dayAbbrev[i] + "</td>";
	}
	s += "</tr>";
	return s;
}
// Calendar Generator
function displayCalendar(mo, yr) {
mmyyBanner(mo, yr);
ddBanner();
mmddyy(mo, yr);
///document.getElementById('Calendar').innerHTML = "";
document.getElementById('Calendar').innerHTML = mmyy + label + theDays + theXten;
}

function mmyyBanner(mo, yr) {
 var y, m;
 mmyy = "<table class='cal'><tbody><tr>";
 mmyy += "<td><a href='#'><img src='images/leftendW.gif' name='jan' border='0' align='left'";
 
 mmyy += " onClick='displayCalendar(" + 0 + "," + yr + ")'";
 mmyy += " alt='" + lblMonths[0] + " " + yr + "' title='" + lblMonths[0] + " " + yr + "' /></a></td>";

 mmyy += "<td><a href='#'><img src='images/leftW.gif' name='prvMonth' border='0' align='left'";
 mmyy += " onClick='setPrvMonth(" + mo + "," + yr + ")'";
 
 m = mo;
 y = yr;
 y = (m <= 0 ? --y : y)
 
 mmyy += " title='" +  lblMonths[(m <= 0 ? m = 11 : --m)] + " " + y + " ' /></a></td>";

 mmyy += "<td class='CalLabel' colspan='3' align='center'>" + lblMonths[mo] + "</td>";

 mmyy += "<td><a href='#'><img src='images/rightW.gif' name='nxtMonth' border='0' align='right'";
 mmyy += " onClick='setNxtMonth(" + mo + "," + yr + ")'";

 m = mo;
 y = yr;
 y = (m >= 11 ? ++y : y)
 
 mmyy += " title='" +  lblMonths[(m >= 11 ? m = 0 : ++m)] + " " + y + "' /></a></td>";
 
 mmyy += "<td><a href='#'><img src='images/rightendW.gif' name='dec' border='0' align='right'";
 mmyy += " onClick='displayCalendar(" + 11 + "," + yr + ")'";
 mmyy += " alt='" + lblMonths[11] + " " + yr + "' title='" + lblMonths[11] + " " + yr + "' /></a></td>";

 mmyy += "</tr><tr>";
 mmyy += "<td><a href='#'><img src='images/leftendW.gif' name='decadeStart' border='0' align='left'";
 mmyy += " onClick='displayCalendar(" + mo + "," + (Math.floor((yr-1)/10)*10) + ")'";
 mmyy += " alt='" + lblMonths[mo] + " " + (Math.floor((yr-1)/10)*10) + "'"
 mmyy += " title='" + lblMonths[mo] + " " + (Math.floor((yr-1)/10)*10) + "'></a></td>";

 mmyy += "<td><a href='#'><img src='images/leftW.gif' name='prvYear' border='0' align='left'";
 mmyy += " onClick='displayCalendar(" + mo + "," + (yr-1) + ")'";
 mmyy += " alt='" + lblMonths[mo] + " " + (yr-1) + "' title='" + lblMonths[mo] + " " + (yr-1) + "' /></a></td>";

 mmyy += "<td class='CalLabel' colspan='3' align='center'>" + yr + "</td>";
 
 mmyy += "<td><a href='#'><img src='images/rightW.gif' name='nxtYear' border='0' align='right'";
 mmyy += " onClick='displayCalendar(" + mo + "," + (yr+1) + ")'";
 mmyy += " alt='" + lblMonths[mo] + " " + (yr+1) + "' title='" + lblMonths[mo] +  " " + (yr+1) + "' /></a></td>";

 mmyy += "<td><a href='#'><img src='images/rightendW.gif' name='decadeEnd' border='0' align='right'";
 mmyy += " onClick='displayCalendar(" + mo + "," + (Math.floor(yr/10)*10+10) + ")'";
 mmyy += " alt='" + lblMonths[mo] + " " + (Math.floor(yr/10)*10+10) + "'"
 mmyy += " title='" + lblMonths[mo] + " " + (Math.floor(yr/10)*10+10) + "' /></a></td>";
}

function ddBanner() {
	label = "<tr>";
	for (var i = 0; i <= 6; i++) { // dayName
		label += "<td class='dayLabel' width='18'>" + dayAbbrev[i] + "</td>";
	}
	label += "</tr>";
}

function mmddyy(mo, yr) {
var monthNumberDays =  monthNumberOfDays(mo, yr);
var dayOfMonth = 1;
var theFirst = new Date(lblMonths[mo] + " 1, " + yr);
var firstOfMonth = theFirst.getDay();

var theLast = new Date(lblMonths[mo] +  monthNumberDays + ", " + yr);
var lastOfMonth = theLast.getDay();  //Weekday[mo + "/" + monthNumberDays[mo] + "/" + yr]

// Weeks of month
// First week - pad blank cells before first day of month
// Allow for padding of leading spaces w/ lastOfMonth + firstOfMonth - 1

var i = 0;	//Set to Sunday
theDays = "<tr>";  // Start table row
for (var j = 0; j<= firstOfMonth + monthNumberDays - 1; j++) { 
	if (j < firstOfMonth) {  
		theDays += "<td></td>"; 
		}
	else {
		if (dayOfMonth == curDay && mo == curMonth  && yr == curYear) {
			theDays += "<td id='Today'>" + dayOfMonth;
		}
		else { 
			theDays += "<td>" + dayOfMonth;
		}
		dayOfMonth++;
	}
	theDays += "</td>";
	i++; 
	if (i == 7) {
		theDays += "</tr><tr>";
		i = 0;
	}
	}
theXten = "</tbody></table>";
}

function setPrvMonth(m, y) {
	(m <= 0 ? m = 11 : m--);
	(m == 11 ? y-- : y = y);
	displayCalendar(m, y);
}

function setNxtMonth(m, y) {
	(m == 11 ? m = 0 : m++);
	(m == 0 ? y++ : y = y);
	displayCalendar(m, y);
}

function timeR() { // called recusively; i.e., by itself repeatedly
	var t = new Date();
	var hh = t.getHours();
	var mm = t.getMinutes();
	var ss = t.getSeconds();

	var	greeting = "Good Evening!";	// redefine greeting if later in day or in evening
	if (hh < 18) greeting = "Good Afternoon!  ";
	if (hh < 12) greeting = "Good Morning!";	// midnight included

	var noon = (hh < 12) ? "AM" : "PM";
	
	ss = (ss < 10) ? "0" + ss : ss;
	mm = (mm < 10) ? "0" + mm : mm;
	hh = (hh == 0) ? 12 : hh; // midnight

	if (hh > 12) hh -=12; // 12 hour clock adjustment

	var wd = t.getDay(); // week day, start at 0
	var dd = t.getDate(); // day of month
	var mon = t.getMonth(); // month, start at 0
	var ccyy = t.getFullYear(); // century century year year

	var dspDate = lblDays[wd] + "<br />" + lblMonths[mon] +  " " + dd + ", " + ccyy;
//	dspDate = lblDays[wd].substr(0,3) + " " + dd + " " + lblMonths[mon].substr(0,3) + " " + ccyy; // put it together
//	dspDate = lblDays[wd] + ", " + dd + " " + lblMonths[mon] + " " + ccyy; // put it together
	var dspTime = hh + ":" + mm+ ":" + ss + " " + noon; // put it together

var dspJulian = 'Julian Date: ' + Math.round(calcJulian()*100)/100;

var dspClock = greeting + '<br />' + dspTime + '<br />' + dspDate + '<br />' + dspJulian;
//	UTCZeit += '<br />' + ' ' + lDay[d.getUTCDay()] + ' ' + UTCDate + ' ' + UTCTime + UTCnoon + '<br />Julian Date:' + Julian;
	ISO = '<br />ISO Date: ' + ISOWeekNo(ccyy,mon,dd,2);
//	document.getElementById('Clock').innerHTML = dspClock + ISO; // UTCZeit + ISO;
//		setTimeout('timeR()',1000); // call recursively
		
	document.getElementById('Clock').innerHTML = dspClock + ISO;
	setTimeout('timeR()',1000); // call recursively
}

function calcJulian() {
	JulianDate = new Date()
	ccyy = JulianDate.getYear()          //added + 1900 10/03/2003
	if (ccyy < 1000 ) {ccyy+=1900}  // modified 10/03/2003
		//year = 1900+cdDate.getYear()
	mm = JulianDate.getMonth() + 1 //getMonth() returns 0-11
	dd = JulianDate.getDate()
//	h = JulianDate.getHours()
//	m= JulianDate.getMinutes()
//	s = JulianDate.getSeconds()
//	univTime = h+(m/60)+(s/3600)
	if ((100*ccyy+mm-190002.5) >= 0) {sign = 1}
		else {sign = -1}
	with (Math) {
		part1 = 367 * ccyy
		part2 = floor((7*(ccyy+floor((mm+9)/12)))/4)
		part3 = dd+floor((275*mm)/9)
		part4 = 1721013.5 // +(univTime/24)
		part5 = 0.5*sign
		jd = part1-part2+part3+part4-part5+0.5
   }
   return jd
}
function makeDay(y, m, d) {
	y = (y < 1000) ? y + 1900 : y;
	return new Date(y,m,d).getDay(); //Q;
}
// Following 2 functions adapted from those at: http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm
// Revised to accept any date parameters and use of JavaScript enhancements.
// However, the results are the same as several other scripts.
function GregDayN(y,m,d){ // day number since 0 January 0 CE (Gregorian)
	++m;
	if(m < 2) 
	{
		--y;
		m += 12;
	}
	return Math.floor(365.25*y)-Math.floor(y/100)+Math.floor(y/400)+Math.floor(30.6*m)+d-62;
}
function ISOWeekNo(y,m,d,p){ // ISO week number of parameter date
	var ISOweek;	
//		alert(" y= " + y + " m= " + m + " d= " + d + " p= " + p);
	y = (y < 1000) ? y + 1900 : y;
	wday=makeDay(y,m,d);
//	return wday;
	wday=((wday+6)%7)+1;
	yISO=y;
	d0=GregDayN(y,1,0);
	wday0=((d0+4)%7)+1;
	t=GregDayN(y,m+1,d); // t was d in this and lines below
	wnISO=Math.floor((t-d0+wday0+6)/7)-Math.floor((wday0+3)/7);
// last few days of December in next year's ISO week
	if((m == 11) && ((d-wday) > 27))
	{
		wnISO=1;
		++yISO;
	}
// first few days of January in previous year's ISO week
	if((m == 0) && ((wday-d) > 3))
	{
		d0=GregDayN(y-1,1,0);
		wday0=((d0+4)%7)+1;
		wnISO=Math.floor((t-d0+wday0+6)/7)-Math.floor((wday0+3)/7);
		--yISO;
	}
	switch (p)
{
//case 0 : // Day number
//	w = Math.floor(d-d0+wday0+6)-Math.floor(wday0+3); //d0; //	break;
case 1 : // ISO Week number
	w = wnISO;
	break;
case 2 : // Week number string
	w  = (wnISO < 10) ? yISO+"-W0"+wnISO+"-"+wday : yISO+"-W"+wnISO+"-"+wday;
	break;
default:
	alert("Oops! ");
}	//	if(wnISO < 10) ISO = yISO+"-W0"+wnISO+"-"+wday; //	else ISO =  yISO+"-W"+wnISO+"-"+wday;
	return w;
}
function dspPortfolio() {
	var s = "<table align='center'><tbody>";
	for (var i = 1; i < folio.length; i++)	{
	s += "<tr><td class='menu'";
	s += " onMouseOver='highLight(this," + i + ");return true;'";	
	s += " onMouseOut='unLight(this," + i + ");return true' target='_blank'>";
	s += "<a href='" + folio[i].href + "' target='_blank'>" + folio[i].text + "</a></td></tr>";
	}
	s += "</tbody></table>";
	document.getElementById('Menu').innerHTML = s;	
}

