var $ = jQuery;
$(function() {
	var URL = (window.location.href).split('/');
	var DisciplineID = URL[URL.length - 1]
	
	// Шаблон мероприятия
	function GetSubModuleTmp(){
		return '\
		<div class="subModule">\
			<div class="name">\
				<input type="text" class="inputName SubmoduleName" value="" placeholder="Наименование мероприятия">\
			</div>\
			<div class="currentControl"><input type="text" class="inputCredit inputCurrentControl" value="0"></div>\
			<div class="landmarkControl"><input type="text" class="inputCredit inputLandmarkControl" value="0"></div>\
			<div class="actions">\
				<div class="deleteSubModule icon delete"></div>\
				<div class="downSubModule icon down"></div>\
				<div class="upSubModule icon up"></div>\
			</div>\
		</div>\
		';
	}

	// Шаблон модуля
	function GetModuleTmp() {
		return '\
		<div class="moduleGroup">\
			<div class="moduleHead">\
				<div class="name">\
					<input type="text" class="inputName ModuleName" value="" placeholder="Наименование модуля">\
				</div>\
				<div class="currentControl">0</div>\
				<div class="landmarkControl">0</div>\
				<div class="actions">\
					<div class="deleteModule icon delete"></div>\
					<div class="downModule icon down"></div>\
					<div class="upModule icon up"></div>\
				</div>\
			</div>\
			<div class="subModules">\
			'+GetSubModuleTmp()+'\
			</div>\
			<div class="addSubModule">Добавить мероприятие</div>\
		</div>'
	};

	// Подсчет текущего контроля
	function CountCurrentControl(subModulesDiv){
		var maxCredits = 0;
		$('.inputCurrentControl', subModulesDiv).each(function(){
			var credit = parseInt($(this).val());
			maxCredits = maxCredits + ((isNum(credit)) ? credit : 0);
		});
		subModulesDiv.prev().children('.currentControl').text(maxCredits);
	}
	// Подсчет рубежного контроля
	function CountLandmarkControl(subModulesDiv){
		var maxCredits = 0;
		$('.inputLandmarkControl', subModulesDiv).each(function(){
			var credit = parseInt($(this).val());
			maxCredits = maxCredits + ((isNum(credit)) ? credit : 0); 
		});
		subModulesDiv.prev().children('.landmarkControl').text(maxCredits);
	}
	
	// Изменение типа подмодуля
	function ChangeSubmoduleControlType(ID, ControlType){
		$.post(
			URLdir + 'handler/map/ChangeSubmoduleControlType',
			{
				'SubmoduleID': ID,
				'ControlType': ControlType
			},
			function(data){
				data = $.parseJSON(data);
				//if(data.success === true)
				//	EventInspector_ShowMsg('Форма контроля изменена', 'success');
				//else EventInspector_ShowMsg('Ошибка при изменение формы контроля', 'error');
			}
		);
	}
	
	// Изменение макс. балла подмодуля
	function ChangeSubmoduleMaxRate(ID, NewMaxRate) {
		$.post(
			URLdir + 'handler/map/ChangeSubmoduleMaxRate',
			{
				'SubmoduleID': ID,
				'MaxRate': NewMaxRate
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Max балл мероприятия изменен', 'success');
				else EventInspector_ShowMsg('Ошибка при изменение max балла', 'error');
			}
		);
	}
	
	// Установить новый max балл
	function SetNewRateAndControl(thisObj, OldMaxRate) {
		// DIV с мероприятиями для данного модуля
		var subModulesDiv = thisObj.parent().parent().parent();
		// ID мероприятия
		var ID = thisObj.parent('div').parent('div').attr('id');
		var NewMaxRate = 0;
		if (thisObj.val() != '')
			NewMaxRate = parseInt(thisObj.val());
		
		// Ограничение 100 баллов
		var MaxSumRate = 100;
		if ($('div').is('.ExamModule')) MaxSumRate = 60;
		
		var currentControl = 0;
		$('.moduleHead .currentControl').each(function(){
			currentControl += parseInt($(this).text());
		});
		var landmarkControl = 0;
		$('.moduleHead .landmarkControl').each(function(){
			landmarkControl += parseInt($(this).text());
		});
		var subtract = 0;
		if (thisObj.parent().attr('class').indexOf('landmarkControl') + 1 > 0)
			subtract = parseInt(thisObj.parent().siblings('.currentControl').children().val());
		if (thisObj.parent().attr('class').indexOf('currentControl') + 1 > 0)
			subtract = parseInt(thisObj.parent().siblings('.landmarkControl').children().val());
		if (currentControl + landmarkControl + NewMaxRate - subtract - OldMaxRate > MaxSumRate) {
			if (NewMaxRate == 0)
				thisObj.val('0');
			else {
				EventInspector_ShowMsg('Сумма баллов превышает максимум', 'error');
				thisObj.val(OldMaxRate);
				return 0;
			}
		}
		
		// Меняем max балл
		if (NewMaxRate != OldMaxRate) {
			ChangeSubmoduleMaxRate(ID, NewMaxRate);
			
			// Счетчик баллов
			var RateIndicarot = currentControl + landmarkControl + NewMaxRate - subtract - OldMaxRate;
			if ($('div').is('.ExamModule')) RateIndicarot += 40;
			$('.RateIndicatorDIV .RateIndicator').html(RateIndicarot);
			if ($('div').is('.BonusModule'))
				$('.RateIndicatorDIV .RateIndicator').append(' + 10 бонусных баллов');
			
			// Меняем тип
			ControlType = 'CurrentControl'; // По-умолчанию 
			if ((thisObj.parent().attr('class')).indexOf('landmarkControl') + 1 > 0)
				ControlType = 'LandmarkControl';	
			if (NewMaxRate > 0)
				ChangeSubmoduleControlType(ID, ControlType);
			
			if (ControlType == 'CurrentControl')
				thisObj.parent().parent().find('.landmarkControl').children('.inputLandmarkControl').val('0');
				
			if (ControlType == 'LandmarkControl')
				thisObj.parent().parent().find('.currentControl').children('.inputCurrentControl').val('0');
		}
		
		// Подсчет текущего и рубежного контроля после изменений
		CountCurrentControl(subModulesDiv);
		CountLandmarkControl(subModulesDiv);	
	}
	
	// Поменять местами два модуля
	function SwapModuleOrder(ModuleID1, ModuleID2) {
		$.post(
			URLdir + 'handler/map/SwapModuleOrder',
			{
				'ModuleID1': ModuleID1,
				'ModuleID2': ModuleID2
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Модули поменяли порядок', 'success');
				else EventInspector_ShowMsg('Ошибка при изменение порядка модулей', 'error');
			}
		);
	}
	
	// Поменять местами два мероприятия
	function SwapSubmoduleOrder(SubmoduleID1, SubmoduleID2) {
		$.post(
			URLdir + 'handler/map/SwapSubmoduleOrder',
			{
				'SubmoduleID1': SubmoduleID1,
				'SubmoduleID2': SubmoduleID2
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Мероприятия поменяли порядок', 'success');
				else EventInspector_ShowMsg('Ошибка при изменение порядка мероприятий', 'error');
			}
		);
	}
	
//-------------------------------------------------------------------------------------------------------------------------------------------------
	
// ---- Изменения базовых параметров дисциплины ---
	
	// Изменение предмета
	$('.SelectSubject').change(function(){
		$.post(
			URLdir + 'handler/map/ChangeDisciplineSubject',
			{
				'DisciplineID': DisciplineID,
				'SubjectID': $('.SelectSubject').val()
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Предмет изменен', 'success');
				else EventInspector_ShowMsg('Ошибка: Изменение предмета', 'error');
			}
		);
	});
	
	// Изменение курса
	$('.SelectDisGrade').change(function(){ // SelectGrade совпадает с другим, поэтому SelectDisGrade
 		$.post(
			URLdir + 'handler/map/ChangeDisciplineGrade',
			{
				'DisciplineID': DisciplineID,
				'GradeID': $('.SelectDisGrade').val()
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Курс изменен', 'success');
				else EventInspector_ShowMsg('Ошибка: Изменение курса', 'error');
			}
		);
	});
	
	// Бонусные баллы
	$('.BonusRate').change(function(){
		$.post(
			URLdir + 'handler/map/ChangeStatusBonusModule',
			{
				'DisciplineID': DisciplineID,
				'BonusRate': $(".BonusRate").prop("checked")
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true) {
					if (data.action == 'add')
						EventInspector_ShowMsg('Бонусные баллы добавлены', 'success');
					if (data.action == 'delete')
						EventInspector_ShowMsg('Бонусные баллы удалены', 'success');
				}
				else EventInspector_ShowMsg('Ошибка: Бонусные баллы', 'error');
			}
		);
	});
	
	// Изменение контроля
	$('.ExamType').change(function(){
		$.post(
			URLdir + 'handler/map/ChangeDisciplineControl',
			{
				'DisciplineID': DisciplineID,
				'Control': $('input:radio[name=ExamType]:checked').val()
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Форма контроля изменена', 'success');
				else EventInspector_ShowMsg('Ошибка: Изменение формы контроля', 'error');
			}
		);
	});
	
	// Изменение лекционных часов
	$('.InputLectionCount').focusout(function(){
		$.post(
			URLdir + 'handler/map/ChangeDisciplineHours',
			{
				'DisciplineID': DisciplineID,
				'Hours': $('.InputLectionCount').val(),
				'Type': '1'
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Лекционные часы изменен', 'success');
				else EventInspector_ShowMsg('Ошибка: Изменение лекционных часов', 'error');
			}
		);
	});
	
	// Изменение практических часов
	$('.InputPracticeCount').focusout(function(){
		$.post(
			URLdir + 'handler/map/ChangeDisciplineHours',
			{
				'DisciplineID': DisciplineID,
				'Hours': $('.InputPracticeCount').val(),
				'Type': '0'
			},
			function(data) {
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Практические часы изменен', 'success');
				else EventInspector_ShowMsg('Ошибка: Изменение практических часов', 'error');
			}
		);
	});
	
	/*
    $(".ChangeDiscipline").click(function(){
		$.post(
			URLdir + '/handler/map/ChangeDiscipline',
			{
				'DisciplineID': DisciplineID,
				'Grade': $('.SelectGrade').val(),
				'SubjectID': $('.SelectSubject').val(),
				'ExamType': $('input:radio[name=ExamType]:checked').val(),
				'LectionCount': $('.InputLectionCount').val(),
				'PracticeCount': $('.InputPracticeCount').val(),
				'FacultyID': $('.SelectFaculty').val()
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true)
					EventInspector_ShowMsg('Базовые настройки УКД изменены', 'success');
				else EventInspector_ShowMsg('Ошибка: Базовые настройки УКД', 'error');
			}
		);
        return false
    });
	*/
	
	// Переместить вверх МОДУЛЬ
    $(".moduleList").on('click', '.upModule', function(){
        var parentDIV = $(this).parent('div').parent('div').parent('div');
        parentDIV.insertBefore(parentDIV.prev('.moduleGroup'));
		
		var ModuleID = parentDIV.attr('id');
		// Для того, который СТАЛ находится ниже
		var nextModuleID = parentDIV.next('div').attr('id');
		SwapModuleOrder(ModuleID, nextModuleID);
		
        return false
    });
	
	// Переместить вниз МОДУЛЬ
    $(".moduleList").on('click', '.downModule', function(){
        var parentDIV = $(this).parent('div').parent('div').parent('div');
		if ($('div').is(parentDIV.next('.moduleGroup'))) {
			parentDIV.insertAfter(parentDIV.next('.moduleGroup'));
			
			var ModuleID = parentDIV.attr('id');
			// Для того, который СТАЛ находится выше
			var prevModuleID = parentDIV.prev('div').attr('id');
			SwapModuleOrder(ModuleID, prevModuleID);
		}
		
        return false
    });
	
	// Переместить вверх мероприятие
    $(".moduleList").on('click', '.upSubModule', function(){
        var parentDIV = $(this).parent('div').parent('div');
        parentDIV.insertBefore(parentDIV.prev());
		
		var SubmoduleID = parentDIV.attr('id');
		var nextSubmoduleID = parentDIV.next('div').attr('id');
		SwapSubmoduleOrder(SubmoduleID, nextSubmoduleID);
		
        return false
    });
	
	// Переместить вниз мероприятие
    $(".moduleList").on('click', '.downSubModule', function(){
        var parentDIV = $(this).parent('div').parent('div');
		if ($('div').is(parentDIV.next('.subModule'))) {
			parentDIV.insertAfter(parentDIV.next());
			
			var SubmoduleID = parentDIV.attr('id');
			var prevSubmoduleID = parentDIV.prev('div').attr('id');
			SwapSubmoduleOrder(SubmoduleID, prevSubmoduleID);
		}
		
        return false
    });
	
	// Добавить модуль
	$('.addModule').click(function(){
		var OrderNum = $('.moduleGroup', '.moduleList').last().index('.moduleGroup') + 2;
		$.post(
			URLdir + 'handler/map/AddModule',
			{
				'DisciplineID': DisciplineID,
			//	'OrderNum': OrderNum
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					if ($('div').is('.ExamModule'))
						$('.ExamModule').before(GetModuleTmp());
					else
						$('.moduleList').append(GetModuleTmp());
					// К добавленному модулю добавляем ID
					var thisModuleDIV = $('.moduleGroup').eq(OrderNum - 1);
					thisModuleDIV.attr('id', data.ModuleID);
					// К добавленному в модуль мероприятию добавляем ID
					thisModuleDIV.children('.subModules').children('.subModule').eq(0).attr('id', data.SubmoduleID);
					EventInspector_ShowMsg('Модуль добавлен', 'success');
				} else EventInspector_ShowMsg('Ошибка при добавление модуля', 'error');
			}
		);
		
		if ($('.empty').css('display') == 'block')
			$('.empty').css('display', 'none');
		
	});
	
	/*
	// Добавить мероприятие (старая кнопка)
	$('.moduleList').on('click', '.addSubModule', function(){
		$(this).parent().parent().next().append(GetSubModuleTmp());
		var ModuleID = $(this).parent('div').parent('div').parent('div').attr('id');
		var SubmodulesDIV = $(this).parent().parent().next('.subModules');
		var OrderNum = SubmodulesDIV.children('.subModule').last().index() + 1;
		$.post(
			URLdir + '/handler/map/AddSubmodule',
			{
				'ModuleID': ModuleID,
				'OrderNum': OrderNum
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					// К добавленному мероприятию добавляем ID
					SubmodulesDIV.children('.subModule').eq(OrderNum - 1).attr('id', data.SubmoduleID);
					EventInspector_ShowMsg('Мероприятие добавлено', 'success');
				} else EventInspector_ShowMsg('Ошибка при добавление мероприятия', 'error');
			}
		);
	});
	*/
	
	// Добавить мероприятие
	$('.moduleList').on('click', '.addSubModule', function(){
		var ModuleID = $(this).parent('div').attr('id');
		var SubmodulesDIV = $(this).siblings('.subModules');
		var OrderNum = SubmodulesDIV.children('.subModule').last().index() + 2;
		$.post(
			URLdir + 'handler/map/AddSubmodule',
			{
				'ModuleID': ModuleID
				//'OrderNum': OrderNum
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					// К добавленному мероприятию добавляем ID
					SubmodulesDIV.append(GetSubModuleTmp());
					SubmodulesDIV.children('.subModule').eq(OrderNum - 1).attr('id', data.SubmoduleID);
					EventInspector_ShowMsg('Мероприятие добавлено', 'success');
				} else EventInspector_ShowMsg('Ошибка при добавление мероприятия', 'error');
			}
		);
	});
	
	// Удалить модуль
	$('.moduleList').on('click', '.deleteModule', function(){
		$(this).parent().css('display', 'none');
		$(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteModule">Да</span> <span class="cancel">Нет</span></div>');
	});
	
	// Подтверждение при удаление модуля
	$('.moduleList').on('click', '.confirmDeleteModule', function(){
		var thisObj = $(this);
		var subModulesDIV = $(this).parent('div').parent('div').next('.subModules');
		var CurrentModuleOrder = $(this).parent().parent().parent().index() + 1;
		// Собираем в JSON строку ID мероприятий
		var JSONSubmodules = '[';
		$('.subModule', subModulesDIV).each(function(){
			JSONSubmodules += $(this).attr('id') + ',';
		});
		JSONSubmodules = JSONSubmodules.substr(0, JSONSubmodules.length - 1);
		JSONSubmodules += ']';
		//
		// Собираем ID модулей, которые ниже для того, чтоб сменить их порадок на +1
		var AttrID = $(this).parent().parent().parent().nextAll().map(function(indx, element){
			return $(element).attr("id");
		});
		var ChangeOrderModulesID = '[' + AttrID.get() + ']';
		//
		$.post(
			URLdir + 'handler/map/DeleteModule',
			{
				'ModuleID': $(this).parent('div').parent('div').parent('div').attr('id'),
				'SubmodulesID': JSONSubmodules,
				'CurrentModuleOrder': CurrentModuleOrder,
				'ChangeOrderModulesID': ChangeOrderModulesID
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					thisObj.parent('div').parent('div').parent('div').remove();
					EventInspector_ShowMsg('Модуль удален', 'success');
				}
				else EventInspector_ShowMsg('Ошибка при удаление модуля', 'error');
			}
		);
	});
	
	// Удалить мероприятие
	$('.moduleList').on('click', '.deleteSubModule ', function(){
		$(this).parent().css('display', 'none');
		$(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteSubModule">Да</span> <span class="cancel">Нет</span></div>');
	});
	
	// Подтверждение при удаление мероприятия
	$('.moduleList').on('click', '.confirmDeleteSubModule ', function(){
		var thisObj = $(this);
		var subModulesDiv = $(this).parent().parent().parent();
		var CurrentSubmoduleOrder = $(this).parent().parent().index() + 1;
		CountCurrentControl(subModulesDiv);
		CountLandmarkControl(subModulesDiv);
		// Собираем ID мероприятий, которые ниже для того, чтоб сменить их порадок на +1
		var AttrID = $(this).parent().parent().nextAll().map(function(indx, element){
			return $(element).attr("id");
		});
		var ChangeOrderSubmodulesID = '[' + AttrID.get() + ']';
		ChangeSubmoduleMaxRate($(this).parent('div').parent('div').attr('id'), 0);
		//
		$.post(
			URLdir + 'handler/map/DeleteSubmodule',
			{
				'SubmoduleID': $(this).parent('div').parent('div').attr('id'),
				'CurrentSubmoduleOrder': CurrentSubmoduleOrder,
				'ChangeOrderSubmodulesID': ChangeOrderSubmodulesID
			},
			function(data){
				data = $.parseJSON(data);
				if(data.success === true) {
					var sub = thisObj.parent('div').parent('div');
					var mod = sub.parent('div').parent('div').find('.moduleHead');
					// get old submodule values
					var dif1 = sub.find('.currentControl').find('input').val();
					var dif2 = sub.find('.landmarkControl').find('input').val();
					
					// change module header
					var old = mod.find('.currentControl').html();
					mod.children('.currentControl').html(old - dif1);

					old = mod.find('.landmarkControl').html();
					mod.children('.landmarkControl').html(old - dif2);

					// change max rate
					old = $('.RateIndicator').html(); 
					$('.RateIndicator').html(old - dif1 - dif2);
					thisObj.parent('div').parent('div').remove();

					EventInspector_ShowMsg('Мероприятие удалено', 'success');
				}
				else EventInspector_ShowMsg('Ошибка при удаление мероприятия', 'error');
			}
		);
	});
	
	// Отмена удаления модулей/мероприятий
	$('.moduleList').on('click', '.cancel ', function(){
		$(this).parent().parent().children('.actions').css('display', 'block');
		$(this).parent().remove();
	});
	
	// Поменять название модуля
	var ModuleName;
	$('.moduleList').on('focusin', '.ModuleName', function(){
		ModuleName = $(this).val();
	});
	$('.moduleList').on('focusout', '.ModuleName', function(){
		var NewModuleName = $(this).val();
		if (NewModuleName != '' && ModuleName != NewModuleName) {
			var ID = $(this).parent('div').parent('div').parent('div').attr('id');
			$.post(
				URLdir + 'handler/map/ChangeModuleName',
				{
					'ModuleID': ID,
					'ModuleName': NewModuleName
				},
				function(data){
					data = $.parseJSON(data);
					if(data.success === true)
						EventInspector_ShowMsg('Имя модуля изменено', 'success');
					else EventInspector_ShowMsg('Ошибка при изменение имени модуля', 'error');
				}
			);
		}
	});
	$('.moduleList').on('keydown', '.ModuleName', function(e){
		if(e.keyCode==13){
			$('.ModuleName').trigger('focusout');
		}
	});
	
	// Поменять название мероприятие
	var SubmoduleName;
	$('.moduleList').on('focusin', '.SubmoduleName', function(){
		SubmoduleName = $(this).val();
	});
	$('.moduleList').on('focusout', '.SubmoduleName', function(){
		var NewSubmoduleName = $(this).val();
		if (NewSubmoduleName != '' && SubmoduleName != NewSubmoduleName) {
			var ID = $(this).parent('div').parent('div').attr('id');
			$.post(
				URLdir + 'handler/map/ChangeSubmoduleName',
				{
					'SubmoduleID': ID,
					'SubmoduleName': NewSubmoduleName
				},
				function(data){
					data = $.parseJSON(data);
					if(data.success === true)
						EventInspector_ShowMsg('Имя мероприятия изменено', 'success');
					else EventInspector_ShowMsg('Ошибка при изменение имени мероприятия', 'error');
				}
			);
		}
	});
	$('.moduleList').on('keydown', '.SubmoduleName', function(e){
		if(e.keyCode==13){
			$('.SubmoduleName').trigger('focusout');
		}
	});
	
	// При записи в input текущий контроль
	// При фокусе
	var OldMaxRate = 0;
	$('.moduleList').on('focusin', '.inputCurrentControl', function(){
		OldMaxRate = $(this).val();
	});
	// При потери фокуса
	$('.moduleList').on('focusout', '.inputCurrentControl', function(){
		SetNewRateAndControl($(this), OldMaxRate);
	});
	
	// При записи в input рубежный контроль
	// При фокусе
	var OldMaxRate = 0;
	$('.moduleList').on('focusin', '.inputLandmarkControl', function(){
		OldMaxRate = $(this).val();
	});
	// При потери фокуса
	$('.moduleList').on('focusout', '.inputLandmarkControl', function(){
		SetNewRateAndControl($(this), OldMaxRate);
	});
	
	// В inputCredit (где баллы вводить) разрешаем вводить только цифры
	$(".moduleList").on('keydown', '.inputCredit', function(event) {
        KeyDownOnlyNumber(event);
    });
	
// ------ Прикрипление студентов/групп/преподавателей --

var FacultyID = $('.HiddenInputFacultyID').val(); // Факультет, к которой привязана дисциплина
$('.HiddenInputFacultyID').remove(); // Тут даже Шерлок Холмс бессилен

function BindGroup(id, StudyGroupName){
	return '\
	<div class="AttachedGroup" id="'+ id +'">\
		<div class="StudyGroupInfo">'+ StudyGroupName +'</div>\
		<div class="UnbindGroup">Отсоединить группу</div>\
	</div>';
}

// Прикрепить группу
$('.AttachGroupButton').click(function(){
	var StudyGroupID = $('.SelectStudyGroup').val();
	var StudyGroupName = $(".SelectStudyGroup option:selected").text();
	$.post(
		URLdir + 'handler/map/BindGroup',
		{
			'StudyGroupID': StudyGroupID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true) {
				$('.AttachedGroupsList').append(BindGroup(StudyGroupID, StudyGroupName));
				EventInspector_ShowMsg('Группа добавлена', 'success');
			}
			else EventInspector_ShowMsg('Ошибка при добавление группы', 'error');
		}
	);
});

