// calendar.js

   var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   var monthNames = new Array ("January","February","March","April","May","June","July","August","September","October","November","December");
   var d = document;
   var now = new Date();
   //if ( ! thisYear ) 
   var thisYear = now.getFullYear();  // returns 2010
   var thisMonth = now.getMonth(); // returns 0..11
   var thisDay = now.getDate(); // returns 0..6
   //  prev month cal-.htm  thisMonth--; next month cal+.htm thisMonth++;

   var firstDay = new Date(thisYear,displayMonth,1,5,0,0);
   var day1_dow = firstDay.getDay(); // returns 0..6 (Sun..Sat)

/// Removes leading and trailing whitespaces
function trim( str ) { return str.replace(/^\s+|\s+$/g,""); }

function c_set(s) {
   /// add a single event to the calendar - by specific date
   /// c_set("2010|11|12|8:00pm|City Council Meeting|../citygov/agendmin/index2009.html");
   var SS = s.split("|",6);
   SS[1]=trim(SS[1]); SS[2]=trim(SS[2]); SS[3]=trim(SS[3]); SS[4]=trim(SS[4]); SS[5]=trim(SS[5]);
   SS[3] = SS[3].toLowerCase();
   if ( SS[0] != thisYear ) return(true);
   if ( (SS[1] - 1) != displayMonth ) return(true);
   var lzday = "0000" + SS[2];
   var tag = "day" + lzday.substr(lzday.length-2,lzday.length);
   title = "&lt;strong&gt;"+ SS[4] + "&lt;/strong&gt;";
   var fullstring = "";
   if ( SS[3] != "00:00" ) fullstring = "<span class=time>" + SS[3] + "</span>&nbsp;";
   // insert URL if it exists
   if ( SS[5] == "nolink" ) { fullstring += "<span class=title style='color:black;'>" + trim(SS[4]) + "</span>"; }
   else { fullstring += "<span class=title ><A href=" + SS[5]+ " style='text-decoration:none;color:blue;'>" + trim(SS[4]) + "</a></span>"; }
   var E = document.getElementById(tag);
   if (E) E.innerHTML += fullstring + "<BR/>";
}

function ch_closed(s) { c_set(s); return (true); }

function r_set(s) {
   /// r_set("2010|3rd|WED|7:00pm|Committee Committee|../citygov/agendmin/index2009.html");
   /// r_set("year|Nth|XXX|time  |Event title        |url reference");
   /// add repeating events to calendar - for every Nth XXXday - this month, this year.
   var SS = s.split("|",6);
   if ( SS[0] != thisYear ) return(true);
   SS[1]=trim(SS[1]); SS[2]=trim(SS[2]); SS[3]=trim(SS[3]); SS[4]=trim(SS[4]); SS[5]=trim(SS[5]);
   SS[3] = SS[3].toLowerCase();
   var firstDay = new Date(thisYear,displayMonth,1,5,0,0);
   var day1_dow = firstDay.getDay(); // returns Su=0 .. Sa=6
   var desiredDay;
   switch(SS[2].substr(0,3).toUpperCase()) {
   case 'SUN': { desiredDay = 0; break; }
   case 'MON': { desiredDay = 1; break; }
   case 'TUE': { desiredDay = 2; break; }
   case 'WED': { desiredDay = 3; break; }
   case 'THU': { desiredDay = 4; break; }
   case 'FRI': { desiredDay = 5; break; }
   case 'SAT': { desiredDay = 6; break; }
   default:    { return (false);}
   }
   var diff = desiredDay - day1_dow;
   if ( diff < 0 ) diff += 7;
   // strip off st, nd, rd, th's from column 2
   diff += ( SS[1].substr(0,1) -1 ) * 7 + 1;
   // build tag
   var lzday = "000" + diff;
   var tag = "day" + lzday.substr(lzday.length-2,lzday.length);
   title = "&lt;strong&gt;"+ SS[4] + "&lt;/strong&gt;";
   var fullstring = "<span class=time>" + SS[3].toLowerCase() + "</span>&nbsp;";
   // insert URL if it exists
   if ( SS[5] == "nolink" ) { fullstring += "<span class=title style='color:black;'>" + trim(SS[4]) + "</span>"; }
   else { fullstring += "<span class=title><A href=" + SS[5]+ " style='text-decoration:none;color:blue;'>" + trim(SS[4]) + "</a></span>"; }
   var E = document.getElementById(tag);
   if (E) E.innerHTML += fullstring + "<BR/>";
}

