/* checked with jsLint 2006 04 25 */
/***********************************************************************
* JavaScript Calendar-Digital Christian Design Script featured on and  *
* available at JavaScript Kit:http://www.javascriptkit.com             *
* Functions:                                                           *
* changedate(): Moves to next|previous month|year or current month     *
                depending on the button clicked.                       *
* createCalendar(): Renders the calander into the html page with links *
                for each noted date to fill the date form filds above. *
************************************************************************/
breakchr="  "; if (mywrap) {breakchr="<br/>";}
evtClassName="evtDay";//tracks classnames for special events
evtFlag=false; //switch to stop at first special event found for date
thisDate=1;// Tracks current date being written in calendar
today=new Date();// Date object to store current date
todaysDay=today.getDay()+1;// Stores current day number 1-7
todaysDate=today.getDate();// Stores current numeric date within month
todaysMonth=today.getUTCMonth()+1;// Stores current month 1-12
todaysYear=today.getFullYear();// Stores current year
monthNum=todaysMonth;// Tracks current month being displayed
yearNum=todaysYear;// Tracks current year being displayed
firstDate=new Date(String(monthNum)+"/1/"+String(yearNum));
   // Object Storing the first day of the current month
firstDay=firstDate.getUTCDay();
   // Tracks the day number 1-7 of first day of current month
lastDate=new Date(String(monthNum+1)+"/0/"+String(yearNum));
   // Tracks the last date of the current month
numbDays=0;calendarString="";eastermonth=0;easterday=0;

function changedate(buttonpressed){
if(buttonpressed=="PrevYr"){yearNum--;}
else if(buttonpressed=="NextYr"){yearNum++;}
else if(buttonpressed=="PrevMo"){monthNum--;}
else if(buttonpressed=="NextMo"){monthNum++;}
else if(buttonpressed=="return"){monthNum=todaysMonth;yearNum=todaysYear;}
if(monthNum === 0){monthNum=12;yearNum--;}
else if(monthNum==13){monthNum=1;yearNum++;}
dstring=wordMonth[monthNum]+' 0,'+yearNum;
lastDate=new Date(dstring);numbDays=lastDate.getDate();
firstDate=new Date(String(monthNum)+"/1/"+String(yearNum));
firstDay=firstDate.getDay()+1;createCalendar();return;
}

function dspEvent(day,month,year)
{
	theevent+='Event: <span class="evtName">'+events[i][6]+'<\/span><br/>';
	theevent+='Date: '+iwordMonth[month-1] +' '+ day +', '+ year+'<br/>';
	theevent+='Description: '+events[i][7]+'<br/>';
	theevent+=' -------------- <br/>';
	//document.getElementById('eventlist').innerHTML=theevent;
	popUp('calendar_diary.php?Event='+events[i][6]+'&Date='+day+' '+ iwordMonth[month-1]+'&Desc='+events[i][7])
}

function popUp(URL) 
{
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=1,width=356,height=356,left = 540,top = 225');");
}


function easter(year){
/* feed in the year it returns the month and day of Easter
   using two GLOBAL variables:eastermonth and easterday */
a=year%19;b=Math.floor(year/100);
c=year%100;d=Math.floor(b/4);
e=b%4;f=Math.floor((b+8)/25);g=Math.floor((b-f+1)/3);
h=(19*a+b-d-g+15)%30;i=Math.floor(c/4);
j=c%4;k=(32+2*e+2*i-h-j)%7;
m=Math.floor((a+11*h+22*k)/451);
month=Math.floor((h+k-7*m+114)/31);
day=((h+k-7*m +114)%31)+1;
eastermonth=month;easterday=day;
}