// Отсоединить группу
$('.AttachedGroupsList').on('click', '.UnbindGroup', function(){
	var StudyGroupID = $(this).parent().attr('id');
	var GroupDIV = $(this).parent();
	$.post(
		URLdir + 'handler/map/UnbindGroup',
		{
			'StudyGroupID': StudyGroupID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true) {
				GroupDIV.remove();
				EventInspector_ShowMsg('Группа отсоединена', 'success');
			}
			else EventInspector_ShowMsg('Ошибка при отсоединение группы', 'error');
		}
	);
});

// Поиск студентов
function AddStudent(ID, Name, From, GroupID, Bind){
	if (Bind == true)
		var Status = 'StatusBind';
	else 
		var Status = 'StatusUnbind';
	var r = '\
		<div id="'+ ID +'" class="Student '+ Status +' '+ GroupID +'">\
			<span class="Name">'+ Name +'</span> \
			<span class="From">'+ From +'</span>';
	if (Bind == true)
		r +='<span class="action Action_UnbindStudent">Отсоединить студента</span>';
	else
		r +='<span class="action Action_BindStudent">Прикрепить студента</span>';
	r +=
		'</div>';
	return r;
}

function AddStudentInSearchBox(ID, Name, From, GroupID, Bind){
	if (Bind == true)
		var Status = 'StatusBind';
	else 
		var Status = 'StatusUnbind';
	var r = '\
		<div id="'+ ID +'" class="Student '+ Status +' '+ GroupID +'">\
			<span class="Name">'+ Name +'</span> \
			<span class="From">'+ From +'</span>';
	if (Bind == true)
		r +='<span class="action Action_UnbindStudent">Отсоединить студента</span>';
	else
		r +='<span class="action Action_BindStudentFromSearch">Прикрепить студента</span>';
	r +=
		'</div>';
	return r;
}

