/*
 Copyright M. Vesey 2006
*/

var dotw = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var month = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

var courses = new Array ();
var courseIndex = 0;
var courseSpacer = 1;

function courseDate(thisYear,thisMonth,thisDate,thisHour,thisMinute,thisSecond) {
  thisMonth--;
  return new Date(thisYear,thisMonth,thisDate,thisHour,thisMinute,thisSecond);
}
function course(thisRef,thisTitle,thisStartTime,thisEndTime) {
  this.courseRef = thisRef;
  this.courseTitle = thisTitle;
  this.courseStartTime = thisStartTime;
  this.courseEndTime = thisEndTime;
}
function dateOrder(course1,course2) {
  return course1.courseStartTime - course2.courseStartTime;
}
function generateAllDates() {
  var originalCoursesLength = courses.length; 
  for(var i=0;i<originalCoursesLength;i++) {
   var currDate = addDays(courses[i].courseStartTime,1);
   while (currDate <= courses[i].courseEndTime) {
      courses.push(new course('c'+(++courseIndex),'TBC',currDate,courses[i].courseEndTime));
      currDate = addDays(currDate,1);
    }
  }
}
function drawCalendars() {

  generateAllDates();
  courses.sort(dateOrder);

  var calendarString ="";
  if(document.getElementById) {
    var lastMonth = -1;
    for(var i=0;i<courses.length;i++) {
      if(courses[i].courseStartTime.getMonth() != lastMonth) {
        calendarString += drawCalendar(courses[i].courseStartTime.getFullYear(),courses[i].courseStartTime.getMonth(),1);
        lastMonth = courses[i].courseStartTime.getMonth();
      }
      if(courses[i].courseStartTime.getMonth() % courseSpacer == 0) {
        calendarString += '<div class="spacer"></div>'
      }
    }
    document.getElementById("courseCalendar").innerHTML = calendarString;

    for(var i=0;i<courses.length;i++) {
      var cd = courses[i].courseStartTime.getFullYear()+zeroFill(courses[i].courseStartTime.getMonth()+1,2)+zeroFill(courses[i].courseStartTime.getDate(),2);
      with(document.getElementById(cd)) {
        var ct = courses[i].courseTitle+' '+courses[i].courseStartTime.getHours()+':'+zeroFill(courses[i].courseStartTime.getMinutes(),2)+' - '+courses[i].courseEndTime.getHours()+':'+zeroFill(courses[i].courseEndTime.getMinutes(),2);
        if(document.getElementById(cd).getElementsByTagName("a").length>0) {
          document.getElementById(cd).getElementsByTagName("a")[0].title += '\n' + ct;
        }
        else {
          innerHTML = '<a href=\"'+pagename+'.php#'+courses[i].courseRef+'\" title=\"'+ct+'\">'+courses[i].courseStartTime.getDate()+'<\/a>';
        }
      }
    }
  }
}
function addDays(rootdate,n) {

  var msPerDay = 24 * 60 * 60 * 1000;                                     // Number of milliseconds per day
  var adddate = new Date(rootdate);

  adddate.setTime(Date.parse(adddate) + (n * msPerDay));

  return adddate;
}
function firstSunday(rootdate) {

  var firstdate = new Date(rootdate.getFullYear(), rootdate.getMonth(), 1, 12, 0, 0, 0); // First of month midday
  firstdate = addDays ( firstdate, -firstdate.getDay());
 
  return firstdate;
}
function drawCalendar(thisYear,thisMonth,thisDate) {
  var displaydate = new Date();
  var bodystring = '';
  var monthFirst = new Date(thisYear, thisMonth, 1, 12 , 0 , 0); // First of month midday

  displaydate = firstSunday(monthFirst);
  var today = new Date();

  bodystring += '<table class=\"calendarTable\" id=\"'+displaydate.getFullYear()+zeroFill(thisMonth+1,2)+'\" colspan=\"7\" summary=\"'+month[thisMonth]+' '+thisYear+'\">\n';
  bodystring += '<tr><td class=\"calendarTitle\" colspan=\"7\">'+month[thisMonth]+' '+thisYear+'<\/td><\/tr>';
  bodystring += '<tr>\n';
  for (var j=0;j<=6;j++) {
    bodystring += '<td class=\"calendarDoW\">' + dotw[j].substring(0,1) + '<\/td>\n';
  }
  bodystring += '<\/tr>\n';

  for (var i=1;i<=6;i++) {
    for (var j=1;j<=7;j++) {
  
      if (i<6||displaydate.getMonth() == thisMonth) {
        if (j==1) {
          bodystring += '<tr>';
        }
        if (displaydate.getMonth() == thisMonth) {
          bodystring += '<td class=\"calendarDate\" id=\"'+displaydate.getFullYear()+zeroFill(displaydate.getMonth()+1,2)+zeroFill(displaydate.getDate(),2)+'\">';
          bodystring += displaydate.getDate();
        }
        else {
          bodystring += '<td class=\"calendarDate\">';
        }
        bodystring += '<\/td>';
        if (j==7) {
          bodystring += '<\/tr>\n';
        }
      }
      displaydate = addDays(displaydate, 1);
    }
  }
  bodystring += '<\/table>\n';

  return bodystring;
}
function datesuper(superdate) {

  var supers = '';

  if ((superdate==1)||(superdate==21)||(superdate==31)) {
    supers='st';
  }
  else if ((superdate==2)||(superdate==22)) {
    supers='nd';
  }
  else if ((superdate==3)||(superdate==23)) {
    supers='rd';
  }
  else { 
    supers='th';
  }
  return (superdate + '<sup>' + supers +'</sup>');
}

function currenttime() {

  var now = new Date();
  if ( now.getDate() != lastDate ) { // just in case anyone runs it over midnight !
    window.location.reload();
    lastDate = now.getDate();
  }
  return zeroFill(now.getHours(),2) + ':' + zeroFill(now.getMinutes(),2) + ':' + zeroFill(now.getSeconds(),2);
}
