$(document).ready(function()
{
	$('.collapsible').collapsible({
		accordion: false // A setting that changes the collapsible behavior to expandable instead of the default accordion style
	});

	$('.milestone-title').click(function()
	{
		var $header = $(this);

		//getting the next element
		var $content = $header.next();

		//open up the content needed - toggle the slide- if visible, slide up, if not slidedown.
		$content.slideToggle(200);
	});

	//expand specific milestones on first load
	var initialExpandedMilestones = document.getElementsByClassName('init-as-expanded');
	for(var i = 0; i < initialExpandedMilestones.length; i++)
	{
		$(initialExpandedMilestones[i]).slideToggle(200);
	}

	//reacts to resize event of card and calls createTrainMap to adjust circles
	//https://github.com/marcj/css-element-queries
	var entries = document.getElementsByClassName('milestone');
	for(var i = 0; i < entries.length - 1; i++)
	{
		new ResizeSensor(entries[i], function()
		{
			createTrainMap();
		});
	}

	$('.button-save-roadmap').click(function()
	{
		editRoadmap(this.dataset.id, $('#project-name').val());
	});

	$('.button-save-milestone').click(function()
	{
		editMilestone(this.dataset.id, this.dataset.roadmapid);
	});

	$('.button-save-task').click(function()
	{
		editTask(this.dataset.id, this.dataset.milestoneid);
	});

	$('.button-save-subtask').click(function()
	{
		editSubtask(this.dataset.id, this.dataset.taskid);
	});

	$('.button-delete-roadmap').click(function()
	{
		var r = confirm("Do you really want to delete this roadmap?");
		if(r == true)
		{
			deleteRoadmap(this.dataset.id);
		}
	});

	$('.button-delete-milestone').click(function()
	{
		var r = confirm("Do you really want to delete this milestone?");
		if(r == true)
		{
			deleteMilestone(this.dataset.id, this.dataset.roadmapid);
		}
	});

	$('.button-delete-task').click(function()
	{
		var r = confirm("Do you really want to delete this task?");
		if(r == true)
		{
			deleteTask(this.dataset.id, this.dataset.milestoneid);
		}
	});

	$('.button-delete-subtask').click(function()
	{
		var r = confirm("Do you really want to delete this subtask?");
		if(r == true)
		{
			deleteSubtask(this.dataset.id, this.dataset.taskid);
		}
	});

	$('#checkbox-done').click(function()
	{
		var checked = document.getElementById("checkbox-done").checked;
		if(checked)
		{
			hideElement(document.getElementById("row-done-date"), false);

			var $input = $('#done-date').pickadate();
			var picker = $input.pickadate('picker');
			picker.set('select', new Date());
		}
		else
		{
			hideElement(document.getElementById("row-done-date"), true);
		}
	});

	$('.datepicker').pickadate({
		selectMonths: true, // Creates a dropdown to control month
		selectYears: 15, // Creates a dropdown of 15 years to control year
		format: 'dd.mm.yyyy',
		formatSubmit: 'yyyy-mm-dd'
	});

	$('.button-login').click(function()
	{
		login();
	});

	$('#password').keyup(function(e)
	{
		if(e.keyCode === 13)    //Enter
		{
			login();
		}
	});

    $('#button-mark-all-as-done').click(function()
    {
        markAllTasksAsDone(this.dataset.milestoneid);
    });

	createTrainMap();
});