// Поиск студентов
function CallSearchStudents() {
	var Name = [];
	if ($('.InputStudentName').val().length > 0)
		Name = ($('.InputStudentName').val()).split(' ');
	$.post(
		URLdir + 'handler/map/SearchStudents',
		{
			'GradeID': $('.SelectGrade').val(),
			'GroupN': $('.SelectStudyGroup').val(),
			'FacultyID': FacultyID,
			'Last': Name[0],
			'First': Name[1],
			'Second': Name[2],
			'DisciplineID': DisciplineID
		},
		function(data){
			SearchResult = $.parseJSON(data);
			$('.SearchResult').html('');
			if (parseInt(SearchResult.Count) > 0)
				for(var i = 1; i <= parseInt(SearchResult.Count); i++) {
				var ID = SearchResult[i].StudentID;
				var Name = SearchResult[i].StudentLast +' '+  SearchResult[i].StudentFirst +' '+ SearchResult[i].StudentSecond;
				var From = 'Курс ' + SearchResult[i].GroupGrade + ', Группа ' + SearchResult[i].GroupNum;
				var GroupID = 'GroupID_'+SearchResult[i].GroupID
				$('.SearchResult').append(AddStudentInSearchBox(ID, Name, From, GroupID, false));
				}
			else
				$('.SearchResult').html('<p class="notification">Нет результатов... Возможно, студенты, соответствующие критериям поиска, уже прикреплены.</p>');
		}
	);	
}

