var intervalID;
var counter = 0; // Сч
// ётчик, нужен для lastping

var seenMessages = []; // Уже показанные сообщения 

function authenticatedUser()
{
	jQuery.post('server/Auth.php', { act : 1, sess_id: document.session_id },
		function(res) 
		{
			if(res.auth)
			{
				$('#user_login').html(res.username);
				changeForm('user','authenticated_user');
				changeForm('user_upper','logged_user');
				
				$('#logged_user a').click(
					function()
					{
						$("#user_info_dialog").dialog("open");
					}
				);
				
				// Подключение диалога администратора

				if(res.username == 'admin')
				{
					$('.admin').css('display', 'inline');
				}
				
				intervalID = setInterval('ping()', 60000); // Пинг раз в минуту
				ping();
			}				
			else 
			{								
				changeForm("user",'login_form');
				changeForm("user_upper", "login_and_reg");
				
				$('#left_block').hide();
			}
		},
		"json"
	);
}

function ping()
{
	jQuery.post('server/Auth.php', { act : 8, num : counter, sess_id: document.session_id }, // Ping
		function(r)
		{
			for(var i = 0; i < r.notifications.length; i++)
			{
				if(seenMessages.indexOf(r.notifications[i].id) == -1)
				{				
					$.Growl.show({
						'title'  : r.notifications[i].title,
						'message': r.notifications[i].text,
						'icon'   : r.notifications[i].icon,
						'timeout': r.notifications[i].timeout,
						'arg'	 : r.notifications[i].id,
						'onclose': 
							function(id) 
			        	 	{
								jQuery.post('server/Auth.php', { act : 9, id : id, sess_id: document.session_id }, // NotificationSeen
									function()
									{
										seenMessages.splice(seenMessages.indexOf(id), 1); // Удаление элемента (только когда пришёл ответ с сервера)
									}
								);
							}
			        });
					
					seenMessages.push(r.notifications[i].id);
				}
			}
		
			counter++;
		},
		'json'
	);
}

function login()
{
	jQuery.post('server/Auth.php', { act : 6, uname : $('#username').val(), sess_id: document.session_id }, // GetN
		function(N)
		{
			if(N == -1)
			{
				alert("Ошибка входа, проверьте верность введённых данных!");
				return;
			}
		
			var p = $('#password').val();
			
			for(var i = 0; i < N-1; i++) // Вычисляем md5-хеш N-1 раз
				p = jQuery.md5(p);
			
			jQuery.post('server/Auth.php', { act : 2, uname : $('#username').val(), pwd : p, sess_id: document.session_id }, // LoginUser
				function(res) 
				{
			  		if(res.auth)
					{		
						$('#authenticated_username').html($('#username').val());		
						$('#user_login').html(res.username);
						changeForm('user','authenticated_user');
						changeForm('user_upper','logged_user');
						
						$('#user_dialog').dialog('close');
						
						$('#logged_user a').click(
							function()
							{
								$("#user_info_dialog").dialog("open");
							}
						);
						
						// Подключение диалога администратора

						if(res.username == 'admin')
						{
							$('.admin').css('display', 'inline');
						}
						
						intervalID = setInterval('ping()', 60000); // Пинг раз в минуту
						ping();
					}
					else
					{
						alert("Ошибка входа, проверьте верность введённых данных!");
					}
				},
				"json"
			);
		},
		"json"
	);
}	

function logout()
{
	jQuery.post('server/Auth.php', { act : 3, sess_id: document.session_id },
		function() 
		{
			changeForm('user','login_form');
			changeForm('user_upper','login_and_reg');
			
			showDescription();
			
			$('#left_block').hide();
			
			$('#username').val(''); 
			$('#password').val('');
			
			$('.admin').css('display', 'none');
			
			$('#project_menu').hide();
			
			window.location.hash = '#';
		}
	);

	clearInterval(intervalID);
}

function validatePassword(passwd)
{
	// Валидация пароля по шаблону
	
	if(passwd.length < 6) 
	{
		return 'Пароль не может быть короче 6 символов!';
	}
	
	return '';
}

