var courtVKSPopup = {
	
	DOM: {},
	ajax: {
		'query': {},
		'path': {
			'getMeeting': '/'
		},
		'timeout': 30000,
		'process': false
	},
	meetings: {
		'list': [],			//Для запоминания данных списка мероприятий из базы по выбранной дате
		'current': null		//Для запоминания данных выбранного заседания
	},
	isExport: false,
	isExportShow: false,
	
	
	/**
	 * Объявляем внутренние переменные и обработчики сообытий
	 */
	init: function() {
		//Запоминаем часто используемые DOM-элементы
		this.setDOM();
		this.setExportFieldsMask();
		this.isExport = this.DOM.popup.$export.length;
		//Объявляем обработчики сообытий
		this.bind();
		//Адрес для получения списка заседаний по дате
		this.ajax.path.getMeeting = this.DOM.$popup.find('.js-court-popup-ajax').val();
		//Объявляем событие загрузки объекта сервиса
		courtVKS.DOM.$document.trigger('courtVKSPopupLoad');
	},
	
	
	/**
	 * Запоминаем часто используемые DOM-элементы
	 */
	setDOM: function() {
		this.DOM.$window = $(window);
		//Всплывающее окно
		this.DOM.$popup = courtVKS.DOM.$service.find('.js-court-popup');
		//Элементы всплывающего окна
		this.DOM.popup = {
			//Кнопка закрытия окна
			$close: this.DOM.$popup.find('.js-court-popup-close'),
			//Указатели с краю окна
			$cursors: this.DOM.$popup.find('.js-court-popup-arrow'),
			//Блок "График заседаний"
			$graph: this.DOM.$popup.find('.js-vks-popup-graph'),
			//Блок информации о заседание
			$descr: this.DOM.$popup.find('.js-vks-popup-item_descr'),
			//Блок Настройки экспорта
			$export: this.DOM.$popup.find('.js-vks-popup-export'),
			//Сообщение об ошибке при отправке данных
			$status: this.DOM.$popup.find('.js-vks-popup-status'),
			//Спинер загрузки
			$spiner: this.DOM.$popup.find('.js-court-popup-spiner')
		};
		//Список заседаний в блоке "График заседаний"
		this.DOM.popup.$list = this.DOM.popup.$graph.find('.js-vks-popup-list');
		//Поля в блоке информации о заседание
		this.DOM.popup.descr = {
			$items: this.DOM.popup.$descr.find('.js-vks-popup-item_descr-item')
		};
		//Поля в блоке Настройки экспорта
		this.DOM.popup.$exportFields = this.DOM.popup.$export.find('.js-vks-popup-export-field');
		//Заголовок и текст статуса
		this.DOM.popup.status = {
			$title: this.DOM.popup.$status.children('.js-vks-popup-status-title'),
			$text: this.DOM.popup.$status.children('.js-vks-popup-status-text')
		}
		
		//Запоминаем шаблон элемента списка заседаний
		this._setDOMPopupItemTemplate();
	},
	
	
	/**
	 * Запоминаем шаблон элемента списка заседаний
	 */
	_setDOMPopupItemTemplate: function() {
		var $template = this.DOM.popup.$list.find('.js-vks-popup-template-item');
		
		//Меняем селекторы в шаблоне
		$template
			.removeClass('g-hidden js-vks-popup-template-item')
			.addClass('b-vks-popup-item js-vks-popup-item');
		
		this.DOM.popup.$itemTemplate = $template;
		
		//Удаляем шаблон элемента списка заседаний
		$template.remove();
	},
	
	
	setExportFieldsMask: function() {
		this.DOM.popup.$exportFields
			.filter('.js-vks-popup-export-field--date')
			.mask('99.99.9999');
	},
	
	
	/**
	 * Объявляем обработчики сообытий
	 */
	bind: function() {
		//Обработчик изменения размеров окна браузера
		this._bindWindowResize();
		//Обработчик нажатия клавиш
		this._bindKey();
		//Объявляем обработчики сообытий для календаря
		this._bindCalendar();
		//Объявляем обработчики сообытий для всплывающего окна
		this._bindPopup();
	},
	
	
	/**
	 * Обработчик изменения размеров окна браузера
	 */
	_bindWindowResize: function() {
		var self = this;
		
		this.DOM.$window.resize(function(){
			//Меняем расположение всплывающего окна относительно выбранного дня, если календарь открыт
			if (courtVKS.DOM.$selectDay && !courtVKS.DOM.$calendar.hasClass('g-hidden')) {
				self.setPopupPosition();
			}
		});
	},
	
	
	/**
	 * Обработчик нажатия клавиш
	 */
	_bindKey: function() {
		var self = this;
		
		courtVKS.DOM.$document.keyup(function(event) {
			switch (event.which) {
				//Кнопка Esc
				case 27: 
					if (!self.DOM.$popup.hasClass('g-hidden')) {
						//Скрываем всплывающее окно
						self.hidePopup({
							'hideShadow': false
						});
					}
					break
			}
		});
	},
	
	
	/**
	 * Объявляем обработчики событий для календаря
	 */
	_bindCalendar: function() {
		var self = this;
		
		courtVKS.DOM.$service.delegate('.js-vks-export-link', 'click', function() {
			if (!self.ajax.process) {
				self
					.showPopupExport()
					.showPopup({
						isExport: true
					});
			}
		});
		
		//Обработчик нажатия на день в календаре
		courtVKS.DOM.$service.bind('courtVKSDayClick', function(e, param){
			if (self.isExportShow || param.hidePopup) {
				//Если клик произведен по любому другому дню, кроме выбранного,
				//скрываем всплывающее окно
				self.hidePopup(param);
			} else if (param.showPopup) {
				//Запоминаем выбранную дату для ajax-запроса
				self.ajax.query.date = courtVKS.DOM.$selectDay.get(0).onclick().date;
				//Расскрываем всплывающее окно
				self.showPopup(param);
			}
		});
	},
	
	
	/**
	 * Объявляем обработчики сообытий для всплывающего окна
	 */
	_bindPopup: function() {
		//Обработчик движения курсора по всплывающему окну (для очистки this.DOM.$hoverDay)
		this._bindPopupHover();
		//Обработчик клика по кнопке закрытия всплывающего окна
		this._bindPopupClose();
		//Обработчик клика по кнопке Очистить
		this._bindPopupExportClear();
		//Обработчик клика на заседание в списке заседаний
		this._bindPopupMeetingClick();
		//Обработчик клика по кнопке Экспортировать в календарь
		this._bindPopupDescrExport();
	},
	
	
	/**
	 * Обработчик движения курсора по всплывающему окну (для очистки this.DOM.$hoverDay)
	 */
	_bindPopupHover: function() {
		courtVKS.DOM.$service.delegate('.js-court-popup', 'hover', function(){
			courtVKS.DOM.$hoverDay = null;
		});
	},
	
	
	/**
	 * Обработчик клика по кнопке закрытия всплывающего окна
	 */
	_bindPopupClose: function() {
		var self = this;
		
		this.DOM.popup.$close.click(function(){
			if (!self.DOM.popup.$descr.hasClass('g-hidden')) {
				//Скрываем информацию о заседании и возвращаемся к графику заседаний
				self
					.hidePopupDescr()
					.showPopupMeetings();
			} else {
				//Скрываем всплывающее окно
				self.hidePopup({
					'hideShadow': true
				});
			}
		});
	},
	
	
	/**
	 * Обработчик клика по кнопке Очистить
	 */
	_bindPopupExportClear: function() {
		var self = this;
		
		this.DOM.popup.$export.delegate('.js-vks-popup-export-field--clear', 'click', function(){
			self.clearExportFields();
		});
	},
	
	
	/**
	 * Обработчик клика на заседание в списке заседаний
	 */
	_bindPopupMeetingClick: function() {
		var self = this;
		
		this.DOM.popup.$list.delegate('.js-vks-popup-item', 'click', function(){
			var pos = $(this).attr('rel');	//номер позиции заседания в списке
			
			//Данные по выбранному заседанию
			self.meetings.current = self.meetings.list[pos];
			//Скрываем блок "График заседаний" и расскрываем блок с информацией о заседании
			self
				.hidePopupMeetings()
				.showPopupDescr();
		});
	},
	
	
	/**
	 * Обработчик клика по кнопке Экспортировать в календарь
	 */
	_bindPopupDescrExport: function() {
		var self = this;
		
		this.DOM.popup.$descr.delegate('.js-vks-popup-item_descr-export-link', 'click', function() {
			self.exportDescr();
		});
	},
	
	
	/**
	 * Функция скрытия всплывающего окна
	 * 
	 * @param bool	param.hideShadow		TRUE - скрыть тень внутри ячейки после закрытия окна
	 */
	hidePopup: function(param) {
		var isHoverDay = courtVKS.DOM.$hoverDay ? true : false,
			isHoverDaySelected = (isHoverDay && courtVKS.DOM.$hoverDay.hasClass('calendar-selected')) ? true : false;
		
		if (!this.isExportShow) {
			if (param.hideShadow || !isHoverDaySelected) {
				//Скрываем тень у выбранного дня, если курсор установлен над другим днем
				courtVKS.DOM.$selectDay
					.find('.js-vks-day-hover')
					.addClass('g-hidden');
				
				if (isHoverDay && !isHoverDaySelected) {
					//Расскрываем тень у дня, над которым установлен и курсор и который не был выбран
					courtVKS.DOM.$hoverDay
						.find('.js-vks-day-hover')
						.removeClass('g-hidden');
				}
			}

			this.deActiveDay();
			//Скрываем всплывающее окно
			this.DOM.$popup.addClass('g-hidden');
			//Убираем стили позиционирования у окна
			this.DOM.$popup.attr('style', null);
			//Расскрываем все курсоры всплывающего окна
			this.DOM.popup.$cursors.removeClass('g-hidden');
			//Очищаем список заседаний
			this.DOM.popup.$list.html('');
			//Скрываем блоки всплывающего окна
			this
				.hidePopupMeetings()
				.hidePopupDescr()
				.hidePopupSpiner()
				.hidePopupStatus();
			//Устанавливаем стилизованный скролл в начало
			this.resetPopupListScroll();
			//Запускаем событие закрытия всплывающего окна
			this.DOM.$popup.trigger('closeVKSPopup');
		} else {
			this.DOM.$popup.addClass('g-hidden');
			this.hidePopupExport();
			
			if (isHoverDay && !isHoverDaySelected) {
				//Расскрываем тень у дня, над которым установлен и курсор и который не был выбран
				courtVKS.DOM.$hoverDay
					.find('.js-vks-day-hover')
					.removeClass('g-hidden');
			}
		}
		
		//Разблокируем возможность смены месяца в календаре
		courtCalendar.load = true;
		//Снимаем тень с календаря
		courtVKS.hideShadow();
	},
	
	
	hidePopupExport: function() {
		this.DOM.$popup.removeClass('vks-popup-export');
		this.DOM.popup.$export.addClass('g-hidden');
		
		this.isExportShow = false;
		
		return this;
	},
	
	
	/**
	 * Функция скрывает блок "График заседаний"
	 * 
	 * @return this
	 */
	hidePopupMeetings: function() {
		this.DOM.popup.$graph.addClass('g-hidden');
		
		return this;
	},
	
	
	/**
	 * Функция скрывает информацию о заседании
	 * 
	 * @return this
	 */
	hidePopupDescr: function() {
		//Скрываем блок информации о заседание
		this.DOM.popup.$descr.addClass('g-hidden');
		//Снимаем отметки с пунктов блока информации
		this.DOM.popup.descr.$items.removeClass('last g-hidden');
		//Очищаем поля блока информации о заседание
		this.clearPopupMeetingDescr();
		
		return this;
	},
	
	
	/**
	 * Функция скрывает спинер загрузки после отправки ajax-запроса
	 * 
	 * @return this
	 */
	hidePopupSpiner: function() {
		this.DOM.popup.$spiner.addClass('g-hidden');
		
		return this;
	},
	
	
	/**
	 * Функция скрывает сообщение о результатах отправки ajax-запроса
	 * 
	 * @return this
	 */
	hidePopupStatus: function() {
		//Скрываем сообщение об ошибке отправки данных и удаляем метки
		this.DOM.popup.$status
			.addClass('g-hidden')
			.removeClass('error');
		//Очищаем поля заголовка и сообщения
		$.each(this.DOM.popup.status, function(){
			$(this).text('');
		});
		
		return this;
	},
	
	
	/**
	 * Функция расскрывает всплывающее окно
	 * 
	 * @param bool	param.loadMeetings	TRUE - загружать список мероприятий
	 * @param bool	param.isExport
	 */
	showPopup: function(param) {
		//Блокируем возможность смены месяца в календаре
		courtCalendar.load = false;
		//Вешаем тень на весь календарь
		courtVKS.showShadow();
		
		if (param.isExport) {
			//Отображаем всплывающее окно
			this.DOM.$popup.removeClass('g-hidden');
		} else {
			//Оставляем активной ячейку выбранного дня
			courtVKS.DOM.$selectDay.addClass('calendar-selected');
			//Добавляем тень к выбранному дню
			courtVKS.DOM.$selectDay
				.find('.js-vks-day-hover')
				.removeClass('g-hidden');
			//Отображаем всплывающее окно
			this.DOM.$popup.removeClass('g-hidden');
			//Устанавливаем расположение всплывающего окна относительно выбранного дня
			this.setPopupPosition();
			
			if (param.loadMeetings) {
				//Отправляем запрос на получение графика заседаний
				this.loadListMeetings();
			}
		}
	},
	
	
	showPopupExport: function() {
		if (courtVKS.DOM.$selectDay) {
			courtVKS.DOM.$selectDay
				.find('.js-vks-day-hover')
				.addClass('g-hidden');
			this.deActiveDay();
		}
		
		this
			.hidePopupMeetings()
			.hidePopupDescr()
			.hidePopupSpiner()
			.hidePopupStatus();
		this.DOM.$popup
			.addClass('vks-popup-export')
			.attr('style', '');
		this.DOM.popup.$export.removeClass('g-hidden');
		
		this.isExportShow = true;
		
		return this;
	},
	
	
	/**
	 * Функция расскрывает список заседаний во всплывающем окне
	 * 
	 * @return this
	 */
	showPopupMeetings: function() {
		//Расскрываем список заседаний
		this.DOM.popup.$graph.removeClass('g-hidden');
		//Устанавливаем расположение всплывающего окна относительно выбранного дня и
		//кастомный скролл для списка заседаний
		this
			.setPopupPosition()
			.setPopupListScroll();
		
		return this;
	},
	
	
	/**
	 * Функция заполняет поля блока информации о заседание и расскрывает его
	 * 
	 * @return this
	 */
	showPopupDescr: function() {
		//Заполняем поля блока информации о заседание
		this.setPopupMeetingDescr();
		//Расскрываем блок информации о заседание
		this.DOM.popup.$descr.removeClass('g-hidden');
		//Редактируем расположение всплывающего окна
		this.setPopupPosition();
		
		return this;
	},
	
	
	/**
	 * Функция расскрывает спинер загрузки при отправки ajax-запроса
	 * 
	 * @return this
	 */
	showPopupSpiner: function() {
		this.DOM.popup.$spiner.removeClass('g-hidden');
		
		return this;
	},
	
	
	/**
	 * Функция расскрывает статус отправки ajax-запроса
	 * 
	 * @param bool	param.isError	TRUE - статус ошибки
	 * @param str	param.message	текст статуса
	 * 
	 * @return this
	 */
	showPopupStatus: function(param) {
		//Расскрываем сообщение об ошибке отправки данных
		this.DOM.popup.$status.removeClass('g-hidden');
		
		if (param.isError) {
			this.DOM.popup.$status.addClass('error');
		}
		
		//Заполняем поля статуса
		$.each(this.DOM.popup.status, function(name){
			if (name == '$title') {
				$(this).text(param.isError ? 'Ошибка' : 'Данные отправлены');
			} else {
				$(this).html(param.message);
			}
		});
		
		return this;
	},
	
	
	deActiveDay: function() {
		//Снимаем отметку активности с выбранного дня
		courtVKS.DOM.$selectDay.removeClass('calendar-selected');
		//Убираем запомненный выбранный день
		courtVKS.DOM.$selectDay = null;
		//Очищаем запомненный список мероприятий
		this.meetings = {};
	},
	
	
	/**
	 * Функция устанавливает расположение всплывающего окна относительно выбранного дня
	 * и отображает нужный указатель
	 * 
	 * @return this
	 */
	setPopupPosition: function() {
		var //Расположение выбранного дня в календаре
			dayParam = courtVKS.DOM.$selectDay.get(0).onclick(),
			//Ширина и высоты ячейки календаря выбранного дня
			daySize = {
				'width': courtVKS.DOM.$selectDay.outerWidth(),
				'height': courtVKS.DOM.$selectDay.outerHeight()
			},
			//Отступы сверху и слево от окна календаря для выбранного дня
			dayPosition = {
				'top': dayParam.week * daySize.height,
				'left': dayParam.day * daySize.width,
				'right': (6 - dayParam.day) * daySize.width
			},
			//Ширина и высоты всплывающего окна
			popupSize = {
				'width': this.DOM.$popup.width(),
				'height': this.DOM.$popup.height()
			},
			//Высота шапки страницы 
			headContentHeight = courtVKS.DOM.$panel.height() + courtVKS.DOM.$daysName.height() + 1,
			//Отступы
			offset = {
				//Вертикальный для первой строки
				'top': headContentHeight + daySize.height + 14,
				//Вертикальный для средних строк
				'topMiddle': headContentHeight + dayPosition.top - popupSize.height / 2 + daySize.height / 2 - 13,
				//Вертикальный для последней строки
				'bottom': daySize.height + 16,
				//Горизонтальный для угловых ячеек
				'corner': 20,
				//Горизонтальный для средних ячеек первой и последней строк
				'leftCenter': dayPosition.left - popupSize.width / 2 + daySize.width / 2 - 15,
				//Горизонтальный для первых 3 дней средних строк
				'left': dayPosition.left + daySize.width + 15,
				//Горизонтальный для последних 4 дней средних строк
				'right': dayPosition.right + daySize.width + 15
			},
			//Определяем все виды отступов всплывающего окна для дней календаря 
			//и расположение курсора
			paramOffset = {
				//Первый день первой недели (колонка календря)
				'topLeft': {
					'top': offset.top,
					'left': offset.corner,
					'cursor': 'left_top'
				},
				//Средние дни первой недели (колонки календря)
				'topLeftMiddle': {
					'top': offset.top,
					'left': offset.leftCenter,
					'cursor': 'top'
				},
				//Последний день первой недели (колонка календря)
				'topRight': {
					'top': offset.top,
					'right': offset.corner,
					'cursor': 'right_top'
				},
				//Первые 3 дня средних недель
				'topMiddleLeft': {
					'top': offset.topMiddle,
					'left': offset.left,
					'cursor': 'left'
				},
				//Последние 4 дня средних недель
				'topMiddleRight': {
					'top': offset.topMiddle,
					'right': offset.right,
					'cursor': 'right'
				},
				//Первый день последней недели (колонка календря)
				'bottomLeft': {
					'bottom': offset.bottom,
					'left': offset.corner,
					'cursor': 'left_bottom'
				},
				//Средние дни последней недели (колонки календря)
				'bottomLeftMiddle': {
					'bottom': offset.bottom,
					'left': offset.leftCenter,
					'cursor': 'bottom'
				},
				//Последний день последней недели (колонка календря)
				'bottomRight': {
					'bottom': offset.bottom,
					'right': offset.corner,
					'cursor': 'right_bottom'
				}
			},
			//Стили для расположения окна
			style = paramOffset[dayParam.pos],
			//Класс курсора, который необходимо отобразить
			cursor = '.arrow-' + paramOffset[dayParam.pos].cursor;
		
		//Устанавливаем расположение окна
		this.DOM.$popup.css(style);
		//Скрываем все курсора, кроме того, который должен отображаться
		this.DOM.popup.$cursors
				.not(cursor)
				.addClass('g-hidden');
		
		return this;
	},
	
	
	/**
	 * Функция добавляет список заседаний во всплывающее окно
	 * 
	 * @return this
	 */
	setPopupListMeetings: function() {
		var self = this;
		
		//Добавляем заседания в список
		for (var p in this.meetings.list) {
			if (p == 'indexOf') {
				continue;
			}
			
			//Добавляем заполненный шаблон
			this.DOM.popup.$list.append(function(index, html){
				var $template = self.DOM.popup.$itemTemplate.clone(),
					//Данные по заседанию
					data = self.meetings.list[p];
				
				//Номер позиции заседания в списке
				$template.attr('rel', p);
				
				//Резерв
				if (data.reserved == 1) {
					$template
						.find('.js-vks-popup-item-time')
						.addClass('b-vks-popup-item-time--reserved');
				}
				
				//Время заседания
				$template
					.find('.js-vks-popup-item-time-value')
					.text(data.time);
				//Суд
				$template
					.find('.js-vks-popup-item-court')
					.text(data.court);
				//Номер дела
				$template
					.find('.js-vks-popup-item-casenumber')
					.text(data.casenumber);
				
				return $template;
			});
		}
		
		return this;
	},
	
	
	/**
	 * Функция устанавливает стилизованный скролл для списка заседаний
	 */
	setPopupListScroll: function() {
		courtMain.setCustomScroll(
			this.DOM.popup.$graph.find('.js-vks-popup-graph-body-wrapper').get(0)
		);
	},
	
	
	/**
	 * Функция устанавливает стилизованный скролл в начало
	 */
	resetPopupListScroll: function() {
		var $wrapper = this.DOM.popup.$graph.find('.js-vks-popup-graph-body-wrapper');
		
		if ($wrapper.hasClass('flexcrollactive')) {
			courtMain.resetCustomScroll($wrapper.get(0));
		}
	},
	
	
	/**
	 * Функция заполняет поля блока информации о заседание
	 * 
	 * @return this
	 */
	setPopupMeetingDescr: function() {
		var self = this,
			$field, p;
		
		//Заполняем поля
		for (p in this.meetings.current) {
			$field = this.DOM.popup.descr.$items.filter('.meeting-'+p).find('.js-vks-popup-item_descr-value');
			
			if ($field) {
				if (this.meetings.current[p]) {
					$field.html(
						this.getMeetingValue({
							'prop': p, 
							'value': this.meetings.current[p]
						})
					);
				} else {
					$field.parent().addClass('g-hidden');
				}
			}
		}
		
		this.DOM.popup.descr.$items
			.not('.g-hidden')
			.last()
			.addClass('last');
		
		return this;
	},
	
	
	/**
	 * Функция преобразовывает и возвращает HTML-код на основе данных по заседанию
	 * 
	 * @param str param.prop		Название поля
	 * @param obj param.value		Значение поля
	 * 
	 * @return str
	 */
	getMeetingValue: function(param) {
		var text = '', result = [],
			value = param.value;
		
		switch (param.prop) {
			case 'casenumber':
				result = '<a href="http://kad.arbitr.ru/Card?number='+value+'" target="_blank">'+value+'</a>';
				break
				
			case 'court':
				result = '<a href="'+value['uri']+'" target="_blank">'+value['text']+'</a>';
				break
				
			case 'court_vks':
				for (var p in value) {
					text = '<a href="'+value[p]['uri']+'" target="_blank">';
					if (value[p]['choice']) {
						text += '<i></i>';
					}
					text += value[p]['text']+'</a>';
					result.push(text);
				}
				result = result.join("<br />");
				break
			
			case 'duty_judge':
			case 'lead_judge':
				result = (!value['uri']) ? (typeof(value) == 'string' ? value : '&nbsp;' ) : '<a href="'+value['uri']+'" target="_blank">'+value['text']+'</a>';
				break
				
			default:
				result = value ? value : '&nbsp;';
				break
		}
		
		return result;
	},
	
	
	clearExportFields: function() {
		var self = this;
		
		this.DOM.popup.$exportFields.each(function(){
			var $this = $(this);
			
			if ($this.hasClass('is_representation')) {
				$this
					.val('')
					.siblings('.js-textfield-represent')
					.not('.g-hidden')
					.remove();
			} else {
				courtMain.clearField($this);
			}
		});
	},
	
	
	/**
	 * Функция очищает поля блока информации о заседание
	 */
	clearPopupMeetingDescr: function() {
		this.DOM.popup.$descr
			.find('.js-vks-popup-item_descr-value')
			.html('&nbsp;');
	},
	
	
	exportDescr: function() {
		if (this.meetings.current && this.meetings.current.mid) {
			this.DOM.popup.$descr
				.find('form')
				.html('<input type="hidden" name="mid" value="' + this.meetings.current.mid + '" />')
				.submit();
		}
	},
	
	
	/**
	 * функция отправляет запрос на сервер для получения списка заседаний по выбранной дате
	 */
	loadListMeetings: function() {
		var self = this;
		
		this.ajax.process = true;
		this.meetings.list = [];
		//Расскрываем спинер
		this.showPopupSpiner();
		
		$.ajax({
			type: 'post',
			url: this.ajax.path.getMeeting,
			data: this.ajax.query,
			dataType: 'json',
			success: function(meetings) {
				if (meetings) {
					//Запоминаем список мероприятий из базы по выбранной дате
					self.meetings.list = meetings;
					//Расскрываем список заседаний
					self
						.hidePopupSpiner()
						.setPopupListMeetings()
						.showPopupMeetings();
				} else {
					//Расскрываем сообщение об ошибке отправки данных
					self
						.hidePopupSpiner()
						.showPopupStatus({
							'isError': true,
							'message': 'Список заседаний за выбранную дату получить не удалось.<br />Попробуйте воспользоваться сервисом позже.'
						});
				}
				self.ajax.process = false;
			},
			error: function() {
				//Расскрываем сообщение об ошибке отправки данных
				self
					.hidePopupSpiner()
					.showPopupStatus({
						'isError': true,
						'message': 'Во время отправки запроса произошла ошибка.<br /><br />Попробуйте воспользоваться сервисом позже. Если ошибка повторится, обратитесь в службу технической поддержки.'
					});
				self.ajax.process = false;
			}
		});
	}
}