$('.SelectGrade').change(function(){
	$.post(
		URLdir + 'handler/map/GetStudyGroups',
		{
			'FacultyID': FacultyID,
			'GradeID': $('.SelectGrade').val()
		},
		function(data){
			data = $.parseJSON(data);
			if (data != null && data != undefined) {
				$('.SelectStudyGroup').html('<option value="0">Выберите группу:</option>');
				for (i = 1; i <= data.count; i++) {
					$('.SelectStudyGroup').append('<option value="'+ data[i].GroupID +'">Группа '+ data[i].GroupNum +' - '+ data[i].SpecName +'</option>');
				}
				
				if (data.count <= 0)
					$('.SelectStudyGroup').append('<option value="0">Нет групп</option>');		
			}
			CallSearchStudents();
		}
	);
});
$('.SelectStudyGroup').change(function(){
	CallSearchStudents();
});
$('.InputStudentName').focusout(function(){
	CallSearchStudents();
});
$('.InputStudentName').keydown(function(e){
	if(e.keyCode==13){
		$('.InputStudentName').focusout('focusout');
		$(this).blur();
	}
});

$('.SelectGrade').focusout(function(){
	$('.SelectGrade').trigger('change');
});
$('.SelectStudyGroup').focusout(function(){
	$('.SelectStudyGroup').trigger('change');
});

