//---------------  GLOBALS ---------------
var d=new Date();
var monthname=new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var dayname=new Array ("SUNDAY","Monday", "Tuesday","Wednesday","Thursday","Friday","Saturday");
var TODAY = dayname[d.getDay()] + ", " + monthname[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear();
var d0=d.getDate();
var m0=d.getMonth()+1;
var y0=d.getFullYear();
var day0V=new Date(2008,1,8); //first "Vespers" at 2/9/2008 
var dayFV=new Date(2008,5,1); //last "Vespers" at 6/1/2008 
//---------------   END GLOBALS   ---------------

function writeSchedule(){
var j;
var mC,dC;
var dRef=-1,mRef=-1,flagSat=0;
var numSun,maxWriteSun=99,inSchedule=1;

writeScheduleHeader();
for(j=0;j<event.length;j++){
 eC=event[j].split('|');
 mC=parseInt(eC[0]);
 dC=parseInt(eC[1]);
 if (dC!=dRef || mC!=mRef) {
  flagSat=endPrevDay(dRef,mRef,flagSat);
  numSun=writeSundaysBetween(dRef,mRef,y0,dC,mC,y0,maxWriteSun,inSchedule);
 }//if: same day
 flagSat=writeDay(dC,mC,y0,eC,dRef,mRef,flagSat);
 dRef=dC;mRef=mC;
} //for j
flagSat=endPrevDay(dRef,mRef,flagSat);
numSun=writeSundaysNextMonth(dRef,mRef,y0,maxWriteSun,inSchedule); 
writeScheduleFooter();
}

function writeEvents(){
var j;
var mC,dC;
var dRef=-1,mRef=-1,flagSat=0;
var count=0,countmax=20; //poor fix for counting more events between Sat/Sun
var countSun=0,countmaxSun=1; //max of 3 events or 1 Sunday (+1)
var numSun,inSchedule=0;

writeEventsHeader();
if (!DayOfWeek(d0,m0,y0)) countmaxSun=2; //up to next Sunday
for(j=0;j<event.length;j++){
 eC=event[j].split('|');
 mC=parseInt(eC[0]);
 dC=parseInt(eC[1]);
 if ((100*m0+d0)<=(100*mC+dC)) {   
  if (dC!=dRef || mC!=mRef) {
   flagSat=endPrevDay(dRef,mRef,flagSat);
   numSun=writeSundaysBetween(dRef,mRef,y0,dC,mC,y0,countmaxSun,inSchedule);
   count+=numSun;countSun+=numSun;
  }//if: same day
  if (count<countmax && countSun<countmaxSun){
   flagSat=writeDay(dC,mC,y0,eC,dRef,mRef,flagSat);
   if (dC!=dRef || mC!=mRef) { 
    count++;
    if (!DayOfWeek(dC,mC,y0)) countSun++; //adding a Sunday
   }//if: same day
  }//if more to count 
  dRef=dC;mRef=mC; 
 }//if upcoming events only
 if ( count==countmax || countSun==countmaxSun) j=event.length;
} //for j
flagSat=endPrevDay(dRef,mRef,flagSat);
if (countSun<countmaxSun ) numSun=writeSundaysNextMonth(dRef,mRef,y0,(countmaxSun-countSun),inSchedule); 
writeEventsFooter();
}

function writeDay(dC,mC,yC,eC,dRef,mRef,flagSat){ //return flagSat

 if (dC!=dRef || mC!=mRef) { //new date entry
  flagSat=endPrevDay(dRef,mRef,flagSat); //include usual for Saturdays
  inD(dC,mC,yC);
  if (DayOfWeek(dC,mC,yC)==6) flagSat=1; //Saturdays
  if (!DayOfWeek(dC,mC,yC) && eC[7]!='x') {in0(); if (eC[4]) document.write('<\/li>');} //add usual for Sundays  
 }//if: same day
 else if (eC[4]) document.write('<\/li>'); //date entry repeated; new event follows
 if (eC[4]) inE(eC[2],eC[3],eC[4]); // new event
 if (eC[5]) inEa(eC[5]);
 if (eC[6]) inEb(eC[6]);
 if (eC[7]=='x') flagSat=0;
 return flagSat;
}


function endPrevDay(dRef,mRef,flagSat){ //return flagSat
var dTemp=new Date(y0,mRef-1,dRef);

if (flagSat) { 
 if (dTemp>day0V && dTemp<dayFV) {document.write('<\/li>');in0a();} //add usual for Saturdays
 inEnd(); flagSat=0;} 
else if (dRef>=0 && mRef>=0) inEnd(); 
return flagSat;
}


function writeSundays(d1,m1,y1,d2,m2,y2,maxSun){ //Saturdays or/and Sundays
var dFirst=new Date(y1,(m1-1),d1);
var dSat=new Date(y1,(m1-1),d1);
var dSun=new Date(y1,(m1-1),d1);
var dLast=new Date(y2,(m2-1),d2);
var day;
var numSun=0;

dSat.setDate(dSat.getDate()+1); //start from the "day after 1"
dSun.setDate(dSun.getDate()+1); //start from the "day after 1"
day=dSun.getDay();
if (day) {dSun.setDate(dSun.getDate()+(7-day));dSat.setDate(dSat.getDate()+(7-day));}
dSat.setDate(dSat.getDate()-1);
while ( (dSun < dLast || dSat < dLast) && numSun<maxSun) {   //"<": end until the "day before 2"
 if (dFirst<dSat && dSat < dLast && dSat>day0V && dSat<dayFV) 
  {inD(dSat.getDate(),dSat.getMonth()+1,dSat.getFullYear());in0a(); inEnd();} //Sat
 if (dSun < dLast) 
  {inD(dSun.getDate(),dSun.getMonth()+1,dSun.getFullYear());in0(); inEnd();numSun++;} //Sun
 dSat.setDate(dSat.getDate()+7);
 dSun.setDate(dSun.getDate()+7);
} //while 
if ( numSun!=(maxSun+1) ) inSun=numSun;
else inSun=maxSun;
return inSun;
}


function writeSundaysBetween(dRef,mRef,yRef,dC,mC,yC,cMax,inSchedule){ //return number of Sundays
var cN0=0,cN=0;
var dayRef=new Date(yRef,mRef-1,dRef); 
var dayC=new Date(yC,mC-1,dC); 
var day0=new Date(y0,m0-1,d0); //sets time of TODAY to 0:00:00

if (dRef>0 && mRef>0){
 if ( dayRef < day0 && day0 <= dayC ){
  cN0=writeSundays(dRef,mRef,yRef,d0,m0,y0,cMax);
  if (inSchedule) putToTopOfPageRefCell();
  day0.setDate(day0.getDate()-1);
  cN=writeSundays(day0.getDate(),day0.getMonth()+1,day0.getFullYear(),dC,mC,yC,cMax-cN0);
  cN+=cN0;
 }//if ref<TODAY<=current
 else  cN=writeSundays(dRef,mRef,yRef,dC,mC,yC,cMax); 
}  
else { //no prior input
 if (inSchedule) cN=writeSundays(11,31,y0-1,dC,mC,yC,cMax); //write Sundays starting from Jan 01 (12/31)
 else {  //write Sundays starting from yesterday
  day0.setDate(day0.getDate()-1);
  cN=writeSundays(day0.getDate(),day0.getMonth()+1,day0.getFullYear(),dC,mC,yC,cMax);
 }//else: from yesterday
}//else: no prior input	
return cN;	
}


function writeSundaysNextMonth(dRef,mRef,yRef,cMax,inSchedule){ //return number of Sundays
var cN0=0,cN=0;
var dayRef=new Date(yRef,mRef-1,dRef); 
var day0=new Date(y0,m0-1,d0); //sets time of TODAY to 0:00:00

if ( dayRef < day0) { 
 if (inSchedule) {
  cN0=writeSundays(dRef,mRef,yRef,d0,m0,y0,cMax);
  putToTopOfPageRefCell();
 }//if inSchedule 
 dayRef=day0;
 dayRef.setDate(dayRef.getDate()-1);
 dRef=dayRef.getDate();mRef=dayRef.getMonth()+1;yRef=dayRef.getFullYear();
} //Ref or Yesterday
if (mRef<12) cN=writeSundays(dRef,mRef,yRef,dRef,mRef+1,yRef,cMax-cN0); 
else cN=writeSundays(dRef,mRef,yRef,31,12,yRef,cMax-cN0);
cN+=cN0;
return cN;
}


function inD(dd,mm,yy){ //include Date
var str=''; // !add day

str+='<tr align="left" valign="top"><td class="textReg"> <b>';
str+=dayname[DayOfWeek(dd,mm,yy)];
str+=', ';
str+=monthname[mm-1];
str+=' ';
str+=dd;
str+='<\/b><ul>';
document.write(str);
}

function inE(hh,am,ee){ //include event; NOTE: add when needed document.write('<\/li>');
var str='';

str+='<li><span class="textReg">';
if (hh){ 
 str+=hh;
 str+=' ';
 if (am=='am') str+='a.m.';
 else str+='<b>p.m.<\/b>';
 str+=' ';} //not all-day event
str+=ee;
str+='<\/span>';
document.write(str);
}

function inEa(ea){ //include additional info1 for event
var str='';

str+='<br><span class="textAlt">';
str+=ea;
str+='<\/span>';
document.write(str);
}

function inEb(ea){ //include additional info2 for event
var str='';

str+='<br> <span class="textReg">';
str+=ea;
str+='<\/span>';
document.write(str);
}

function inEnd(){ //include ending format
var str='';

str+='<\/li><\/ul><\/td><\/tr>';
document.write(str);
}

function in0(){ //include 9:00 am: Orthros; 10:00 am: Divine Liturgy

inE('09:00','am','Orthros');
document.write('<\/li>');
inE('10:00','am','Divine Liturgy');
}

function in0a(){ //include 5:30 pm: Vespers; NOW: 6:00pm (03/24/08)

inE('06:00','pm','Vespers');
}

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;
}

