/*
* Обязательные требования для работы скрипта
* Должна быть кнопка отправить в виде тега <button type="submit">
* Для отправки через ajax необходим атрибут data-send="ajax" у тега form, пример: <form name="..." action="..." data-send="ajax">...</form>
*/

// Восстановить доступ
// ----------------------------------------//
function hide_password(){

	var login = $("#reset_password").is(':checked') ? "Восстановить" : "Войти";
	var title = $("#reset_password").is(':checked') ? "Восстановить пароль" : "Авторизация";
	var subtitle = $("#reset_password").is(':checked') ? "Укажите email для восстановления доступа." : "Войдите в систему используя свой email и пароль.";

	$(".js-password").toggle();
	$(".js-save").toggle();

	$(".js-submit").html(login);
	$(".js-title").html(title);
	$(".js-subtitle").html(subtitle);
}

var loader = '<i class="ml-2 fal fa-sync fa-spin"></i>';

$(document).ready(function(){



	if($("#reset_password").is(':checked')){
		hide_password();
	}

	$("#reset_password").on("click", function(){
		hide_password();
	});

	// Основной обработчик форм
	$('form[data-send=ajax]').submit(function(e){
		//отменяем стандартное действие при отправке формы
		e.preventDefault();

		$('body').addClass('fullscreen-enable');
        $('body').addClass('preloader-show');

		//текущая форма
		var form = $(this);
		//элемент кнопки
		var btn = form.find("button[type=submit]");
		//сохраняем первоначальное название кнопки отправления формы
		var txt = $(btn).html();
		//добавлять этот класс для неправильно заполненного поля
		var cls = 'is-invalid';
		//добавлять этот класс для сокрытия объекта
		var hide = 'd-none';
		//блок для уведомлений (ALRT), должен быть внутри формы (обычно в конце)
		var notify = '.error';
		//если указан атрибут action у формы, то посылаем запрос туда, иначе на ту же страницу, на которой находится пользователь
		var url = form.attr("action") == "undefined" ? window.location.pathname : form.attr("action");
		//если есть атрибут data-preloader и он = false
		// var preloader = form.data("preloader");
		//при отправке убираем класс неправильно заполненного поля у всех элементов формы
		form.find('input, select, textarea').removeClass(cls);
		//при отправке скрываем блок с уведомлениями
		form.find(notify).addClass(hide);
		//выключаем кнопку
		form.find(btn).attr("disabled","disabled");
		//убираем прелоадер если он не нужен
		// form.find(btn).html(preloader == false ? txt : txt+loader);
		/* инициализация запроса */
		$.ajax({
			/* каким методом отправляем форму */
			type: "post",
			/* урл определён выше */
			url: url,
			/* получаем данные, введенные пользователем в формате input1=value1&input2=value2..., */
			data: $(this).serialize(),
			/* возвращаем ответ всегда в json */
			datatype: "json",
			/* если запрос успешно выполнен */
			success: function(json){
				/* проверяем статус ответа чтобы выбрать дальнейшее дествие */
				switch (json.status) {
					/* если есть ошибка заполнения формы */
					case "ERR":
						/* получаем фокус на целевое поле, присваиваем ошибочный класс, выводим сообщение */
						$(json.target).focus().addClass(cls).html(json.message);
						/* включаем кнопку, возвращаем надпись */
						$(btn).removeAttr("disabled").html(txt);
						$('body').removeClass('fullscreen-enable');
						$('body').removeClass('preloader-show');
					break;
					/* если нужно показать блок с ошибкой*/
					case "ALRT":
						/* убираем класс невидимости и добавляем сообщение */
						$(notify).removeClass(hide).html(json.message);
						/* включаем кнопку, возвращаем надпись */
						$(btn).removeAttr("disabled").html(txt);
						$('body').removeClass('fullscreen-enable');
						$('body').removeClass('preloader-show');
					break;
					/* в случае если надо сделать переадресацию */
					case "HDR":
						/* куда перенаправим пользователя ? */
						// $(json.target).slideUp(500, 'linear', function(){ window.location.href = json.message; });
						window.location.href = json.message;
					break;
					/* ReMoVe form - удаляем форму и заменяем её сообщением */
					case "RMV":
					/* Если есть сообщение то выводим вместо формы */
					if(json.message)
						form.html(json.message);
					$('body').removeClass('fullscreen-enable');
					$('body').removeClass('preloader-show');
					break;
					/* Показываем модальное окно ИЛИ если всё ОК*/
					case "MDL":
					case "OK":
						/* Изменяем надпись кнопке, оставляем выключенной */
						$(btn).html(json.message);
						/* Все заполняемые элементы формы делаем неактивными */
						form.find('textarea, select, input, button').attr("disabled", "disabled");
						/* Если статус MDL то показываем модалку */
						if(json.status == "MDL"){
							/* Для модалок на бутстрапе */
							/* Скрываем объект из json.target */
							$(json.target).modal('hide');
							/* Показываем элемент который указан в json.message */
							$(json.message).modal('show');
							/*
							* Для модалок на fancybox
							* $.fancybox.close();
							* $.fancybox.open({src: json.message});
							*/
							/* Вернем изначальный текст кнопке, а то при повторном вызове модалки там будет указан элемент json.target */
							$(btn).html(txt);
						}
					break;
				}
			}
		});
	});
});
