// Управление сервисами VK API и авторизация
var AuthCallback = {};
var undefined;
var vk_settings = 1 | 2 | 4 | 16 | 2048 | 8192;

function LoginMode()
{
	this.VK = "VK_LOGIN";
	this.SITE = "SITE_LOGIN";
	this.APPID = 2298716;
	this.BODY_ID = "BodyTable";
}
var MODE = new LoginMode();


function GetLoginMode()
{
	var vkNoAccountNode = document.getElementById("novk");
	// Переключение к авторизации в обычном режиме
	if (vkNoAccountNode && vkNoAccountNode.checked)
	{
		return MODE.SITE;
	}
	// Авторизация в режиме ВКонтакте
	else
	{
		return MODE.VK;
	}
}


function Authorize(request)
{
	try
	{
		if (GetLoginMode() == MODE.VK && (!request || !request.unite))
		{
			VK.Auth.login(VKAuthComplete, vk_settings);
		}
		else
		{
			if (!LogIn)
				return;
			LogIn(request);
		}
	}
	catch (e) { }
	return false;
}


function VKAuthComplete(response)
{
	if (response)
	{
		if (response.session)
		{
			if (response.session.user)
			{
				var params = [];
				for (var param in response.session)
					if (param != "user")
						params.push(encodeURIComponent(param) + "=" + encodeURIComponent(response.session[param]));
				for (param in response.session.user)
					if (!(param in response.session))
						params.push(encodeURIComponent(param) + "=" + encodeURIComponent(response.session.user[param]));
				// Передача данных об авторизовавшемся пользователе серверу
				if (!response.session.mid)
					return;
				User.vkid = response.session.mid;
				CallMethod("getProfiles", {uids:response.session.mid, fields:"photo,nickname"}, function (profiles)
				{
					if (!profiles.response || !profiles.response["0"])
						return;
					User.Authorized(User.VK, true);
					for (param in profiles.response["0"])
					{
						// Исключаем повторение параметров
						var continueParam = false;
						for (var ii = 0; ii < params.length; ii++)
							if (params[ii].indexOf(param) == 0)
							{
								continueParam = true;
								break;
							}
						if (continueParam)
							continue;
						params.push(encodeURIComponent(param) + "=" + encodeURIComponent(profiles.response["0"][param]));
					}
					var request = GetRequest();
					if (request)
					{
						request.onreadystatechange = function()
						{
							if (request.readyState == 4 && request.status == 200)
							{
								ResetParams();
								var response = ParseHeaders(request.responseText);
								var authform = document.getElementById("authenticationform");
								if (authform)
									authform.innerHTML = response;
								// Если авторизация через страницу регистрации, 
								// то пытаемся делать редирект только в случае успеха
								if (window["authComplete"] && window["authComplete"] == "1")
								{
									AuthorizeCallback();
									if (Redirectable())
										RedirectAfterAuth();
								}
							}
						}
					}
					var url = "webservice.php?m=authorize&js_render_headers=1";
					// Если есть поле get_vote_video в свойстве объекта User.authParams,
					// то необходимо получить сведения о голосовании за видео
					if (User.authParams["get_vote_video"])
						url += "&get_vote_video=" + User.authParams["get_vote_video"];
					if (User.authParams["get_favourite"])
						url += "&get_favourite=" + User.authParams["get_favourite"];
					url += "&vk_app_" + MODE.APPID + "=1&rnd=" + Math.ceil(Math.random() * 100000000) + "&" + params.join("&");
					request.open("GET", url);
					request.send(null);
				});
			}
		}
	}
}

