var Vote = function (settings) {
	this.prefix					= (settings.prefix) ? settings.prefix : null;
	this.formName				= (settings.formName) ? settings.formName : this.prefix + '_form';
	this.containerName			= (settings.containerName) ? settings.containerName : 'vote';
	this.answersFieldName		= (settings.answersFieldName) ? settings.answersFieldName : 'vote_answer_id';
	this.radioInput				= [];
	this.submitButton			= (this.prefix) ? document.getElementById(settings.prefix + '_send') : null;
	this.voteContainer			= (this.containerName) ? document.getElementById(this.containerName) : null;
	
	this.url					= settings.url;
	this.method					= settings.method ? settings.method : 'POST';
	
	
	/*	Определяем выбрано ли одно из полей по-умолчанию */
	this.isSelected = false;

	var answersFieds = document.forms[this.formName][this.answersFieldName];

	for (var i = 0; i < answersFieds.length; i++) {
		this.radioInput[i] = answersFieds[i];
		this.isSelected = this.isSelected || this.radioInput[i].checked;
		if (this.radioInput[i].checked) {
			this.selectedIndex = i;
		}
	}

	/*	По-умолчанию кнопка выключена */
	this.submitButton.disabled = !this.isSelected;
	
	/*	Обработчик на submit */
	Event.add(this.submitButton, 'click', this.voteSubmit.bindAsEventListener(this, true));
	
	/*	Обработчики на radio-input */
	for (i = 0; i < this.radioInput.length; i++) {
		Event.add(this.radioInput[i], 'click', this.enableSubmit.bindAsEventListener(this, true));		
	}
	
	return this;
};

Vote.prototype = {
	serialize: function () {
		return (this.isSelected) ? this.answersFieldName + '=' + this.radioInput[this.selectedIndex].value : '';
	},

	/*	Включение кнопки */
	enableSubmit: function () {
		this.submitButton.disabled = false;
		this.isSelected = true;
	},

	voteSubmit: function (e) {
		Event.cancelEvent(e);
		
		/*	Определяем выбранный пункт */
		for (var i = 0; i < this.radioInput.length; i++) { 
			if (this.radioInput[i].checked) {
				this.selectedIndex = i;
			}
		}
		
		this.ajaxData = this.serialize();
		
		/*	Отправка запроса */
		this.vote();
	},
	
	vote: function () {
		this.AJAX = new Ajax(null, null); // оператор антибред
		this.AJAX.getTransport();
		this.AJAX.transport.open(this.method, this.url, true);	
		this.AJAX.transport.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		this.AJAX.transport.onreadystatechange = function () {
			if (this.AJAX.transport && this.AJAX.transport.readyState == 4 && this.AJAX.transport.status == 200) {
				this.voteAfter(this.AJAX.transport.responseText);
			}
		}.bind(this);

		this.AJAX.transport.send(this.ajaxData);
	},
	
	voteAfter: function (response) {
		this.voteContainer.innerHTML = response;
	}
};
