var normativeDocs = {
	
	DOM: {},
	data: {
		'blocksHeight': 0,
		'leftColPaddingTop': 0
	},
	isMenuAccordion: false,
	
	/**
	 * Объявляем внутренние переменные и обработчики сообытий
	 */
	init: function() {
		//Запоминаем часто используемые DOM-элементы
		this.setDOM();
		
		if (this.DOM.$menu.children().hasClass('accordion')) {
			this.isMenuAccordion = true;
		}
		
		if (this.isMenuAccordion) {
			this.data.blocksHeight = this.DOM.$header.outerHeight() + this.DOM.$footer.outerHeight();
			this.special.context = this;
			this.special.init();
		} else {
			//Определяем параметры
			this.data.blocksHeight = this.DOM.$header.outerHeight() + this.DOM.$title.outerHeight() + this.DOM.$footer.outerHeight();
			//Объявляем обработчики сообытий
			this.bind();
			//Корректируем внешний вид страницы
			this.editPage();
		}
	},
	
	
	special: {
		context: null,
		
		init: function() {
			var self = this;
			
			//Устанавливаем обработчик расскрытия/скрытия подменю
			this.context.DOM.$menu
				.find('.js-menu-item.b-menu-item--level_first')
				.data('callback', function(){
					self.editMenuHeight($(this));
				});
			//Показываем документ после загрузки страницы
			this.context.DOM.$widget.css('visibility', 'visible');
			//Устанавливаем высоту для виджета
			this
				.editWidgetHeight()
				.editMenuHeight();
			//Обработчик изменений окна браузера
			this.context.DOM.$window.resize(function(){
				self
					.editWidgetHeight()
					.editMenuHeight();
			});
		},
		
		editMenuHeight: function($current) {
			var $submenu = $current || this.context.DOM.$menu.find('.js-menu-item--active.b-menu-item--level_first').children('.js-submenu'),
				height = {
					'doc': this.context.DOM.$window.height() - 30 - this.context.data.blocksHeight,
					'menu': this.context.DOM.$menu.height(),
					'submenu': $submenu.height()
				};
			
			if (height.menu >= height.doc) {
				height.outSubmenu = height.menu - height.submenu;
				height.submenuNew = height.doc - height.outSubmenu;
				
				if (height.submenuNew < 150) {
					height.submenuNew += 150;
				}
				
				$submenu.height(height.submenuNew);
				
				//Стилизуем полосу прокрутки в левой колонке
				courtMain.setCustomScroll($submenu[0]);
				
			}
			
			return this;
		},
		
		editWidgetHeight: function() {
			var height = {
					'widget': this.context.DOM.$window.height() - this.context.data.blocksHeight,
					'docHeader': this.context.DOM.doc.$header.outerHeight(),
					'docSidePanelSearch': this.context.DOM.doc.sidepanel.$search.outerHeight()
				};
			
			height.doc = height.widget - height.docHeader;
			
			if (!this.context.DOM.doc.$container.length) {
				this.context.setDOMDocs();
			}
			
			this.context.DOM.$doc.height(height.widget);
			this.context.DOM.doc.$container.height(height.doc);
			this.context.DOM.doc.$sidepanel.height(height.doc);
			this.context.DOM.doc.sidepanel.$container.height(height.doc - height.docSidePanelSearch);
			
			return this;
		}
	},
	
	
	/**
	 * Запоминаем часто используемые DOM-элементы
	 */
	setDOM: function() {
		this.DOM.$window = $(window);
		this.DOM.$menu = $('.l-column--left .js-block-menu .js-block-body');
		this.DOM.$header = $('.l-header');
		this.DOM.$title = $('.l-column--center .b-content-title');
		this.DOM.$footer = $('.l-footer');
		this.DOM.$widget = $('#normativeDocs');
		this.DOM.$doc = $('.ps-document', this.DOM.$widget);
		//Запоминаем часто используемые DOM-элементы документа виджета
		this.setDOMDocs();
	},
	
	
	/**
	 * Запоминаем часто используемые DOM-элементы документа виджета
	 */
	setDOMDocs: function() {
		this.DOM.doc = {
			'$header': $('.ps-doc-widget-header', this.DOM.$widget),
			'$container': $('.ps-doc-container', this.DOM.$widget),
			'$sidepanel': $('.ps-doc-sidepanel', this.DOM.$widget)
		}
		this.DOM.doc.sidepanel = {
			'$search': $('.ps-doc-sidepanel-search', this.DOM.doc.$sidepanel),
			'$container': $('.ps-doc-sidepanel-container', this.DOM.doc.$sidepanel)
		}
	},
	
	
	/**
	 * Объявляем обработчики сообытий
	 */
	bind: function() {
		var self = this;
		
		this.DOM.$window.resize(function(){
			self.editColsHeight();
		});
	},
	
	
	/**
	 * Функция запускает методы для изменения внешнего вида страницы
	 */
	editPage: function() {
		if (this.DOM.$menu.length) {
			this.data.leftColPaddingTop = parseInt(this.DOM.$menu.css('padding-top'), 10);
		}
		
		//Меняем высоту колонок страницы сайта
		this.editColsHeight();
		//После установки фиксированной высоты блока с документом показываем его
		this.DOM.$widget.css('visibility', 'visible');
		//Стилизуем полосу прокрутки в левой колонке
		courtMain.setCustomScroll(this.DOM.$menu[0]);
	},
	
	
	/**
	 * Функция устанавливает высоты содержимого левой и правой колонки 
	 * относительно высоты окна браузера
	 */
	editColsHeight: function() {
		var height = {
				'widget': this.DOM.$window.height() - this.data.blocksHeight,
				'docHeader': this.DOM.doc.$header.outerHeight(),
				'docSidePanelSearch': this.DOM.doc.sidepanel.$search.outerHeight()
			};
		
		height.doc = height.widget - height.docHeader;
		
		if (!this.DOM.doc.$container.length) {
			this.setDOMDocs();
		}
		
		this.DOM.$menu.height(height.widget - this.data.leftColPaddingTop);
		this.DOM.$doc.height(height.widget);
		this.DOM.doc.$container.height(height.doc);
		this.DOM.doc.$sidepanel.height(height.doc);
		this.DOM.doc.sidepanel.$container.height(height.doc - height.docSidePanelSearch);
	}
}

$(function() {
	normativeDocs.init();
});