$(document).ready(function() {
	reassign_all();
});


function reassign_all() {
	$("*").unbind();

	// Sprawdzenie na biezaco czy nazwa uzytkownika jest dostepna.
	$("form#user-register input#username").change(function() { check_username_taken($(this).val()); });

	// Walidacja formularza rejestracyjnego.
	$("form#user-register").submit(check_registration_form);

	// Walidacja formularza zapomnianego hasla.
	$("form#user-forgotten-password").submit(check_forgotten_password_form);

	// Walidacja formularza zmiany hasla.
	$("form#user-change-password").submit(check_change_password_form);

	// Walidacja formularza kontaktowego.
	$("form#contact-form").submit(check_contact_form);

	// Walidacja formularza tworzenia nowej listy zadan.
	$("form#save-list-form").submit(check_save_list_form);

	// Powod kontaktu w formularzu kontaktowym.
	if ($("select#subject").size() == 1) contact_form_explanation();
	$("select#subject").change(contact_form_explanation);

	// Odliczanie sekundowe.
	if ($("span#countdown-clock").size() == 1) countdown_clock($("span#countdown-clock").text());

	// Dodawanie nowego zadania na liscie.
	$("form#new-task-form").submit(submit_task);

	// Odhaczenie zadania.
	$("#tudu input[type='checkbox']").change(function() { task_change_status($(this)); });
	$("#completed input[type='checkbox']").change(function() { task_change_status($(this)); });

	// Usuwanie zadania na stronie zarzadzania zadaniami listy.
	$(".manage_tasks_delete").click(function() { manage_tasks_delete($(this)); });
}


function check_username_taken(username) {
	$.post(site_url + 'ajax/check_username_taken.php',
		{data: username},
		function(msg) {
			if (msg == 'bad-input')
				alert('Podana nazwa użytkownika zawiera niedozwolone znaki. Dozwlone są tylko litery i cyfry (bez polskich znaków diaktrycznych, takich jak Ą czy Ł).');
			else if (msg == 'taken')
				alert('Ta nazwa użytkownika jest już zajęta. Wybierz inną.');
		});
}


function check_registration_form() {
	var errors = "";

	$(".js_validation_error").remove();

	if ($("input#username").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#username");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podaj nazwę użytkownika, którą chcesz posiadać.")
			.insertAfter("input#username");
		errors = errors + "Podaj nazwę użytkownika, którą chcesz posiadać.\n";
	}

	if ($("input#password1").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#password1");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj hasło.")
			.insertAfter("input#password1");
		errors = errors + "Podaj hasło.\n";
	}

	if ($("input#password2").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#password2");
		$("<span>").addClass("js_validation_error").addClass("error").text("Powtórz hasło.")
			.insertAfter("input#password2");
		errors = errors + "Powtórz hasło.\n";
	}

	if ($("input#password1").val() != $("input#password2").val()) {
		$("<br>").addClass("js_validation_error").insertAfter("input#password1");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podane hasła nie są identyczne. Popraw je.")
			.insertAfter("input#password1");
		$("<br>").addClass("js_validation_error").insertAfter("input#password2");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podane hasła nie są identyczne. Popraw je.")
			.insertAfter("input#password2");
		errors = errors + "Podane hasła nie są identyczne. Popraw je.\n";
	}

	if ($("input#password1").val() != "" && $("input#password1").val() == $("input#username").val()) {
		$("<br>").addClass("js_validation_error").insertAfter("input#password1");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Hasło nie może być takie samo jak nazwa użytkownika.")
			.insertAfter("input#password1");
		errors = errors + "Hasło nie może być takie samo jak nazwa użytkownika.\n";
	}

	if ($("input#email1").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#email1");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podaj swój prawidłowy adres e-mail.")
			.insertAfter("input#email1");
		errors = errors + "Podaj swój prawidłowy adres e-mail.\n";
	}

	if ($("input#email2").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#email2");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Powtórz swój prawidłowy adres e-mail.")
			.insertAfter("input#email2");
		errors = errors + "Powtórz swój prawidłowy adres e-mail.\n";
	}

	if ($("input#email1").val() != $("input#email2").val()) {
		$("<br>").addClass("js_validation_error").insertAfter("input#email1");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Należy dwukrotnie podać ten sam adres e-mail.")
			.insertAfter("input#email1");
		$("<br>").addClass("js_validation_error").insertAfter("input#email2");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Należy dwukrotnie podać ten sam adres e-mail.")
			.insertAfter("input#email2");
		errors = errors + "Należy dwukrotnie podać ten sam adres e-mail.\n";
	}

	if (errors != "") {
		$("<div>").addClass("js_validation_error")
			.addClass("message_failure")
			.text("Formularz został wypełniony nieprawidłowo.")
			.insertBefore("form#user-register");
		//alert("Źle wypełniłeś formularz. Napotkano poniższe błedy:\n\n" + errors + "\nPopraw źle wypełnione pola i wyślij formularz ponownie.");
		return false;
	}

	return true;
}