function VKOnWall(callback)
{
	CloseShare();
	var linkid = (_Video.id != "") ? _Video.id : _Video.ytid;
	var h1Coll = document.getElementsByTagName("h1");
	var h1Node;
	if (h1Coll.length > 0)
		h1Node = h1Coll[0];
	var titletext = "Драки видео";
	if (h1Node)
		titletext = GetInnerText(h1Node);
	if (!callback)
		callback = function(e) 
		{
			var p = GetPlayer();
			if (p)
				p.style.display = "block";
		}
	VK.Api.call("photos.getWallUploadServer", {}, function(response)
	{
		if (!response.response || !response.response.upload_url)
			return;
		APPResponse("wallPost", {"upload_url":encodeURIComponent(response.response.upload_url), "linkid":linkid, "v":_Video.ytid}, function(o)
		{
			if (!o)
				return;
			var player = GetPlayer();
			if (player)
				player.style.display = "none";
			CallMethod("photos.saveWallPhoto", {"server":o.server, "photo":o.photo, "hash":o.hash}, function(response)
			{
				var title = titletext.replace(/([\[\]\|\'\"])/ig, '') + ' http://www.drakoff.ru/comment.php?' + ((parseInt(_Video.id)) ? ('link=' + _Video.id) : ('v=' + _Video.ytid));
				_captcha.owner = response.response[0];
				_captcha.title = title;
				_captcha.linkid = linkid;
				CallMethod("wall.post", {"owner_id":response.response[0]["owner_id"], "attachment":response.response[0]["id"], "message":title, "post_id":linkid}, callback);
			});
		});
	});
	return false;
}

function VKAddNotes()
{
	CloseShare();
	var linkid = (_Video.id != "") ? _Video.id : _Video.ytid;
	var h1Coll = document.getElementsByTagName("h1");
	var h1Node;
	if (h1Coll.length > 0)
		h1Node = h1Coll[0];
	var title = "Драки видео";
	if (h1Node)
		title = GetInnerText(h1Node);
	var text = '[[photo-23018743_223183222|noborder;95px;|http://www.drakoff.ru/comment.php?' + ((parseInt(_Video.id)) ? ('link=' + linkid) : ('v=' + _Video.ytid)) + ']]'
	+ '[http://www.drakoff.ru/comment.php?' + ((parseInt(_Video.id)) ? ('link=' + _Video.id) : ('v=' + _Video.ytid)) + '&u=' + User.uid + '|' + title.replace(/([\[\]\|\'\"])/ig, '') + ']';
	CallMethod("notes.add", {title:title, text:text}, function(r) {});
	return false;
}

function VKOnMyPage()
{
	CloseShare();
	var btn = document.getElementById("VKShareButton");
	if (VK.Share.click)
		VK.Share.click(0, btn.getElementsByTagName("a")[0]);
}

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


function CallMethod(method/* String */, param/* Object */, callback/* Function */)
{
	if (!param)
		param = {};
	//param.test_mode = "1";
	VK.Api.call(method, param, callback);
}

//
// Функция-заглушка для получения данных при вызове метода VK.Auth.getloginStatus
function OnVKStatus(response)
{
	if (!response)
		return;
	// Пользователь не залогинен
	if (!response.session && response.status.toLowerCase() != "connected")
	{
		if (User.VK.authorized)
		{
			VKLogOut();
			return;
		}
		// Не залогинен, проверяем с помощью auth.swf
		else
		{
			User.VK.autoauth_allow = true;
			VKGetStatusBySwf();
		}
	}
	// Функции VKAuthComplete следует передать объект, данные для авторизации в котором
	// сохранены в поле session.user
	else if (response && response.session)
	{
		// Избавляемся от повторного вызова веб-службы
		if (User.VK.authorized)
			return;
		var o = {};
		for (var param in response.session)
			o[param] = response.session[param];
		response.session.user = o;
		VKAuthComplete(response);
		return;
	}
	User.Authorized(User.VK);
}

function UserAuthorize()
{
	VK.Auth.getLoginStatus(OnVKStatus, true);
}

function VKGetStatusBySwf()
{
	var auth = GetAuth();
	if (!auth || !User.authSWF.ready || User.VK.auth_checked || !User.VK.autoauth_allow || User.VK.authorized || User.VK.denyautoauth)
		return;
	User.VK.auth_checked = true;
	auth.VKAuth(User.VK.OAUTH_APP_ID, "friends", "code", "VKOnAuthChecked");
}

function VKOnAuthChecked(status)
{
	if (status && status == "confirm")
		VK.Auth.login(VKOnAutoAuth, vk_settings);
}

function VKOnAutoAuth(response)
{
	if (!response)
		return;
	// Вход
	if (response.session && response.status && response.status.toLowerCase() == "connected")
	{
		VKAuthComplete(response);
	}
	// Запоминаем отказ на 2 недели
	else
	{
		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 + "VK", (60 * 60 * 24 * 7));
	}
}

function VKGetGroup()
{
	window.open("http://vkontakte.ru/id" + User.vkid + "#/drakoff", "", "location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,toolbar=yes");
	return false;
}
