// JavaScript Document

var rehearsalData;

var termDates = [
// 2006/07
[
['Monday 9 October 2006', 'Friday 15 December 2006'],
['Monday 8 January 2007', 'Friday 16 March 2007'],
['Monday 23 April 2007', 'Friday 29 June 2007']
],

//2007/08
[
['Monday 8 October 2007', 'Friday 14 December 2007'],
['Monday 7 January 2008', 'Friday 14 March 2008'],
['Monday 21 April 2008', 'Friday 27 June 2008']
],

//2008 / 2009
[
['20 October 2008', '19 December 2008'],
['12 January 2009', '20 March 2009'],
['27 April 2009', '3 July 2009']
],

//2009 / 2010
[
['12 October 2009', '18 December 2009'],
['11 January 2010', '19 March 2010'],
['26 April 2010', '2 July 2010']
],

//2010 / 2011
[
['11 October 2010', '17 December 2010'],
['10 January 2011', '18 March 2011'],
['25 April 2011', '1 July 2011'] // Starts on a wednesday(!)
],

//2011 / 2012
[
['10 October 2011', '16 December 2011'],
['9 January 2012', '16 March 2012'],
['23 April 2012', '29 June 2012']
]
];

terms = ['Au', 'Sp', 'Su'];
days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

if (window.console) {
    logger.useNativeConsole = false;

    // make the default logger log to firebug (log objects, not just strings)
    logger.addListener('firebug', null, function (msg) {
        var func = null;
        switch (msg.level) {
            case 'DEBUG':   func = console.debug; break;
            case 'INFO':    func = console.info; break;
            case 'ERROR':   func = console.error; break;
            case 'FATAL':   func = console.error; break;
            case 'WARNING': func = console.warning; break;
            default: func = console.log;
        }
        func.apply(console, extend([msg.level+":"], msg.info));
    });

} 

function rehearsalCallback(result) {
	rehearsalData = result;
}

function calculateWeek(date) {
	for (i = 0; i < termDates.length; i++) {
		for (term = 0; term < 3; term++) {
			var start = new Date(Date.parse(termDates[i][term][0]));
			var end =  new Date(Date.parse(termDates[i][term][1]));
			
			if (date >= start && date <= end) {
				for (week = 1; week <= 10; week++) {
					start.setDate(start.getDate() + 7);
					if (date < start) {
						return terms[term] + '/' + week + '/' + days[date.getDay()];
					}
				}
			}
		}
	}
	return '?';
}

function updateRehearsal() {
	var rDate = rehearsalData.feed.entry[0].gd$when[0].startTime;
	var m = rDate.match('/(\d+)-(\d+)-(\d+)T((\d+):(\d+)):.*/');
	if (m != null) {
		// Extract date from feed
		var date = new Date();
		date.setYear(m[1]);
		date.setMonth(m[2] - 1);
		date.setDate(m[3]);
		date.setHours(m[5]);
		date.setMinutes(m[6]);
		$("rehearsaldate").innerHTML = days[date.getDay()] + ' '  + date.getDate() + ' ' + months[date.getMonth()] + ', ' + date.getFullYear();
		
		// Calculate week from list of term dates
		var week = calculateWeek(date);
		$("week").innerHTML = "(" + week + ") " + date.getHours() + ":" + date.getMinutes() + 'h';
	}
	else {
		$("rehearsaldate").innerHTML = "Error";
	}
}
