(function($) { 
   
  function calendarWidget(el, params) { 
	
    var now   = new Date();
		var thismonth = now.getMonth();
		var thisyear  = now.getYear() + 1900;
		var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
		var dayNames = ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'];
		
		var opts =
      { month: thismonth
      , year: thisyear
      , monthLabels : monthNames
      , dayLabels : dayNames
      };
		
		$.extend(opts, params);
		
		month = i = parseInt(opts.month);
		year = parseInt(opts.year);
		monthNames = opts.monthLabels;
		dayNames = opts.dayLabels;
		var m = 0;
		var table = '';

    var thisYear = year;
    if (thisYear > 3000)
      thisYear = thisYear - 1900;
  
    //table += ('<div id="calendar-current-month">' + monthNames[month] + ' ' + thisYear + '</div>');
    
    table += ('<table class="calendar-month " ' +'id="calendar-month'+i+' " cellspacing="0">');	
  
    table += '<tr>';
    table += ('<th colspan="7" id="calendar-current-month">' + monthNames[month] + ' ' + thisYear + '</th>');
    table += '</tr><tr>';
    for (d=0; d<7; d++) {
      table += '<th class="weekday">' + dayNames[d] + '</th>';
    }
    
    table += '</tr>';
  
    
    var prev_days = getDaysInMonth(month,year);
    var firstDayDate=new Date(year,month,1);
    var firstDay=myGetDay(firstDayDate);
    
    var prev_m = month == 0 ? 11 : month-1;
    var prev_y = prev_m == 11 ? 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++)
    {
      if ((j<firstDay))
      {
        table += ('<td class="other-month"><span class="day">'+ (prev_days-firstDay+j+1) +'</span></td>');
			}
			else if ((j>=firstDay+getDaysInMonth(month,year)))
			{
        i = i+1;        
        table += ('<td class="other-month"><span class="day">'+ i +'</span></td>');			 
      }
      else
      {        
        var dayId = "eventsCalendarDay-" + (thisYear) + "-" + (month + 1) + "-" + (j-firstDay+1);
        table += ('<td class="current-month day'+(j-firstDay+1)+'"><span class="day" id="' + dayId + '">'+(j-firstDay+1)+'</span></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];
		}
	}
	
	function myGetDay(aDate)
	{
    var dayInWeek = aDate.getDay();
    if (dayInWeek < 0)
      dayInWeek = 6;
     else if (dayInWeek > 6)
       dayInWeek = 0;
     return dayInWeek;
	}
	// jQuery plugin initialisation
	$.fn.calendarWidget = function(params) {    
		calendarWidget(this, params);		
		return this; 
	}; 

})(jQuery);