// Если студент из поиска
function BindStudentFromSearch(thisObj) {
	var reg = /GroupID_\d+/;
	var GroupID = ''+reg.exec(thisObj.parent().attr('class'));
	var ID = thisObj.parent().attr('id');
	var Name = thisObj.siblings('.Name').text();
	var From = thisObj.siblings('.From').text();
	if ($('div').is('.GroupContainer.'+GroupID) === false) {
		$('.AttachedStudentsList').append('\
			<div class="GradeAndGroupTitle ActionShowHideGroupContainer">\
			<span class="info">'+From+'</span>\
			<span class="Action">Открыть список ▼</span>\
		</div>');
		$('.AttachedStudentsList').append('<div class="GroupContainer '+GroupID+'" style="display: block"> </div>');
	}
	$('.GroupContainer.'+GroupID).append(AddStudent(ID, Name, From, GroupID, true));
	thisObj.parent().remove();
}

// Если студент из основного потока
function BindBackStudent(thisObj) {
	thisObj
		.removeClass('Action_BindStudent')
		.addClass('Action_UnbindStudent')
		.text('Отсоединить студента');
	thisObj
		.parent()
		.removeClass('StatusUnbind')
		.addClass('StatusBind');
}

// Прикрепить студента 
$('.StudentsList').on('click', '.Action_BindStudent', function(){
	var thisObj = $(this);
	var ID = $(this).parent().attr('id');
	$.post(
		URLdir + 'handler/map/BindStudent',
		{
			'StudentID': ID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true) {
				BindBackStudent(thisObj);
				EventInspector_ShowMsg('Студент добавлен', 'success');
			}
			else EventInspector_ShowMsg('Ошибка при добавление студента', 'error');
		}
	);
});