function isNull(object)
{
	if(object != "" && object != undefined)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function hideElement(element, value)
{
	if(value == true)
	{
		element.classList.add("hide");
	}
	else
	{
		if(element.classList.contains("hide"))
		{
			element.classList.remove("hide");
		}
	}
}

function createTrainMap()
{
	var entries = document.getElementsByClassName('milestone');
	var lines = document.getElementsByClassName('train-line');
	var smallLines = document.getElementsByClassName('train-line-small');

	for(var i = 0; i < entries.length - 1; i++)
	{
		var height = entries[i].offsetHeight;
		lines[i].style.height = (height - 15) + "px";
		smallLines[i].style.height = (height - 2) + "px";
	}
}

function editRoadmap(roadmap_ID, projectname)
{
	if(isNull(projectname))
	{
		alert("Project Name shouldn't be empty!");
		return;
	}

	if(roadmap_ID == "0")
	{
		//insert new roadmap

		$.post('../admin/helper/edit-roadmap.php',
			{
				"project-name": projectname,
				"edit": "false"

			}, function(data, error)
			{
				data = data.toString().trim();
				switch(data)
				{
					case "error":
						alert('An error occurred');
						break;
					case "error-edit":
						alert('An error occurred while editing the roadmap with the ID ' + roadmap_ID);
						break;
					case "error-insert":
						alert('An error occurred while inserting the new roadmap');
						break;
					default:
						window.location.href = "../admin/admin-roadmaps.php";
						break;
				}
			});
	}
	else
	{
		//edit existing roadmap

		$.post('../admin/helper/edit-roadmap.php',
			{
				"ID": roadmap_ID,
				"project-name": projectname,
				"edit": "true"

			}, function(data, error)
			{
				data = data.toString().trim();
				switch(data)
				{
					case "error":
						alert('An error occurred');
						break;
					case "error-edit":
						alert('An error occurred while editing the roadmap with the ID ' + roadmap_ID);
						break;
					case "error-insert":
						alert('An error occurred while inserting the new roadmap');
						break;
					default:
						window.location.href = "../admin/admin-roadmaps.php";
						break;
				}
			});
	}
}

function deleteRoadmap(roadmap_ID)
{
	$.post('../admin/helper/delete-roadmap.php',
		{
			"roadmap_ID": roadmap_ID,

		}, function(data, error)
		{
			data = data.toString().trim();

			if(data != "error")
			{
				window.location.href = "../admin/admin-roadmaps.php";
			}
			else
			{
				alert('An error occurred while deleting the roadmap with the ID ' + roadmap_ID);
			}
		});
}

function editMilestone(milestone_ID, roadmap_ID)
{
	var edit = document.getElementById('edit').innerHTML;
	var versionCode = $('#version-code').val();
	var versionName = $('#version-name').val();
	var title = $('#title').val();
	var dueDate = $('#due-date').val();
	var doneDate = $('#done-date').val();
	var done = document.getElementById("checkbox-done").checked;

	if(isNull(versionCode))
	{
		alert("Version Code shouldn't be empty!");
		return;
	}

	if(isNull(versionName))
	{
		alert("Version Name shouldn't be empty!");
		return;
	}

	if(isNull(title))
	{
		alert("Title shouldn't be empty!");
		return;
	}

	if(isNull(dueDate))
	{
		dueDate = "01.01.2000";
	}

	if(isNull(doneDate))
	{
		doneDate = "01.01.2000";
	}

	if(done)
	{
		done = 1;
	}
	else
	{
		done = 0;
		doneDate =  "01.01.2000";
	}

	$.post('../admin/helper/edit-milestone.php',
		{
			"version-code": versionCode,
			"version-name": versionName,
			"title": title,
			"due-date": dueDate,
			"done-date": doneDate,
			"done": done,
			"edit": edit,
			"ID": milestone_ID,
			"roadmap-ID": roadmap_ID

		}, function(data, error)
		{
			data = data.toString().trim();
			switch(data)
			{
				case "error":
					alert('An error occurred');
					break;
				case "error-edit":
					alert('An error occurred while editing the roadmap with the ID ' + roadmap_ID);
					break;
				case "error-insert":
					alert('An error occurred while inserting the new milestone');
					break;
				default:
					window.location.href = "../admin/admin-milestones.php?id=" + roadmap_ID;
					break;
			}
		});
}

function deleteMilestone(milestone_ID, roadmap_ID)
{
	$.post('../admin/helper/delete-milestone.php',
		{
			"milestone_ID": milestone_ID,

		}, function(data, error)
		{
			data = data.toString().trim();

			if(data != "error")
			{
				window.location.href = "../admin/admin-milestones.php?id=" + roadmap_ID;
			}
			else
			{
				alert('An error occurred while deleting the milestone with the ID ' + milestone_ID);
			}
		});
}

function editTask(task_ID, milestone_ID)
{
	var edit = document.getElementById('edit').innerHTML;
	var title = $('#title').val();
	var description = $('#description').val();;
	var done = document.getElementById("checkbox-done").checked;

	if(isNull(title))
	{
		alert("Title shouldn't be empty!");
		return;
	}

	if(done)
	{
		done = 1;
	}
	else
	{
		done = 0;
	}

	$.post('../admin/helper/edit-task.php',
		{
			"title": title,
			"description": description,
			"done": done,
			"edit": edit,
			"ID": task_ID,
			"milestone-ID": milestone_ID

		}, function(data, error)
		{
			data = data.toString().trim();
			switch(data)
			{
				case "error":
					alert('An error occurred');
					break;
				case "error-edit":
					alert('An error occurred while editing the task with the ID ' + task_ID);
					break;
				case "error-insert":
					alert('An error occurred while inserting the new task');
					break;
				default:
					window.location.href = "../admin/admin-tasks.php?id=" + milestone_ID;
					break;
			}
		});
}

function deleteTask(task_ID, milestone_ID)
{
	$.post('../admin/helper/delete-task.php',
		{
			"task_ID": task_ID,

		}, function(data, error)
		{
			data = data.toString().trim();

			if(data != "error")
			{
				window.location.href = "../admin/admin-tasks.php?id=" + milestone_ID;
			}
			else
			{
				alert('An error occurred while deleting the task with the ID ' + task_ID);
			}
		});
}

function editSubtask(subtask_ID, task_ID)
{
	var edit = document.getElementById('edit').innerHTML;
	var title = $('#title').val();
	var description = $('#description').val();;
	var done = document.getElementById("checkbox-done").checked;

	if(isNull(title))
	{
		alert("Title shouldn't be empty!");
		return;
	}

	if(done)
	{
		done = 1;
	}
	else
	{
		done = 0;
	}

	$.post('../admin/helper/edit-subtask.php',
		{
			"title": title,
			"description": description,
			"done": done,
			"edit": edit,
			"ID": subtask_ID,
			"task-ID": task_ID

		}, function(data, error)
		{
			data = data.toString().trim();
			switch(data)
			{
				case "error":
					alert('An error occurred');
					break;
				case "error-edit":
					alert('An error occurred while editing the subtask with the ID ' + subtask_ID);
					break;
				case "error-insert":
					alert('An error occurred while inserting the new task');
					break;
				default:
					window.location.href = "../admin/admin-subtasks.php?id=" + task_ID;
					break;
			}
		});
}


function deleteSubtask(subtask_ID, task_ID)
{
	$.post('../admin/helper/delete-subtask.php',
		{
			"subtask_ID": subtask_ID,
            "task_ID": task_ID

		}, function(data, error)
		{
			data = data.toString().trim();

			if(data != "error")
			{
				window.location.href = "../admin/admin-subtasks.php?id=" + task_ID;
			}
			else
			{
				alert('An error occurred while deleting the subtask with the ID ' + subtask_ID);
			}
		});
}

function login()
{
	var password = $('#password').val();

	if(isNull(password))
	{
		alert("Please enter your password.");
		return;
	}

	$.post('../admin/helper/checkLogin.php',
		{
			"password": password

		}, function(data, error)
		{
			data = data.toString().trim();

			if(data != "error" && data != "bad_login")
			{
				window.location.href = "../admin/admin-roadmaps.php";
			}
			else
			{
				alert('Wrong password!');
			}
		});
}

function markAllTasksAsDone(milestone_ID)
{
    $.post('../admin/helper/mark-all-tasks-as-done.php',
        {
            "milestoneID": milestone_ID

        }, function(data, error)
        {
            data = data.toString().trim();

            if(data != "error" && data != "bad_login")
            {
                window.location.href = "../admin/admin-tasks.php?id=" + milestone_ID;
            }
            else
            {
                alert('An error occurred while marking all tasks as done');
            }
        });
}