$(function() {
	$('input#email,input#password').hover(
		function(){

		},
		function(){

		}
	);
	$("#registration").submit(registrationSubmitHandler);

	/* Registration */
	$("#registration #rules_acc").change(function() {
		if ($("#registration #rules_acc").attr("checked"))
		{
			$("#registration input[type=submit]").attr("disabled", false);
		} else {
			$("#registration input[type=submit]").attr("disabled", true);
		}
	});

	/* Обновление рейтинга отзывов */
	$('a.frYes').click(function() {
		if (navigator.cookieEnabled == 0) {
			alert('Вы не можете голосовать с отключенными кукисами!');
		}
		url = $(this).attr('href');
		$(this).parent().children('span.spin').addClass('preloader');
		h = $(this).parent();
		$.ajax({
			url: url,
			dataType : "json",
			success: function(data) {
				h.children('span.spin').removeClass('preloader');
				if (data.result == 'ok') {
					h.children('.frYes').text(data.likes);
				}
				else { alert('Ошибка: '+data.str); }
			}
		});
		return false;
	});

	$('a.frNo').click(function() {
		url = $(this).attr('href');
		$(this).parent().children('span.spin').addClass('preloader');
		h = $(this).parent();
		$.ajax({
			url: url,
			dataType : "json",
			success: function(data) {
				console.log(h);
				h.find('span.spin').removeClass('preloader');
				if (data.result == 'ok') {
					h.children('.frNo').text(data.dislikes);
				}
				else { alert('Ошибка: '+data.str); }
			}
		});
		return false;
	});

	/* Notice creation */
	$("form select#boat_firm").change(function(){
		// Abort previous request if it is not yet completed
		var xhr = $("form select#boat_model").data('xhr')

		if (xhr)
		{
			xhr.abort();

			$("form select#boat_model").data('xhr', false);
		}

		if ($(this).val() == 0)
		{
			$("form select#boat_model")
				.empty()
				.append($('<option value="0">Выберите произзводителя</option>'))
				.attr("disabled", true);
			return;
		}

		$("form select#boat_model")
			.empty()
			.append($('<option value="0">... загрузка</option>'))
			.attr("disabled", true);

		if ($(this).val() == 0)
		{
			return;
		}

		// Make new request
		xhr = $.ajax({
			url: '/notice',
			type: 'GET',
			data: { id: $(this).val() },
			dataType: 'json',

			success: function(data){
				var el = $("form select#boat_model");

				el.empty();

				if (data == null)
				{
					el.append($('<option value="0">Модели отсутствуют</option>'));
					el.attr("disabled", false);
					el.data('xhr', false);
					return;
				}
				else
				{
					for (var i = 0; i < data.length; i++)
					{
						el.append($('<option value="' + data[i]['id'] + '">' + data[i]['name'] + '</option>'));
					}
				}

				el.attr("disabled", false);
				el.data('xhr', false);
			},

			error: function(){
				$("form select#boat_model")
					.empty()
					.append($('<option value="0">Модели отсутствуют</option>'));
			}
		});

		$("form select#boat_model").data('xhr', xhr);
	});
});


function registrationSubmitHandler()
{
	var el;

	el = $("#registration input[name=email]");

	if (el.val().trim().length == 0)
	{
		alert("Fill the email field.");
		el.focus();
		return false;
	}

	el = $("#registration input[name=password]");

	if (el.val().trim().length == 0)
	{
		alert("Fill the password field.");
		el.focus();
		return false;
	}

	if ($("#registration input[name=password]").val().trim() != $("#registration input[name=password_rep]").val().trim())
	{
		alert("Passwords must be equal.");
		el.focus();
		return false;
	}

	el = $("#registration input[name=captcha]");

	if (el.val().trim().length == 0)
	{
		alert("Fill the captcha field.");
		el.focus();
		return false;
	}

	el = $("#registration input[name=rules_acc]");

	if (!el.attr("checked"))
	{
		return false;
	}

	return true;
}


/*
 * Страница добавления/редактирования объявления.
 */
