(function( $ ){

// link text colour
var noMessage = 'No event messages to display for today';
// message to display when no entry in array

var dA = new Array();
var x = 0;
// first 8 characters in ccyymmdd format for single date events
// first 8 characters in 0000mmdd format for every year events
dA[x++] = "00000101 New Year";
dA[x++] = "00000214 Valentine's day";
dA[x++] = "00000709 Steve's Birthday";
dA[x++] = "00000919 Site Anniversary";
dA[x++] = "00001206 St Nicholas' Day";
// dA[x++] = "20060610 New Event Calendar Started today";

// permission is granted to use this javascript provided that the below code is not altered
var pageLoaded = 0;
window.onload = function() {
	pageLoaded = 1;
}

var container;

$.fn.eventCalendar = function(container,dateArray, handler) {  
	
	dA = dateArray;
	
	this.container = container;
	
	var containerId = "#" + container;
	
	start(containerId);
	
	$(containerId).delegate('.prevYear', 'click', function() {
	  year--;
	  if (cala = dispCal(year,month)) {
		$(containerId).html(cala); 
		return false;
	}
	} );
	
	$(containerId).delegate('.prevMonth', 'click', function() {
	  month--;
	  if (month == 0) {
	  	month = 12
	  	year--;
	  }
	  if (cala = dispCal(year,month)) {
		$(containerId).html(cala); 
		return false;
	}
	} );
	
	$(containerId).delegate('.nextYear', 'click', function() {
	  year++;
	  if (cala = dispCal(year,month)) {
		$(containerId).html(cala); 
		return false;
	}
	} );
	
	$(containerId).delegate('.nextMonth', 'click', function() {
	  month++;
	  if (month == 13) {
	  	month = 1;
	  	year++;
	  }
	  if (cala = dispCal(year,month)) {
		$(containerId).html(cala); 
		return false;
	}
	} );
	
	if (handler) {
		$(containerId).delegate('.eventDate', "click", handler);
	} else {
	$(containerId).delegate('.eventDate', "click", function() {
		alert('show event');
	});
	}
}

function loaded(i, f) {
	if(document.getElementById && document.getElementById(i) != null)
		f();
	else if(!pageLoaded)
		setTimeout('loaded(\'' + i + '\',' + f + ')', 100);
}

function monthlength(month, year) {
	var dd = new Date(year, month, 0);
	return dd.getDate();
}

var moy = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth() + 1;
var selDate = today.getFullYear() + getmmdd(today.getMonth() + 1, today.getDate());

var hilite_start = '<td width="30" class="today" align="center">';
	var event_start = '<td width="30" class="event" align="center">';
	var td_start = '<td width="30" align="center">';
	

function dispCal(yy, mm) {
	if(mm < 0 || mm > 12) {alert('month must be between 1 and 12');
		return false;
	}
	if(yy != 0 && (yy < 1901 || yy > 2100)) {alert('year must be after 1900 and before 2101');
		return false;
	}
	var dow = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
	var calendar = new Date();
	var today = calendar.getDate();
	calendar.setDate(1);
	if(yy > 1900)
		calendar.setFullYear(yy);
	if(mm > 0)
		calendar.setMonth(mm - 1);
	var yy = year = calendar.getFullYear();
	var month = calendar.getMonth();
	calendar.setDate(today);
	var weekday = calendar.getDay();
	var daysInMonth = monthlength(month + 1, year);
	
	var mmb = month;
		mm = month + 1;
		var yya = yyb = yy;
		if(mmb < 1) {
			mmb += 12;
			yyb--;
		}
		var mma = month + 2;
		if(mma > 12) {
			mma -= 12;
			yya++;
		}
	
	var yb = yy - 1;
		var ya = yy + 1;
	var nav = '<table border="0" cellspacing="2" cellpadding="0" width="100%"><tr><td><a class="nav prevYear" href="#" title="Previous Year"></a></td><td><a href="#" class="nav prevMonth" title="Previous Month" ></a></td><td align="center" width="100%"><span class="title">' + moy[month] + ', ' + year + '<\/span></td><td align="right"><a href="#" class="nav nextMonth" title="Next Month"></a></td><td align="right"><a href="#" class="nav nextYear" title="Next Year"></a></td></tr></table>';
	var cal = '<div id="cal"><div class="calendar"><table border="0" cellspacing="0" cellpadding="2" align="center"><tr><td colspan="7" align="center">'+nav+'<\/td><\/tr><tr>';
	for( dex = 0; dex < 7; dex++) {
		cal += td_start + dow[dex] + '</td>';
	}
	cal += '<\/tr><tr>';
	var day2 = today;
	for( dex = today; dex > 6; dex -= 7)
	day2 = dex;
	weekday -= day2 - 1;
	while(weekday < 0)
	weekday += 7;
	for( dex = 0; dex < weekday; dex++)
	cal += td_start + ' <\/td>';
	for( dex = 1; dex <= daysInMonth; dex++) {
		if(weekday == 7) {
			cal += '</tr><tr>';
			weekday = 0;
		}
		if(selDate == year + getmmdd(month + 1, dex))
			cal += hilite_start + '<span ' + clickDate(dex, month, year) + '>' + dex + '<\/span><\/td>';
		else
			cal += date(dex, month, year);
		weekday += 1;
	}
	for( dex = weekday; dex < 7; dex++)
	cal += td_start + ' <\/td>';
	cal += '<\/tr><\/table><\/div>';
	cal += '</div>';
	
	return cal;
}

function start(containerId) {
	
	y =  dispCal(0, 0);
	
	$(containerId).html(y);
	//document.getElementById(container).innerHTML = y;
	ev();
	
	
}

function date(day, month, year) {
	var ct = nextDate(year + getmmdd(month + 1, day));
	if(ct == '')
		ct = nextDate('0000' + getmmdd(month + 1, day));
	if(ct == '')
		return td_start + '<span>' + day + '<\/span><\/td>'
	else
		return event_start + '<span style="cursor:pointer;" title="' + year + getmmdd(month + 1, day) + '" class="eventDate" >' + day + '<\/span><\/td>';
}

//loaded('calendar', start);
function clickDate(day, month, year) {
	var ct = nextDate(year + getmmdd(month + 1, day));
	if(ct == '')
		ct = nextDate('0000' + getmmdd(month + 1, day));
	if(ct == '')
		return '';
	else
		return 'style="cursor:pointer;" title="' + year + getmmdd(month + 1, day) + '" class="eventDate"';
}

function isDate(dayVal, monthVal, yearVal) {
	var ct = nextDate(yearVal + getmmdd(monthVal + 1, dayVal));
	if(ct == '')
		ct = nextDate('0000' + getmmdd(monthVal + 1, dayVal));
	if(ct == '')
		ct = noMessage;
	document.getElementById('calDate').innerHTML = selDate + ':<br \/>' + ct;
	return false;
}

function nextDate(yymmdd) {
	var x = dA.length;
	for(var i = 0; i < x; i++) {
		if(dA[i].substr(0, 8) == yymmdd)
			return dA[i].substr(8);
	}
	return '';
}

function getmmdd(mm, dd) {
	return (mm > 9 ? '' + mm : '0' + mm) + (dd > 9 ? dd : '0' + dd);
}

function ev() {
	var ct = nextDate(selDate);
	var ct = nextDate(selDate);
	if(ct == '')
		ct = nextDate('0000' + selDate.substr(4));
	if(ct == '')
		ct = noMessage;
	//document.getElementById('calDate').innerHTML = selDate + ':<br \/> ' + ct;
}

})( jQuery );
