

// JavaScript Holiday Functions

//

// Author:  Rick Pike

// Website: http://calendar.pikesys.com

// Email: calendar@pikesys.com

//

// adapted to work with calendar from code by Martin Webb (http://www.irt.org)

// 

// additional functions to calculate Easter and other Christian holidays dates are available at www.irt.org

// additional functions to calculate Easter and Jewish holidays are available at www.kaluach.net

//

// A reference (and on-line calculator) for American holidays is at http://www.smart.net/~mmontes/ushols.html by Marcos J. Montes

//

// YOU SHOULD CONFIRM THAT THE CALCULATED DATES ARE CORRECT

//

// Permission is granted to use my adaptations in this script as long as the above information is included

//

// Instructions:

//	To get a list of American holidays whose dates vary for a given year, call "calcHolidays(year)" in your JavaScript

//           To get an appropriate text string for a given date, call "holidays(day, month, year)" in your JavaScript



function DayOfWeek(day,month,year) {

    var a = Math.floor((14 - month)/12);

    var y = year - a;

    var m = month + 12*a - 2;

    var d = (day + y + Math.floor(y/4) - Math.floor(y/100) +

             Math.floor(y/400) + Math.floor((31*m)/12)) % 7;

    return d + 1;

}



function makeArray()    {

    this[0] = makeArray.arguments.length;

    for (i = 0; i<makeArray.arguments.length; i++)

        this[i+1] = makeArray.arguments[i];

}