$(function () {

	/*
	* Выбор производителя.
	*/
	$('#new_ad #firm').change(function () {

		for (var i = 1; i < 16; i++)
		{
			$(":input[id='spec[" + i + "]'].regInp").val('');
		}

		// Выбран элемент "Выберите производителя".
		if ($(this).val() == -1)
		{
			// Активация списка моделей
			$('#new_ad #model')
				.attr('disabled', true)
				.empty()
				.append('<option value="-1">Выберите производителя</option>');

			$.uniform.update('#new_ad #model');

			// Деактивация и скрытие поля для ручного ввода названия
			// производителя и модели
			$('#new_ad #model_custom')
				.attr('disabled', true)
			//.val('')
				.hide();

			return;
		}

		// Выбран элемент "Другой".
		if ($(this).val() == 0)
		{
			for (var i = 1; i < 16; i++)
			{
				$(":input[id='spec[" + i + "]'].regInp").val('');
			}

			// Деактивация списка моделей
			$('#new_ad #model')
				.attr('disabled', true)
				.empty()
				.append('<option value="0">Введите название вручную</option>');

			$.uniform.update('#new_ad #model');

			// Активация и показ поля для ручного ввода названия
			// производителя и модели
			$('#new_ad #model_custom')
				.attr('disabled', false)
			//.val('')
				.show()
				.focus();

			return;
		}

		// Выбран конкретный производитель

		// Активация списка моделей
		$('#new_ad #model')
			.attr('disabled', true)
			.empty()
			.append('<option value="-1">... загрузка</option>');

		// Деактивация и скрытие поля для ручного ввода названия
		// производителя и модели
		$('#new_ad #model_custom')
			.attr('disabled', true)
		//.val('')
			.hide();

		// Запрос списка моделей
		$.ajax({
			url: '/cabinet/notice/new/',
			type: 'post',
			dataType: 'json',
			data: {
				action: 'firm',
				id: $(this).val()
			},

			// Успех
			success: function (data) {

				var list = $('#new_ad #model');

				list.empty();

				if (data.length > 0)
				{
					if ($('#new_ad #firm')[0].name == 'm[0]')
						list.append('<option value="0">Любая модель</option>');
					for (var i = 0; i < data.length; i++)
					{
						list.append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
					}
				}
				else
				{
					list.append('<option value="0">Модели отсутствуют</option>');
				}

				// Активация списка моделей
				list.attr('disabled', false);

				$.uniform.update(list);
			},

			// Ошибка
			error: function (xhr) {
				// Ничего не делать
			}
		});
		// end:ajax();
	});
	// end:firm.change()

	//Автозагрузка спецификаций для модели
	$("#new_ad #model").change(function () {
		if ($(this).val() == 0)
		{
			return;
		}

		$.ajax({
			url: '/cabinet/notice/new/',
			type: 'post',
			data: { id: $(this).val(), action: 'spec' },
			dataType: 'json',

			success: function (data) {
				if (data.status = "OK")
				{
					for (var i = 1; i < 16; i++)
					{
						$(":input[id='spec[" + i + "]'].regInp").val('');
					}

					for (var i = 0; i < data['specs'].length; i++)
					{
						var result = data['specs'][i]['value'];
						if (typeof (result) == 'number')
						{
							result = Math.round(result * 100) / 100;
						}
						$(":input[id='spec[" + data['specs'][i]['avail_id'] + "]'].regInp").val(result);
						$("select[id='spec[" + data['specs'][i]['avail_id'] + "]']>option:selected").removeAttr("selected");
						$("select[id='spec[" + data['specs'][i]['avail_id'] + "]']>option[value='" + data['specs'][i]['unit'] + "']").attr("selected", "selected");

						$.uniform.update();
					}
				} else
				{
					for (var i = 1; i < 16; i++)
					{
						$(":input[id='spec[" + i + "]'].regInp").val('');
					}
				}
			}
		});

	});

	/*
	* Выбор страны.
	*/
	$('#new_ad #country').change(function () {

		// Выбран элемент "Выберите производителя".
		if ($(this).val() == -1)
		{
			// Активация списка городов
			$('#new_ad #city')
				.attr('disabled', true)
				.empty()
				.append('<option value="-1">Выберите страну</option>');

			// Деактивация и скрытие поля для ручного ввода названия
			// страны и города
			$('#new_ad #city_custom')
				.attr('disabled', true)
				.val('')
				.hide();

			return;
		}

		// Выбран элемент "Другой".
		if ($(this).val() == 0)
		{
			// Деактивация списка городов
			$('#new_ad #city')
				.attr('disabled', true)
				.empty()
				.append('<option value="0">Введите название вручную</option>');

			$.uniform.update('#new_ad #city');

			// Активация и показ поля для ручного ввода названия
			// страны и города
			$('#new_ad #city_custom')
				.attr('disabled', false)
				.val('')
				.show()
				.focus();

			$.uniform.update('#new_ad #city');

			return;
		}

		// Выбрана конкретная страна

		// Активация списка городов
		$('#new_ad #city')
			.attr('disabled', true)
			.empty()
			.append('<option value="-1">... загрузка</option>');

		$.uniform.update('#new_ad #city');

		// Деактивация и скрытие поля для ручного ввода названия
		// страны и города
		$('#new_ad #city_custom')
			.attr('disabled', true)
			.val('')
			.hide();

		// Запрос списка городов
		$.ajax({
			url: '/cabinet/notice/new/',
			type: 'post',
			dataType: 'json',
			data: {
				action: 'country',
				id: $(this).val()
			},

			// Успех
			success: function (data) {

				var list = $('#new_ad #city');

				list.empty();

				if (data.length > 0)
				{
					for (var i = 0; i < data.length; i++)
					{
						list.append('<option value="' + data[i].id + '"' + (data[i].special == 1 ? ' style="font-weight: bold;"' : null) + '>' + data[i].name + '</option>');
					}
				}
				else
				{
					list.append('<option value="0">Города отсутствуют</option>');
				}

				// Активация списка городов
				list.attr('disabled', false);

				$.uniform.update(list);
			},

			// Ошибка
			error: function (xhr) {
				// Ничего не делать
			}
		});
		// end:ajax();
	});
	// end:country.change()

	/*
	* Отправка формы.
	*/
	$('#new_ad, #new_ad_summary').submit(function () {
		var submit = true;
		var messages = [];

		$(this).find('.errors').remove();
		$(this).find('.input_error').removeClass('input_error');

		// Поиск элементов, помеченных как обязательные для заполнения
		var inputs = $(this).find(':input[_required]:not("[disabled]")');

		// При нахождении первого незаполненного обязательного поля
		// отправка формы прерывается и элементу передаётся фокус ввода
		for (var i = 0; i < inputs.length; i++)
		{
			if (/^(text|password)$/.test($(inputs[i]).attr('type')))
			{
				if ($(inputs[i]).val().trim().length == 0)
				{
					$(inputs[i]).addClass('input_error');
					submit = false;
				}
			}
			else if (inputs[i].tagName.toLowerCase() == 'select')
			{
				if ($(inputs[i]).val() < 1)
				{
					$(inputs[i]).parent().addClass('input_error');
					submit = false;
				}
				else if ($(inputs[i]).val() == 0)
				{
					var custom_name = $(inputs[i]).attr('name') + '_custom';
					var custom_value = $.trim($(this).find(':input[name="' + custom_name + '"]').val());

					if (custom_value.length == 0)
					{
						$(this).find(':input[name="' + custom_name + '"]').addClass('input_error');
						submit = false;
					}
				}
			}
		}

		if (!submit)
		{
			messages.push('Заполнены не все обязательные поля. Обязательные поля помечены красной звёздочкой.');
		}

		// Проверка формата цены
		var price = $('#new_ad input[name="price"]');

		if (price.length)
		{
			price = $.trim(price.val());

			if (!price.match(/^[\d., ]+$/))
			{
				$('#new_ad input[name="price"]').addClass('input_error');
				submit = false;

				messages.push('Неправильно введена цена.');
			}
		}

		// Проверка формата телефона
		var phone = $.trim($('#new_ad input[name="phone"]').val());

		if (phone.length)
		{
			if (!(/^\+\d+ (\(\d+\)|\d+) (\d+[-\\\/ ]?)+\d*$/i.test(phone)))
			{
				$('#new_ad input[name="phone"]').addClass('input_error');
				submit = false;

				messages.push('Формат телефона не соответствует международному формату "+<код страны> (<код города>) <номер телефона>". Обратите внимание: все три части телефонного номера должны быть отделены друг от друга пробелами. Скобки и дефисы не обязательны.');
			}
		}

		// Простая проверка формата адреса электронной почты
		var email = $.trim($('#new_ad input[name="email"]').val());

		if (email.length > 0)
		{
			if (!(/^[\w\d\.\_\-\+]+@[\w\_\-]+\.\w+$/i.test(email)))
			{
				$('#new_ad input[name="email"]').addClass('input_error');
				submit = false;

				messages.push('Адрес электронной почты записан в неверном формате.');
			}
		}

		// Проверка выбранного тарифа
		if ($('input[name="tarif"]:radio').length > 0
			&& !$('input[name="tarif"]:radio:checked').val())
		{
			// Показ сообщения с просьбой выбрать тариф
			$('<div class="errors">Пожалуйста, выберите тариф для размещения Вашего объявления.</div>').insertBefore('.radio-form');

			submit = false;
		}

		if (!submit)
		{
			if (messages.length > 0)
			{
				// Показ сообщений об ошибках
				var msg = '';

				for (var i = 0; i < messages.length; i++)
				{
					msg += '<li>' + messages[i] + '</li>';
				}

				$(this).prepend('<ul class="errors">' + msg + '</ul>');
				$.scrollTo($(this).find('.errors'));
			}
			else
			{
				// Сообщений нет - выделяется первое из неправильно заполненных полей
				$(this).find('.input_error:first').focus();
			}
		}

		//$(this).find(':button, :submit, :reset').prop('disabled', true);

		return submit;
	});
	// end:new-ad.submit()

	/*
	 * Очистка.
	 */
	$('#new_ad input:button[name="clear"], #new_ad_media input:button[name="clear"], #new_ad_summary input:button[name="clear"]').click(function () {
		var search = '?clear';
		var id = $('#new_ad input[name="id"], #new_ad_media input[name="id"], #new_ad_summary input[name="id"]').val();

		if (/^\d+$/.test(id))
		{
			search += '&id=' + id;
		}

		window.location.search = search;
	});
	// end:new-ad.clear()

	$( '#advSrchTbl input:text:lt(2)' ).attr( 'disabled', true );
	$( '#advSrchTbl input:checkbox:first' ).click( function() {
		$( '#advSrchTbl input:text:lt(2)' ).attr( 'disabled', !this.checked );
		$( '#advSrchTbl select:eq(1), #advSrchTbl select:eq(2)' ).attr( 'disabled', this.checked );
		$.uniform.update();
	} );
});