// Прикрепить студента из поиска
$('.StudentsList').on('click', '.Action_BindStudentFromSearch', function(){
	var thisObj = $(this);
	var ID = $(this).parent().attr('id');
	$.post(
		URLdir + 'handler/map/BindStudent',
		{
			'StudentID': ID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true) {
				BindStudentFromSearch(thisObj);
				EventInspector_ShowMsg('Студент добавлен', 'success');
			}
			else EventInspector_ShowMsg('Ошибка при добавление студента', 'error');
		}
	);
});

// Отсоединить студента 
$('.StudentsList').on('click', '.Action_UnbindStudent', function(){
	$(this)
		.removeClass('Action_UnbindStudent')
		.addClass('Action_BindStudent')
		.text('Прикрепить студента');
	$(this)
		.parent()
		.removeClass('StatusBind')
		.addClass('StatusUnbind');
	var ID = $(this).parent().attr('id');
	$.post(
		URLdir + 'handler/map/UnbindStudent',
		{
			'StudentID': ID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true)
				EventInspector_ShowMsg('Студент отсоединен', 'success');
			else EventInspector_ShowMsg('Ошибка при отсоединение студента', 'error');
		}
	);
});

$('.StudentsList').on('click', '.ActionShowHideGroupContainer', function(){
	if ($(this).next('.GroupContainer').css('display') == 'none') {
		$(this).children('.Action').text('Скрыть список ▲');
		$(this).next('.GroupContainer').show();
	}
	else {
		$(this).children('.Action').text('Открыть список ▼');
		$(this).next('.GroupContainer').hide();
	}
});

