/* Require: JQuery */
var rating = {

	/**
	 * Текущее значение рейтинга.
	 */
	value: 0,

	/**
	 * Обновляет элементы таким образом, что активными будут
	 * ровно столько из них, какое значение рейтинга в данный момент
	 * установлено.
	 */
	updateElements: function(){
		var elements = $("#rating_list li");

		for (var i = 0; i < elements.length; i++)
		{
			if (i < this.value)
			{
				$(elements[i]).addClass("selected");
			}
			else
			{
				$(elements[i]).removeClass("selected");
			}
		}
	},

	/**
	 * Меняет значение рейтинга в соответствии с минимальным
	 * и максимальным значениями и вызывает обновление элементов.
	 */
	set: function(val){
		if (val < 0)
		{
			val = 0;
		} else {
			if (val > 5) val = 5;

			// Щелчок по последнему активному элементу отнимает один балл
			// от значения рейтинга
			if (val == this.value) val--;
		}

		this.value = val;

		$('#review_edit input[name="review_rating"]').val(this.value);

		this.updateElements();
	}

};

$(function () {

	rating.value = parseInt($('#review_edit input[name="review_rating"]').val());

	// Переключение рейтинга
	$("#rating_list li a").each(function (index, element) {
		$(element).click(function () {
			rating.set($(element).attr("rate"));
			return false;
		});
	});

	// Выбор производителя
	$('#review_edit #review_selectFirm').change(function () {
		var firm_id = $(this).val();

		if (firm_id < 1)
		{
			return;
		}

		$.ajax({
			url: '/ajax.php',
			type: 'get',
			dataType: 'json',
			data: {
				'do': 'getmodels',
				'id': firm_id
			},

			beforeSend: function () {
				$('#review_edit #review_selectModel')
					.attr('disabled', 'disabled')
					.empty()
					.append('<option value="-1">... загрузка</option>');
			},

			complete: function () {
				$.uniform.update('#review_edit #review_selectModel');
			},

			success: function (data) {
				var list = $('#review_edit #review_selectModel');

				list.empty();

				if (data.length == 0)
				{
					list.append('<option value="-1">Модели не найдены</option>');
				}
				else
				{
					for (var i = 0; i < data.length; i++)
					{
						list.append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
					}

					list.removeAttr('disabled');
				}
			},

			error: function (xhr) {
				$('#review_edit #review_selectModel')
					.empty()
					.append('<option value="-1">Модели не найдены</option>');
			}
		});
	});

	// Отправка отзыва
	$("#review_edit").submit(function () {
		$('#review_edit .errors').remove();

		var submit = true;
		var length = $('#review_edit #text_review').val().trim().length;
		var msg = [];

		if ($('#review_edit #review_selectModel').val() < 1)
		{
			$('#review_edit #review_selectModel').focus();

			msg.push('Выберите модель, для которой хотите оставить отзыв.');
		}

		if (length == 0 || length > 4000)
		{
			if (msg.length == 0)
			{
				$('#review_edit #text_review').focus();
			}

			msg.push(length > 4000
				? 'Текст отзыва не должен превышать максимальный размер в 4000 знаков, включая пробелы и специальные символы.'
				: 'Текст отзыва не должен быть пустым.');
		}

		if (msg.length == 1)
		{
			$('<p class="errors">' + msg + '</p>').insertAfter('#review_edit .message');

			submit = false;
		}
		else if (msg.length > 1)
		{
			var li = '';

			for (var i = 0; i < msg.length; i++)
			{
				li += '<li>' + msg[i] + '</li>';
			}

			$('<ul class="errors">' + li + '</ul>').insertAfter('#review_edit .message');

			submit = false;
		}

		return submit;
	});
});