function register()
{
	if($('#password_reg').val() != $('#password_reg2').val())
	{
		alert('Пароли не совпадают!');
		return;
	}
	
	err = validatePassword($('#password_reg').val());
	
	if(err != '')
	{
		alert(err);
		return;
	}
	
	jQuery.post('server/Auth.php', { act : 6, uname : '', sess_id: document.session_id }, // GetN('') - означает N по умолчанию
		function(N)
		{
			var p = $('#password_reg').val();
			
			for(var i = 0; i < N; i++) // Вычисляем md5-хеш N раз
				p = jQuery.md5(p);
			
			jQuery.post('server/Auth.php', { act : 5, uname : $('#username_reg').val(), pwd : p, sess_id: document.session_id }, // RegisterUser
				function(res) 
				{			
					if(res.success)
					{
						alert('Регистрация прошла успешно!');
						changeForm('user','login_form');
						
						$('#username_reg').val('');
						$('#password_reg').val('');
						$('#password_reg2').val('');
					}
					/*else if(res.invalid)
					{
						alert('Некорректное имя пользователя!');
					}*/
					else if(!res.empty)
					{
						alert('Имя пользователя уже занято!');
					}
					else
					{
						alert('При попытке зарегистрироваться произошла неизвестная ошибка! Сообщите администратору.');
					}
				},
				"json"
			);
		},
		"json"
	);
}				

function checkAvailability(username)
{
	jQuery.post('server/Auth.php', { act : 4, uname : username, sess_id: document.session_id },
		function(res) 
		{
	  		if(res.empty)
	  		{
				$('#validate1').attr('src','images/icons/tick.png');
				$('#validate1').attr('title', 'Имя пользователя доступно!');
				$('#validate1').tooltip({showURL: false});
	  		}
			else
			{
				$('#validate1').attr('src','images/icons/cross.png');
				$('#validate1').attr('title', 'Имя пользователя уже занято!');
				$('#validate1').tooltip({showURL: false});
			}
		},
		"json"
	);											
}

function updatePassword()
{
	if($('#password_update').val() != $('#password_update2').val())
	{
		alert('Пароли не совпадают!');
		return;
	}
	
	err = validatePassword($('#password_update').val());
	
	if(err != '')
	{
		alert(err);
		return;
	}
	
	jQuery.post('server/Auth.php', { act : 6, uname : '', sess_id: document.session_id }, // GetN('') - означает N по умолчанию
		function(N)
		{
			var p = $('#password_update').val();
			
			for(var i = 0; i < N; i++) // Вычисляем md5-хеш N раз
				p = jQuery.md5(p);
			
			jQuery.post('server/Auth.php', { act : 7, pwd : p, sess_id: document.session_id }, // UpdatePassword
				function(res) 
				{			
					if(res)
					{
						$('#password_update').val('');
						$('#password_update2').val('');
						$("#user_info_dialog").dialog("close");
						
						alert('Обновление пароля прошло успешно!');
					}
					else
					{
						alert('При попытке обновления пароля произошла ошибка!');
					}
				},
				"json"
			);
		},
		"json"
	);
}

function validation(field1, field2, validation1, validation2)
{
	field1.keyup(
		function()
		{
			err = validatePassword(field1.val());
			
			if(err != '')
			{
				validation1.attr('src','images/icons/cross.png');
				validation1.attr('title', err);
				validation1.tooltip({showURL: false});
			}
			else
			{
				validation1.attr('src','images/icons/tick.png');
				validation1.attr('title', 'Корректный пароль!');
				validation1.tooltip({showURL: false});
			}
			
			if(field1.val() == field2.val())
			{
				validation2.attr('src','images/icons/tick.png');
				validation2.attr('title', 'Пароли совпадают!');
				validation2.tooltip({showURL: false});
			}
			else
			{
				validation2.attr('src','images/icons/cross.png');
				validation2.attr('title', 'Пароли не совпадают!');
				validation2.tooltip({showURL: false});
			}
		}
	);

	field2.keyup(
		function()
		{
			if(field1.val() == field2.val())
			{
				validation2.attr('src','images/icons/tick.png');
				validation2.attr('title', 'Пароли совпадают!');
				validation2.tooltip({showURL: false});
			}
			else
			{
				validation2.attr('src','images/icons/cross.png');
				validation2.attr('title', 'Пароли не совпадают!');
				validation2.tooltip({showURL: false});
			}
		}
	);
}

