$(function(){

	taskGetList();
	
	// Добавить новое задание - модалка с формой
	$('.task-add-button').click(function(e){
		e.preventDefault();
		
		$('#modalTaskEdit .modal-title').html('Добавить задание');
		$('#modalTaskEdit button[type=submit]').html('Добавить');
		
		$('#modalTaskEdit input[type=text],select,textarea').val('');
		
		$('#modalTaskEdit input[type=number],input[name=id]').val('0');
		
		$('#modalTaskEdit input[name=whenCulmHour]').val('1');
		$('#modalTaskEdit input[name=whenDegree]').val('10');
		$('#modalTaskEdit input[name=moonDegree]').val('10');
		$('#modalTaskEdit input[name=moonFrom]').val('0');
		$('#modalTaskEdit input[name=moonTill]').val('100');
				
		$('#taskEditMoonAny').prop('checked', true);
		$('#taskEditWhenAboveRadio').prop('checked', true);
		
		taskEditFormState();
	
		
		$('#modalTaskEdit').modal('show');
	});
	
	
	// Связь полей moonFrom и moonTill
	$('#modalTaskEdit input[name=moonFrom]').change(function(){
		if (parseInt($(this).val()) >= parseInt($('#modalTaskEdit input[name=moonTill]').val())) {
			$('#modalTaskEdit input[name=moonTill]').val(
				parseInt($(this).val()) + 1
			);
		}
	});
	$('#modalTaskEdit input[name=moonTill]').change(function(){
		if (parseInt($(this).val()) <= parseInt($('#modalTaskEdit input[name=moonFrom]').val())) {
			$('#modalTaskEdit input[name=moonFrom]').val(
				parseInt($(this).val()) - 1
			);
		}
	});
	
	
	// Отправка формы добавления / редактирования задания
	$('#modalTaskEdit form').submit(function(e){
		e.preventDefault();
		
		//validate
		if (
			($(this).find('input[name=obj]').val() == '') &&
			($(this).find('input[name=ra]').val()  == '') &&
			($(this).find('input[name=dec]').val() == '')
		) {
			$.notify(
				{message: 'Что будем снимать? Задайте объект или координаты, пожалуйста'},
				{type: 'danger'}
			);

			$(this).find('input[name=obj]').focus();
			
			return false;
		}
		
		if (
			($(this).find('input[name=when]:checked').val() == 'culm') &&
			($(this).find('input[name=whenCulmDirection]:checked').length == 0)
		) {
			
			$.notify(
				{message: 'Снимать на востоке? Западе? С перекладкой на юге? Задайте перекладку, пожалуйста'},
				{type: 'danger'}
			);

			$(this).find('#taskEditWhenCulmSouth').focus();
			
			return false;
		}
		
		
		//send
		var obj = {};
		
		$(this).find('input,textarea').each(function(){
			obj[ $(this).attr('name') ] = $(this).val();
		});
		
		obj.how = [];
		$(this).find('select[name=how] option:checked').each(function(){
			obj.how[ obj.how.length ] = {id: $(this).val()};
		});
		
		obj.moon = $(this).find('input[name=moon]:checked').val();
		
		if ($(this).find('input[name=when]:checked').val() == 'culm') {
			obj.whenDegree = 0;
			obj.whenCulmDirection = $(this).find('input[name=whenCulmDirection]:checked').val();
		}
		else {
			obj.whenCulmDirection = '';
		}
		
		
		$.post(
			(obj.id == '0') ? '/task/create' : '/task/'+ obj.id +'/update',
			JSON.stringify( obj ),
			function(data){
			
				$.notify(
					{message: ((obj.id == '0') ? 'Добавлена' : 'Сохранена') +' задача "'+ obj.obj +'"'},
					{type: 'success'}
				);
				
				taskGetList();
				
				$('#modalTaskEdit').modal('hide');
				
			},
		'json');
	});

	
	// Удаление подтверждено
	$('#modalTaskRemove button[type=submit]').click(function(e){
		e.preventDefault();
		
		$.post('/task/'+ $('#modalTaskRemove input[name=id]').val() +'/remove', function(){
			$('.task-list tr[data-id='+ $('#modalTaskRemove input[name=id]').val() +']').remove();
			
			$.notify(
				{message: 'Удалена задача "'+ $('#modalTaskRemove .obj').text().trim() +'"'},
				{type: 'success'}
			);
			
			$('#modalTaskRemove').modal('hide');
		});
	});
	
});

