//==================================================================
// HLT-CMS
// Глобальный обработчки
// (c) Evgeny Ukhanov, 2009
// ver. 1.3
//==================================================================

// Дополнение от Lebedinsky Vladimir, потом файлы просто обьединить

//Функция в которой прописано все что нужно сделать при загрузке как всей странички нормальным способом, 
//так и подзагрузки аяксом. Для этого и вынесено в отдельную функцию
function preparePage(){
	//валидация форм с правилами, прописанными в аттрибутах тегов, для такой формы прописываем класс "AutoValidateForm"
	$('form.AutoValidateForm').validate();
	
	//Клиентская сортировка в таблицах с классом "tablesorter"
	// $('table.tablesorter').tablesorter(); 
	
	//вешаем календарик на все инпуты с классом "datetime"
	$(':input.datetime').datepicker({dateFormat: 'yy-mm-dd'});
	
	//Окошко с подтверждением перед отправкой формы. Вешается на все сабмиты с классом confirm
	$('form:submit.confirm').click(function(){
		if (confirm("Вы действительно хотите это сделать?")){
			//ничего не добавляем, дальше произойдет отправка формы
		} else {
			//отменяем отправку формы
			return false;
		}
	});
	
	$("#ajax_loading").bind("ajaxSend", function(){
		$(this).show(); 
	}).bind("ajaxComplete", function(){
		$(this).fadeOut(); 
	});
	
	//для фильтрации проектов/тасков, вешается только один раз
	$("#show_only_unread_tasks").click(function(){
		/*
		 * Селектор выбирающий все задачи для которых нет обновлений ни в задаче ни в подзадачах
		*/
		$("tr.task_row:not(:has(>td>span.unread)):not(:has(>td>span.has_unread_subtasks))").hide().next().hide();
		$(this).hide().fadeIn();
	});
	
	$("#show_all_tasks").click(function(){
		$("tr.task_row:not(:has(>td>span.unread)):not(:has(>td>span.has_unread_subtasks))").show().next().show();
		$(this).hide().fadeIn();
	});
	
	$("#project_filters_cont").hide();
	$("#show_hide_project_filters").click(function(){
		$(this).toggleClass('sub');
		$("#project_filters_cont").toggle();
	});
}

function prepareMessages(){
	//Выбор пользователей из списка для отправки сообщений
	$("#newMessageForm :input[name=recipient]").autocomplete('/messages/get_users_for_autocomplete/', 
		{
			minChars:3
		}
	);
}


function prepareProject(){
	/* тестовый вариант выбора пользователей из списка */
	//валидация..
		
	$("#projectForm :submit").click(function(){
		$("#owners_validator").val($("#owners_list :input").length ? '1' : '');
		$("#executors_validator").val($("#executors_list :input").length ? '1' : '');
	});
	
	
	//автокомплит в добавлении пользователей
	$("#autocomplete_project_owners").autocomplete("/projects/get_users_for_autocomplete/", 
		{
			minChars:3,
			multiple: false
		}
	);
	$("#autocomplete_project_owners").result(function(event, data, formatted) {
		if (data && data[1] && ($("#owners_list :input[value="+data[1]+"]").length==0) ){
			var hidden = 	$("<input>").attr('type', 'hidden').attr('name', 'owners[]').val(data[1]);
			var label = 	$("<label>").text(data[0]);
			var del = 		$("<span>").text('удалить').attr('class', 'pointer').click(function(){
				$(this).parent().remove();
			});
			var user_cont = $("<li>").append(hidden, label, ' [ ', del, ' ] ');
			$("#owners_list").append(user_cont);
			$(this).val('');
		} else {
			$(this).val('');
		}
	}); 
	
	$("#autocomplete_project_executors").autocomplete("/projects/get_users_for_autocomplete/", 
		{
			minChars:3,
			multiple: true
		}
	);
	$("#autocomplete_project_executors").result(function(event, data, formatted) {
		if (data && data[1] && ($("#executors_list :input[value="+data[1]+"]").length==0) ) {
			var hidden = 	$("<input>").attr('type', 'hidden').attr('name', 'executors[]').val(data[1]);
			var label = 	$("<label>").text(data[0]);
			var del = 		$("<span>").text('удалить').attr('class', 'pointer').click(function(){
				$(this).parent().remove();
			});
			var user_cont = $("<li>").append(hidden, label, ' [ ', del, ' ] ');
			$("#executors_list").append(user_cont);
			$(this).val('');
		} else {
			$(this).val('');
		}
	}); 
}