function check_forgotten_password_form() {
	var errors = "";

	$(".js_validation_error").remove();

	if ($("input#username").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#username");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj swój prawidłowy adres e-mail.")
			.insertAfter("input#username");
		errors = errors + "Podaj swoją nazwę użytkownika.\n";
	}

	if ($("input#email").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#email");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj swój prawidłowy adres e-mail.")
			.insertAfter("input#email");
		errors = errors + "Podaj swój adres e-mail.\n";
	}

	if (errors != "") {
		$("<div>").addClass("js_validation_error")
			.addClass("message_failure")
			.text("Formularz został wypełniony nieprawidłowo.")
			.insertBefore("form#user-forgotten-password");
		//alert("Źle wypełniłeś formularz. Napotkano poniższe błedy:\n\n" + errors + "\nPopraw źle wypełnione pola i wyślij formularz ponownie.");
		return false;
	}

	return true;
}


function check_change_password_form() {
	var errors = "";

	$(".js_validation_error").remove();

	if ($("input#old_password").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#old_password");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj swoje obecne hasło.")
			.insertAfter("input#old_password");
		errors = errors + "Podaj swoje obecne hasło.\n";
	}

	if ($("input#password1").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#password1");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj nowe hasło.")
			.insertAfter("input#password1");
		errors = errors + "Podaj nowe hasło.\n";
	}

	if ($("input#password2").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#password2");
		$("<span>").addClass("js_validation_error").addClass("error").text("Powtórz nowe hasło.")
			.insertAfter("input#password2");
		errors = errors + "Powtórz nowe hasło.\n";
	}

	if ($("input#password1").val() != $("input#password2").val()) {
		$("<br>").addClass("js_validation_error").insertAfter("input#password1");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podane hasła nie są identyczne. Popraw je.")
			.insertAfter("input#password1");
		$("<br>").addClass("js_validation_error").insertAfter("input#password2");
		$("<span>").addClass("js_validation_error")
			.addClass("error").text("Podane hasła nie są identyczne. Popraw je.")
			.insertAfter("input#password2");
		errors = errors + "Podane hasła nie są identyczne. Popraw je.\n";
	}

	if (errors != "") {
		$("<div>").addClass("js_validation_error")
			.addClass("message_failure").text("Formularz został wypełniony nieprawidłowo.")
			.insertBefore("form#user-change-password");
		//alert("Źle wypełniłeś formularz. Napotkano poniższe błedy:\n\n" + errors + "\nPopraw źle wypełnione pola i wyślij formularz ponownie.");
		return false;
	}

	return true;
}


