/* CALENDAR */
var urlSearch = document.location.search;

var d = new Date();
var date = d.getDate();
var month = d.getMonth() + 1;
var year = d.getFullYear();
var quote = new RegExp ('\'|\"', 'gi');

if (urlSearch.indexOf("month=") != -1) {
  var m = urlSearch.substring(urlSearch.indexOf("month=")+6, urlSearch.indexOf("&"));
  var pm = urlSearch.substring(urlSearch.indexOf("from=")+5, urlSearch.lastIndexOf("&"));
  var y = urlSearch.substring(urlSearch.indexOf("year=")+5, urlSearch.length);
  if (m == 12 && pm == 1)
    y--;
  if (m == 1 && pm == 12)
    y++;
  month = m;
  year = y;
}

var monthName = new Array("","January","February"           ,"March","April","May","June","July","August","September","October","November","December");
var monthDays = new Array("","31"     ,(year%4==0)?"29":"28","31"   ,"30"   ,"31" ,"30"  ,"31"  ,"31"    ,"30"       ,"31"     ,"30"      ,"31"      );

var loaded = "false";

function writeUpcomingEvents() {
// Writes the events which will occur in the next week
  var e = getUpcomingEvents();

  document.write('Click the event titles for more info.<br><br>');

  for (k = 0; k < e.length; k++) {
    for (l = 0; l < e[k].length ; l++) {
    // Gets the month ( <<12>>/25/03 )
      var eMonth = e[k][l][0].substring(0,e[k][l][0].indexOf("/"));
    // Gets the date ( 12/<<25>>/03 )
      var eDate = e[k][l][0].substring(e[k][l][0].indexOf("/")+1,e[k][l][0].lastIndexOf("/"));
    // Writes the month name and the date in bold, then the event title in bold, followed by the event description.
      document.write('<b>' + monthName[eMonth] + ' ' + eDate + ':<br><a href="javascript:void(0);" onmouseup="(document.getElementById(\'ue'+k+l+'\').innerHTML == \'\') ? document.getElementById(\'ue'+k+l+'\').innerHTML=\'' + e[k][l][2].replace(quote, "\\\'") + '\' : document.getElementById(\'ue'+k+l+'\').innerHTML=\'\'; alignFooter();">' + e[k][l][1].replace(quote, "\\\'") + '</a></b><br><div id="ue'+k+l+'"></div><hr>');
    }
  }
}

function getUpcomingEvents() {
// Searches the calendar for events within the next 7 days
  var results = new Array();
  var mo = month;
  var eventIndex = 0;
  var day = date;

  for (j = date; j <= date + 7; j++) {
    if (day > monthDays[mo]) {
    // If we have reached the end of the month
    // Go to the next month and start the days at 1
      mo = nextMonth(mo);
      day -= monthDays[mo];
    }

    if (searchCalendar(d.getDay(), day, mo, year) != -1)
    // If any events were returned on this particular day
    // Add them to the next empty index of the results array
      results[eventIndex++] = searchCalendar(d.getDay(), day, mo, year);

    day++;
  }

  return results;
}

function nextDate(nextDateDay, nextDateM) {
// Gets the next day, sensitive to the end of the month
  if (nextDateDay != monthDays[nextDateM])
    return nextDateDay + 1;
  return nextDateDay - monthDays[nextDateM];
}

function previousDate(previousDateDay, previousDateM) {
// Gets the previous day, sensitive to the beginning of the month
  if (previousDateDay != 0)
    return previousDateDay - 1;
  return monthDays[previousMonth(previousDateM)];
}

function nextMonth(nextMonthM) {
// Gets the next month, sensitive to the end of the year
  nextMonthM++;
  nextMonthM--;
  if (nextMonthM != 12)
    return nextMonthM + 1;
  return 1;
}

function previousMonth(previousMonthM) {
// Gets the previous month, sensitive to the beginning of the year
  if (previousMonthM != 1)
    return previousMonthM - 1;
  return 12;
}

