/**
 * Случайное фото
 *
 */
Mitsuden.Random = new Class({

	Implements: [Options],

	/**
	 * Опции
	 * @var {Hash}
	 */
	options:
	{	
		/**
		 * Контейнер
		 * @var {String|Element}
		 */
		'elContainer': null,
		
		/**
		 * Изображение
		 * @var {String|Element}
		 */
		'elImage': null,
		
		/**
		 * Ссылка на увеличенное изображение
		 * @var {String|Element}
		 */
		'elImageLink': null,
		
		/**
		 * Кнопка обновления
		 * @var {String|Element}
		 */
		'elResresh': null,
		
		/**
		 * URL для запроса
		 * @var {String}
		 */
		'url': null
	},
	
	/**
	 * Эффект для изображения
	 * @var {Fx}
	 */
	_fx: null,

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

		// Эффект
		this._fx = new Fx.Tween(this.options.elImage, {
			'property': 'opacity',
			'duration': 200
		});

		// Загрузка элементов из DOM
		this.options.elContainer = $(this.options.elContainer);
		this.options.elImage = $(this.options.elImage);
		this.options.elImageLink = $(this.options.elImageLink);
		this.options.elRefresh = $(this.options.elRefresh);

		// Скрытие элементов управления
		this._hideControls();

		// Назначение обработчиков событий
		this._setEventHandlers();
	},
		
	/**
	 * Обновление изображения
	 */
	refresh: function()
	{
		// Скрытие изображения
		this._fx.start(1,0).chain(function(){

			// Запрос
			new Request.JSON({
				'url': this.options.url,
				'noCache': true,
				'onComplete': this._completeHandler.bind(this)
			}).send();
		
		}.bind(this));
	},
	
	/**
	 * Обработчик ответа сервера
	 * @param {Hash}
	 */
	_completeHandler: function(response)
	{
		var b = response && 
		        typeof(response.error) == 'undefined' &&
		        typeof(response.image) != 'undefined' && response.image &&
		        typeof(response.imageBig) != 'undefined' && response.imageBig;

		if (b)
		{
			this.options.elImage.src = response.image;
			this.options.elImageLink.href = response.imageBig;

			// Сброс ReMooz
			ReMooz.r[0].box.dispose();
			ReMooz.r[0].box = null;
			ReMooz.r = ReMooz.assign('a.remooz', { 'origin': 'img' });
		}
		else
			this._fx.start(0, 1).chain(function(){ alert('При получении случайного фото произошла ошибка'); });
	},
	
	/**
	 * Обработчик загрузки изображения
	 */
	_imageLoadHandler: function()
	{
		if (this.options.elImage.getStyle('opacity') == 0)
			this._fx.start(0, 1);
	},
	
	/**
	 * Назначение обработчиков событий
	 */
	_setEventHandlers: function()
	{
		// Скрытие/отображение элементов управления
		this.options.elContainer.addEvent('mouseover', this._showControls.bind(this));
		this.options.elContainer.addEvent('mouseleave', this._hideControls.bind(this));

		// Обновление
		this.options.elRefresh.addEvent('click', function(e) {
			e.stop();
			this.refresh();
		}.bind(this));

		// Загрузка изображения
		this.options.elImage.addEvent('load', this._imageLoadHandler.bind(this));
	},

	/**
	 * Отображение элементов управления
	 */
	_showControls: function()
	{
		this.options.elRefresh.removeClass('hidden');
	},
	
	/**
	 * Скрытие элементов управления
	 */
	_hideControls: function()
	{
		this.options.elRefresh.addClass('hidden');
	}
});