// Добавить преподавателя
function AddTeacher(ID, Name, Action){
	$r = '\
		<div class="Teacher" id="'+ ID +'">\
			<div class="Name">'+ Name +'</div>';
	if (Action == 'Unbind')
		$r += '<div class="Action_UnbindTeacher Action">Отсоединить</div>';
	if (Action == 'Bind')
		$r += '<div class="Action_BindTeacher Action">Присоединить</div>';
	$r += '\
		</div>';
	return $r;
}


// Поиск преподавателей
function CallSearchTeachers(){
	var Name = [];
	Name = ($('.InputTeacherName ').val()).split(' ');
	$.post(
		URLdir + 'handler/map/SearchTeachers',
		{
			'FacultyID': $('.SelectFaculty').val(),
			'DepartmentID': $('.SelectDepartment').val(),
			'Last': Name[0],
			'First': Name[1],
			'Second': Name[2],
			'DisciplineID': DisciplineID
		},
		function(data){
			SearchResult = $.parseJSON(data);
			if (SearchResult != null && SearchResult != undefined) {
				$('.SearchResult').html('');
				if (parseInt(SearchResult.Count) > 0)
					for(var i = 1; i <= parseInt(SearchResult.Count); i++) {
						var Name = SearchResult[i].TeacherLast + ' ' + SearchResult[i].TeacherFirst + ' ' + SearchResult[i].TeacherSecond;
						$('.SearchResult').append(AddTeacher(SearchResult[i].TeacherID, Name, 'Bind'));
					}
				else
					$('.SearchResult').html('<p class="notification">Нет результатов... Возможно, преподаватели, соответствующие критериям поиска, уже прикреплены.</p>');
			}
		}
	);
}