function searchCalendar(dow, d, m, y) {
// Returns an array of any events in the calendar database on a particular day
  var events = new Array();
  events[0] = -1;
  var index = 0;

  for (i = 0; i < calendar.length; i++) {
  // If the month and date equal the target
    if (calendar[i][0].indexOf("*") != -1) {
      if (calendar[i][0].substr(calendar[i][0].indexOf("*")+1, calendar[i][0].length) == dow)
        events[index++] = calendar[i];

      continue;
    }

    if (calendar[i][0].substring(0,calendar[i][0].indexOf("/")) == m && calendar[i][0].substring(calendar[i][0].indexOf("/")+1,calendar[i][0].lastIndexOf("/")) == d && calendar[i][0].substring(calendar[i][0].lastIndexOf("/")+1,calendar[i][0].length) == "0" + (y - 2000))
      events[index++] = calendar[i];
  }
  // If there were no events, return -1
  return (events[0] != -1) ? events : -1;
}

function writeCalendar() {
// Writes the calendar grid, date numbers, and events within those dates
  var totalDays = monthDays[month];
  var fD = new Date()
  fD.setFullYear(year);
  fD.setMonth(month-1);
  fD.setDate(1);
  var firstDay = fD.getDay();

  if (year == 2005 && month == 3)
    firstDay = 6;

  var count;

// The days of the week
  document.write('<table cellpadding=2 cellspacing=1 bgcolor="CCCCCC"><tr valign="top"><td width=50 align="center" bgcolor="FFFFFF"><b>Sun</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Mon</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Tue</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Wed</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Thu</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Fri</b></td><td width=50 align="center" bgcolor="FFFFFF"><b>Sat</b></td></tr><tr height=50 valign="top">');

  for (r = 0; r <= 5; r++) {
    for (c = 0; c < 7; c++) {
    // Write the date number.  If it is today, highlight everything in blue
      d = new Date();

      if (r < 1 && c == firstDay)
      // Spaces after the first day of the month (i.e. Tue), will now start to receive numbers
        count = 1;

      var classes = (searchCalendar(c, count, month, year) == -1) ? "" : 'class="operaMarker"';
      if (count != null)
        document.write('<td width=50 bgcolor="FFFFFF" '+classes+'>' + ((count == date && month-1 == d.getMonth() && year == d.getFullYear()) ? '<font class="red"><b>'+count+'</b></font>' : '<b>'+count+'</b>') + '<font class="smaller">');
      else
        document.write('<td width=50></td>');

      if (count >= monthDays[month])
      // If we have reached the end of the month
        return;

    // Write any events occurring today
      writeEvents(c, count, month);

      document.write('</font></td>');

      if (count != null)
        count++;
    }
    document.write('</tr><tr height=50 valign="top">');
  }
}

function writeModifyCalendar() {
// Writes the calendar grid, date numbers, and events within those dates
  var totalDays = monthDays[month];
  var fD = new Date()
  fD.setFullYear(year);
  fD.setMonth(month-1);
  fD.setDate(1);
  var firstDay = fD.getDay();

  var count;

// The days of the week
  document.write('<table cellpadding=2 cellspacing=1 bgcolor="CCCCCC"><tr valign="top"><td width=50 align="center"><b>Sun</b></td><td width=50 align="center"><b>Mon</b></td><td width=50 align="center"><b>Tue</b></td><td width=50 align="center"><b>Wed</b></td><td width=50 align="center"><b>Thu</b></td><td width=50 align="center"><b>Fri</b></td><td width=50 align="center"><b>Sat</b></td></tr><tr height=50 valign="top">');

  for (r = 0; r <= 5; r++) {
    for (c = 0; c < 7; c++) {
    // Write the date number.  If it is today, highlight everything in blue
      d = new Date();

      if (r < 1 && c == firstDay)
      // Spaces after the first day of the month (i.e. Tue), will now start to receive numbers
        count = 1;

      if (count != null)
        document.write('<td bgcolor="FFFFFF">' + ((count == date && month-1 == d.getMonth() && year == d.getFullYear()) ? '<font class="red"><b>'+count+'</b></font>' : '<b>'+count+'</b>') + '<font class="smaller">');
      else
        document.write('<td bgcolor="FFFFFF"></td>');

      if (count >= monthDays[month])
      // If we have reached the end of the month
        return;

    // Write any events occurring today
      writeModifyEvents(c, count, month);

      document.write('</font></td>');

      if (count != null)
        count++;
    }
    document.write('</tr><tr height=50 valign="top">');
  }
}


