(function($) { 
	function calendarWidget(el, params) { 
		var now   = new Date();
		var thismonth = now.getMonth();
		var thisday = now.getDate();
		var thisyear  = now.getFullYear();
		
		var opts = {
			month: thismonth,
			year: thisyear
		};
		
		$.extend(opts, params);
		
		var monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
		var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
		month = i = parseInt(opts.month);
		year = parseInt(opts.year);
		var m = 0;
		var table = '';
		
			// next month
			if (month == 11) {
				var next_month = monthNames[0] + ' ' + (year + 1);
			} else {
				var next_month = monthNames[month + 1] + ' ' + (year);
			}
				
			// previous month
			if (month == 0) {
				var prev_month = monthNames[11] + ' ' + (year - 1);
			} else {
				var prev_month = monthNames[month - 1] + ' ' + (year);
			}		
				
			table += ('<div style="width:70px; float:left; cursor:pointer; font-size:12px; text-align:center;" class="nav-prev">'+ prev_month +'</div>');
			table += ('<div style="width:133px; float:left; text-align:center; font-size:18px;" id="current-month">'+monthNames[month]+' '+year+'</div>');
			table += ('<div style="width:70px; float:left; cursor:pointer; font-size:12px; text-align:center;" class="nav-next">'+ next_month +'</div><br />');
			
			table += ('<table class="calendar-month " ' +'id="calendar-month'+i+' " cellspacing="0">');	
		
			table += '<tr>';
			
			for (d=0; d<7; d++) {
				table += '<th class="weekday">' + dayNames[d] + '</th>';
			}
			
			table += '</tr>';
		
			var days = getDaysInMonth(month,year);
            var firstDayDate=new Date(year,month,1);
            var firstDay=firstDayDate.getDay();
			
			var prev_days = getDaysInMonth(month,year);
            var firstDayDate=new Date(year,month,1);
            var firstDay=firstDayDate.getDay();
			
			var prev_m = month == 0 ? 11 : month-1;
			var prev_y = prev_m == 11 ? year - 1 : year;
			var next_m = month == 11 ? 0 : month+1;
			var next_y = next_m == 0 ? year + 1 : year;
			var prev_days = getDaysInMonth(prev_m, prev_y);
			firstDay = (firstDay == 0 && firstDayDate) ? 7 : firstDay;
			var i = 0;
			for (j=0;j<42;j++){ //Six week calendar
	
				if ((j<firstDay)){ // prev month
					table += ('<td id="date' + (prev_days-firstDay+j+1) + '-' + prev_m  + '-' + prev_y +'" class="days other-month"><div class="day">'+ (prev_days-firstDay+j+1) +'</div></td>');
				} else if ((j>=firstDay+getDaysInMonth(month,year))) { //next month
					i = i+1;
					table += ('<td id="date' + i + '-' + next_m  + '-' + next_y +'" class="days other-month"><div class="day">'+ i +'</div></td>');			 
				}else{ //This month
					if (((j-firstDay+1)==thisday) && (month==thismonth) && (year==thisyear)){
						var tdx = "today";
					}else{
						var tdx = "";
					} 
					table += ('<td id="date' + (j-firstDay+1) + '-' + month  + '-' + year +'" class="' + tdx + ' days current-month"><div class="day">'+(j-firstDay+1)+'</div></td>');
				}
				if (j%7==6)  table += ('</tr>');
			}

			table += ('</table>');
			el.html(table);
	}
	
	function getDaysInMonth(month,year)  {
		var daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];
		if ((month==1)&&(year%4==0)&&((year%100!=0)||(year%400==0))){
		  return 29;
		}else{
		  return daysInMonth[month];
		}
	}
	
	
	// jQuery plugin initialisation
	$.fn.calendarWidget = function(params) {    
		calendarWidget(this, params);		
		return this; 
	}; 

})(jQuery);