function createCalendar(){
calendarString='';daycounter=0;
calendarString+='<table class="framel"><tr>';
calendarString+='<td class="button"><a href="#" onMouseOver="document.PrevMo.src=ifolder+\'/bckon.jpg\';" onMouseOut="document.PrevMo.src=ifolder+\'/bckoff.jpg\';" onClick="changedate(\'PrevMo\');"><img class="inav" title="'+b_but+'" name="PrevMo" src="" alt="Prev Mo"\/><\/a><\/td>';
calendarString+='<td class="dateline" colspan="5" align="center"><a href="#" onMouseOver="document.PrevYr.src=ifolder+\'/fbckon.jpg\';" onMouseOut="document.PrevYr.src=ifolder+\'/fbckoff.jpg\';" onClick="changedate(\'PrevYr\');"><img class="inav" title="'+r_but+'" name="PrevYr" src="" alt="Prev Yr"\ style="display:none"/><\/a>';
calendarString+=''+iwordMonth[monthNum-1];
calendarString+='<a href="#" onMouseOver="document.NextYr.src=ifolder+\'/ffwdon.jpg\';" onMouseOut="document.NextYr.src=ifolder+\'/ffwdoff.jpg\';" onClick="changedate(\'NextYr\');"><img class="inav" title="'+e_but+'" name="NextYr" src="" alt="Next Yr"\ style="display:none"/><\/a><\/td>';
calendarString+='<td class="button" align="right"><a href="#" onMouseOver="document.NextMo.src=ifolder+\'/fwdon.jpg\';" onMouseOut="document.NextMo.src=ifolder+\'/fwdoff.jpg\';" onClick="changedate(\'NextMo\');"><img class="inav" title="'+f_but+'" name="NextMo" src="" alt="Next Mo"\/><\/a><\/td>';
calendarString+='<\/tr><tr>';
for (idx=0;idx<=6;idx++)
{
	calendarString+='<td class="dofw">'+iwordDay[idx]+'<\/td>';
}
calendarString+='<\/tr>';thisDate=1;
for (idx=1;idx<=6;idx++)
{	 //week number
	calendarString+='<tr>';
	for (x=1;x<=7;x++)
	{ //day of week number
		daycounter=(thisDate-firstDay)+1;thisDate++;
		if((daycounter>numbDays) || (daycounter<1))
		{
			calendarString+='<td class="nulDay"> <\/td>';
		} 
		else 
		{
			if(checkevents(daycounter,monthNum,yearNum,idx,x) || ((todaysDay==x)&&(todaysDate==daycounter)&&(todaysMonth==monthNum)))
			{
				if((todaysDay==x)&&(todaysDate==daycounter)&&(todaysMonth==monthNum))
				{
					calendarString+='<td class="curDay"><a href="javascript:showevents('+daycounter+','+monthNum+','+yearNum+','+i+','+x+')">'+daycounter+'<\/a><\/td>';
				}
				else 
				{
					calendarString+='<td class="'+evtClassName+'"><a href="javascript:showevents('+daycounter+','+monthNum+','+yearNum+','+i+','+x+')">'+daycounter+'<\/a><\/td>';
				}
			} 
			else 
			{	calendarString+='<td class="regDay">'+daycounter+'<\/td>';	}
		}
	}
	calendarString+='<\/tr>';
}
calendarString+='<tr><td class="button2" colspan="7" nowrap="nowrap">';
calendarString+='<\/tr><\/table>';
object=document.getElementById('calendar');object.innerHTML=calendarString;thisDate=1;
document.PrevYr.src=ifolder+"/fbckoff.jpg";
document.PrevMo.src=ifolder+"/bckoff.jpg";
document.NextYr.src=ifolder+"/ffwdoff.jpg";
document.NextMo.src=ifolder+"/fwdoff.jpg";
}

function checkevents(day,month,year,week,dayofweek){
numevents=0;floater=0;
evtClassName="evtDay";

evtFlag=false;
for (i=0;i<events.length;i++){
if(events[i][0]=="W"){
if((events[i][2]==dayofweek)&&(inRange(day,month)===true)){numevents++;setClass(i);}
}
else if(events[i][0]=="M"){
if((events[i][2]==day)&&(inRange(day,month)===true)){numevents++;setClass(i);}
}
else if(events[i][0]=="Y"){
if((events[i][2]==day)&&(events[i][1]==month)&&(inRange(day,month)===true)){
   numevents++;setClass(i);}
}
else if(events[i][0]=="F"){
if((events[i][1]==3)&&(events[i][2] === 0)&&(events[i][3] === 0) ){
easter(year);
if(easterday==day&&eastermonth==month){numevents++;setClass(i);}
} else {
floater=floatingholiday(year,events[i][1],events[i][2],events[i][3]);
if((month==5)&&(events[i][1]==5)&&(events[i][2]==4)&&(events[i][3]==2)){
if((floater+7<=31)&&(day==floater+7)){numevents++;setClass(i);}
else if((floater+7>31)&&(day==floater)){numevents++;setClass(i);}
} else if((events[i][1]==month)&&(floater==day)){numevents++;setClass(i);}
}
}
else if((events[i][2]==day)&&(events[i][1]==month)&&(events[i][3]==year)&&(inRange(day,month)===true)){
  numevents++;setClass(i);}
}
if(numevents === 0){return false;} else {return true;}
}