// Динамическое поведение формы редактирования / создания задачи
function taskEditFormState()
{
	// form-state: moon radio
	$('#modalTaskEdit input[name=moon]').click(function(){
		if ($('#taskEditMoonYes').is(':checked')) {
			$('#taskEditMoon').show();
		}
		else {
			$('#taskEditMoon').hide();
		}
	});
	$('#modalTaskEdit input[name=moon]:checked').click();
	
	//form-state: when radio
	$('#modalTaskEdit input[name=when]').click(function(){
		if ($('#taskEditWhenCulmRadio').is(':checked')) {
			$('#taskEditWhenCulm').show();
			$('#taskEditWhenAbove').hide();
		}
		
		if ($('#taskEditWhenAboveRadio').is(':checked')) {
			$('#taskEditWhenCulm').hide();
			$('#taskEditWhenAbove').show();
		}
	});		
	$('#modalTaskEdit input[name=when]:checked').click();
	
	$('#modalTaskEdit input[name=obj]').change(function(){
		$.get('/catalog?catalog=sac&object='+ $(this).val(), function(data){
			
			var $input = $('#modalTaskEdit input[name=obj]');
			
			if (typeof data.ra == 'undefined') {
				$input.parents('.form-group')
					.removeClass('has-success')
					.addClass('has-error')
				;

				$input.parents('.form-group').find('span.help-block')
					.removeClass('hidden')
				;
				
				$input.parents('.form-group').find('span.glyphicon')
					.removeClass('glyphicon-ok')
					.addClass('glyphicon-remove')
					.removeClass('hidden')
				;
			}
			else {
				$input.parents('.form-group')
					.removeClass('has-error')
					.addClass('has-success')
				;

				$input.parents('.form-group').find('span.help-block')
					.addClass('hidden')
				;				
				
				$input.parents('.form-group').find('span.glyphicon')
					.addClass('glyphicon-ok')
					.removeClass('glyphicon-remove')
					.removeClass('hidden')
				;
				
				$('#modalTaskEdit input[name=ra]').val(data.ra);
				$('#modalTaskEdit input[name=dec]').val(data.dec);
			}
			
		}, 'json');
		
	});
}


// Загрузка Списка заданий
function taskGetList()
{
	$.get('/task', function(data){
		$('.task-list').html(''); 
		
		for (var i in data) {
			$('#templateTaskItem').tmpl(data[i], {
				priority: {
					class: {
						'-1': 'low',
						'0': 'normal',
						'1': 'high',
					},
					name: {
						'-1': 'низкий',
						'0': 'нормальный',
						'1': 'высокий',
					},
				},
				direction: {
					south: 'восток и запад',
					west: 'запад',
					east: 'восток',
				}
			}).appendTo('.task-list');
		}
		
		
		// Список. Модалка по клику на "как снимать" с подгрузкой инфо по стратегии
		$('a.task-how-info').click(function(e){
			e.preventDefault();
			
			$.get('/how/'+ $(this).data('id'), function(data){
				$('#modalTaskHow .modal-body').html(
					$('#templateTaskHow').tmpl(data)
				);
				
				$('#modalTaskHow').modal('show');
			}, 'json');
		});
		
		
		// Список. Модалка по клику на редактирование с подгрузкой инфо в форму
		$('.task-edit-button').click(function(e){
			e.preventDefault();
			
			$('#modalTaskEdit .modal-title').html('Редактировать задание');
			$('#modalTaskEdit button[type=submit]').html('Сохранить');
			
			$.get('/task/'+ $(this).parents('tr').data('id'), function(data){
				var $form = $('#modalTaskEdit form');
				
				$form.find('input[name=ra]').val( data.ra );
				$form.find('input[name=dec]').val( data.dec );
				$form.find('input[name=hours]').val( data.hours );
				$form.find('input[name=id]').val( data.id );
				$form.find('input[name=obj]').val( data.obj );
				$form.find('input[name=moonDegree]').val( data.moonDegree );
				$form.find('input[name=moonFrom]').val( data.moonFrom );
				$form.find('input[name=moonTill]').val( data.moonTill );
				$form.find('input[name=whenDegree]').val( data.whenDegree );
				$form.find('textarea[name=note]').val( data.note );
				
				$form.find('input[name=whenCulmHour]').val( data.whenCulmHour );
				
				$form.find('select[name=how]').val('');
				for (var i in data.how) {
					$form.find('select[name=how] option[value='+ data.how[i].id +']').prop('selected', true);
				}

				$form.find('input[name=moon][value='+ data.moon +']').click();
								
				if (data.whenCulmDirection == '') {
					$('#taskEditWhenAboveRadio').click();
				}
				else
				{
					$form.find('input[name=whenCulmDirection][value='+ data.whenCulmDirection +']').prop('checked', true);
					$('#taskEditWhenCulmRadio').click();
				}
				//priority
				
				taskEditFormState();
				
				$('#modalTaskEdit').modal('show');
			}, 'json');
		});
		
		
		// Список. Удаление. Модалка с подтверждением 
		$('.task-remove-button').click(function(e){
			e.preventDefault();
			
			$('#modalTaskRemove .obj').html( $(this).parents('tr').find('.obj').text().trim() );
			$('#modalTaskRemove input[name=id]').val( $(this).parents('tr').data('id') );
			
			$('#modalTaskRemove').modal('show');
		});
		
	}, 'json');
}