$(document).ready
(
	function()
	{
		hs.showCredits = false;
		hs.outlineType = 'rounded-white';
		hs.graphicsDir = 'styles/highslide/graphics/';
			
		if(!$.browser.opera && !$.browser.mozilla)
		{
			$('.loginInput').keypress
			(
				function(e)
				{
					if(e.which == 13) //Enter
					{
						$(this).parent().parent().find('.passwordInput').focus();
					}
				}
			);

			$('.passwordInput').keypress
			(
				function(e)
				{
					if(e.which == 13) //Enter
					{
						$(this).parent().parent().submit();
					}
				}
			);
		}
		
		$('form.formLogin').live
		(
			'submit',
			function()
			{
				//submit формы, к которой принадлежит ссылка
				var sSalt = $(this).find('input[name="salt"]').val();
				var sPassword = $(this).find('input[name="password"]').val();
				var sMd5 = md5(sPassword);
				var sHash = md5(sMd5+sSalt);
				
				localStorage.setItem('md5', sMd5);
				
				$(this).find('input[name="password"]').val(sHash);
			}
		);
		
		$('input[placeholder], textarea[placeholder]')
		.each
		(	//костыль для ослов, которые не работают адекватно при отсутствии id
			//у input(ов) с плагином jquery.placeholder
			function()
			{
				var rnd = 0;
				do
				{
					rnd=Math.random().toString(32).replace(/\./,'');
				}
				while($('#input_' + rnd).length>0);
				$(this).attr('id', 'input_' + rnd);
			}
		)
		.placeholder();
	}
);

/**
 * Функция, требующая ввода логина и пароля от пользователя для входа в систему.
 * 
 * Проверяет, залогинен ли пользователь. Если пользователь не залогинен, то ему
 * выводится форма ввода логина и пароля.
 * 
 * @param {function} [pfSuccessFunction=undefined] функция, которая будет 
 *	вызвана после того, как он будет залогинен (т.е. он может предпринять несколько
 *	попыток)
 * @param {function} [pfErrorFunction=undefined] функция, которая будет вызвана
 *	в случае ошибки сервера; перед вызовом этой функции после возникновения 
 *	ошибки предпринимается ещё 10 попыток связи с интервалом в 5 секунд
 * @param {bool} [psMessage] сообщение для введения логина и пароля; отображается
 *	красным цветом и заменяет сообщение по умолчанию для первой попытки залогиниться
 *	(в случае неуспешной первой попытки второе и последующие сообщения получаются 
 *	от сервера)
 * @param {int} [piAttemptNumber] номер попытки (из 10 возможных) проверки авторизации;
 *	обычно не должен использоваться
 */
function requireLogin(pfSuccessFunction, pfErrorFunction, psMessage, piAttemptNumber)
{
	var loginAnswer = function(pfSuccessFunction, poAnswer, psMessage)
	{
		if(!poAnswer.success)
		{
			$('#loginPopupContent').removeClass('loading');
			$('#loginPopupContent').html(poAnswer.form);
			$('#loginPopupContent input[placeholder], #loginPopupContent textarea[placeholder]')
			.each
			(	//костыль для ослов, которые не работают адекватно при отсутствии id
				//у input(ов) с плагином jquery.placeholder
				function()
				{
					var rnd = 0;
					do
					{
						rnd=Math.random().toString(32).replace(/\./,'');
					}
					while($('#input_' + rnd).length>0);
					$(this).attr('id', 'input_' + rnd);
				}
			)
			.placeholder();
			if(poAnswer.changePass != undefined)
			{
				$('<div>')
				.append
				(
					$('<a>')
						.attr('href', poAnswer.changePass)
						.attr('target', '_blank')
						.text('Перед входом Вы должны сменить пустой пароль (кликните по ссылке)')
				)
				.prependTo($('#loginPopupContent form.formLogin'));
			}
			if(psMessage != undefined)
			{
				$('div#loginPopupContent form.formLogin div.errorMessage').text(psMessage);
			}
			$('div#loginPopupContent form.formLogin div.tryLogin a').corner('3px');
			$('div#loginPopupContent form.formLogin div.rememberPassword a').attr('target', '_blank');
			$('div#loginPopupContent form.formLogin').attr('action', $('div#loginPopupContent form.formLogin').attr('action') + '//1/1');
			$('div#loginPopupContent form.formLogin').unbind().ajaxForm
			(
				{
					type: 'POST',
					dataType:  'json',
					beforeSubmit: function(arr, poForm, options) 
					{
						var bResult;
						if($(poForm).find('.loginInput').val() == '')
						{
							bResult = false;
						}
						else
						{
							$(poForm).hide();
							$('#loginPopupContent').addClass('loading');
							bResult = true
						}
						return bResult;
						// The array of form data takes the following form: 
						// [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] 

						// return false to cancel submit                  
					},
					success: function(poAnswer)
					{
						loginAnswer(pfSuccessFunction, poAnswer);
					}
				}

			);
			
			//перестраиваем высоту диалога для посылки файла (send.tpl)
			var expander = hs.getExpander($('#loginPopupContent')[0]);
			if(expander != null)
			{
				expander.reflow();
			}
		}
		else
		{
			hs.close($('#loginPopupContent a')[0]);
			if(pfSuccessFunction != undefined)
			{
				pfSuccessFunction();
			}
		}
	}
	
	$.ajax
	(
		{
			type: 'GET',
			url: 'base/isSmbdLogin/1',
			success: function(poAnswer)
			{
				if(!poAnswer.success)
				{
					hs.htmlExpand
					(
						$('#login')[0],
						{
							contentId: 'loginPopup',
							width: 150,
							align: 'center',
							transitions: ["fade", 'fade'],
							outlineWhileAnimating: false,
							dimmingOpacity: 0.5
						}
					);
				}
				loginAnswer(pfSuccessFunction, poAnswer, psMessage);
			},
			error: function()
			{
				//при ошибке делаем 10 попыток с интервалом в 5 секунд (возможно,
				//сбой сети или обновление сайта)
				if(piAttemptNumber == undefined)
				{
					piAttemptNumber = 0;
				}
				piAttemptNumber++;
				if(piAttemptNumber <= 10)
				{
					window.setTimeout(requireLogin, 5000, pfSuccessFunction, pfErrorFunction, psMessage, piAttemptNumber);
				}
				else if(pfErrorFunction != undefined)
				{
					pfErrorFunction();
				}
			},
			dataType: 'json'
		}
	);
}

