(function($){  
$.fn.eventscalendar = function(options) {
  
	var defaults = {
		multi_events_color: 'red',
		redirect_url: '?year=[[year]]&month=[[month]]&day=[[day]]',
		allow_empty_redirect: false,
		current_month: '',
		current_year: '',
		current_day: '',
		show_legend: true
	};  

	var options = $.extend(defaults, options);
	var thisid;

	var calendar_old_month;
	var calendar_old_year;
	var calendar_cache;
	var calendars;

	if (options.current_year != undefined && options.current_month != undefined && options.current_day != undefined) {
		var current_date =  options.current_year+'/'+options.current_month+'/'+options.current_day;
	}

	return this.each(function() {
		obj = $(this);
		/* Clear content */
		var base;
		
		thisid = obj.attr('id') + '_';

		$(this).datepicker({
			changeMonth: true,
			changeYear: true,
			defaultDate: current_date,
			dateFormat: 'yy/mm/dd',
			onChangeMonthYear: function(year, month, inst) {
				update_month(obj.attr('id'), year, month);
			},
			onSelect: function(dateText, inst) {
				var parts = dateText.split('/');
				update_month(obj.attr('id'), parts[0], parts[1]);
				
				/* Redirect only if there are events*/
				if ((options.allow_empty_redirect == false) || calendar_cache[parts[2]-1]['events'] != undefined) {
					if (options.redirect_url != undefined) {
						var url = options.redirect_url;
						url = url.replace('[[year]]', parts[0]);
						url = url.replace('[[month]]', parts[1]);
						url = url.replace('[[day]]', parts[2]);
						window.location = url;
					}
				}
			}
		});
		
		if (current_date != undefined) {
			update_month(obj.attr('id'), options.current_year, options.current_month);
		}

	});

	function update_month(id, year, month)
	{
	
		/* If we really have a change, reload data */
		if (year != calendar_old_year || month != calendar_old_month) {

			/* Data object */
			var dobject = {
				year: year,
				month: month,
				/* The following are required by the framework */
				context: 'Events_Ajax',
				action: 'widget_update',
				plugin: 'Events'
			};
		
			$.ajax(
			{
				url: '/ajax.html',
				type: 'POST',
				data: dobject, 
				context: window.document,
				dataType: 'json',
				success: function (data)
				{
					if (data == null || data.status != 'OK') {
						return 0;
					} else {
						
						calendar_cache = data.data;						
						_update_month(id, calendar_cache, year, month);
						return 1;
					}
				}
			});

		/* Refill from cache */
		} else {
			_update_month(id, calendar_cache, year, month);
			return 2;
		}	
	
	}
	
	function _update_month(id, data, year, month)
	{
		$('#'+id+' table.ui-datepicker-calendar td').each(function() {
			/* Active days have a A, inactive days have a SPAN */
			if ($(this).children('a').length == 1) {
				var day = parseInt($(this).children('a').html());
				//alert(data[day-1]['events'].toSource());
				if(data[day-1]['events'] != undefined) {
					/* Multi events */
					if (data[day-1]['events'][1] != undefined) {
						$(this).children('a').addClass('multi_events');
						$(this).children('a').css('border', '1px solid ' + options.multi_events_color);
					} else {
						$(this).children('a').addClass('one_event');
						$(this).children('a').css('border', '1px solid ' + data[day-1]['events'][0]['color']);
					}
				} else {
					/* Remove */
					var val = $(this).children('a').val();
					$(this).val(val);
				}
			}
		});
		
		if (options.show_legend == true) {
			//alert('legend!');
			//for (x=0; x<calendars.length; x++) {
			//	alert('legend!');
			//}		
		}

	}

};  
})(jQuery);