function showevents(day,month,year,week,dayofweek){
theevent="";floater=0;
for (i=0;i<events.length;i++){
// First we'll process recurring events (if any):
if(events[i][0]!==""){
if(events[i][0]=="D"){
}
if(events[i][0]=="W"){
if((events[i][2]==dayofweek)&&(inRange(day,month)===true)){dspEvent(day,month,year);}
}
if(events[i][0]=="M"){
if((events[i][2]==day)&&(inRange(day,month)===true)){dspEvent(day,month,year);}
}
if(events[i][0]=="Y"){
if((events[i][2]==day)&&(events[i][1]==month)){dspEvent(day,month,year);}
}
if(events[i][0]=="F"){
if((events[i][1]==3)&&(events[i][2] === 0)&&(events[i][3]===0)){
if(easterday==day&&eastermonth==month){dspEvent(day,month,year);}
} else {
floater=floatingholiday(year,events[i][1],events[i][2],events[i][3]);
if((month==5)&&(events[i][1]==5)&&(events[i][2]==4)&&(events[i][3]==2)){
if((floater+7<=31)&&(day==floater+7)){dspEvent(day,month,year);}
} else if((events[i][1]==month)&&(floater==day)){dspEvent(day,month,year);}
}
}
}
// Now process any One Time events happening on the matching month,day,year:
else if((events[i][2]==day)&&(events[i][1]==month)&&(events[i][3]==year)){
dspEvent(day,month,year);}
}
if(theevent===""){
  document.getElementById('eventlist').innerHTML='No Events Today.';}
}

function floatingholiday(targetyr,targetmo,cardinaloccurrence,targetday){
// Floating holidays/events of the events.js file uses:
//the Month field for the Month (here it becomes the targetmo field)
//the Day field as Cardinal Occurrence (here it becomes cardinaloccurrence field)
//1=1st,2=2nd,3=3rd,4=4th,5=5th,6=6th occurrence of the day listed next
//the Year field as DayOfWeek the event/holiday falls on  (here it becomes the targetday field)
//1=Sunday,2=Monday,3=Tuesday,4=Wednesday,5=Thurday,6=Friday,7=Saturday
//example:"F","1","3","2",= Floating holiday in January on 3rd Monday of that month.
//
// In our code below:
// targetyr is the active year
// targetmo is the active month (1-12)
// cardinaloccurrence is the xth occurrence of the targetday (1-6)
// targetday is the day of the week the floating holiday is on
//0=Sun;1=Mon;2=Tue;3=Wed;4=Thu;5=Fri;6=Sat
//Note:subtract 1 from the targetday field if the info comes from the events.js file
//
// Note:
//If Memorial Day falls on the 22nd,23rd,or 24th,then we add 7 to the dayofmonth to the result.
//
// Example:targetyr=2052;targetmo=5;cardinaloccurrence=4;targetday=1
//This is the same as saying our floating holiday in the year 2052,is during May,on the 4th Monday
//
firstdate=new Date(String(targetmo)+"/1/"+String(targetyr));// Object Storing the first day of the current month.
firstday=firstdate.getUTCDay();// The first day (0-6) of the target month.
dayofmonth=0;// zero out our calendar day variable.
targetday=targetday-1;
if(targetday >= firstday){
cardinaloccurrence--;// Subtract 1 from cardinal day.
dayofmonth=(cardinaloccurrence * 7)+((targetday-firstday)+1);
} else {
dayofmonth=(cardinaloccurrence * 7)+((targetday-firstday)+1);
}
return dayofmonth;
}

function inRange(d,m){ // tests if display date is inside range interval
//start and end must be entered in mmdd or mm format [blank assumes worst case]
srange=events[i][4]+"0000"; srange=srange.substring(0,4);
erange=events[i][5]+"9999"; erange=erange.substring(0,4);
dday=d.toString();if(dday.length<2){dday="0"+dday;}
dmon=m.toString();if(dmon.length<2){dmon="0"+dmon;} ddate=dmon+dday;
if(ddate<srange){return false;}
if(ddate>erange){return false;}
return true;
}
function setClass(i2){
if((events[i2].length>=9)&&(evtFlag===false)){
   evtClassName=events[i2][8];evtFlag=true;} // first special is good one
}