/*
 * Страница просмотра объявления.
 */
$(function () {

	// Показ скрытого телефона
	$('#notice_contacts_phone a').click(function () {
		$.ajax({
			data: {
				'pictify': '',
				't': 'c'
			},
			type: 'get',

			beforeSend: function () {
				$('#notice_contacts_phone').html('<div class="ajax-loader"></div>');
			},

			success: function (data) {
				if (data.length > 0)
				{
					$('#notice_contacts_phone').html(data);
				}
				else
				{
					$('#notice_contacts_phone').html('Не удалось получить телефон.');
				}
			},

			error: function (xhr) {
				$('#notice_contacts_phone').html('Не удалось получить телефон.');
			}
		});

		return false;
	});

	// Показ скрытого адреса электронной почты
	$('#notice_contacts_email a').click(function () {
		$.ajax({
			data: {
				'pictify': '',
				't': 's'
			},
			type: 'get',

			beforeSend: function () {
				$('#notice_contacts_email').html('<div class="ajax-loader"></div>');
			},

			success: function (data) {
				if (data.length > 0)
				{
					$('#notice_contacts_email').html(data);
				}
				else
				{
					$('#notice_contacts_email').html('Не удалось получить телефон.');
				}
			},

			error: function (xhr) {
				$('#notice_contacts_email').html('Не удалось получить телефон.');
			}
		});

		return false;
	});

});

