(function($){

	$.fn.ajax_update_calendar	= function( options )
	{
		var opts = $.extend({}, $.fn.ajax_update_calendar.defaults, options);

		return this.each( function()
		{
			var $this = $( this );
			// build element specific options
			var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

			$this.area_id = $("input[name=" + o.area_id_input_name +"]", $this).val();
			$this.month_select = $("select[name=" + o.month_select_prefix + $this.area_id + "]", $this );
			$this.year_select = $("select[name=" + o.year_select_prefix + $this.area_id + "]", $this );
			$this.http_host = $("input[name=" + o.host_input_name +"]", $this).val();
			$this.content = $("tbody#calendar_body_" + $this.area_id);

			$this.month_select.bind("change", function(){ $.get_ajax_calendar_data( $this ); });
			$this.year_select.bind("change", function(){ $.get_ajax_calendar_data( $this ); });
		});
	};


	$.fn.ajax_update_calendar.defaults	= {
		area_id_input_name	: "area_id",
		host_input_name	: "http_host",
		month_select_prefix : "month_",
		year_select_prefix	: "year_"
	};


	$.get_ajax_calendar_data	= function( $obj )
	{
		var params = 'ajax_calendar_'+$obj.area_id+'=1'+'&month_'+$obj.area_id+'='+$obj.month_select.val()+'&year_'+$obj.area_id+'='+$obj.year_select.val();
		
		$('#calendar_pbar_'+$obj.area_id).fadeIn(200);
		$.ajax({
			url: $obj.http_host,
			cache: false,
			data: params,
			success: function( data ){
				var new_data = data.replace('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">','');
				var is_error = data.match('error');

				if(is_error) {
					$obj.submit();
				} else {
					$obj.content.html( new_data );
					$('#calendar_pbar_'+$obj.area_id).fadeOut(200);
				}
			},
			error: function( XMLHttpRequest, textStatus, errorThrown ){
				$obj.submit();
			}
		});

	}

})(jQuery);