function prepareTask(){
	//прячем форму комментов, скриптом. Если у клиента яваскрипт вдруг неработает - форма так и будет открыта
	$('#task_add_comment_div').hide();
	
	//прячем/показываем форму комментов при клике на ссылку
	$('#task_add_comment_button').click(function(){
		$('#task_add_comment_div').toggle();
	});
	
	
	//Ajax-загрузка файлов в тасках
	var button = $('#attach_file_button'), interval, task_id = $("#task_id").val();
	
	if (button.length){
		new AjaxUpload(button, {
			action: '/projects/upload_task_file', 
			name: 'task_attach',
			data: {task_id:task_id},
			onSubmit : function(file, ext){
				button.text('Началась загрузка файла');
				
				this.disable();
				
				interval = window.setInterval(function(){
					var text = button.text();
					if (text.length < 13){
						button.text(text + '.');
					} else {
						button.text('загрузка');
					}
				}, 200);
			},
			onComplete: function(file, response){
				window.clearInterval(interval);
				
				var filesize = parseInt(response)
				
				if (filesize){
					button.text('Прикрепть еще один файл');
					this.enable();
					
					$('<a></a><br/>').appendTo('#attach_files pre').text(file).attr('href', '/linktrade/uploads/taskfiles/'+task_id+'/'+file).attr('target', '_blank');
				} else {
					button.text('Ошибка! Попробовать снова?');
					this.enable();
				}
			}
		});
	}
	
	//Удаление комментариев
	$(".delete_comment").click(function(){
		comment_body = $(this).parent().parent();
		comment_id = $(":input[name='comment_id']", comment_body).val();
		if (confirm("Вы действительно хотите удалить этот комментарий?")){
			$.post("/projects/delete_comment", {comment_id:comment_id}, function(response){
				if (response == 'success'){
					comment_body.remove();
				}
			});
		}
		
		return false;
	});
}

function prepareTaskEdit(){
	$(":input.termchained").change(function(){
		var start = 	Number(Date.parse($("#start.termchained:input").datepicker('getDate')));
		var end = 		Number(Date.parse($("#end.termchained:input").datepicker('getDate')));
		var time = 		Number($("#time.termchained:input").val());
		// alert ([start, end, time]);
		if (start && end && !isNaN(time)){
			if ($(this).attr('id') == 'time'){
				$("#end.termchained:input").datepicker('setDate', $("#start.termchained:input").datepicker('getDate'));
				$("#end.termchained:input").datepicker('setDate', time + 'd');
			} else {
				var term = Math.round((end - start)/86400/1000);
				$("#time.termchained:input").val(term);
			}
		}
	});
}

function prepareProjectsTable(){
	
	// $(".project_tree_open").addClass('act').addClass('add');
	
	$(".project_tree_open").click(function(){
		$(this).toggleClass('sub');
		var project_id = $(":input[name=project_id]", this).val();
		var subtasks_cont = $('#project' + project_id + '_subtasks');
		if (!subtasks_cont.html()){
			subtasks_cont.load('/projects/tree', {project_id:project_id}, prepareSubtasksTable);
		} else {
			subtasks_cont.toggle();
		}
	});
	
	//Удаление проекта в списке проектов
	$(".delete_project").click(function(){
		var project_id = $(":input[name='project_id']", this).val();
		var project_body = $(this).parent().parent();
		var project_subtasks =  $('#project' + project_id + '_subtasks');
		if (confirm("Вы действительно хотите безвозвратно удалить этот проект, со всеми его задачами и файлами?")){
			$.post("/projects/delete_project", {project_id:project_id}, function(response){
				if (response == 'success'){
					project_body.remove();
					project_subtasks.remove();
				}
			});
		}
	});
	
}

function prepareSubtasksTable(){
	
	//Удаление задачи в списке задач
	$(".delete_task").click(function(){
		var task_id = $(":input[name='task_id']", this).val();
		var task_body = $(this).parent().parent();
		var subtasks_cont = $('#task' + task_id + '_subtasks')
		
		
		if (confirm("Вы действительно хотите удалить эту задачу?")){
			$.post("/projects/delete_task", {task_id:task_id}, function(response){
				if (response == 'success'){
					task_body.remove();
					subtasks_cont.remove();
				}
			});
		}
	});
	
	
	$(".task_subtasks_open").addClass('act').addClass('add').click(function(){
		$(this).toggleClass('sub');
		$('#task' + $(":input[name='task_id']", this).val() + '_subtasks').toggle();
	});
	
	
	$("td.task_title").each(function(){
		var task_id = $(":input[name='task_id']", this).val();
		var subtasks_cont = $('#task' + task_id + '_subtasks');
		
		if($("span.unread", subtasks_cont).length){
			$("<span>").attr('class', 'has_unread_subtasks').attr('title', 'Есть непрочитанные подзадачи').prependTo(this);
		}
	});
}


$(document).ready(function(){
	
	preparePage();
	
	prepareTask();
	
	prepareTaskEdit();
	
	prepareProjectsTable();
	
	prepareSubtasksTable();
	
	prepareProject();
	
});