var events = [];

Date.abbrDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
Date.monthNames   = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
Date.monthDays    = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

function calendar_html(todayDate, url) {
  if(url == '/') url = '';
  var base_url   = url+'/shows/';
  var html       = "";

  thisday   = todayDate.getDay();
  thismonth = todayDate.getMonth();
  thisdate  = todayDate.getDate();
  thisyear  = todayDate.getYear();
  thisyear  = thisyear % 100;
  thisyear  = ((thisyear < 50) ? (2000 + thisyear) : (1900 + thisyear));

  var events_url = url+'/events/on/'+thisyear+'/'+(thismonth+1)+'.json'
  if (((thisyear % 4 == 0) && !(thisyear % 100 == 0)) || (thisyear % 400 == 0)) Date.monthDays[1]++;
  startspaces=thisdate;
  while (startspaces > 7)
    startspaces-=7;
  startspaces = thisday - startspaces + 1;
  if (startspaces < 0) startspaces+=7;
    html += ('<div id="calendar"><table border="0" cellspacing="0" cellspacing="0" class="calendar">');
  if (thismonth == 11) {
    prevmonth = base_url+thisyear+'/11';
    nextmonth = base_url+(thisyear+1)+'/1';
  } else if (thismonth == 0) {
    prevmonth = base_url+(thisyear-1)+'/12';
    nextmonth = base_url+thisyear+'/2';
  } else {
    prevmonth = base_url+thisyear+'/'+thismonth;
    nextmonth = base_url+thisyear+'/'+(parseInt(thismonth)+2);
  }
  html += ('<th colspan="1"><a href="'+prevmonth+'" class="arrow_l"><span>«</span></a></th><th colspan="5" class="monthName">'+Date.monthNames[thismonth]+' ' + (thisyear) + '</th><th colspan="1"><a href="'+nextmonth+'" class="arrow_r"><span>»</span></a></th></tr>')
  html += ('<tr class="dayName">');
  for (d=0;d<Date.abbrDayNames.length;d++) {
    html += ('<th scope="col">' + Date.abbrDayNames[d] + '</th>');
  }
  html += ("</tr>");
  html += ("<tr>");
  for (s=0;s<startspaces;s++) {
    html += ("<td> </td>");
  }
  var count = 1;
  while (count <= Date.monthDays[thismonth]) {
    for (b = startspaces;b<7;b++) {
      if (count <= Date.monthDays[thismonth]) {
        if(events[count]) {
          html += ('<td class="eventDay" id="day-'+count+'">');
          date = new Date(thisyear, thismonth, count);
          html += ('<a href="'+base_url+thisyear+'/'+(thismonth+1)+'/'+count+'">'+count+'</a>'+calendarDayHTML(date, events[count]));
        } else {
          html += '<td>'+count;
        }
      }
      else {
       html += (" ");
      }
      html += ("</td>");
      count++;
    }
    html += ("</tr>");
    html += ("<tr>");
    startspaces = 0;
  }
  html += ("</table></div>");
  return html;
}

function calendarDayHTML(date, events) {
  var html = '<div class="calendar-popup" style="display:none;">';
  html += '<strong>' + Date.abbrDayNames[date.getDay()] + ' ' + date.getDate() + ' ' + Date.monthNames[date.getMonth()] +'</strong>';
  html += '<ul>';
  for(var i=0; i<events.length; i++)
    html += '<li>' + events[i][0] + ' at <a href="' + events[i][1] + '">' + events[i][2] + '</a></li>';
  html += '</ul></div>';
  return html;
}

function build_calendar() {
  if($ && $('calendar_holder')) {
    $('calendar_holder').update(calendar_html(new Date('Oct 01, 2009'), 'http://gaytheatre.ticketsolve.com'));
    $$('#calendar_holder td.eventDay').invoke('observe', 'mouseover', function(e) { this.down().next().show(); });
    $$('#calendar_holder td.eventDay').invoke('observe', 'mouseout',  function(e) { this.down().next().hide(); });
  }
}

Event.observe(window, 'load', build_calendar);

