if (typeof(Mitsuden.Events) == 'undefined') Mitsuden.Events = {};

/**
 * Загрузчик событий
 *
 */
Mitsuden.Events.Loader = new Class({

	Implements: [Options],

	/**
	 * Опции
	 * @var {Hash}
	 */
	options:
	{
		/**
		 * Индикатор загрузки
		 * @var {String|Element}
		 */
		'elLoader': null,

		/**
		 * Элемент управления календарем
		 * @var {Mitsuden.Events.Days}
		 */
		'days': null,
		
		/**
		 * Слайдер событий
		 * @var {NS.Slider}
		 */
		'slider': null,
		
		/**
		 * URL
		 * @var {String}
		 */
		'url': null
	},

	/**
	 * Конструктор
	 * @param {Hash} options
	 */
	initialize: function(options)
	{
		this.setOptions(options);

		// MooTools копирует экземпляры опций...
		this.options.days = options.days;
		this.options.slider = options.slider;

		// Загрузка элементов из DOM
		this.options.elLoader = $(this.options.elLoader).fade('hide');

		// Назначение обработчиков событий
		this._setEventHandlers();
	},
	
	/**
	 * Назначение обработчиков событий
	 */
	_setEventHandlers: function()
	{
		// Переключение месяца
		this.options.days.addEvent('start', function(){
			// Дезактивация переключателя месяцев
			this.options.days.disable();

			// Скрытие слайдера
			this.options.slider.options.elContainer.fade('out');

			// Отображение загрузчика
			this.options.elLoader.fade('in');

			// Запрос
			new Request.JSON({
				'url': this.options.url,
				'noCache': true,
				'onComplete': function(response){
					this.options.elLoader.fade('out');
					this._reinitSlider(response);
					this.options.slider.options.elContainer.fade('in');
					this.options.days.enable();
				}.bind(this)
			}).post({
				'month': this.options.days.month,
				'year': this.options.days.year
			});
		}.bind(this));

		// Переключение месяца слайдером
		this.options.slider.addEvent('scrollBeforeStart', function(){
			this.options.days.prevMonth();
		}.bind(this));
		this.options.slider.addEvent('scrollAfterEnd', function(){
			this.options.days.nextMonth();
		}.bind(this));
	},
	
	/**
	 * Обновление слайдера
	 * @param {Hash}
	 */
	_reinitSlider: function(response)
	{
		if (typeof(response) != 'undefined' && response !== null && response.events)
		{
			var s = '';
			response.events.each(function(event){
				s += '<div class="event"><div class="inner"><h2>'+event.title+'</h2><h3>'+event.type+'</h3><p>'+event.description+'</p></div></div>';
			});
			this.options.slider.options.elContainer.innerHTML = s;
			this.options.slider.reinit();
		}
	}
});

