//??? UWAGA - potestować bez jQuery(function(). Jeśli nie czekamy "aż DOM jest gotowy", to odpowiednie boksy się szybciej pokazują - dotestować, sprawdzić i potwierdzić (wolniejsze kompy, wolniejsze połączenia)
//jQuery(function() {

	var dm_salt_l = 'lll';
	var dm_salt_e = 'eee';
	var dm_salt_p = 'ppp';


	var options = {
		beforeSubmit:	showLoader, 
		success:		ShowResult,
		url:			'/_ajax/login_box.php',
		dataType:  		'json',
		clearForm: 		false,
		//ifModified: true,
		resetForm: 		false
		//async: false 
		//complete: function(xhr, statusText) {
			//alert(xhr.status);
		//} 
	}; 
	
	
	//Na start uruchom zapytanie ajax (użyj GET), aby dowiedzieć się, czy user jest zalogowany, czy nie
	//Jeśli jest zalogowany, pokaż boks z wylogowywaniem się
	var lb_ajax_type = 'get'; //w dodatkowej zmiennej przekaż, że jest to pierwsze zapytanie typu 'get' - aby dla niego nie pokazywać komunikatu z błędem w połączeniu
	options['type'] = 'get';
	jQuery.ajax( options ); //wykonaj pierwszy submit do ajaxa
	
	
	options['type'] = 'post'; //używaj posta dla formularzy - gdy user sam kliknie na submita

	
	function showLoader(formData, jqForm, options) {
		if ('form_type' == formData[0].name) { //Upewniamy się, że pierwsze pole submitowanego formularza to 'form_type'
			//Włącz odpowiedni typ loadera na podstawie wartości pola 'form_type' z formularza
			eval(formData[0].value + "_loader.show();");
		}
		
		//Dodatkowo usuń komunikaty
		{$("#lb_msg_cont").hide()}
	}

	
	var login_loader = $("#login_loader");
	var logout_loader = $("#logout_loader");
	function hideLogInBoxLoaders () {
		login_loader.hide(); logout_loader.hide();
	}

	function ShowResult(data) {
		//alert('ShowResult');
		
		/*
		//Mamy informację z AJAX, aby pokazywać box do logowania
		if (data.showLoginBox) {
			//alert('showLoginBox');
			
			{$("#lb_form_cont").html($("#login_box").html())} //Pierwsze uruchomienie niezalogowane usera - pokaż box do zalogowania

			logInBoxValidate(); //Dopiero teraz, po pokazaniu formularza na właściwym miejscu jestesmy gotowi do uruchomienia walidacji formularza

			//Unfortunately ajaxStop doesn't always work so we put it here again
			hideLogInBoxLoaders();
		}


		//Wystąpiły jakieś błędy (lub: są komunikaty do pokazania _przy boksie_ do logowania, np. po wylogowaniu) przy formularzu do logowania (loginBox)
		if (data.lb_msg_code) 
		{
			$("#lb_form_cont").html($("#login_box").html()); //pokaż box do zalogowania

			{$("#lb_msg_cont").html($('#lb_msg_' + data.lb_msg_code).html()).slideDown('slow')}

			logInBoxValidate(); 

			//Unfortunately ajaxStop doesn't always work so we put it here again
			hideLogInBoxLoaders();
		}
		*/


		if (data.showLoginBox || data.lb_msg_code) 
		{
			$("#lb_form_cont").html($("#login_box").html()); //pokaż box do zalogowania

			if (data.lb_msg_code) {$("#lb_msg_cont").html($('#lb_msg_' + data.lb_msg_code).html()).slideDown('slow')}

			logInBoxValidate(); 

			//Unfortunately ajaxStop doesn't always work so we put it here again
			hideLogInBoxLoaders();
		}



		
		//Pokaż box do wylogowania
		if (data.showLogoutBox)
		{
			//alert('showLogOUTBox');
			lb_ajax_type = 'post'; //zmien pomocniczną zmienną do 'post' (patrz komentarz na poczatku pliku)

			if (!$.cookie('userData')) userData = data; //Jeśli nie ma cookiesa przepisz dane usera z jsona
			else userData = eval("(" + $.cookie('userData') + ")"); //Odczytaj dane usera z cookie
			$("#lg_forename").html(userData.forename); //Podmien w locie imię otrzymane AJAX-em bądź zapisane w cookie
			$("#lg_surname").html(userData.surname); //Podmien w locie nazwisko otrzymane AJAX-em bądź zapisane w cookie
			
			$("#lb_form_cont").html($("#logout_box").html()); //pokaż box do wylogowania
			
			$("#login_form").resetForm(); //wyczysc dane formularza do logowania

			logOutBoxValidate(); //Jesteśmy gotowi do walidowania (i submitowania) formularza do wylogowania

			//Unfortunately ajaxStop doesn't always work so we put it here again
			hideLogInBoxLoaders();
		}
	} //end showResult
	
	

		
	//Wydzielone do osobnej funkcji, gdyż inaczej po przeniesieniu formularza do kontenera skrypt miał zdublowane formularze i nie wiedział, który walidować
	function logOutBoxValidate() {
		//alert('logOutBoxValidate');
		$("#logout_form").validate({
			//debug: true,

			submitHandler: function(logout_form) {
				$(logout_form).ajaxSubmit(options);
			}
		});
	}
		
		
	
	function logInBoxValidate() {
		
		lb_ajax_type = 'post'; //zmien pomocniczną zmienną do 'post' (patrz komentarz na poczatku pliku)
	
		//Oczyść komunikaty gdy ktoś kliknie submit na formularzu do logowania
		$("#login_box_submit").click(function() {
			{$("#lb_msg_cont").hide()}
		});
		
		var v = $("#login_form").validate({ 
			//PS. Komunikaty błędów określone w osobnym językowym pliku JS
			
			debug: true,

			submitHandler: function(login_form) {

					//zmniejsz login do małych liter //??? (lub po prostu nie wpuszczaj malych liter w walidacji - ale to raczej nie)

					//Wykryj czy w polu login został rzeczywiście podany login, czy może email
					//i odpowiednio stwórz hash na podstawie odpowiednich soli
					if ($("#login").val().indexOf('@') != -1) {
						$("#login_type").val('email')
						login_hash = getStrengthenedHash($("#login").val(), dm_salt_e, 1000);
					}
					else {
						$("#login_type").val('login');
						login_hash = getStrengthenedHash($("#login").val(), dm_salt_l, 1000);
					}

					

					//alert(login_hash);
					
					//UWAGA!! Raz ustalonych na sajt iteracji nie wolno już nigdy w przyszłości zmienić, 
					//gdyż po prostu hashe przestaną się matchować i nikt się nie zaloguje do sajtu...
					passwd_hash = getStrengthenedHash($("#passwd").val(), dm_salt_p, 1000);
					
					
					$("#passwd_hash").val(passwd_hash);
					$("#passwd").val(""); //wyczyść i nie przesyłaj hasła w postaci otwartej

					$("#login_hash").val(login_hash);
					$("#login").val(""); //wyczyść i nie przesyłaj loginu w postaci otwartej

					$(login_form).ajaxSubmit(options);
			},

			rules: {
				login: {
					//Uwaga! Reguła dot. maks. długości jest zdef. w loginORemail, gdyż dotyczy jedynie loginów, a nie emaili 
					required: true,
					minlength: 5,
					"loginORemail": true
				},
				passwd: { 
					required: true,
					minlength: 8,
					mindigits: 2,
					characterclass: "[\x21-\x7E]"
				}
			}
		}); //end v

	
		$("#login_box_submit1").click(function() {
			$("#login").val("michal"); 
			//$("#login").val("mb@dynasoft.pl");

			$("#passwd").val("boryna12a");

			$("#login_form").submit();
		});


		$("#login_box_submit2").click(function() {
			$("#login").val("apuddd");
			$("#passwd").val("asdfasdf12");

			$("#login_form").submit();
		});

	} //end loginBoxValidate


	
	
	jQuery().ajaxStop(function() {
		hideLogInBoxLoaders();
	}).ajaxError(function(a, b, o) {
		//Show login box (because we don't have connection to server we don't know if the user was logged in or logged out before)
		{$("#lb_form_cont").html($("#login_box").html())} 

		//Show message informing about connection errors (but only for POST connections; do not show the message if initial GET is made)
		//It works when the php file is not available or when the reply is unrecognized (not valid)
		if ('get' != lb_ajax_type.toLowerCase()) {
			{$("#lb_msg_cont").html($('#lb_msg_300').html()).slideDown('slow')}
		}

		//Initialize login box validation
		logInBoxValidate();

		//Hide loader image
		hideLogInBoxLoaders();

		//b.responseText - to trzeba zapisywać na wypadek błędu innym osobnym ajaxem, który będzie savował to pliku tekstowego (w tym timestamp i IP jeśli to możliwe)

		throw o;
	}).ajaxSend(function(e, x, o) { //ajaxSend wykonywane jest po ajaxStart
		/* if ('post' == (o.type).toLowerCase()) */
	});
	
//});