function writeModifyEvents(dow, d, m) {
// Writes the title of any events found by searchCalendar
  var events = searchCalendar(dow, d, m, year);

  for (i = 0; i < events.length; i++) {
    document.write('<center><form action="opera_modifySchedule.pl" method="post"><input type="hidden" name="action" value="delete"><input type="hidden" name="date" value="'+events[i][0]+'"><input type="hidden" name="time" value="'+events[i][1]+'"><input type="hidden" name="ampm" value="'+events[i][2]+'"><input type="submit" class="smaller" style="height:25" value="'+events[i][1]+' '+events[i][2]+'"><br>Delete</form></center>');
  }
}

function writeEvents(dow, d, m) {
// Writes the title of any events found by searchCalendar
  var events = searchCalendar(dow, d, m, year);

  for (i = 0; i < events.length; i++) {
    document.write('<br><img src="spacer.gif" height=4><br><center><font color="FFFFFF"><b>'+events[i][1]+'<br>'+events[i][2]+'</b></font></center>');
  }
}

function displayEventInfo(event, info) {
  document.getElementById("eventInfo").innerHTML = '<font class="larger"><b>' + event + '</b></font><br>' + info;
}

function validateQuotes(str) {

  for (i = 0; i < str.length; i++) {
    if (str.charAt(i) == "\'" && str.charAt(i-1) != "\\")
      str = str.substring(0, i) + "\\" + str.substring(i++, str.length);

    if (str.charAt(i) == "\"" && str.charAt(i-1) != "\\")
      str = str.substring(0, i) + "\\" + str.substring(i++, str.length);

    if (str.indexOf("\n") != -1)
      str = str.substring(0, str.indexOf("\n")-1) + "<br>" + str.substring(str.indexOf("\n")+1, str.length);
  }

  return str;
}

var calendar = new Array();
var index = 0;






calendar[index++] = new Array('12/2/04','12:00','PM');
calendar[index++] = new Array('12/6/04','12:00','PM');
calendar[index++] = new Array('1/7/05','12:00','PM');
calendar[index++] = new Array('1/12/04','6:00','PM');
calendar[index++] = new Array('1/18/05','12:00','PM');
calendar[index++] = new Array('2/2/05','12:00','PM');
calendar[index++] = new Array('2/9/05','6.00','PM');
calendar[index++] = new Array('2/13/05','12.00','PM');
calendar[index++] = new Array('2/14/05','6.00','PM');
calendar[index++] = new Array('3/7/05','12.00','PM');
calendar[index++] = new Array('3/15/05','6.00','PM');
calendar[index++] = new Array('3/17/05','12.00','PM');
calendar[index++] = new Array('3/29/05','6.00','PM');
calendar[index++] = new Array('4/6/05','6.00','PM');
calendar[index++] = new Array('4/18/05','6.00','PM');
calendar[index++] = new Array('4/20/05','12.00','PM');
calendar[index++] = new Array('4/14/05','12.00','PM');

calendar[index++] = new Array('1/12/05','6:00','PM');
calendar[index++] = new Array('5/12/05','12.00','PM');
calendar[index++] = new Array('6/6/05','12.00','PM');
calendar[index++] = new Array('6/23/05','6.00','PM');
calendar[index++] = new Array('7/14/05','12.00','PM');
calendar[index++] = new Array('7/28/05','6.00','PM');
calendar[index++] = new Array('8/11/05','12.00','PM');
calendar[index++] = new Array('8/25/05','6.00','PM');
calendar[index++] = new Array('9/9/05','12.00','PM');
calendar[index++] = new Array('9/22/05','6.00','PM');
calendar[index++] = new Array('5/24/05','6.00','PM');