function check_contact_form() {
	var errors = "";

	$(".js_validation_error").remove();

	if ($("input#author_name").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#author_name");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj swoje imię i nazwisko.")
			.insertAfter("input#author_name");
		errors = errors + "Podaj swoje imię i nazwisko.\n";
	}

	if ($("input#author_email").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#author_email");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj swój prawdziwy adres e-mail.")
			.insertAfter("input#author_email");
		errors = errors + "Podaj swój prawdziwy adres e-mail.\n";
	}

	if ($("select#subject").val() == "none-selected") {
		$("<br>").addClass("js_validation_error").insertAfter("select#subject");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj powód kontaktu.")
			.insertAfter("select#subject");
		errors = errors + "Podaj powód kontaktu.\n";
	}
	else if ($("select#subject").val() == 99 && $("input#subject_text").val() == "") {
		$("#subject_explanation").show();
		$("<br>").addClass("js_validation_error").insertAfter("input#subject_text");
		$("<span>").addClass("js_validation_error").addClass("error").text("Podaj powód kontaktu.")
			.insertAfter("input#subject_text");
		errors = errors + "Podaj powód kontaktu.\n";
	}

	if ($("textarea#message").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("textarea#message");
		$("<span>").addClass("js_validation_error").addClass("error").text("Wpisz wiadomosć kontaktową.")
			.insertAfter("textarea#message");
		errors = errors + "Wpisz wiadomosć kontaktową.\n";
	}

	if (errors != "") {
		$("<div>").addClass("js_validation_error")
			.addClass("message_failure")
			.text("Formularz został wypełniony nieprawidłowo.")
			.insertBefore("form#contact-form");
		//alert("Źle wypełniłeś formularz. Napotkano poniższe błedy:\n\n" + errors + "\nPopraw źle wypełnione pola i wyślij formularz ponownie.");
		return false;
	}

	return true;
}


function check_save_list_form() {
	var errors = "";

	$(".js_validation_error").remove();

	if ($("input#name").val() == "") {
		$("<br>").addClass("js_validation_error").insertAfter("input#name");
		$("<span>").addClass("js_validation_error").addClass("error").text("Koniecznie podaj nazwę listy zadań.")
			.insertAfter("input#name");
		errors = errors + "Koniecznie podaj nazwę listy zadań.\n";
	}

	if (errors != "") {
		$("<div>").addClass("js_validation_error")
			.addClass("message_failure")
			.text("Formularz został wypełniony nieprawidłowo.")
			.insertBefore("form#save-list-form");
		//alert("Źle wypełniłeś formularz. Napotkano poniższe błedy:\n\n" + errors + "\nPopraw źle wypełnione pola i wyślij formularz ponownie.");
		return false;
	}

	return true;
}


function contact_form_explanation() {
	if ($("select#subject").val() == 99)
		$("div#subject_explanation").show(100);
	else
		$("div#subject_explanation").hide(100);
}


function countdown_clock(time_left) {
	$("span#countdown-clock").text(time_left);

	if (time_left > 0) {
		time_left--;
		setTimeout('countdown_clock('+ time_left +');', 1000);
	}
	else
		$("div.message_failure").remove();
}


function new_task() {
	$("#new-task").slideToggle('fast', function() {
		if ($("#new-task:visible").size() == 1)
			$("input#task-name").focus();
	});
}


function submit_task() {
	var param_list_id = $("input#list-id").val();
	var param_name = $("input#task-name").val();

	if (param_name != "") {
		$.ajax({
			type: "POST",
			url: site_url + "ajax/create_task.php",
			dataType: "json",
			data: "list_id="+param_list_id+"&name="+param_name,
			success: function(msg) {
				if (msg.error == 0) {
					$("input#task-name").val("");
					$("#tudu").append('<li><input type="checkbox" id="task-'+ msg.id +'" name="task-'+ msg.id +'" value="true" /> <label for="task-'+ msg.id +'">'+ msg.name +'</label></li>');
					reassign_all();
				}
				else
					alert('Bład systemu. Nie znaleziono listy zadań, do której chciałeś dodać zadanie.');
			}
		});
	}

	return false;
}


function task_change_status(checkbox) {
	var move_to = "";
	if (checkbox.parent("li").parent("ul").is("#tudu")) move_to = "#completed";
	else move_to = "#tudu";

	var get_task_id = checkbox.attr("id");

	$.post(site_url + "ajax/move_task.php",
		{ task_id: get_task_id, to: move_to },
		function(msg) {
			if (msg == "ok") {
				var object = checkbox.parent("li");
				if (move_to == '#tudu') object.attr("checked", false);
				else object.attr("checked", true);
				object.appendTo(move_to);
				reassign_all();
			}
		});
}


function manage_tasks_delete(task) {
	task.prev("input[type='hidden']").val("true");
	task.parent("div").hide(100);
	return true;
}