// Выборка кафедр
$('.SelectFaculty').change(function(){
	$.post(
		URLdir + 'handler/map/GetDepartments',
		{
			'FacultyID': $('.SelectFaculty').val()
		},
		function(data){
			data = $.parseJSON(data);
			if (data != null && data != undefined) {
				$('.SelectDepartment').html('<option value="0">Выберите кафедру (не обязательно)</option>');
				for (i = 1; i <= data.count; i++) {
					$('.SelectDepartment').append('<option value="'+ data[i].DepID +'">'+ data[i].DepName +'</option>');
				}
				
				if (data.count <= 0)
					$('.SelectDepartment').append('<option value="0">Нет кафедр</option>');		
			}
			CallSearchTeachers();
		}
	);
});

$('.SelectDepartment ').change(function(){
	CallSearchTeachers();
});
$('.InputTeacherName').focusout(function(){
	CallSearchTeachers();
});
$('.InputTeacherName').keydown(function(e){
	if(e.keyCode==13){
		$('.InputTeacherName').focusout('focusout');
		$(this).blur();
	}
});

$('.SelectFaculty').focusout(function(){
	$('.SelectFaculty').trigger('change');
});
$('.SelectDepartment').focusout(function(){
	$('.SelectDepartment').trigger('change');
});

// Конец поиска преподавателей

// Отсоединить преподавателя
$('.TeachersList').on('click', '.Action_UnbindTeacher', function(){
	$(this)
		.parent()
		.remove();
	var ID = $(this).parent().attr('id');
	$.post(
		URLdir + 'handler/map/UnbindTeacher',
		{
			'BindingTeacher': ID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true)
				EventInspector_ShowMsg('Преподаватель отсоединен', 'success');
			else EventInspector_ShowMsg('Ошибка при отсоединение преподавателя', 'error');
		}
	);
});

// Присоединить преподавателя
$('.TeachersList').on('click', '.Action_BindTeacher', function(){
	$(this)
		.parent()
		.remove();
	var ID = $(this).parent().attr('id');
	var Name = $(this).siblings('.Name').text();
	$.post(
		URLdir + 'handler/map/BindTeacher',
		{
			'BindingTeacher': ID,
			'DisciplineID': DisciplineID
		},
		function(data){
			data = $.parseJSON(data);
			if(data.success === true) {
				$('.BindTeachersList').append(AddTeacher(ID, Name, 'Unbind'));
				EventInspector_ShowMsg('Преподаватель прикреплен', 'success');
			}
			else EventInspector_ShowMsg('Ошибка при прикрепление преподавателя', 'error');
		}
	);
});

});