calendar[index++] = new Array('10/19/05','6.00','PM');
calendar[index++] = new Array('10/28/05','12.00','PM');
calendar[index++] = new Array('11/11/05','12.00','PM');
calendar[index++] = new Array('11/15/05','6.00','PM');
calendar[index++] = new Array('12/5/05','12.00','PM');
calendar[index++] = new Array('12/6/05','6.00','PM');
calendar[index++] = new Array('12/22/05','12.00','PM');
calendar[index++] = new Array('1/5/06','12.00','PM');
calendar[index++] = new Array('1/17/06','6.00','PM');
calendar[index++] = new Array('1/25/06','12.00','PM');
calendar[index++] = new Array('2/6/06','12.00','PM');
calendar[index++] = new Array('2/14/06','12.00','PM');
calendar[index++] = new Array('2/14/06','6.00','PM');
calendar[index++] = new Array('3/7/05','12.00','PM');
calendar[index++] = new Array('3/14/06','6.00','PM');
calendar[index++] = new Array('3/17/06','12.00','PM');
calendar[index++] = new Array('3/7/06','12.00','PM');
calendar[index++] = new Array('3/3/06','12.00','PM');
calendar[index++] = new Array('4/6/06','12.00','PM');
calendar[index++] = new Array('5/5/06','12.00','PM');
calendar[index++] = new Array('5/23/05','6.00','PM');
calendar[index++] = new Array('3/3/06','12.00','PM');
calendar[index++] = new Array('3/3/06','12.00','PM');
calendar[index++] = new Array('5/23/06','6.00','PM');
calendar[index++] = new Array('5/23/06','6.00','PM');
calendar[index++] = new Array('4/24/06','6.00','PM');
calendar[index++] = new Array('5/5/06','12.00','PM');
calendar[index++] = new Array('5/23/06','6.00','PM');
calendar[index++] = new Array('6/8/06','12.00','PM');
calendar[index++] = new Array('6/22/06','6.00','PM');
calendar[index++] = new Array('7/12/06','12.00','PM');
calendar[index++] = new Array('7/19/06','6.00','PM');
calendar[index++] = new Array('8/10/06','12.00','PM');
calendar[index++] = new Array('7/12/06','12.00','PM');
calendar[index++] = new Array('7/19/06','6.00','PM');
calendar[index++] = new Array('8/10/06','12.00','PM');
calendar[index++] = new Array('8/23/05','6.00','PM');
calendar[index++] = new Array('9/7/06','12.00','PM');
calendar[index++] = new Array('10/10/06','12.00','PM');
calendar[index++] = new Array('10/25/06','6.00','PM');
calendar[index++] = new Array('11/10/06','12.00','PM');
calendar[index++] = new Array('11/16/06','6.00','PM');
calendar[index++] = new Array('12/7/06','12.00','PM');
calendar[index++] = new Array('12/19/06','6.00','PM');
calendar[index++] = new Array('8/23/06','6.00','PM');
calendar[index++] = new Array('2/14/07','12.00','PM');
calendar[index++] = new Array('2/14/07','6.00','PM');
calendar[index++] = new Array('1/10/07','6.00','PM');
calendar[index++] = new Array('2/12/07','12.00','PM');
calendar[index++] = new Array('3/5/07','12.00','PM');
calendar[index++] = new Array('4/12/07','6.00','PM');
calendar[index++] = new Array('1/23/07','12.00','PM');
calendar[index++] = new Array('2/1/07','12.00','PM');
calendar[index++] = new Array('2/28/07','6.00','PM');
calendar[index++] = new Array('3/28/07','12.00','PM');
calendar[index++] = new Array('4/17/07','12.00','PM');
calendar[index++] = new Array('6/21/07','06.00','PM');
calendar[index++] = new Array('7/12/07','12.00','PM');
calendar[index++] = new Array('7/26/07','06.00p','PM');
calendar[index++] = new Array('7/26/07','06.00','PM');
calendar[index++] = new Array('8/10/07','12.00','PM');
calendar[index++] = new Array('8/23/07','06.00','PM');
calendar[index++] = new Array('9/7/07','12.00','PM');
calendar[index++] = new Array('9/27/07','06.00','PM');
calendar[index++] = new Array('10/11/07','12.00','PM');
calendar[index++] = new Array('10/29/07','06.00','PM');
calendar[index++] = new Array('11/6/07','12.00','PM');
calendar[index++] = new Array('11/15/07','06.00','PM');
calendar[index++] = new Array('12/11/07','12.00','PM');
calendar[index++] = new Array('1/15/08','06.00','PM');
calendar[index++] = new Array('1/21/08','12.00','PM');
calendar[index++] = new Array('2/14/08','12.00p','PM');
calendar[index++] = new Array('2/14/08','06.00','PM');
calendar[index++] = new Array('2/12/08','06.00p','PM');
calendar[index++] = new Array('3/3/08','12.00p','PM');
calendar[index++] = new Array('3/17/08','06.00p','PM');
calendar[index++] = new Array('1/1/05','','PM');
calendar[index++] = new Array('4/7/08','12.00','PM');
calendar[index++] = new Array('4/15/08','6.00','PM');
calendar[index++] = new Array('5/6/08','6.00','PM');
calendar[index++] = new Array('1/1/05','','PM');
calendar[index++] = new Array('5/27/08','12.00','PM');
calendar[index++] = new Array('6/11/08','12.00','PM');
calendar[index++] = new Array('6/26/08','06.00','PM');
calendar[index++] = new Array('7/23/08','6,00','PM');
calendar[index++] = new Array('7/24/08','12.00','PM');
calendar[index++] = new Array('8/7/08','6.00','PM');
calendar[index++] = new Array('8/28/08','12.00','PM');
calendar[index++] = new Array('9/12/08','12.00','PM');
calendar[index++] = new Array('10/16/08','12.00','PM');
calendar[index++] = new Array('10/29/08','6.00','PM');
calendar[index++] = new Array('11/11/08','12.00','PM');
calendar[index++] = new Array('11/12/08','6.00','PM');
calendar[index++] = new Array('12/9/08','12.00','PM');
calendar[index++] = new Array('12/9/08','12.00','PM');
calendar[index++] = new Array('1/13/09','6.00','PM');
calendar[index++] = new Array('1/19/09','12.00','PM');
calendar[index++] = new Array('2/14/09','6.00','PM');
calendar[index++] = new Array('2/24/09','6.00','PM');
calendar[index++] = new Array('3/2/09','12.00','PM');
calendar[index++] = new Array('3/23/09','12.00','PM');
calendar[index++] = new Array('4/1/09','12.00','PM');
calendar[index++] = new Array('4/22/09','6.00','PM');
calendar[index++] = new Array('3/17/09','6.00','PM');
calendar[index++] = new Array('5/28/09','12.00','PM');
calendar[index++] = new Array('6/3/09','6.00','PM');
calendar[index++] = new Array('6/25/09','12.00','PM');
calendar[index++] = new Array('7/9/09','12.00','PM');
calendar[index++] = new Array('7/23/09','06.00','PM');
calendar[index++] = new Array('8/5/09','12.00','PM');
calendar[index++] = new Array('8/20/09','06.00','PM');
calendar[index++] = new Array('9/10/09','12.00','PM');
calendar[index++] = new Array('10/7/09','12.00','PM');
calendar[index++] = new Array('1/1/05','','PM');
calendar[index++] = new Array('10/28/09','06.00','PM');
calendar[index++] = new Array('11/5/09','12.00','PM');