//Инициализации переменной ролей пользователей
if (typeof(isAdmin) == 'undefined')
	isAdmin = false;

var courtInternetReceptionAjaxTimeout = 30000; // Таймаут ajax-запросов
	
// учим jQuery.val() правильно учитывать плэйсхолдер
$.fn.value=$.fn.val;$.fn.val=function(b){var a=$.fn.value.apply(this,arguments);if(!b&&this.attr("placeholder")==a)return"";return a};

/** Обработка плэйсхолдеров в инпутах (inputDefaults)
 *
 * @author Amal Samally [amal.samally(at)gmail.com]
 * @version 1.2
 */
$.fn.inputDefaults=function(d){return this.filter("input,textarea").each(function(){if(typeof d=="string")d={text:d};var a=$(this),b=$.extend({cl:"inactive",text:a.attr("placeholder")},d);b.text&&a.attr("placeholder",b.text).focusin(function(){var c=$.trim(a.value());if(c==""||c==b.text)a.val("");a.removeClass(b.cl)}).focusout(function(){var c=$.trim(a.value());if(c==""||c==b.text)a.val(b.text).addClass(b.cl)}).focusin().focusout()})};

/*
 *	Обработчик нажатия клавиш
 */
$(document).keydown(function(event) {
	switch (event.which) {
		case 27: // Esc
			closePopup($('.b-calendar-day--clicked').data('tooltip'));
			break;
		case 37: // Стрелка влево
			if (typeof($('.b-calendar-day--clicked').data('tooltip')) == 'undefined')
				loadCalendar($('.js-calendar-link--left').attr('rel'));
			break;
		case 39: // Стрелка вправо
			if (typeof($('.b-calendar-day--clicked').data('tooltip')) == 'undefined')
				loadCalendar($('.js-calendar-link--right').attr('rel'));
			break;
	}
});


/**
 * Обработчик изменения размеров окна браузера
 */
$(window).resize(function() {
	// Рассчитываем высоту блоков календаря
	fixCalendarHeight();
	// Определяем обработчики событий для календаря
	setEventsForCalendar();
});


/*
 *	Функция, вызываемая после полной подгрузки DOM-структуры документа
 */
$(function() {
	// Инициализируем спинер загрузки
	initSpiner();
	// Подгружаем календарь для текущего месяца
	loadCalendar('holidayDaysOfWeek=' + holidayDaysOfWeek);

	// Обработчик отправки формы из всплывающего окна по нажатию кнопки Enter
	$('.js-popup').keydown(function(event) {
		if (event.which == 13)
			if ($("*:focus").attr('type') !== 'textarea')
				$(this).find('input[type="button"]').trigger('click');
	});
});


/*
 *	Функция для запуска функции по ее имени
 */
function executeFunctionByName(functionName, context /*, args */) {
	var args = [];
	for (var i = 2, max = arguments.length; i < max; i++) {
		args.push(arguments[i]);
	}
	var namespaces = functionName.split(".");
	var func = namespaces.pop();
	for (var i = 0; i < namespaces.length; i++) {
		context = context[namespaces[i]];
	}
	return context[func].apply(this, args);
}

/**
 * Функция, возвращающая дату для диалогового окна
 */
