// Author: Alex Littlejohn

(function($){
 	$.fn.extend({ 
 		calendar: function(options) {
			
			var today = new Date();
			today.setHours(12);
					
			var defaults = {
				month: today.getMonth(),
				year: today.getFullYear(),
				clearElement: "<div style='clear:both;'></div>",
				onComplete: function(month, year){}
			};
			
			var options =  $.extend(defaults, options);
			
			
			
			
			return this.each(function() 
			{
				var o = options;
				var container = $(this);
				var currentDate = (new Date(o.year, o.month, 1, 12, 0, 0));
				container.html(" ");
				
				var firstDayOffset = Date.firstDayOfWeek - currentDate.getDay();
				if (firstDayOffset > 1) {
					firstDayOffset -= 7;
				}
				
				var weeksToDraw = o.weeks == undefined ? Math.ceil(( (-1*firstDayOffset+1) + currentDate.getDaysInMonth() ) /7) : o.weeks;
				currentDate.addDays(firstDayOffset-1);
				
				var w = 0;
				while (w++<weeksToDraw) {
					for (var i=0; i<7; i++) {
						var thisMonth = currentDate.getMonth() == o.month;
						var d = $(dc('p'))
							.text((thisMonth ? currentDate.getDate() + '' : ' '))
							.addClass((thisMonth ? 'current-month ' : 'other-month ') + (currentDate.isWeekend() ? 'weekend ' : 'weekday ') + (thisMonth && currentDate.getTime() == today.getTime() ? 'today ' : ''))
						
						container.append(d);
						currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()+1, 12, 0, 0);
					}
					container.append(o.clearElement);
				}
				
				o.onComplete(o.month, o.year);
			});
			
			function dc(a)
			{
				return document.createElement(a);
			};
		}
	});
})(jQuery);