var daysofmonth   = new makeArray( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var daysofmonthLY = new makeArray( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);



function LeapYear(year) {

    if ((year/4)   != Math.floor(year/4))   return false;

    if ((year/100) != Math.floor(year/100)) return true;

    if ((year/400) != Math.floor(year/400)) return false;

    return true;

}



function NthDay(nth,weekday,month,year) {

    if (nth > 0) return (nth-1)*7 + 1 + (7 + weekday - DayOfWeek((nth-1)*7 + 1,month,year))%7;

    if (LeapYear(year)) var days = daysofmonthLY[month];

    else                var days = daysofmonth[month];

    return days - (DayOfWeek(days,month,year) - weekday + 7)%7;

}



var sun=1,mon=2,tue=3,wed=4,thu=5,fri=6,sat=7;

var jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12;

var first=1,second=2,third=3,fourth=4,fifth=5,last=-1;



var daysofweek   = new makeArray('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

var monthsofyear = new makeArray('January','February','March','April','May','June','July','August','September','October','November','December');



function DayOfWeek(day,month,year) {

    var a = Math.floor((14 - month)/12);

    var y = year - a;

    var m = month + 12*a - 2;

    var d = (day + y + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) + Math.floor((31*m)/12)) % 7;

    return d+1;

}



function Nths(day) { 

    if (day == 1 || day == 21 || day == 31) return 'st';

    if (day == 2 || day == 22) return 'nd';

    if (day == 3 || day == 23) return 'rd';

    return 'th';

}



function FullDate(day,month,year) {

    return daysofweek[DayOfWeek(day,month,year)] +' '+ day + Nths(day) +' '+ monthsofyear[month] +' '+ year;

}





function calcHolidays(year) {

	document.write("Martin Luther King Day - " + FullDate(NthDay(third,mon,jan,year),jan,year) + '<BR>');

	document.write("President's Day - " + FullDate(NthDay(third,mon,feb,year),feb,year) + '<BR>');

	document.write("Daylight Savings time begins - " + FullDate(NthDay(second,sun,mar,year),mar,year) + '<BR>');

	document.write("Armed Forces Day - " + FullDate(NthDay(third,sat,may,year),may,year) + '<BR>');

	document.write("Mother's Day - " + FullDate(NthDay(second,sun,may,year),may,year) + '<BR>');

	document.write("Memorial Day - " + FullDate(NthDay(last,mon,may,year),may,year) + '<BR>');

	document.write("Father's Day - " + FullDate(NthDay(third,sun,jun,year),jun,year) + '<BR>');

	document.write("Labor Day - " + FullDate(NthDay(first,mon,sep,year),sep,year) + '<BR>');

	document.write("Columbus Day - " + FullDate(NthDay(second,mon,oct,year),oct,year) + '<BR>');

	document.write("Daylight Savings Time ends - " + FullDate(NthDay(first,sun,nov,year),nov,year) + '<BR>');

	document.write("Thanksgiving Day - " + FullDate(NthDay(fourth,thu,nov,year),nov,year) + '<BR>');

	//document.write("SCMA Monthly Meeting in Opry Barn 7:00 pm - " + FullDate(NthDay(first,tue,cmonth,cyear),cmonth,cyear) + '<BR>');

}



function holidays(cday, cmonth, cyear) {

	// American civil holidays and some major religious holiday

if (cmonth == 1 && cday == 1)

		return "<img src=newyear.gif><br>New Year's Day";

	else if (cmonth == 1 && cday == NthDay(third, mon, cmonth, cyear))

		return "MLK Day";

	else if (cmonth == 2 && cday == 2)

		return "<img src=groundhog.gif><br>Groundhog Day";

	else if (cmonth == 2 && cday == 12)

		return "<img src=lincoln.gif><br>Lincoln's Birthday";

	else if (cmonth == 2 && cday == 14)

		return "<img src=valentine.gif><br>Valentine's Day";

	else if (cmonth == 2 && cday == NthDay(third, mon, cmonth, cyear))

		return "<img src=president.gif><br>President's Day";

	else if (cmonth == 2 && cday == 22)

		return "<img src=washington.gif><br>Washington's Birthday";

	else if (cmonth == 3 && cday == 17)

		return "<img src=irish.gif><br>St. Patrick's Day";

	else if (cmonth == 3 && cday == NthDay(second, sun, cmonth, cyear))

		return "<img src=clock.gif><br>Daylight Savings time begins";

	else if (cmonth == 4 && cday == 1)

		return "<img src=groucho.gif align=middle><br>April Fool's Day";

	else if (cmonth == 4 && cday == 22)

		return "Earth Day";

	else if (cmonth == 4 && cday == NthDay(last, fri, cmonth, cyear))

		return "<img src=treeplanting.gif><br>Arbor Day";

	else if (cmonth == 5 && cday == NthDay(second, sun, cmonth, cyear))

		return "Mother's Day<img src=mothersday.gif align=middle>";

	else if (cmonth == 5 && cday == NthDay(third, sat, cmonth, cyear))

		return "<img src=oldglory.gif><br>Armed Forces Day";

	else if (cmonth == 5 && cday == NthDay(last, mon, cmonth, cyear))

		return "<img src=oldglory.gif><br>Memorial Day";

	else if (cmonth == 6 && cday == 14)

		return "<img src=oldglory.gif><br>Flag Day";

	else if (cmonth == 6 && cday == NthDay(third, sun, cmonth, cyear))

		return "<img src=fathersday.gif><br>Father's Day";

	else if (cmonth == 7 && cday == 4)

		return "<img src=july4th.gif><br>Independence Day";

	else if (cmonth == 7 && cday == NthDay(fourth, sun, cmonth, cyear))

		return "Parents' Day";

	else if (cmonth == 9 && cday == NthDay(first, mon, cmonth, cyear))

		return "<img src=labor.gif><br>Labor Day";

	else if (cmonth == 9 && DayOfWeek(cday, cmonth, cyear) == 1 && cday > NthDay(first, mon, cmonth, cyear) && cday <= NthDay(first, mon, cmonth, cyear)+7)

		return "Grandparents' Day"; 		// Sunday after Labor Day

	else if (cmonth == 10 && cday == NthDay(second, mon, cmonth, cyear))

		return "<img src=Columbus.gif><br>Columbus Day";

	else if (cmonth == 10 && cday == 24)

		return "United Nations Day";

	else if (cmonth == 10 && cday == 31)

		return "<img src=pumpkin.gif><br>Halloween";

	else if (cmonth == 11 && cday == NthDay(first, sun, cmonth, cyear))

		return "<img src=clock.gif><br>Daylight Savings time ends";

	else if (cmonth == 11 && cday == 11)

		return "<img src=veteran.gif><br>Veterans' Day";

	else if (cmonth == 11 && cday == NthDay(fourth, thu, cmonth, cyear))

		return "<img src=turkey.gif><br>Thanksgiving";

	else if (cmonth == 12 && cday == 25)

		return "<img src=xmastree.gif><br>Christmas";

	else if (cmonth == 12 && cday == 31)

		return "<img src=newyear.gif><br>New Year's Eve";

	//else if (cday == NthDay(first, tue, cmonth, cyear))

	   // return "SCMA Monthly Meeting in Opry Barn 7:00 pm";

    //else if (cyear == 2009 && cmonth == 5 && cday == NthDay(first, tue, cmonth, cyear))

      //  return "No Monthly Meeting, Annual Meeting on 5/3";

	//else if (cyear == 2007 && cmonth == 8 && cday == NthDay(third, tue, cmonth, cyear))

        //return "No Team Pitch Tonight";

	//else if (cday == NthDay(third, tue, cmonth, cyear))

	    //return "Team Pitch Night - Play starts @ 6:00 pm";

	return "";

}