function getStringDateForPopup(stringDate) {
	var matches = stringDate.match(/[\d]+/g),
		monthes = ['', 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
	if (matches.length == 3)
		return matches[0].toString() + ' ' + monthes[parseInt(matches[1], 10)] + ' ' + matches[2].toString() + ' г.';
	return matches[0].toString();
}

/**
 * Функция, конвертирующая дату из формата %d.%m.%Y в %Y-%m-%d
 */
function convertDateToMySql(date) {
	var dateMatched = date.match(/^([\d]{2})[.]([\d]{2})[.]([\d]{4})$/);
	if (dateMatched)
		return dateMatched[3] + '-' + dateMatched[2] + '-' + dateMatched[1];
	return '';
}

/*
 *	Функция для проверки валидности email
 */
function checkEmail(email) {
	return /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/.test(email.toLowerCase());
}

/*
 *	Функция для проверки валидности интервала времени
 */
function checkTime(time) {
	// Разбиваем строку на две даты
	var strTimeArray = time.match(/[\d]{1,2}\:[\d]{2}/g);
	if (strTimeArray)
		if (strTimeArray.length == 2) {
			for (var i = 0; i < 2; i++) {
				var strTime = strTimeArray[i].match(/[\d]{2}/g);
				if (strTime)
					if (strTime.length == 2) {
						if ((parseInt(strTime[0], 10) < 0) || (parseInt(strTime[0], 10) > 23))
							return false;
						else
							if ((parseInt(strTime[1], 10) < 0) || (parseInt(strTime[1], 10) > 59))
								return false;
					}
					else
						return false;
				else
					return false;
			}
			if (strTimeArray[0] >= strTimeArray[1])
				return false;
		}
		else
			return false;
	else
		return false;
	return true;
}

/*
 *	Функция для получения высоты окна браузера
 */
function getWindowHeight() {
	if (typeof(window.innerHeight) != 'undefined')
		return window.innerHeight;
	else
		if (document.documentElement &&
			(document.documentElement.clientWidth || document.documentElement.clientHeight))
			return document.documentElement.clientHeight;
	return document.body.clientHeight;
}

/*
 *	Функция для отображения сообщений об ошибках внутри текстовых полей
 */
function setFieldError($input, message) {
	if (typeof($input.attr('tempvalue')) === 'undefined') {
		$input.attr('tempvalue', $input.val())
			.addClass('error').val(message)
			.unbind('focusin').bind('focusin', function() {
				var $this = $(this);
				$this.unbind('focusin')
					.removeClass('error')
					.val($this.attr('tempvalue'))
					.removeAttr('tempvalue');
			});
	}
}

/*
 *	Функция для отображения сообщений об ошибках внутри выпадающего списка
 */
function setSelectError(jField, message) {
	var fakeField = jField.closest('.b-field'),
		fakeFieldSelectedTxt = fakeField.find('.selectedTxt');
	// Выделяем текст ошибки цветом
	fakeField.addClass('error');
	// Выводим текст ошибки в выпадающий список
	fakeFieldSelectedTxt.text(message);
	// Убираем сообщение об ошибке, если выбран судья из списка
	jField.change(function() {
		$(this).unbind('change');
		fakeField.removeClass('error');
		fakeFieldSelectedTxt.text('');
	});
}

/*
 *	Функция для добавления события onhover для календарных дней
 */
function setCalendarHoverEvent() {
	$('.js-calendar-day').unbind('hover').hover(function() {
		var block = $(this),
			parent = block.parent();
		if (!(parent.hasClass('b-calendar-table-cell--disabled') ||
			(!isAdmin && block.is('.js-calendar-day--holiday, .js-calendar-day--empty, .js-calendar-day--full'))))
			block.children('.js-hover').show();
		else
			block.css('cursor', 'default');
	}, function() {
		$(this).children('.js-hover').hide();
	});
}

/*
 *	Функций для закрытия всплывающего окна
 */
function closePopup(popup) {
	// Скрываем всплывающее окно
	try {
		popup.hide();	// hide tooltip
	} catch(e) {
		if (popup)
			popup.close();	// hide overlay
	}
	// Убираем фиксированную высоту всплывающего окна
	$('.js-popup-content')
						.css('height', 'auto')
						.removeClass('b-popup-content--second');
	// Убираем признак того, что день был выбран, со всех дней календаря
	$('.js-calendar-day').removeClass('b-calendar-day--clicked');
	// Убираем признак того, что ячейка календаря отключена
	$('.b-calendar-table-cell').removeClass('b-calendar-table-cell--disabled');
}


/*
 *	Функция для инициализации спинера загрузки
 */
function initSpiner() {
	$('.b-calendar-module-spiner').css('width', $('.b-calendar-module').width());
}


/*
 *	Функция для подгрузки html-кода календаря
 */
function loadCalendar(query) {
	// Показываем спинер загрузки
	$('.b-calendar-module-spiner')
		.css('background-position', '50% 50%')
		.text('');
	$('.b-calendar-title-right--appointment').hide();
	// Подгружаем календарь
	$.ajax({
		type: 'post',
		url: '/sites/all/modules/court/court_insight_case/ajax/ajax_get_calendar.php',
		data: query,
		dataType: 'html',
		timeout: courtInternetReceptionAjaxTimeout,
		success: function(html) {
			if (html) {
				// Прячем спинер загрузки
				$('.b-calendar-module-spiner').hide();
				$('.b-calendar-title-right--appointment').show();
				// Выводим содержимое календаря
				$('.js-content').html(html);
				// Рассчитываем высоту блоков календаря
				fixCalendarHeight();
				// Определяем обработчики событий для календаря
				setEventsForCalendar();
			}
			else {
				// Прячем спинер, показываем текст ошибки
				$('.b-calendar-module-spiner')
					.css('background-position', '50% -100px')
					.text('Сервис временно недоступен');
			}
		},
		error: function() {
			// Прячем спинер, показываем текст ошибки
			$('.b-calendar-module-spiner')
				.css('background-position', '50% -100px')
				.text('Сервис временно недоступен');
		}
	});
}

/*
 *	Функция для добавления событий для календаря
 */
function setEventsForCalendar() {
	// Обработчик клика на дне календаря
	$('.js-calendar-day').unbind('click').click(function() {
		// Получаем доступ к текущему объекту (день в календаре) и к dom-структуре всплывающего окна
		var thisElement = $(this),
			jPopup = $('.js-popup');

		// Если ячейка календаря отключена, то закрываем все открытые всплывающие окна
		if (thisElement.hasClass('js-calendar-day--disabled') ||
			thisElement.closest('.js-calendar-table-cell').hasClass('b-calendar-table-cell--disabled') ||
			(!isAdmin && thisElement.is('.js-calendar-day--holiday'))) {
			closePopup($('.b-calendar-day--clicked').data('tooltip'));
			return false;
		}

		// Отключаем все ячейки календаря
		$('.b-calendar-table-cell').addClass('b-calendar-table-cell--disabled');

		// Ставим класс-признак того, что элемент был выбран, оставляем включенной текущую ячейку календаря
		thisElement.addClass('b-calendar-day--clicked').parent().removeClass('b-calendar-table-cell--disabled');
		// Очищаем классы типов внешнего вида всплывающего окна
		jPopup.removeClass('b-popup--right b-popup--left b-popup--up b-popup--down b-popup--leftdown b-popup--rightdown b-popup--leftup b-popup--rightup');

		var blockedTimes = [],
			blockedTimesError = false;
		$.ajax({
			type: 'get',
			dataType: 'json',
			async: false,
			url: '/sites/all/modules/court/court_insight_case/ajax/ajax_get_times.php',
			timeout: courtInternetReceptionAjaxTimeout,
			data: {
				date: thisElement.find('input[name="date"]').val()
			},
			success: function(data) {
				blockedTimes = data;
			},
			error: function() {
				blockedTimesError = true;
			}
		});

		var popupClass = ''
			popupPosition = '',
			popupOffset = null,
			popupIsRelative = true,
			popupEffect = ($.browser.msie) ? 'toggle' : 'fade';
		// Определяем настройки вида всплывающего окна
		if (thisElement.hasClass('js-calendar-day--right')) {
			popupClass = 'b-popup--right';
			popupPosition = 'center right';
			popupOffset = [-3, 8];
		}
		else
			if (thisElement.hasClass('js-calendar-day--up')) {
				popupClass = 'b-popup--up';
				popupPosition = 'top center';
				popupOffset = [-15, 0];
			}
			else
				if (thisElement.hasClass('js-calendar-day--down')) {
					popupClass = 'b-popup--down';
					popupPosition = 'bottom center';
					popupOffset = [0, -7];
				}
				else
					if (thisElement.hasClass('js-calendar-day--left')) {
						popupClass = 'b-popup--left';
						popupPosition = 'center left';
						popupOffset = [-3, -7];
					}
					else {
						if (thisElement.hasClass('js-calendar-day--leftdown')) {
							popupClass = 'b-popup--leftdown';
							popupPosition = 'bottom center';
							popupOffset = [0, 114];
						}
						else
							if (thisElement.hasClass('js-calendar-day--rightdown')) {
								popupClass = 'b-popup--rightdown';
								popupPosition = 'bottom center';
								popupOffset = [0, -114];
							}
							else
								if (thisElement.hasClass('js-calendar-day--leftup')) {
									popupClass = 'b-popup--leftup';
									popupPosition = 'top center';
									popupOffset = [-15, 114];
								}
								else
									if (thisElement.hasClass('js-calendar-day--rightup')) {
										popupClass = 'b-popup--rightup';
										popupPosition = 'top center';
										popupOffset = [-15, -114];
									}
					}
		// Инициализируем всплывающее окно
		jPopup.addClass(popupClass);
		thisElement.tooltip({
			position: popupPosition,
			offset: popupOffset,
			relative: popupIsRelative,
			effect: popupEffect,
			fadeInSpeed: 300,
			fadeOutSpeed: 100,
			opacity: 1,
			tip: jPopup,
			tipClass: 'popup',
			events: {
				def:'null,null',
				tooltip:'null,null'
			}
		});

		// Получаем доступ к объекту - всплывающему окну
		var popup = thisElement.data('tooltip');

		// Формируем содержимое всплывающего окна в зависимости от типа
		$('.js-popup').removeClass('b-popup--tight b-popup--ultratight');
		if (!isAdmin) {
			$('.js-popup-content').html($('.js-popups--request').html());
		}
		else {
			$('.js-popup-content').html($('.js-popups--appointment').html());
		}

		$('.js-popup .js-popup-block-time').each(function() {
			var $this = $(this);
			if ($.inArray($.trim($this.text()), blockedTimes) != -1) {
				$this.addClass('b-popup-block-time--blocked js-popup-block-time--blocked g-cursor_default--user');
			}
		});

		// Стилизуем выпадающие списки
		$('.js-popup select').sSelect();
		$('.js-popup-block--second').find('.selectedTxt').text('Выберите тип');

		// Добавляем маски ввода для некоторых полей
		//$('.js-popup input[name"]').mask("99:99 - 99:99");

		// Стилизуем ползунок (rangeinput)
		$('.js-popup input[type="range"]').rangeinput();
		$('#rangeinputCount').prev().children('.handle').html($('#rangeinputCount'));

		// Отмечаем чекбокс, если выходной день
		if (thisElement.hasClass('js-calendar-day--holiday')) {
			$('.b-field--checkbox input').attr('checked', 'checked');
		} else {
			$('.b-field--checkbox input').prop('checked', null);
		}
		
		// Стилизуем чекбоксы
		$('.b-field--checkbox input').checkbox({ empty: '/sites/all/modules/court/court_insight_case/img/empty.png'});
		
		// Добавляем обработчики для подсказок в текстовых полях
		$('.js-popup input[placeholder], .js-popup textarea[placeholder]').inputDefaults();

		// Обработчик клика по времени приема
		$('.js-popup .js-popup-block-time').click(function() {
			var $this = $(this);
			if (!$this.hasClass('js-popup-block-time--blocked')) {
				if (!isAdmin) {
					$('.js-popup .js-popup-block-time').removeClass('b-popup-block-time--checked');
				}
				$this.toggleClass('b-popup-block-time--' + (isAdmin ? 'blocked' : 'checked'));
			}
			// Проверяем статус кнопки
			$('.js-popup .js-field-search').toggleClass('b-field-search--enabled', checkSendButtonState($('.js-popup form')));
		});


		// Обработчик ввода текста внутрь текстового поля
		$('.js-popup input[name="casenumber"]').keyup(function(event) {
			if (event.which === 13) {
				$('.js-field-search').click().get(0).focus();
			}
			$('.js-popup .js-field-search').toggleClass('b-field-search--enabled', checkSendButtonState($('.js-popup form')));
		});


		// Обработчик ввода текста внутрь текстового поля
		$('.js-popup-block--sender input').keyup(function() {
			$('.js-popup .b-field--button').toggleClass('b-field--button_disabled', !checkFormSubmitState($(this).closest('.js-popup-block--sender')));
		});


		// Обработчик клика на кнопке поиска дела
		$('.js-field-search').click(function() {
			var $this = $(this),
				$input = $('.js-popup input[name="casenumber"]'),
				caseNumber = $.trim($input.val()).toUpperCase();
			if ($this.hasClass('b-field-search--enabled') &&
				!$this.hasClass('b-field-search--loading')) {
				if (validateCaseNumber(caseNumber)) {
					$this.addClass('b-field-search--loading');
					var errorCallback = function() {
						var jPopupContent = $('.js-popup-content');
						// Фиксируем высоту всплывающего окна
						jPopupContent.css('height', jPopupContent.height() + 'px');
						// Выводим сообщение об ошибке
						jPopupContent.html($('.js-popups--request_error').html());
					};
					// Синхронный ajax-запрос
					$.ajax({
						type: 'get',
						dataType: 'json',
						url: '/sites/all/modules/court/court_insight_case/data/getCase.php',
						timeout: courtInternetReceptionAjaxTimeout,
						data: {
							number: caseNumber
						},
						success: function(data) {
							// Если форма успешно отправлена, то показываем новую форму
							if (!data.id) {
								var jPopupContent = $('.js-popup-content');
								
								//Добавляем класс обозначающий вторую форму
								jPopupContent.addClass('b-popup-content--second');
								// Фиксируем высоту всплывающего окна
								jPopupContent.css('height', jPopupContent.height() + 'px');
								// Сохраняем сведения о судье
								//$('.js-popup input[name="judge"]').val(data.judge);
								// Показываем вторую форму
								$('.js-popup .js-popup-title').text('Укажите данные');
								$('.js-popup .js-popup-block--first, .js-popup .js-popup-block--second').toggleClass('g-hidden');
							}
							// Иначе выводим сообщение об ошибке
							else {
								setFieldError($input, data.error);
								$this.removeClass('b-field-search--loading');
							}
						},
						error: function() {
							setFieldError($input, 'Сервис временно не работает');
							$this.removeClass('b-field-search--loading');
						}
					});
				} else {
					setFieldError($input, 'Некорректный номер дела');
				}
			}
			return false;
		});


		// Добавляем обработчик снятия сообщений об ошибке внутри поля ввода
		$('.js-popup input, .js-popup textarea').focusin(function() {
			var thisElement = $(this);
			if (thisElement.hasClass('error')) {
				thisElement.removeClass('error');
			}
		});

		// Добавляем обработчик отправки формы всплывающего окна
		$('.js-popup input[type="button"]').click(function() {
			var $this = $(this),
				jPopup = $this.closest('.js-popup'),
				jForm = jPopup.find('form');
			if (!$this.parent().hasClass('b-field--button_disabled')) {
				executeFunctionByName(jForm.get(0).onclick().funcName, window, jPopup, thisElement);
			}
		});

		// Определяем обработчик закрытия всплывающего окна
		$('.js-popup-close').click(function() {
			closePopup(popup);
		});

		// Показываем всплывающее окно
		popup.show();
	});

	// Обработчик события для клика на ссылках с названиями месяцев
	$('.js-calendar-link').unbind('click').click(function() {
		loadCalendar($(this).attr('rel'));
		return false;
	});

	// Добавляем события onhover на блоки календарных дней
	setCalendarHoverEvent();
}


/*
 *	Функций для расчета и установки высоты блока с календарем
 */
function fixCalendarHeight() {
	var minBlockHeight = 100,
		maxBlockHeight = 200,
		fixHeight = $('.b-iblock__title').outerHeight(),
		columnHeight = $('.columnLeft').height() - fixHeight,
		freeHeight =  getWindowHeight() - ($('.b-header').outerHeight() + $('.b-footer').outerHeight() + fixHeight),
		calendarHeight = Math.max(columnHeight, freeHeight),
		jWeeks = $('.js-calendar-table tr'),
		jWeeksBlocks = jWeeks.find('.js-calendar-day'),
		weeksCount = jWeeks.length,
		// Высчитываем высоту блоков в календаре
		blockHeight = Math.min(Math.floor(calendarHeight / weeksCount), maxBlockHeight),
		lastBlockHeight = Math.min(calendarHeight - (weeksCount - 1) * blockHeight, maxBlockHeight);
	// Применяем высчитанную высоту к блокам в календаре
	if (blockHeight > minBlockHeight) {
		jWeeks.height(blockHeight);
		jWeeksBlocks.height(blockHeight);
		// Для последней строки календаря выставляем особую высоту
		jWeeks.filter(':last').height(lastBlockHeight)
			.find('.js-calendar-day').height(lastBlockHeight);
	}
	// Убираем границу для крайних левых ячеек
	$('.js-calendar table tr').find('td:eq(0)').css('border-left', '0');
	// Показываем календарь только после изменения высоты ячеек
	$('.js-calendar').css('visibility', 'visible');
}


/*
 *	Функция для проверки статуса кнопки отправки номера дела на проверку
 */
function checkSendButtonState(jForm) {
	return !!$('.b-popup-block-time--checked', jForm).length &&
		!!$.trim($('input[name="casenumber"]', jForm).val());
}

/*
 *	Функция для проверки статуса отправки заявления
 */
function checkFormSubmitState(jForm) {
	var notEmpty = true;
	$('input[type="text"]', jForm).each(function() {
		notEmpty = notEmpty && !!$.trim($(this).val());
	});
	return notEmpty;
}


/*
 *	Функции для корректности номера дела
 */
function validateCaseNumber(caseNumber) {
	return /^[A-ZА-Я][\d]{2}[A-ZА-Я]{0,1}\-[\d]{1,6}\/[\d]{2,4}$/.test(caseNumber);
}


/*
 *	Функции для валидации содержимого форм
 */
// Валидация формы с заявкой пользователей
function validateFormRequestAjax(jForm) {
	var isValid = true,
		fields = [],
		jFields = jForm.find('input[name], textarea[name]');
	// Получаем значения полей из формы
	for (var i = 0, max = jFields.length; i < max; i++) {
		var currentField = jFields.eq(i);
		fields[currentField.attr('name')] = currentField;
	}
	// Тексты ошибок
	var surnameErrorText = 'Укажите фамилию',
		nameErrorText = 'Укажите имя',
		patronymicErrorText = 'Укажите отчество',
		phoneErrorText = 'Некорректный номер',
		emailErrorText = 'Некорректный email';
	
	// Очищаем поля от подсказок перед проверкой
	fields['sender_name'].val(
		(fields['sender_name'].val() == nameErrorText) ? '' : fields['sender_name'].val()
	);
	fields['sender_phone'].val(
		(fields['sender_phone'].val() == phoneErrorText) ? '' : fields['sender_phone'].val()
	);
	fields['sender_mail'].val(
		(fields['sender_mail'].val() == emailErrorText) ? '' : fields['sender_mail'].val()
	);
	
	if (fields['sender_surname']) {
		fields['sender_surname'].val((fields['sender_surname'].val() == surnameErrorText) ? '' : fields['sender_surname'].val());
		// Проверяем значения полей
		if (!$.trim(fields['sender_surname'].val())) {
			setFieldError(fields['sender_surname'], surnameErrorText);
			isValid = false;
		}
	}
	
	if (fields['sender_patronymic']) {
		fields['sender_patronymic'].val((fields['sender_patronymic'].val() == patronymicErrorText) ? '' : fields['sender_patronymic'].val());
		// Проверяем значения полей
		if (!$.trim(fields['sender_patronymic'].val())) {
			setFieldError(fields['sender_patronymic'], patronymicErrorText);
			isValid = false;
		}
	}

	// Проверяем значения полей
	if (!$.trim(fields['sender_name'].val())) {
		setFieldError(fields['sender_name'], nameErrorText);
		isValid = false;
	}
	
	if (!/[\+\d\(\)\s-]/i.test(fields['sender_phone'].val())) {
		setFieldError(fields['sender_phone'], phoneErrorText);
		isValid = false;
	}
	/*if (!checkEmail(fields['sender_mail'].val())) {
		setFieldError(fields['sender_mail'], emailErrorText);
		isValid = false;
	}*/
	// Возвращаем результат проверки
	return isValid && !jFields.is('.error');
}


/*
 *	Функции для отправки форм из всплывающих окон
 */
// Отправка формы от пользователя
function formRequestAjax(jPopup, jDay) {
	var jForm = jPopup.find('form');
	// Выполняем проверку введенных пользователем данных
	if (validateFormRequestAjax(jForm)) {
		// Показываем спинер загрузки перед отправкой ajax-запроса
		jForm.find('.js-popup-block--button').children().css('visibility', 'hidden');

		var errorCallback = function() {
			var jPopupContent = $('.js-popup-content');
			// Фиксируем высоту всплывающего окна
			jPopupContent.css('height', jPopupContent.height() + 'px');
			// Выводим сообщение об ошибке
			jPopupContent.html($('.js-popups--request_error').html());
		};

		// Синхронный ajax-запрос
		$.ajax({
			type: 'post',
			dataType: 'json',
			url: '/sites/all/modules/court/court_insight_case/data/saveRequest.php',
			timeout: courtInternetReceptionAjaxTimeout,
			data: {
				check: true,
				date: jDay.children('input[name="date"]').val(),
				time_request: $.trim(jForm.find('.b-popup-block-time--checked').text()),
				case_number: jForm.find('input[name="casenumber"]').val(),
				sender_company: jForm.find('input[name="sender_company"]').val(),
				sender_surname: jForm.find('input[name="sender_surname"]').val(),
				sender_name: jForm.find('input[name="sender_name"]').val(),
				sender_patronymic: jForm.find('input[name="sender_patronymic"]').val(),
				sender_phone: jForm.find('input[name="sender_phone"]').val(),
				sender_mail: jForm.find('input[name="sender_mail"]').val(),
				type_code: jForm.find('select[name="type"]').val(),
				type: jForm.find('select[name="type"]').children('option').filter(':selected').text(),
				judge: $('.js-popup input[name="judge"]').val(),
				representative_count: jForm.find('input[name="representative_count"]').val()
			},
			success: function(data) {
				// Если форма успешно отправлена, то показываем всплывающее окно с сообщением
				if (data) {
					var jPopupContent = $('.js-popup-content');
					// Фиксируем высоту всплывающего окна
					jPopupContent.css('height', jPopupContent.height() + 'px');
					// Выводим сообщение внутрь всплывающего окна
					jPopupContent.html($('.js-popups--request_success').html());
				}
				// Иначе выводим сообщение об ошибке
				else {
					errorCallback();
				}
			},
			error: function() {
				errorCallback();
			}
		});
	}
}



// Отправка формы с установкой приемного дня от администратора
function formAppointmentAjax(jPopup, jDay) {
	var jForm = jPopup.find('form');

	// Сохраняем некоторые данные в переменных, чтобы после запроса передать их в календарь
	var times = [],
		$times = jForm.find('.js-popup-block-time'),
		isholiday = jForm.find('input[name="isholiday"]').is(':checked');

	for (var i = 0, max = $times.length; i < max; i++) {
		var $timeItem = $times.eq(i);
		if ($timeItem.hasClass('b-popup-block-time--blocked')) {
			times.push($.trim($timeItem.text()));
		}
	}

	// Показываем спинер загрузки перед отправкой ajax-запроса
	jForm.find('.js-popup-block--button').children().css('visibility', 'hidden');

	var errorCallback = function() {
		var jPopupContent = $('.js-popup-content');
		// Фиксируем высоту всплывающего окна
		jPopupContent.css('height', jPopupContent.height() + 'px');
		// Выводим сообщение об ошибке
		jPopupContent.html($('.js-popups--request_error').html());
	};

	// Синхронный ajax-запрос
	$.ajax({
		type: 'post',
		dataType: 'json',
		url: '/sites/all/modules/court/court_insight_case/data/saveData.php',
		timeout: courtInternetReceptionAjaxTimeout,
		data: {
			check: true,
			date: jDay.children('input[name="date"]').val(),
			times: times,
			isholiday: isholiday
		},
		success: function(data) {
			// Если форма успешно отправлена, то передаем новые данные в календарь и убираем всплывающее окно
			if (data) {
				// Переключаем выходной день
				jDay.toggleClass('b-calendar-day--holiday js-calendar-day--holiday', isholiday);
				// Скрываем всплывающее окно
				closePopup(jDay.data('tooltip'));
			}
			else {
				errorCallback();
			}
		},
		error: function() {
			errorCallback();
		}
	});
}
