/**
 * Подписка на новости
 *
 */
Mitsuden.Subscribe = new Class({

	Implements: [Options],

	/**
	 * Опции
	 * @var {Hash}
	 */
	options:
	{	
		/**
		 * Форма
		 * @var {String|Element}
		 */
		'elForm': null,
		
		/**
		 * Поле ввода Email
		 * @var {String|Element}
		 */
		'elInput': null,
		
		/**
		 * Индикатор загрузки
		 * @var {String|Element}
		 */
		'elLoader': null,
		
		/**
		 * Сообщение
		 * @var {String|Element}
		 */
		'elMessage': null,
		
		/**
		 * URL для запроса
		 * @var {String}
		 */
		'url': null
	},
	
	/**
	 * Эффект
	 * @var {Fx}
	 */
	_fx: null,

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

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

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

		// Назначение обработчиков событий
		this._setEventHandlers();
	},
	
	/**
	 * Обработчик ответа сервера
	 * @param {Hash}
	 */
	_completeHandler: function(response)
	{
		var e = '';
		if (response)
			e = response.error ? response.error : 'Поздравляем, вы подписаны на новости!';
		else
			e = 'Произошла ошибка';

		this.options.elMessage.innerHTML = e;
		
		this.options.elLoader.fade('out');
		this.options.elMessage.fade('in');

		(function(){
			this.options.elMessage.fade('out');
			this.options.elInput.focus();
		}).bind(this).delay(2500);
	},
	
	/**
	 * Назначение обработчиков событий
	 */
	_setEventHandlers: function()
	{
		// Отправка формы
		this.options.elForm.addEvent('submit', function(e) {
			e.stop();
			
			if (this.options.elInput.value != '')
			{
				// Индикатор загрузки
				this.options.elLoader.fade('in');

				// Отправка запроса
				new Request.JSON({
					'url': this.options.url,
					'noCache': true,
					'onComplete': this._completeHandler.bind(this)
				}).post({'email': this.options.elInput.value});
			}
		}.bind(this));
	}
});

