/**
 * Auth
 * @uses jQuery Form
 * @uses Ajax
 * @uses Validator
 * @version 1.0.6
 */
Loader.scripts(["jquery-form", "ajax", "validator"], "auth_init");

var hints = new Array("login", "updated");

var login_handlers	= new Array();
var logout_handlers	= new Array();

function auth_init()
{
	auth_add_handlers(auth_elements_show, auth_elements_hide);

	$(".auth_form_show").live("click", auth_form_show);

	$("#logout_link").bind("click", auth_logout);
	$("#auth_form_hide_button").bind("click", auth_form_hide);

	$("#login_form").dialog(
	{
		title: "Авторизация",
		autoOpen: false,
		resizable: false,
		minHeight: 111
	});

	$("#login_form form").ajaxForm(
	{
		url: "/login_ajax/",
		beforeSubmit: Validator.reset,
		success: function(data)
		{
			Validator.map({'auth': "quick_login_errors"});
			auth_check_login(data);
		},
		dataType: "xml"
	});

	$("#login_menu form").ajaxForm(
	{
		url: "/login_ajax/",
		beforeSubmit: Validator.reset,
		success: function(data)
		{
			Validator.map({'auth': "main_login_errors"});
			auth_check_login(data);
		},
		dataType: "xml"
	});

	var blog_menu = $("#blog_menu");
	if (blog_menu.css("display") == "block")
	{
		blog_menu.hide();
		$(blog_menu.parent())
			.mouseover(function() {	blog_menu.show(); })
			.mouseout(function() { blog_menu.hide(); });
	}
}

function auth_add_handlers(login, logout)
{
	if (login != null)
		login_handlers.push(login);
	if (logout != null)
		logout_handlers.push(logout);
}

function auth_request_auth()
{
	if ($("#logout_menu:visible").length)
		return true;

	auth_form_show();
	return false;
}

function auth_form_show()
{
	$("#login_form").dialog("open");
	$("#password_quick").val("");
	$("#login_quick").val("").focus();
	return false;
}

function auth_form_hide()
{
	$("#login_form").dialog("close");
}

function auth_check_login(data, text_status)
{
	var redirect = $(data).find("redirect").text();
	if (redirect != "")
	{
		location.href = "http://www.softodrom.ru" + redirect;
		return;
	}

	if (!Ajax.check_error(data))
		return;

	for (i = 0; i < login_handlers.length; i++)
		login_handlers[i](data, text_status);
}

function auth_logout()
{
	$.post("/logout_ajax/", auth_check_logout);
	return false;
}

function auth_check_logout(data, text_status)
{
	for (var i = 0; i < logout_handlers.length; i++)
		logout_handlers[i](data, text_status);
}

function auth_elements_show(data)
{
	auth_form_hide();

	for (var i = 0; i < hints.length; i++)
	{
		var hint = $("#" + hints[i] + "_hint");
		if (!hint.length)
			continue;

		hint.text($(hints[i], data).text());
	}

	$("#logout_menu").show();
	$("#login_menu").hide();
}

function auth_elements_hide()
{
	$("#logout_menu").hide();
	$("#login_menu").show();
}

auth_init();
