var perms = "user_about_me,user_activities,user_interests,user_likes,user_notes,user_photos,user_relationships,user_status,user_checkins,user_events,read_stream,publish_stream";

function FBInit()
{
	FB.init({appId:"206004039420053", status:true, cookie:true, xfbml:true});
	FB.getLoginStatus(FBOnGetLoginStatus);
}

function FBOnGetLoginStatus(response)
{
	if (!response)
		return;
	if (response.authResponse && !User.FB.authorized)
		FBOnLogin(response);
	else if (response.status && response.status.toLowerCase() == "notconnected" && !User.FB.denyautoauth)
		FBLogin();
	else if (User.FB.authorized && response.status && response.status.toLowerCase() == "unknown")
		FBLogOut();
}

function FBLogin()
{
	FB.login(FBOnLogin, {scope:perms});
}

function FBOnLogin(response)
{	
	if (!response)
		return;
	// После попытки авто авторизации посетитель нажимает отмена
	if (response.status && response.status.toLowerCase() == "notconnected")
	{
		var c = new Cookie();
		var val = "";
		var ignore = c.Get(User.DENY_AUTO_AUTH_COOKIE);
		if (ignore)
			val = ignore + "&";
		c.Set(User.DENY_AUTO_AUTH_COOKIE, val + "FB", (60 * 60 * 24 * 7));
	}
	if (!response.authResponse || !response.authResponse.signedRequest)
		return;
	User.FB.ID = response.authResponse.userID;
	////User.FB.perms = FBGetPerms(response.perms);
	FB.api("/me", function(me)
	{
		try
		{
			if (!me || !me.id)
				return;
			User.Authorized(User.FB, true);
			var params = {"first_name":encodeURIComponent(me.first_name), "last_name":encodeURIComponent(me.last_name), "photo":encodeURIComponent("http://graph.facebook.com/" + User.FB.ID + "/picture"), "name":encodeURIComponent(me.name), "js_render_headers":"1"};
			params.signedRequest = response.authResponse.signedRequest;
			params.uid = User.FB.ID;
			if (User.authParams["get_vote_video"])
				params.get_vote_video = User.authParams["get_vote_video"];
			if (User.authParams["get_favourite"])
				params.get_favourite = User.authParams["get_favourite"];
			for (var name in response.session)
				params[name] = response.session[name];
			APPResponse("authorize_fb", params, FBOnAuthComplete, true);
		}
		catch (err) {}
	});
}

function FBOnAuthComplete(response)
{
	ResetParams();
	var response = ParseHeaders(response);
	var authform = document.getElementById("authenticationform");
	if (authform)
		authform.innerHTML = response;
	if (window["authComplete"] && window["authComplete"] == "1")
	{
		AuthorizeCallback();
		if (Redirectable())
			RedirectAfterAuth();
	}
}

function FBLogOut()
{
	if (FB && FB.logout)
	{
		// Функция обратного вызова выполняется только когда залогинен на сайте FB.
		FB.logout(function()
		{
			if (User.FB.authorized)
				FBAuthLogout();
		});
		// При разлогинивании на сайте FB необходимо вызвать напрямую
		if (User.FB.authorized)
			FBAuthLogout();
	}
	return false;
}

function FBAuthLogout()
{
	User.FB.authorized = false;
	var authform = document.getElementById("authenticationform");
	if (authform)
	{
		var request = GetRequest();
		if (request)
		{
			request.onreadystatechange = function()
			{
				if (request.readyState == 4 && request.status == 200)
				{
					authform.innerHTML = request.responseText;
					ClearParams();
					AuthorizeCallback();
				}
			}
		}
		request.open("GET", "webservice.php?m=logout&t=fb&rnd=" + Math.ceil(Math.random() * 100000000));
		request.send(null);
	}
	// ...в противном случае просто редирект на страницу авторизации
	else
	{
		window.location.href = "register.php?type=authorize";
	}
}

function GetPermissions(callback)
{
	FB.api("/me/permissions", function(e)
	{
		if (!e || !e.data || !e.data[0])
			return;
		// содержит значения полей perms в формате: publish_stream=1 и т.д.
		e = e.data[0];
		User.FB.perms = [];
		for (var n in e)
			User.FB.perms.push(n);
		callback();
	});
}

