var arrowSlideTimer;
var blastOffTimer;
var blast = 5;


function hoverImage(img) {
  if (img.src.indexOf("hover") == -1)
    img.src = img.src.substring(0, img.src.lastIndexOf(".")) + "_hover" + img.src.substring(img.src.lastIndexOf("."));
  else
    img.src = img.src.replace("_hover", "");
}

function moveArrow(l) {
  clearTimeout(arrowSlideTimer);
  var arrowMiddle = Math.round(document.getElementById("arrow").offsetWidth / 2);
  var linkLeft = document.getElementById(l).offsetLeft;
  var linkMiddle = Math.round(document.getElementById(l).offsetWidth / 2);

  if (document.getElementById("arrow").offsetLeft <= linkLeft + linkMiddle - arrowMiddle)
    document.getElementById("arrow").style.left = document.getElementById("arrow").offsetLeft + Math.round(((linkLeft + linkMiddle) - (document.getElementById("arrow").offsetLeft + arrowMiddle)) / 10);
  else
    document.getElementById("arrow").style.left = document.getElementById("arrow").offsetLeft - Math.round(((document.getElementById("arrow").offsetLeft) - (linkLeft)) / 10);

  if (document.getElementById("arrow").offsetLeft == linkLeft + linkMiddle - arrowMiddle) {
    document.getElementById("arrow").style.left = linkLeft + linkMiddle - arrowMiddle;
    clearTimeout(arrowSlideTimer);
    return;
  }

  arrowSlideTimer = setTimeout('moveArrow("'+l+'")', 1);
}

function blastOff() {
  document.getElementById("arrow").style.top = 0 - blast;
  blast += 5;

  blastOffTimer = setTimeout('blastOff()', 1);
}

/* 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();

  var count;

// The days of the week
  document.write('<table width=532 cellpadding=2 cellspacing=1><tr valign="top"><td width=67 align="center"><b>Sunday</b></td><td width=67 align="center"><b>Monday</b></td><td width=67 align="center"><b>Tuesday</b></td><td width=67 align="center"><b>Wednesday</b></td><td width=67 align="center"><b>Thursday</b></td><td width=67 align="center"><b>Friday</b></td><td width=67 align="center"><b>Saturday</b></td></tr><tr height=67 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. Tuesday), will now start to receive numbers
        count = 1;

      if (count != null)
        document.write('<td width=67 class="calendar">' + ((count == date && month-1 == d.getMonth() && year == d.getFullYear()) ? '<font class="green"><font class="larger"><b>'+count+'</b></font>' : '<b>'+count+'</b>') + '<font class="smaller">');
      else
        document.write('<td width=67 class="calendar"></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=67 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 width=532 cellpadding=2 cellspacing=1><tr valign="top"><td width=67 align="center"><b>Sunday</b></td><td width=67 align="center"><b>Monday</b></td><td width=67 align="center"><b>Tuesday</b></td><td width=67 align="center"><b>Wednesday</b></td><td width=67 align="center"><b>Thursday</b></td><td width=67 align="center"><b>Friday</b></td><td width=67 align="center"><b>Saturday</b></td></tr><tr height=67 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. Tuesday), will now start to receive numbers
        count = 1;

      if (count != null)
        document.write('<td width=67 class="calendar">' + ((count == date && month-1 == d.getMonth() && year == d.getFullYear()) ? '<font class="green"><font class="larger"><b>'+count+'</b></font>' : '<b>'+count+'</b>') + '<font class="smaller">');
      else
        document.write('<td width=67 class="calendar"></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=67 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="addNews.pl" method="post"><input type="hidden" name="action" value="modify"><input type="hidden" name="date" value="'+events[i][0]+'"><input type="hidden" name="title" value="'+events[i][1]+'"><input type="hidden" name="description" value="'+events[i][2]+'"><input type="text" name="newTitle" value="' + events[i][1] + '" onblur="this.value = validateQuotes(this.value)"><br><textarea name="newDescription" onblur="this.value = validateQuotes(this.value)">' + events[i][2] + '</textarea><br><input type="submit" value="Modify"></form><form action="addNews.pl" method="post"><input type="hidden" name="action" value="delete"><input type="hidden" name="date" value="'+events[i][0]+'"><input type="hidden" name="title" value="' + events[i][1] + '"><input type="submit" value="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><a href="#eventInfo" onclick="displayEventInfo(\'' + events[i][1].replace(quote, "\\\'") + '\',\'' + events[i][2].replace(quote, "\\\'") + '\');">' + events[i][1] + '</a><br>');
  }
}

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