function putToTopOfPageRefCell() {

document.write('<tr><td><a name="todayEvent"><\/a>');
putToTopOfPage('left'); //putToTopOfPage in "scrolling.js"
document.write('<\/td><\/tr>');
}

function putToTopOfPageI() { //putToTopOfPage in "scrolling.js"
var str='';

str+='<a href="#top" title="To Top of Page">';
str+='<table align="left" cellpadding="0" cellspacing="0"><tr><td>';
str+='<img src="Pictures/arrowUp.gif" border="0" alt=""><\/td><\/tr>';
str+='<tr><td align="center"><span style="font-size:12px;">Top <\/span><\/td><\/tr><\/table><\/a>';
document.write(str);
}

function writeScheduleHeader(){
var str='';

str+='<table  cellpadding="4">';
document.write(str);
}


function writeScheduleFooter(){
var str='<\/table>';

document.write(str);
}


function writeEventsHeader(){
var str='';

str+='<table  cellspacing="3" width="100%" class="eventstable" id="ev">';
str+=' <tr><th style="line-height:1px;border-top: 2px solid #DDCA73;">&nbsp; <\/th><\/tr>';
str+=' <tr><th align="left">';
str+='  <div style="font-size:16px;line-height:22px;letter-spacing:.1em;">';
str+='  <a href="schedule.html#todayEvent" title ="Click for More Events" target="Main">Upcoming Events:<\/a><\/div><\/th><\/tr>';
document.write(str);
}

function writeEventsFooter(){
var str='';

str+='<tr><th style="line-height:1px;border-bottom: 2px solid #DDCA73;">&nbsp;'; 
str+='<\/th><\/tr><\/table>'; 
document.write(str);
}