function FBCheckPermission(perm, callback)
{
	if (!User.FB.perms || User.FB.perms.length == 0)
		GetPermissions(function()
		{
			if (!InArray(User.FB.perms, perm))
			{
				FB.login(callback, {"perms":perms});
			}
			else
				callback();
		});
	else if (!InArray(User.FB.perms, perm))
		FB.login(callback, {"perms":perms});
	else
		callback();
}

function FBShare()
{
	// Повтор вызовов для защиты от зацикливания функции
	if (!User.FB.authorized)
	{
		if (User.IsAuthorized())
			FBLogin(true);
		else
			FBLogin();
		return;
	}
	FBCheckPermission("publish_stream", FBShareInit);
	return false;
}

function FBShareInit(e)
{
	if (e && e.perms)
		User.FB.perms = e.perms.split(",");
	var p = User.FB.perms;
	if (!p || !InArray(p, "publish_stream"))
		return;
	var vo = null;
	CloseShare();
	var vid = (vo) ? vo.vid : _Video.id;
	var t = (vo) ? vo.title : GetInnerText(document.getElementsByTagName("h1")[0]);
	var img = (vo) ? ("http://" + Config.host + "/loadings/images/" + vid + ".jpg") : ((AddNotesParams && AddNotesParams.image) ? AddNotesParams.image : "");
	var url = "http://" + Config.host + "/comment.php?" + ((parseInt(_Video.id)) ? ('link=' + _Video.id) : ('v=' + _Video.ytid));
	FB.api("/me/feed", "post", {message:t, picture:img, link:url, name:"Смотреть видео", caption:t}, FBOnShare);
}

function FBOnShare(e)
{
	var m = document.getElementById("fbaddnotesimg");
	if (m)
		m.style.display = "block";
}

function FBAddNote()
{
	if (!User.FB.authorized)
	{
		if (User.IsAuthorized())
			FBLogin(true);
		else
			FBLogin();
		return;
	}
	var vo = null;
	CloseShare();
	var vid = (vo) ? vo.vid : _Video.id;
	var t = (vo) ? vo.title : GetInnerText(document.getElementsByTagName("h1")[0]);
	var img = (vo) ? ("http://" + Config.host + "/loadings/images/" + vid + ".jpg") : ((AddNotesParams && AddNotesParams.image) ? AddNotesParams.image : "");
	var url = "http://" + Config.host + "/comment.php?" + ((parseInt(_Video.id)) ? ('link=' + _Video.id) : ('v=' + _Video.ytid));
	FBCheckPermission("user_notes", function()
	{
		var html = '<a href="' + url + '">'
	+ '<img src="' + img + '" border="0" />'
	+ '</a>'
	+ '<div><a href="' + url + '">'
	+ t + '</a></div>';
		FB.api("/me/notes", "post", {subject:t, message:html}, function(e)
		{
			var m = document.getElementById("fbaddnotes");
			if (m)
				m.style.display = "block";
		});
	});
	return false;
}

function FBAddLink()
{
	if (!User.FB.authorized)
	{
		if (User.IsAuthorized())
			FBLogin(true);
		else
			FBLogin();
		return;
	}
	var vo = null;
	CloseShare();
	var vid = (vo) ? vo.vid : _Video.id;
	var t = (vo) ? vo.title : GetInnerText(document.getElementsByTagName("h1")[0]);
	var img = (vo) ? ("http://" + Config.host + "/loadings/images/" + vid + ".jpg") : ((AddNotesParams && AddNotesParams.image) ? AddNotesParams.image : "");
	var url = "http://" + Config.host + "/comment.php?" + ((parseInt(_Video.id)) ? ('link=' + _Video.id) : ('v=' + _Video.ytid));
	FBCheckPermission("read_stream", function()
	{
		FB.api("/me/links", "post", {message:t, name:t, picture:img, link:url}, function(e)
		{
			var m = document.getElementById("fbaddlink");
			if (m)
				m.style.display = "block";
		});
	});
	return false;
}

function FBGetPerms(p)
{
	var perms = [];
	if (p.constructor == String.prototype.constructor)
	{
		try
		{
			var p = JSON.parse(p);
		}
		catch(err) {}
	}
	if (p.constructor == Array.prototype.constructor)
		perms = p.split(",");
	else if (p.constructor == Object.prototype.constructor)
	{
		for (var n in p)
			perms = perms.concat(p[n]);
	}
	return perms;
}
