	
	//--------------------- Библиотека функций приложения. ----------------------------------------------------------
	var mL = function(){
	
	
	
	//------------------------ Убирает теневой загрузочный блок --------------------------------------
		
	function showDocument(){
		loadDiv.style.zIndex = '-1';
		loadDiv.style.opacity = '0.8';
	}
	
	

	//---------------- Функция автоматически изменяет размеры элементов, шрифтов и отступов при изменении размера окна брауера ----------------------------
			
	function fixedAll(){	
		//Определим ширину окна браузера без полосы прокрутки со всеми отступами. В переменную заносится число.
		var windowInnerWidth = window.innerWidth;
		//Определим высоту окна браузера без полосы прокрутки со всеми отступами. В переменную заносится число.
		var windowInnerHeight = window.innerHeight;
				
		//Устанавливаем положение главного блока и размеры в зависимости от windowInnerWidth (ширины) окна браузера
		
		//Если доступная ширина окна браузера превышает разрешение монитора в 1366px, то будем увеличивать и ширину главного блока и меню
		if(windowInnerWidth>1366){
			//Установим необходимую величину ширины главного блока при загрузке страницы или изменении размеров окна браузера.
			var mainBlockWidth = Math.floor(windowInnerWidth/1.797);
			//Установим необходимую величину левого отступа главного блока при загрузке страницы или изменении размеров окна браузера.
			mainBlockLeft = Math.floor((windowInnerWidth - mainBlockWidth)/2);
			//Установим отступ слева так, чтобы главный блок и меню находились в середине экрана по горизонтали.
			navMenu.style.left = mainBlock.style.left = mainBlockLeft + 'px';
		
		//Если доступная ширина окна браузера	находится в данных пределах, то		
		}else if(windowInnerWidth<=1366&&windowInnerWidth>=760){
			//установим необходимую величину ширины главного блока при загрузке страницы или изменении размеров окна браузера в 760px.
			var mainBlockWidth = 760;
			//Установим необходимую числовую величину левого отступа главного блока и меню при загрузке страницы или изменении размеров окна
			mainBlockLeft = Math.floor((windowInnerWidth - mainBlockWidth)/2);
			//Установим отступ слева так, чтобы главный блок и меню находились в середине экрана по горизонтали.
			navMenu.style.left = mainBlock.style.left = mainBlockLeft + 'px';
		
		//Иначе, т.е. если ширина окна будет меньше 760px, делаем ширину главного блока и меню равными ширине окна			
		}else{ 
			//Установим необходимую величину ширины главного блока при загрузке страницы или изменении размеров окна браузера.
			var mainBlockWidth = windowInnerWidth;
			//Отступ слева убираем, т.е. ширина элементов равна ширине окна.
			navMenu.style.left = mainBlock.style.left = '0px';
		}
			
		//Зная числовое значение ширины главного блока и меню, устанавливаем их свойства в пикселях
		navMenu.style.width = mainBlock.style.width = mainBlockWidth + 'px';
		
		

		//------  Задаем параметры для элементов меню --------------
		
				
				
		//Задаем отступ слева списка
		belarusWord.style.left = mainBlockWidth*0.015 +'px';
		//Задаем отступы слева, стараясь равномерно увеличивать расстояние между ними при изменении ширины окна
		pageBack.style.left = mainBlockWidth*0.19 +'px';
		circleStart.style.left = mainBlockWidth*0.22 +'px';
		pageForward.style.left = mainBlockWidth*0.243 +'px';
		
		booksDiv.style.left = mainBlockWidth*0.31 +'px';	
		exercisesDiv.style.left = mainBlockWidth*0.49 +'px';
		articlesDiv.style.left = mainBlockWidth*0.68 +'px';
		referencesDiv.style.left = mainBlockWidth*0.83 +'px';	
		
		
		 	
		//Устанавливаем значения отступов сверху
		switch(true){
			
			//Если ширина становится меньше минимальной для приложения, т.е. меньше 440px
			case(mainBlockWidth<=550):
				//Зафиксируем ширину главного блока
				mainBlock.style.width = 550 + 'px';
				
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 11 + 'px';
												
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 12 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 7 +'px';
				circleStart.style.height = 7 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 20;
				navMenu.style.height = navMenuHeight + 'px';
					
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 3 +'px';
				circleStart.style.top = 6+'px';
				
				//Задаем отступ слева списка
				belarusWord.style.left = 3 +'px';
				//Задаем отступы слева, стараясь равномерно увеличивать расстояние между ними при изменении ширины окна
				pageBack.style.left = 104 +'px';
				circleStart.style.left = 120 +'px';
				pageForward.style.left = 132 +'px';
				
				booksDiv.style.left = 171 +'px';	
				exercisesDiv.style.left = 270 +'px';
				articlesDiv.style.left = 374 +'px';
				referencesDiv.style.left = 457 +'px';
			break;
			
			//Если ширина становится меньше минимальной для приложения, т.е. меньше 440px
			case(mainBlockWidth>550&&mainBlockWidth<=600):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 11 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 12 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 6 + 'px';
				circleStart.style.height = 6 + 'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 20;
				navMenu.style.height = navMenuHeight + 'px';
				
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 3 + 'px';
				circleStart.style.top = 6 + 'px';
			break;
			
			//Если ширина находится в данных пределах
			case(mainBlockWidth>600&&mainBlockWidth<=700):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 12 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 14 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 8 +'px';
				circleStart.style.height = 8 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 21;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 3 + 'px';
				circleStart.style.top = 6 + 'px';
			break;
		
			//Если ширина находится в данных пределах
			case(mainBlockWidth>700&&mainBlockWidth<=800):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 13 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 14 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 8 +'px';
				circleStart.style.height = 8 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 23;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 4 + 'px';
				circleStart.style.top = 7 + 'px';
			break;

			//Если ширина находится в данных пределах
			case(mainBlockWidth>800&&mainBlockWidth<=900):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 14 + 'px';
			
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 16 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 10 +'px';
				circleStart.style.height = 10 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 24;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 3 + 'px';
				circleStart.style.top = 6 + 'px';
			break;

			//Если ширина находится в данных пределах
			case(mainBlockWidth>900&&mainBlockWidth<=1000):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 16 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 16 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 10 +'px';
				circleStart.style.height = 10 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 27;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 5 + 'px';
				circleStart.style.top = 8 + 'px';
			break;
		
			//Если ширина находится в данных пределах
			case(mainBlockWidth>1000&&mainBlockWidth<=1100):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 17 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 17 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 11 +'px';
				circleStart.style.height = 11 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 28;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 5 + 'px';
				circleStart.style.top = 8 + 'px';
			break;
			
			//Если ширина находится в данных пределах
			case(mainBlockWidth>1100&&mainBlockWidth<=1200):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 18 + 'px';
				
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 18 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 12 +'px';
				circleStart.style.height = 12 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 29;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 5 + 'px';
				circleStart.style.top = 8 + 'px';
			break;
			
			//Если ширина находится в данных пределах
			case(mainBlockWidth>1200&&mainBlockWidth<=1300):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 19 + 'px';
			
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 19 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 13 +'px';
				circleStart.style.height = 13 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 31;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 6 + 'px';
				circleStart.style.top = 9 + 'px';
			break;
			
			//Если ширина находится в данных пределах
			case(mainBlockWidth>1300):
				//Размер шрифта элементов меню
				navMenu.style.fontSize = 20 + 'px';
			
				//Устанавливаем высоту и ширину стрелок 
				pageBack.style.width = pageForward.style.width = pageBack.style.height = pageForward.style.height = 19 + 'px';
				//Устанавливаем высоту и ширину кружка 
				circleStart.style.width = 13 +'px';
				circleStart.style.height = 13 +'px';
				
				//Задаем высоту меню для данного диапазона
				var navMenuHeight = 32;
				navMenu.style.height = navMenuHeight + 'px';
		
				//Задаем стартовый top для всех элементов меню, чтобы они находились все время посередине меню по вертикали
				belarusWord.style.top = booksDiv.style.top = exercisesDiv.style.top = articlesDiv.style.top = referencesDiv.style.top = 2 + 'px';
				pageBack.style.top = pageForward.style.top = 7 + 'px';
				circleStart.style.top = 10 + 'px';
			break;
		} 

		
		//Устанавливаем высоту главного блока за вычетом высоты меню. Плюс пару пикселей, чтобы граница блока ушла за нижнюю часть окна браузера
		mainBlock.style.height = windowInnerHeight - navMenuHeight + 5 + 'px';
		//Устанавливаем отступ сверху для главного блока, чтобы он был ниже меню на пару пикселей
		mainBlock.style.top = navMenuHeight + 4 + 'px';
			
		//Устанавливаем ширину и высоту блока contentIframe
		contentIframe.style.width = mainBlock.style.width;
		contentIframe.style.height = mainBlock.style.height;
		
	}
	
	
	
	
	
	
	//-------   Подсвечивает якорь после загрузки страницы и прокрутке к нему  ---------
	
	function lightAnchor(){
		//Проверяем есть ли хэш, т.е. нужно ли переходить к якорю
		if(location.hash!=''){
			//Сохраним в переменной хэш, но без решетки
			var hash=location.hash.slice(1); 
			//Находим якорь, т.е. элемент, к которому будем прокручивать документ
			var elem=document.getElementById(hash);
			//Сохраним в переменной родное значение фона якоря
			var elem_bgc=elem.style.backgroundColor;
			//Запускаем подсветку якоря после закрытия и прокрутки к нему
			setTimeout(function(){
				//Установим временную подсветку
				elem.style.backgroundColor='#33FF33';
				//Через промежуток возвращаем исходный фон якоря
				setTimeout(function(){elem.style.backgroundColor=elem_bgc;}, 1000);
			}, 500);
		}
	
	}
	
	
		
	

	//--------  Прокручивает contentIframe колесиком мыши вместо полосы прокрутки окна   ------------------------------

	function scrollContentIframe(){
		//Так как firefox тупит, то событие достаем из массива.
		event=arguments[0];
		
		//Определяем величину прокрутки колесом мыши по вертикали: при прокрутке колеса мыши от себя величина  
		//будет принимать отрицательные значения, на себя - положительные значения
		var deltY = event.deltaY;
		
		//Прокручиваем содержимое на указанное количество пикселей за каждую прокрутку колесика, в самом начале contentIframe.scrollTop==0px
		if(deltY>0){
			//Эта инструкция работает в Chrome и Opera
			document.body.scrollTop+=150;
			//Эта инструкция работает в IE и Firefox
			document.documentElement.scrollTop+=150;
		}
		if(deltY<0){
			//Эта инструкция работает в Chrome и Opera
			document.body.scrollTop+=-150;
			//Эта инструкция работает в IE и Firefox
			document.documentElement.scrollTop+=-150;
		}
	}
	
		
	
	
	
	//-------- Прокручивает contentIframe к элементу с переданным id. В качестве аргумента ожидается событие и строка с id элемента-якоря. --------
			
	function scrollToElementById(e, elem_id){
		//Находим в contentIframe элемент по его id.
		var elem = document.getElementById(elem_id);			
		//Находим расстояние по вертикали от верхнего края contentIframe до верхнего края нашего элемента
		elemY=elem.offsetTop;
		//Прокручиваем contentIframe на указанную величину, но не полностью
		//Эта инструкция работает в Chrome и Opera
		document.body.scrollTop=elemY-65;
		//Эта инструкция работает в IE и Firefox
		document.documentElement.scrollTop=elemY-65;
	}		

		
		
	

	//-------------------  Прокручивает contentIframe  на указанную величину  -----------------------
			
	function scrollElementTo(e, y){
		//Эта инструкция работает в Chrome и Opera
		document.body.scrollTop=y;
		//Эта инструкция работает в IE и Firefox
		document.documentElement.scrollTop=y;
	}		
	
	
		
	
	//---------------------------------- Функция прокрутки документа к элементу с указанным id ---------------------
	
	//В качестве аргументов ожидаются событие,  родительский элемент и строка с id элемента-якоря.
	function scrollBodyTo(e, elem_id){
		//Находим элемент по его id.
		var elem = document.getElementById(elem_id);			
		//Находим расстояние по вертикали от верхнего края документа до верхнего края нашего элемента
		elemY=elem.offsetTop;
		//Прокручиваем документ на указанную величину, но не полностью
		//Эта инструкция работает в Chrome и Opera
		document.body.scrollTop=elemY-65;
		//Эта инструкция работает в IE и Firefox
		document.documentElement.scrollTop=elemY-65;
	}	

	
	
	
	//--------- Меняет свойство display элемента с none на block и обратно. В качестве аргумента ожидается объект 'кнопка' и строка id блока с решением. -----
		
	function showDicision(button, elem_id){
		//Находим блок с решением.
		var elem = document.getElementById(elem_id);			
		//Вычисляем стиль элемента.
		var computedStyle = getComputedStyle(elem);
		//Меняем свойство display элемента с none на block и обратно.
		if(computedStyle.display == 'none'){
			//Если решение открыто.
			button.innerHTML = 'Скрыть решение.';
			elem.style.display = 'block';
		}else{
			//Если решение скрыто.
			button.innerHTML = 'Показать решение.';
			elem.style.display = 'none';
		}
	}		




	//------------------------ Возвращает числовую часть window.getComputedStyle() для размеров --------------------------------------
		
	//Возвращает числовую часть window.getComputedStyle() для размеров. В качестве первого аргумента функция принимает элемент в виде объекта,
	//а в качестве второго - строку с именем свойства, числовое значение которого нужно получить. Возвращает это значение.
	function numPartOfComputedStyle(){
		//Вычислим значение размера
		var value = window.getComputedStyle(arguments[0])[arguments[1]];
		//Умножили на 1, т.к. value - строка, которая оканчивается на 'рх'.
		value = value.slice(0, value.length-2)*1;
		return value;
	}

	
	

	//---------------------------------- Создание элемента html-страницы (тэга) ----------------------------------------------
			
	//Создает элемент, но не вставляет его в тело документа, а возвращает его в виде объекта. В качестве аргументов принимает:
	//1 - string tagName, остальные - массивы с двумя элементами - [string attribute, string value]. Возвращает объект элемента.
	function createElement(){
		//В качестве первого аргумента ожидается строка с именем создаваемого тега.
		var tag = arguments[0];
		
		//Создаем указанный элемент.
		var name = document.createElement(tag);
		//В качестве остальных аргументов предполагаются массивы из двух элементов, где первый элемент - строка с именем атрибута, 
		//второй элемент - значение атрибута. Все атрибуты проходим в цикле.
		for(var i=1; i<arguments.length; i++){
			name.setAttribute(arguments[i][0], arguments[i][1]);
		}
		
		//Возвращаем готовый элемент в виде объекта.
		return name;
	}		



	
//Возвращаем объект без имени, в котором определяем методы и свойства нашей библиотеки.		
	return {
				
				//Убирает теневой загрузочный div
				showDocument: showDocument,
				//Функция автоматически изменяет размеры элементов, шрифтов и отступов при изменении размера окна брауера 
				fixedAll: fixedAll,
				//Прокручивает contentIframe колесиком мыши вместо полосы прокрутки окна
				scrollContentIframe: scrollContentIframe,
				//Прокручивает contentIframe к элементу с переданным id. 
				scrollToElementById: scrollToElementById,
				//Прокручивает contentIframe  на указанную величину
				scrollElementTo: scrollElementTo,
				//Прокручивает страницу к элементу с переданным id.
				scrollBodyTo: scrollBodyTo,
				//Меняет свойство display элемента с none на block и обратно. 
				showDicision: showDicision,
				//Возвращает числовую часть window.getComputedStyle() для размеров
				numPartOfComputedStyle: numPartOfComputedStyle,
				//Создает элемент html-страницы (тэг) 
				createElement: createElement,
				//Подсвечивает якорь
				lightAnchor: lightAnchor,
			};
			
			
//Не забываем вызвать функцию на месте, чтобы объект с методами присвоился переменной и библиотека была готова к использованию.					
}();	
	
	
	 	