function CH_closed(s) {
   /// add "City Hall Closed" spaced every 14 days
   /// CH_closed("2010|1|8|../announcements/HoursOfOperation.htm|");
   /// Mark every other Friday as closed starting with 1/8/2010
   var SS = s.split("|",5);
   if ( SS[0] != thisYear ) return(true);
   var firstDOYClosed   = SS[2] * 1;
   var window_open= 0; 
   switch(displayMonth) {
   case 11: { window_open += daysInMonth[10]; }
   case 10: { window_open += daysInMonth[9]; }
   case 9:  { window_open += daysInMonth[8]; }
   case 8:  { window_open += daysInMonth[7]; }
   case 7:  { window_open += daysInMonth[6]; }
   case 6:  { window_open += daysInMonth[5]; }
   case 5:  { window_open += daysInMonth[4]; }
   case 4:  { window_open += daysInMonth[3]; }
   case 3:  { window_open += daysInMonth[2]; }
   case 2:  { window_open += daysInMonth[1]; }
   case 1:  { window_open += daysInMonth[0]; }
   case 0:  { window_open += 1; break; }
   default: { break; }
   }

   var window_close = window_open + daysInMonth[displayMonth] - 1;

   // step through alternate weeks, starting with first friday off.  If DOY is within window, update tag
   for ( var w=firstDOYClosed;w<=367;w+=14 ) {
      if ((w >= window_open) && (w <= window_close)) {
         var lzday = "000" + ( w - window_open + 1 );  // create zero padded day
         var tag = "day" + lzday.substr(lzday.length-2,lzday.length);
         var E = document.getElementById(tag);
         if (E) E.innerHTML += "<span class=title><A href=" + SS[3]+ " style='text-decoration:none;color:blue;'><BR>City Hall Closed</a></span><BR/>"; 
      }
   } 
}

function drawCalendar() {
   /// write Month and Year
   d.writeln("<TABLE border=0 width=98% align=center cellpadding=0 cellspacing=0>");
   d.writeln("<TR  style='font-size:1.8em;font-weight:bold;font-family:Verdana,Arial;'>");
   d.writeln("<TD align=left width=50%>" + monthNames[displayMonth] + "</TD>");
   d.writeln("<TD align=right>" + thisYear + "</TD></TR></TABLE>");
   
   /// write Day names
   d.write("<TABLE border=1 width=98% align=center cellpadding=0 cellspacing=0 bgcolor=white>");
   d.write("<TR style='font-variant:small-caps;text-align:center;font-weight:bold;color:#666666'>");
   d.write("<TD width=15%>Sunday</TD><TD width=14%>Monday</TD><TD width=14%>Tuesday</TD><TD width=14%>Wednesday</TD>");
   d.write("<TD width=14%>Thursday</TD><TD width=14%>Friday</TD><TD width=15%>Saturday</TD></TR>");

   /// write cells and dates
   var rows = 1;
   d.write("<TR style='padding-left:5px;'>");
   /// blanks before day 1
   for (var i=0; i< day1_dow; i++) d.writeln("<TD style='background-color:#dddddd;padding-bottom:12px;' class=date>&nbsp;</TD>");
   /// day 1 through daysInMonth
   var LZday = "";
   var isToday;
   for (var j=1; j<= daysInMonth[displayMonth]; j++) {
      if ( (thisDay == j) && ( now.getMonth() == displayMonth) ) isToday="style='background-color:#ffffaa;'"; else isToday="";
      if ((i+j)%7 == 1) { d.writeln("<TR style='padding-left:5px;'>"); rows++; } //if Sunday, start a new row
      LZday = "0000" + j; 
      LZday = LZday.substr(LZday.length -2,LZday.length);
      d.write("<TD valign=top class=date style='padding-bottom:4px;'" + isToday + "><div class=date>" + j + "</div><div id=day" + LZday + " /></TD>");
      if ((i+j)%7 == 0) d.writeln("</TR>");  // if Saturday, end this row
   }
   /// blanks after daysInMonth
   var diff = 7 - (i + daysInMonth[displayMonth])%7;
   for ( var i=0;i<diff;i++) { d.writeln("<TD style='background-color:#dddddd;'>&nbsp;</TD>"); }
   d.writeln("</TR>");
   if (rows < 6) {
      d.writeln("<TR>");
      for (var i=0; i< 7; i++) d.writeln("<TD style='background-color:#dddddd;' class=date>&nbsp;</TD>");
      d.writeln("<TR>");
   }
   d.writeln("</table>");
      d.writeln("<div style='text-align:left;margin-right:25px;'><A href='calendarList.htm'>Full Year View</A></div>");

      d.writeln("<div style='text-align:right;margin-right:25px;'>");
      if ( displayMonth < thisMonth ) bold = "style='color:blue;'"; else bold = "style='font-weight:normal;font-size:1.0em;color:blue;'";
      d.writeln("<A href=cal-.htm " + bold  + ">" + monthNames[(thisMonth + 11)%12] + "</A>&nbsp;|&nbsp;");
      if ( displayMonth == thisMonth ) bold = "style='color:blue;'"; else bold = "style='font-weight:normal;font-size:1.0em;color:blue;'";
      d.writeln("<A href=cal.htm  " + bold  + ">TODAY</A>&nbsp;|&nbsp;");
      if ( displayMonth > thisMonth ) bold = "style='color:blue;'"; else bold = "style='font-weight:normal;font-size:1.0em;color:blue;'";
      d.writeln("<A href=cal+.htm " + bold  + ">" + monthNames[(thisMonth+1)%12]    + "</A></div>");
}   

