//	Global variables
var TargetActions = { None: 0, GoToAdd: 1, FollowNews: 2 };
var targetAction = TargetActions.None;

//  Init SWF video player 
function initSwf(divId, videoFile, imageFile, width, height) {
	swfobject.embedSWF(
		"/img/player.swf",
		divId,
		width,
		height,
		"9.0.0",
		"/img/expressInstall.swf",
		{
			file: videoFile,
			image: imageFile,
			stretching: "fill",
			backcolor: "0x009900",
			frontcolor: "0xEEEEEE",
			lightcolor: "000000",
			screencolor: "0xFFFFFF",
			logo: "/img/small_logo.png"
		},
		{ allowfullscreen: "true", wmode: "opaque" }
	);
}

//  Init SWF video player 'autostart'
function initSwfAuto(divId, videoFile, width, height) {
	swfobject.embedSWF(
		"/img/player.swf",
		divId,
		width,
		height,
		"9.0.0",
		"/img/expressInstall.swf",
		{
			autostart: true,
			file: videoFile,
			stretching: "none",
			backcolor: "0x009900",
			frontcolor: "0xEEEEEE",
			lightcolor: "000000",
			screencolor: "0xFFFFFF",
			logo: "/img/small_logo.png"
		},
		{
			allowfullscreen: "true",
			wmode: "opaque",
			allowscriptaccess: "always"
		}
	);
}

//	Init fancybox video
function initFancyVideo(linkId, width, height, videoSrc) {
	$("#" + linkId).fancybox(
	{
		hideOnContentClick: false,
		padding: 0,
		margin: 0,
		width: width,
		height: height,
		autoDimensions: false,
		overlayOpacity: 0.2,
		href: videoSrc,
		type: "ajax",
		showCloseButton: true
	});
}

function loadinput() {
	var newval = $("#numgo").val();
	loadticker(newval);
}

function loadticker(ticnum) {
	var fticnum = add_commas(ticnum);
	var numheight = 18;
	addticker(fticnum);
	$("#num0").show();
	if (ticnum && ticnum != 0) {
		var s = String(fticnum);
		for (i=s.length;i>=0; i--)
		{
			var onum=s.charAt(i);
			$("#num"+i).attr("value", onum);
		}
		$(".counter-number").each( function() {
			var nval=$(this).attr("value");
			if (!isNaN(nval)) {
				var nheight = Number(nval)*numheight*-1;
				$(this).animate({ top: nheight+'px'}, 1500 );
			}
			if (nval==',') {
				$(this).animate({ top: '-180px'}, 1500 );
			}
		});
	}
}

function addticker(newnum) {
	var digitcnt = $(".counter-number").size();
	var nnum = String(newnum).length;
	var digitdiff = Number(nnum - Number(digitcnt));
	if (digitdiff <0) {
		var ltdig = (Number(nnum)-1);
		$(".counter-number:gt(" + ltdig + ")").remove();
	}

	for(i=1;i<=digitdiff;i++) {
		$(".counter-wrap").append('<div class="counter-number" id="num' + (Number(digitcnt+i-1)) + '">&nbsp;</div>');
	}
}

function add_commas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

//	Text symbol counter
function limitInputText(input, maxlen, left) {
	inputstr = input.value;
	strlen = inputstr.length;
	if (strlen > maxlen) {
		input.value = inputstr.substring(0, maxlen);
	}
	if (left = $("#" + left).get(0)) {
		if (left.tagName == "INPUT") {
			left.value = maxlen - input.value.length;
		}
		else {
			left.innerHTML = maxlen - input.value.length;
		}
	}
	return true;
}


/* AJAX helper utilities */

//	jQuery AJAX error handler
function onAjaxError(XMLHttpRequest, textStatus, errorThrown) {
	if (XMLHttpRequest != undefined) {
		var errorMessage;
		if (XMLHttpRequest.responseText.indexOf("<html") != -1) {
			//	responseText is html
			var posStart = XMLHttpRequest.responseText.indexOf("<title>");
			var posEnd = XMLHttpRequest.responseText.indexOf("</title>");
			if (posStart != -1 && posEnd != -1)
				errorMessage = XMLHttpRequest.responseText.slice(posStart + 7, posEnd - 1);
			else
				errorMessage = "Unknown AJAX error";
		}
		else {
			//	responseText is JSON object
			var error = eval("(" + XMLHttpRequest.responseText + ")");
			errorMessage = error.Message;
		}
		alert(errorMessage);
	}
}

//	Call web service with jQuery library
function callWebService(serviceUrl, serviceData, successMethod, isAsync) {
	$.ajax({
		type: "POST",
		url: serviceUrl,
		contentType: "application/json; charset=utf-8",
		data: serviceData,
		dataType: "json",
		success: successMethod,
		error: onAjaxError,
		async: isAsync
	});
}

//	Sync call web service with jQuery library
function syncCallWebService(serviceUrl, serviceData) {
	var result;
	callWebService(
		serviceUrl,
		serviceData,
		function (data) { result = eval(data).d; },
		false);
	return result;
}

//	jQuery plugin to center divs
jQuery.fn.center = function () {
	var w = $(window);
	this.css("position", "absolute");
	this.css("top", (w.height() - this.height()) / 2 + w.scrollTop() + "px");
	this.css("left", (w.width() - this.width()) / 2 + w.scrollLeft() + "px");
	return this;
}

function initWait() {
	$('#wait').ajaxStart(function () {
		$(this).center().show();
	}).ajaxComplete(function () {
		$(this).hide();
	});
}

/* Comments */

//	Login and return to add new comment
function loginToAddComment() {
	if (!checkAddCommentForm())
		return false;

	targetAction = TargetActions.GoToAdd;
	var returnParams = keepValuesAsQueryParams();
	showLoginDialog("Чтобы оставить отзыв, пожалуйста, зайдите на сайт.", returnParams, "add");
	return false;
}

//	Add new comment
function addComment(commentType, itemId) {
	var linkAdd = $("#linkAdd").get(0);
	linkAdd.disabled = true;

	if (checkAddCommentForm()) {
		var userName = "";
		var userNameControl = $("#userName");
		if (userNameControl.length) {
			userName = userNameControl.val().replace(/"/g, "\\\"");
		}

		var comment = $("#userComn").val().replace(/"/g, "\\\"");
		var rating = $("#rate-score").val();

		callWebService(
			'/webservices/WSComment.asmx/Add',
			'{ "commentType": "' + commentType + '", "itemId": "' + itemId + '", "userName": "' + userName + '", "comment": "' + comment + '", "rating": "' + rating + '" }',
			function(data) {
				result = eval(data).d;
				if (result.IsSuccess) {
					if (result.SpamFilterResult != 0) {
						linkAdd.disabled = false;
						$("#userComn").val("");
						showMessage(
							"info",
							getSpamMessage(result.SpamFilterResult),
							"msg");
					}
					else {
						var currentUrl = decodeURI(window.location);
						//var currentUrl = window.location;
						if (result.GoToUrl != currentUrl && result.GoToUrl != currentUrl + "#comm") {
							window.location = result.GoToUrl;
						}
						else {
							window.location.reload(true);
						}
					}
				}
				else {
					linkAdd.disabled = false;
					showMessage("error", result.ErrorMessage, "msg");
				}
			},
			false);
	}
	else {
		linkAdd.disabled = false;
	}
	
	return false;
}

//	Add new comment
function addCommentWithoutAuth(commentType, itemId) {
	var linkAdd = $("#linkAdd").get(0);
	linkAdd.disabled = true;

	if (checkAddCommentForm()) {
		var userName = "";
		var userNameControl = $("#userName");
		if (userNameControl.length) {
			userName = userNameControl.val().replace(/"/g, "\\\"");
		}

		var comment = $("#userComn").val().replace(/"/g, "\\\"");

		callWebService(
			'/webservices/WSComment.asmx/Add',
			'{ "commentType": "' + commentType + '", "itemId": "' + itemId + '", "userName": "' + userName + '", "comment": "' + comment + '", "rating": 0 }',
			function (data) {
				result = eval(data).d;
				if (result.IsSuccess) {
					if (result.SpamFilterResult != 0) {
						linkAdd.disabled = false;
						$("#userComn").val("");
						showMessage(
							"info",
							getSpamMessage(result.SpamFilterResult),
							"msg");
					}
					else {
						var currentUrl = decodeURI(window.location);
						//var currentUrl = window.location;
						if (result.GoToUrl != currentUrl && result.GoToUrl != currentUrl + "#comm") {
							window.location = result.GoToUrl;
						}
						else {
							window.location.reload(true);
						}
					}
				}
				else {
					linkAdd.disabled = false;
					showMessage("error", result.ErrorMessage, "msg");
				}
			},
			false);
	}
	else {
		linkAdd.disabled = false;
	}

	return false;
}

//	Comment form checker
function checkAddCommentForm() {
	var userName = $("#userName").get(0);
	var comment = $("#userComn").get(0);

	if (userName && !jQuery.trim(userName.value)) {
		alert("Укажите, пожалуйста, ваше имя");
		return false;
	}
	if (comment && !jQuery.trim(comment.value)) {
		alert("Вы пытаетесь добавить пустое сообщение. Пожалуйста, введите текст.");
		return false;
	}

	return true;
}

/* Competition answers */

//	Login and return to add new competition answer
function loginToAddCompAnswer() {
	targetAction = TargetActions.GoToAdd;
	var returnParams = keepValuesAsQueryParams();
	showLoginDialog("Зайдите на сайт чтобы участвовать в конкурсах, голосовать и обмениваться опытом.", returnParams, "add");
	return false;
}

//	Add new competition answer
function addCompAnswer(competitionId) {
	var linkAdd = $("#linkAdd").get(0);
	linkAdd.disabled = true;

	if (checkAddCompAnswerForm()) {
		var answer = $("#userComn").val().replace(/"/g, "\\\"");
		var notify = ($("#chNotify").val() == "on");

		callWebService(
			'/webservices/WSComment.asmx/AddCompetitionAnswer',
			'{ "competitionId": "' + competitionId + '", "answer": "' + answer + '", "notify": "' + notify + '" }',
			function (data) {
				result = eval(data).d;
				if (result.IsSuccess) {
					if (result.SpamFilterResult != 0) {
						linkAdd.disabled = false;
						$("#userComn").val("");
						showMessage(
							"info",
							getSpamMessage(result.SpamFilterResult),
							"msg");
					}
					else {
						window.location.reload(true);
					}
				}
				else {
					linkAdd.disabled = false;
					showMessage("error", result.ErrorMessage, "msg");
				}
			},
			false);
	}
	else {
		linkAdd.disabled = false;
	}

	return false;
}

//	Competition answer form checker
function checkAddCompAnswerForm() {
	var comment = $("#userComn").get(0);

	if (comment && !jQuery.trim(comment.value)) {
		alert("Вы пытаетесь добавить пустой ответ. Пожалуйста, введите текст.");
		return false;
	}

	return true;
}

//	Login and return to add vote for competition answer
function loginToVoteForCompAnswer() {
	showLoginDialog("Зайдите на сайт чтобы голосовать, участвовать в конкурсах и обмениваться опытом.");
	return false;
}

// Vote for competition answer
function voteForCompAnswer(commentId) {
	callWebService(
		'/webservices/WSComment.asmx/VoteForCompetitionAnswer',
		'{ "commentId": "' + commentId + '" }',
		function (data) {
			result = eval(data).d;
			if (result.IsSuccess) {
				alert("Спасибо, мы учли ваше мнение");
				$("#res_" + commentId).html(result.Rating).show();
			}
			else {
				alert(result.ErrorMessage);
			}
		},
		false);
}


//	Show messages
function showMessage(typeClass, message, containerId) {
	$("#" + containerId).attr("class", typeClass);
	$("#" + containerId).html(message);
}

function getSpamMessage(spamFilterResult) {
	var result = "Спасибо за ваш отзыв. Он пройдет проверку и обязательно появится на сайте, если будет соответствовать перечисленным выше правилам.<br/><br/>"
	if (spamFilterResult == 1)
		return result + "Пожалуйста, не просите чужие ключи от игр и не выкладывайте их сами. Это незаконно и нарушает Лицензионное соглашение на игру.";
	else if (spamFilterResult == 2)
		return result + "Пожалуйста, не добавляйте отзывы, состоящие из междометий, смайликов, одного слова или большого количества одинаковых символов. Всем будет гораздо интереснее, если вы выразите свое отношение к игре в развернутом виде.";
	else if (spamFilterResult == 3)
		return result + "Пожалуйста, не используйте в отзывах нецензурные и грубые выражения. Пишите так, чтобы это было интересно и полезно и другим игрокам.";
	else if (spamFilterResult == 4)
		return result + "Обратите внимание, отзывы нужны для обсуждения игр, а не для спама или рекламы.";
	else if (spamFilterResult == 5)
		return result + "Пожалуйста, не используйте в отзывах только БОЛЬШИЕ БУКВЫ, иначе у других посетителей может сложится мнение, что вы на них кричите.";
	else
		return "";
}

function getQASpamMessage(spamFilterResult, entityName) {
	var result = "Спасибо за ваш " + entityName + ". Он будет опубликован после проверки.<br/><br/>"
	if (spamFilterResult == 1)
		return result + "Пожалуйста, не просите чужие ключи от игр и не выкладывайте их сами. Это незаконно и нарушает Лицензионное соглашение на игру.";
	else if (spamFilterResult == 2)
		return result + "Пожалуйста, не добавляйте " + entityName  + "ы, состоящие из междометий, смайликов, одного слова или большого количества одинаковых символов. Всем будет гораздо интереснее, если вы выразите свое мнение в развернутом виде.";
	else if (spamFilterResult == 3)
		return result + "Пожалуйста, не используйте в " + entityName + "ах нецензурные и грубые выражения. Пишите так, чтобы это было интересно и полезно и другим игрокам.";
	else if (spamFilterResult == 4)
		return result + "Обратите внимание, " + entityName + "ы нужны для обсуждения игр, а не для спама или рекламы.";
	else if (spamFilterResult == 5)
		return result + "Пожалуйста, не используйте в " + entityName + "ах только БОЛЬШИЕ БУКВЫ, иначе у других посетителей может сложится мнение, что вы на них кричите.";
	else
		return "";
}

function imgSwap(oImg) {
	var strOver = "_on"			// image to be used with mouse over
	var strOff = "_off"			// normal image
	var strImg = oImg.src
	if (strImg.indexOf(strOver) != -1)
		oImg.src = strImg.replace(strOver, strOff);
	else
		oImg.src = strImg.replace(strOff, strOver);
}

function getParameterByName(name) {
	name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
	var regexS = "[\\?&]" + name + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if (results == null)
		return "";
	else
		return decodeURIComponent(results[1].replace(/\+/g, " "));
}

function removeParam(url, name) {
	var urlparts= url.split('?');
	if (urlparts.length >= 2) {
		var prefix = encodeURIComponent(name) + '=';
		var pars = urlparts[1].split(/[&;]/g);
		for (var i = pars.length; i-- > 0; )
			if (pars[i].lastIndexOf(prefix, 0) !== -1)
				pars.splice(i, 1);
		url = urlparts[0] + '?' + pars.join('&');
	}
	return url;
}


//	Delete comment
function deleteComment(commentId) {
	var result = confirm("Запись будет удалена. Продолжать?");
	if (result) {
		var wsRes = syncCallWebService("/webServices/WSComment.asmx/DeleteUserComment", '{ "commentId": "' + commentId + '" }');
		if (wsRes.IsSuccess) {
			location.reload(true);
		}
		else {
			alert(wsRes.ErrorMessage);
		}
	}
}

/*    Questions & Answers    */

//	Init "all questions" page
function qstInit(isReload) {
	var tbGame = $("#tbGame").autocomplete(
		"/GetGames.ashx",
		{
			minChars: 2,
			cacheLength: 50,
			mustMatch: true,
			autoFill: true,
			max: 50
		});
	if (isReload) {
		tbGame.result(function (event, data, formatted) {
			$("#qstGame").text(data[0]);
			window.location.href = jQuery.param.querystring(window.location.href, "qf=2&gid=" + data[1]);
		});
	}
	else {
		tbGame.result(function (event, data, formatted) {
			$("#hdGameId").val(data[1]);
		});
	}
}

//	Login and return to add question
function loginToAddQuestion() {
	if (!checkAddQuestionForm())
		return false;

	var returnParams = keepValuesAsQueryParams();
	showLoginDialog("Зайдите на сайт и вы сможете получать уведомления о новых ответах на ваш вопрос.", returnParams);
	return false;
}

//	Add new question
function addQuestion() {
	if (!checkAddQuestionForm())
		return false;
	var gameId = $("#hdGameId").val();
	return addQuestionInteranl(gameId);
}

//	Add new question
function addQuestionToGame(gameId) {
	if (!checkAddQuestionForm())
		return false;
	return addQuestionInteranl(gameId);
}

//	Add new question
function addQuestionInteranl(gameId) {
	var linkAdd = $("#linkAdd").get(0);
	linkAdd.disabled = true;

	var question = $("#qstSource").val().replace(/"/g, "\\\"");

	callWebService(
		'/webservices/WSQuestion.asmx/Add',
		'{ "gameId": "' + gameId + '", "questionText": "' + question + '" }',
		function (data) {
			result = eval(data).d;
			if (result.IsSuccess) {
				if (result.SpamFilterResult != 0) {
					linkAdd.disabled = false;
					$("#qstSource").val("");
					showMessage("info", getQASpamMessage(result.SpamFilterResult, "вопрос"), "msg");
				}
				else {
					var url = window.location.href;
					url = removeParam(url, "it");
					url = removeParam(url, "eid");
					if (getParameterByName("qf") == 3)
						url = removeParam(url, "qf");
					if (window.location.href != url)
						window.location.href = url;
					else
						window.location.reload(true);
				}
			}
			else {
				linkAdd.disabled = false;
				showMessage("error", result.ErrorMessage, "msg");
			}
		},
		false);

	return false;
}

//	Question form checker
function checkAddQuestionForm() {
	var gameId = $("#hdGameId").val();
	if (gameId == "") {
		alert("Пожалуйста, выберите название игры");
		$("#tbGame").focus();
		return false;
	}
	var question = $("#qstSource").get(0);
	if (question && !jQuery.trim(question.value)) {
		alert("Вы пытаетесь добавить пустой вопрос. Пожалуйста, введите текст.");
		$("#qstSource").focus();
		return false;
	}
	return true;
}

//	Login and return to add subscription
function loginToSubscribe() {
	showLoginDialog("Зайдите на сайт, чтобы мы знали, кому посылать уведомления о новых ответах.");
	return false;
}

// Change subscription state of current user
function toggleSubscription(questionId, link) {
	var linkObj = $(link);
	var isSubscribe = linkObj.hasClass("cmdSubs");
	var result = syncCallWebService(
		"/webservices/WSQuestion.asmx/SetSubscription",
		'{ "questionId": ' + questionId + ', "isSubscribe": ' + isSubscribe + ' }');
	if (result.IsSuccess) {
		if (isSubscribe)
			linkObj.addClass("cmdUnsubs").removeClass("cmdSubs").text("удалить подписку");
		else
			linkObj.addClass("cmdSubs").removeClass("cmdUnsubs").text("подписаться");
	}
	else {
		alert(result.ErrorMessage);
	}
}

//	Login and return to add answer
function loginToAddAnswer() {
	if (!checkAddAnswerForm())
		return false;

	var returnParams = keepValuesAsQueryParams();
	showLoginDialog("Зайдите на сайт чтобы отвечать на вопросы, голосовать и обмениваться опытом.", returnParams);
	return false;
}

//	Add new answer
function addAnswer(questionId) {
	var linkAdd = $("#linkAdd").get(0);
	linkAdd.disabled = true;

	if (checkAddAnswerForm()) {
		var answer = $("#ansSource").val().replace(/"/g, "\\\"");
		var notify = ($("#chNotify").val() == "on");

		callWebService(
			'/webservices/WSQuestion.asmx/AddAnswer',
			'{ "questionId": "' + questionId + '", "answerText": "' + answer + '", "notify": "' + notify +'" }',
			function (data) {
				result = eval(data).d;
				if (result.IsSuccess) {
					if (result.SpamFilterResult != 0) {
						linkAdd.disabled = false;
						$("#ansSource").val("");
						showMessage(
							"info",
							getQASpamMessage(result.SpamFilterResult, "ответ"),
							"msg");
					}
					else {
						if (getParameterByName("it") != "" || getParameterByName("eid") != "")
							window.location.href = jQuery.param.querystring(window.location.href, "it=&eid=");
						else
							window.location.reload(true);
					}
				}
				else {
					linkAdd.disabled = false;
					showMessage("error", result.ErrorMessage, "msg");
				}
			},
			false);
	}
	else {
		linkAdd.disabled = false;
	}

	return false;
}

//	Answer form checker
function checkAddAnswerForm() {
	var answer = $("#ansSource").get(0);
	if (answer && !jQuery.trim(answer.value)) {
		alert("Вы пытаетесь добавить пустой ответ. Пожалуйста, введите текст.");
		return false;
	}
	return true;
}

function doAnswer() {
	$("#linkDoAdd").hide();
	$("#doAns").show();
	$("#ansSource").focus();
}

function cancelAnswer() {
	$("#linkDoAdd").show();
	$("#doAns").hide();
}

function setBestAnswer(answerId, questionId) {
	var result = confirm("Этот ответ будет выбран как лучший, а вопрос будет закрыт. Продолжать?");
	if (result) {
		callWebService(
			'/webservices/WSQuestion.asmx/SetAsBest',
			'{ "answerId": "' + answerId + '", "questionId": "' + questionId + '" }',
			function (data) {
				result = eval(data).d;
				if (result.IsSuccess) {
					window.location.reload(true);
				}
				else {
					showMessage("error", result.ErrorMessage, "divAnsMsg");
				}
			},
			false);
	}
}


///////////////////////////////////////////////////////////////////////////////
//	User profile

//	"Country list is changed" event handler
function onCountryChange(ddlCountry, ddlCityId, tbCityId) {
	var ddlCountryElement = $("#" + ddlCountry.id);
	var ddlCityElement = $("#" + ddlCityId);

	var countryId = ddlCountryElement.val();

	//	Load full list of country, if need
	if (countryId == "-1") {
		//	Show full country list
		callWebService(
			"/webservices/WSUser.asmx/GetCountryList",
			"{}",
			function (data) {
				var value = eval(data).d;
				if (value.IsSuccess) {
					ddlCountryElement.html(value.Data);
				}
			},
			false);
	}

	//	Update list of city
	callWebService(
		"/webservices/WSUser.asmx/GetCityList",
		'{ "countryId": "' + countryId + '" }',
		function (data) {
			var value = eval(data).d;
			if (value.IsSuccess) {
				ddlCityElement.html(value.Data);
			}
		},
		false);

	ddlCityElement.val("0");
	onCityChange(ddlCityElement.get(0), tbCityId);
}

//	"City list is changed" event handler
function onCityChange(ddlCity, tbCityId) {
	var tbCityElement = $("#" + tbCityId);

	var cityId = ddlCity.value;
	if (cityId == "-1") {
		tbCityElement.css("display", "inline");
		tbCityElement.focus();
	}
	else {
		tbCityElement.val("");
		tbCityElement.css("display", "none");
	}
}

//	Initialization script
function Init(tbCityId, ddlCountryId) {
	$("#" + tbCityId).autocomplete(
		"/GetCities.ashx",
		{
			minChars: 2,
			cacheLength: 50,
			mustMatch: true,
			extraParams: { cid: function () { return $("#" + ddlCountryId).val(); } },
			autoFill: true,
			max: 500
		});
	}


///////////////////////////////////////////////////////////////////////////////
//	Open Api

var ResultType = { Ok: 1, Fail: 2, DoRegister: 3 };
var EnterMode = { Login: 1, Register: 2 };

function onVKLogin(response) {
	if (response.session == null)
		return false;

	var result = syncCallWebService(
	"/webservices/WSOpenApi.asmx/VKLogin",
	'{ "sessionParam": "' + jQuery.param(response.session) + '" }');

	if (result.ResultType == ResultType.Fail) {
		alert(result.ErrorMessage);
		return false;
	}
	else if (result.ResultType == ResultType.DoRegister) {
		VK.Api.call(
		"getProfiles",
		{ "uids": response.session.mid, "fields": "first_name,last_name,nickname,sex,bdate,city,country,timezone,photo,photo_medium,photo_big" },
		function (r) {
			if (r.response) {
				result = syncCallWebService(
					"/webservices/WSOpenApi.asmx/VKRegister",
					'{ "sessionParam": "' + jQuery.param(response.session) + '", "profileParam": "' + jQuery.param(r.response[0]) + '" }');
				if (result.ResultType == ResultType.Fail) {
					alert(result.ErrorMessage);
				}
				else {
					refreshPage();
				}
			}
		});
	}
	else {
		refreshPage();
	}
}

function onVKLogout() {
	if (VK.Auth.getSession() != null) {
		VK.Auth.logout(function () {
			window.location = "/logout";
		});
		return false;
	}
	return true;
}

function initMailRuAPI(initLoginButton) {
	mailru.loader.require('api', function () {
		mailru.connect.init('518833', 'b3d2c44e62b141b30f8f401d3fe00ebb');
		if (initLoginButton) {
			mailru.events.listen(mailru.connect.events.login, function (session) {
				var result = syncCallWebService(
					"/webservices/WSOpenApi.asmx/MMLogin",
					'{ "sessionParam": "' + jQuery.param(session) + '" }');
				if (result.ResultType == ResultType.Fail) {
					alert(result.ErrorMessage);
				}
				else if (result.ResultType == ResultType.Ok) {
					refreshPage();
				}
			});
		}
	});
}

function onMMLogout() {
	mailru.connect.getLoginStatus(function (session) {
		if (session != null) {
			mailru.events.listen(mailru.connect.events.logout, function () {
				window.location = "/logout";
			});
			mailru.connect.logout();
		}
		else {
			window.location = "/logout";
		}
	});
	return false;
}

/* Refresh page after user was logged via VK or MM */

function refreshPage() {
	var returnUrl = getParameterByName("returnUrl");
	if (returnUrl != "") {
		window.location = returnUrl;
	}
	else {
		var redirectUrl;
		switch (targetAction) {
			case TargetActions.FollowNews:
				redirectUrl = jQuery.param.querystring(window.location.href, "eid=5");
				break;
			case TargetActions.GoToAdd:
				redirectUrl = getRestoreUrl("add");
				break;
			default:
				redirectUrl = getRestoreUrl("");
				break;
		}
		window.location.href = redirectUrl;
	}
}

var TargetPages = { Undefined: 0, UserProfile: 1 };
var targetPage = TargetPages.Undefined;

//	Create return url with user input
function getRestoreUrl(anchor) {
	if (targetPage == TargetPages.UserProfile) {
		return "/userprofile.ashx";
	}

	var returnUrl = window.location.href;
	var returnParams = keepValuesAsQueryParams();
	if (returnParams != "")
		returnUrl = jQuery.param.querystring(returnUrl, returnParams);
	if (anchor != "")
		returnUrl = jQuery.param.fragment(returnUrl, anchor, 2);

	return returnUrl;
}

///////////////////////////////////////////////////////////////////////////////
//	Login page

function enterSwitch(enterMode) {
	if (enterMode == EnterMode.Login) {
		$("#logTab").addClass("current");
		$("#regTab").removeClass("current");
		$("#regMes").hide();
		$("input[type*=submit]").val("Вход");
		$("#hlRemPwd").show();
		$("#spShowPass").hide();
		showOrHidePassword(false);
		$("#notesPass").hide();
	}
	else if (enterMode == EnterMode.Register) {
		$("#logTab").removeClass("current");
		$("#regTab").addClass("current");
		$("#regMes").show();
		$("input[type*=submit]").val("Регистрация");
		$("#hlRemPwd").hide();
		$("#spShowPass").show();
		showOrHidePassword($("#cbShowPassword").get(0).checked);
		$("#notesPass").show();
	}
	$("#hfEnterType").val(enterMode);
}

function showOrHidePassword(isShow) {
	var pwd = $(".txtpassword").get(0);
	if (isShow) {
		changeInputType(pwd, "text");
	}
	else {
		changeInputType(pwd, "password");
	}
}

function changeInputType(oldObject, oType) {
	var newObject = document.createElement('input');
	newObject.type = oType;
	if (oldObject.size) newObject.size = oldObject.size;
	if (oldObject.value) newObject.value = oldObject.value;
	if (oldObject.name) newObject.name = oldObject.name;
	if (oldObject.id) newObject.id = oldObject.id;
	if (oldObject.className) newObject.className = oldObject.className;
	oldObject.parentNode.replaceChild(newObject, oldObject);
	return newObject;
}

/* Silverlight support */
function onSilverlightError(sender, args) {
	var appSource = "";
	if (sender != null && sender != 0) {
		appSource = sender.getHost().Source;
	}

	var errorType = args.ErrorType;
	var iErrorCode = args.ErrorCode;

	if (errorType == "ImageError" || errorType == "MediaError") {
		return;
	}

	var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n";

	errMsg += "Code: " + iErrorCode + "    \n";
	errMsg += "Category: " + errorType + "       \n";
	errMsg += "Message: " + args.ErrorMessage + "     \n";

	if (errorType == "ParserError") {
		errMsg += "File: " + args.xamlFile + "     \n";
		errMsg += "Line: " + args.lineNumber + "     \n";
		errMsg += "Position: " + args.charPosition + "     \n";
	}
	else if (errorType == "RuntimeError") {
		if (args.lineNumber != 0) {
			errMsg += "Line: " + args.lineNumber + "     \n";
			errMsg += "Position: " + args.charPosition + "     \n";
		}
		errMsg += "MethodName: " + args.methodName + "     \n";
	}

	throw new Error(errMsg);
}

/* User settings */

var SubscriptionState = { Subscribed: 1, Unsubscribed: 2 };
var SubscriptionType = { NewGame: 1, NewQuestion: 2 };

function changeSubscribeState(subscriptionType) {
	if ($("#msgImg").attr("src") == "/img/notify_on.png") {
		if (!confirm("Вы перестанете получать уведомления о новых игровых релизах. Продолжать?"))
			return false;
	}
	
	var result = syncCallWebService(
		"/webservices/WSUser.asmx/ChangeSubscriptionState",
		'{ "type": ' + subscriptionType + ' }');
	if (result.IsSuccess) {
		if (result.Data == SubscriptionState.Subscribed) {
			$("#msgText").text("Я получаю уведомления о новых играх");
			$("#msgLink").text("не присылать").addClass("fs12");
			$("#msgImg").attr("src", "/img/notify_on.png");
		}
		else {
			$("#msgText").text("Я не получаю уведомлений о новых играх");
			$("#msgLink").text("Хочу получать!").removeClass("fs12");
			$("#msgImg").attr("src", "/img/notify_off.png");
		}
	}
	else {
		alert(result.ErrorMessage);
	}
}

//	Login and return to follow game
function loginToFollowGame() {
	showLoginDialog("Зайдите на сайт, чтобы мы знали, кому посылать новости об этой игре.");
	return false;
}

function changeFollowGameSubscribeState(gameId) {
	if ($("#imgFollow").attr("src") == "/img/add_follow_on.png") {
		if (!confirm("Вы перестанете получать уведомления о новых событиях. Продолжать?"))
			return false;
	}

	var result = syncCallWebService(
		"/webservices/WSUser.asmx/ChangeFollowGameSubscriptionState",
		'{ "gameId": ' + gameId + '}');
	if (result.IsSuccess) {
		if (result.Data == SubscriptionState.Subscribed) {
			$("#lnFollow").text("Я слежу за игрой").addClass("gr").hover(function () { $(this).text("Больше не следить").removeClass("gr"); }, function () { $(this).text("Я слежу за игрой").addClass("gr"); });
			$("#imgFollow").attr("src", "/img/add_follow_on.png");
		}
		else {
			$("#lnFollow").text("Хочу следить за игрой").removeClass("gr").unbind();
			$("#imgFollow").attr("src", "/img/add_follow.png");
		}
	}
	else {
		alert(result.ErrorMessage);
	}
}

/* Dream farms script */
function initDFVideo() {
	initSwf(
		"video",
		"http://dreamfarm.ru/media/360x240_RUS.flv",
		"/img/dreamfarm/superferma-video.jpg",
		360,
		260);
}

/* Top games sidebar module */
var GameTopType = { Popular: 1, New: 2, Announce: 3 };
function fillTopList(gameTopType) {
	$("#topCont").load("/GetTopGames.ashx?gtt=" + gameTopType);
	var headerHtml;
	if (gameTopType == GameTopType.New)
		headerHtml = 'Новые игры \\ <a href="javascript://void(0);" onclick="fillTopList(3);return false;">Анонсы</a>';
	else
		headerHtml = '<a href="javascript://void(0);" onclick="fillTopList(2);return false;">Новые игры</a> \\ Анонсы';
	$("#topHeader").html(headerHtml);

}

/* Find games page*/
function findInit() {
	$("#tbFind")
		.autocomplete(
			"/GetGames.ashx",
			{
				minChars: 2,
				cacheLength: 50,
				mustMatch: false,
				autoFill: true,
				max: 50
			})
		.Watermark("Начните вводить название игры...");
}

/* Rating page */
function onGenreChange(ddlGenre) {
	var ddlGenreElement = $("#" + ddlGenre.id);
	var genreId = ddlGenreElement.val();
	var redirectUrl = window.location.href;
	if (genreId == 0)
		redirectUrl = removeParam(redirectUrl, "gnd");
	else
		redirectUrl = jQuery.param.querystring(redirectUrl, "gnd=" + genreId);
	window.location.href = redirectUrl;
}

/*  JPlayer  */
var playerAlreadyInit = false;
function initSoundtracks(gameId) {
	$("#jquery_jplayer_1").jPlayer({
		ready: function () {
			if (playerAlreadyInit) return;
			playerAlreadyInit = true;
			$("#jp_interface_1 .jp-previous").click(function () {
				playPrev(gameId);
				$(this).blur();
				return false;
			});
			$("#jp_interface_1 .jp-next").click(function () {
				playNext(gameId);
				$(this).blur();
				return false;
			});
			playTrack(0, gameId, false);
		},
		ended: function () {
			playNext(gameId);
		},
		swfPath: "/img",
		supplied: "mp3,oga",
		preload: "auto"
	});
}

function playNext(gameId) {
	var currrentIndex = $("#jquery_jplayer_1").data("trackIndex");
	var index = (currrentIndex + 1 < playList.length) ? currrentIndex + 1 : 0;
	playTrack(index, gameId, true);
}

function playPrev(gameId) {
	var currrentIndex = $("#jquery_jplayer_1").data("trackIndex");
	var index = (currrentIndex - 1 >= 0) ? currrentIndex - 1 : playList.length - 1;
	playTrack(index, gameId, true);
}

function playTrack(index, gameId, auto) {
	$("#jp_playlist_1").text(playList[index].name);
	var jAudio = $("#jquery_jplayer_1");
	jAudio.data("trackIndex", index).jPlayer("setMedia", playList[index]);
	$("#aLoad").attr("href", "/GetSoundtrack.ashx?gid=" + gameId + "&sti=" + index);
	if (auto) jAudio.jPlayer("play");
}

/*  JPlayer /end  */

/*  "Follow news" feathure  */

//	Init "Follow news" link
function initFollow() {
	$("#hlFollow").attr("href", "javascript://void(0)");
}

//	Do "Follow site" action
function doFollowNews() {
	var result = syncCallWebService(
		'/webservices/WSUser.asmx/ChangeSubscriptionState',
		'{ "type": ' + SubscriptionType.NewGame + ' }');
	if (result.IsSuccess) {
		$("#newsFollow").hide();
		showAlert("Теперь вы будете получать уведомления о новых играх.<br/><br/>Изменить настройки уведомлений вы можете на странице вашего профайла.", "/img/add_follow.png");
	}
	else {
		alert(result.ErrorMessage);
	}
}

//	Login and return to do "Follow news" action
function loginToFolowNews() {
	targetAction = TargetActions.FollowNews;
	showLoginDialog("Зайдите на сайт, чтобы мы знали, кому сообщать о новых играх\nсразу же в момент появления релиза.", "eid=5");
	return false;
}

/*  "Follow news" feathure /end */

/*  LoginDialog functions  */

//	Show "Login" dialog
function showLoginDialog(caption, returnParams, returnFragment) {
	var returnUrl = window.location.href;
	if (typeof returnParams !== 'undefined' && returnParams !== "")
		returnUrl = jQuery.param.querystring(returnUrl, returnParams);
	if (typeof returnFragment !== 'undefined' && returnFragment !== "")
		returnUrl = jQuery.param.fragment(returnUrl, returnFragment, 2);
	var loginUrl = $("#logDlgLoginUrl").val();
	loginUrl = jQuery.param.querystring(loginUrl, "returnUrl=" + encodeURIComponent(returnUrl));
	$("#logDlgLogin").attr("href", loginUrl);
	$("#logDlgCaption").text(caption);
	$("#logDlgArea").dialog({ width: 580 });
}

/*  LoginDialog functions /end  */


//	Show alert
function showAlert(caption, imageSrc) {
	$("#alertDlgCaption").html(caption);
	if (typeof imageSrc !== 'undefined' && imageSrc !== "") {
		$("img", "#alertDlgArea").attr("src", imageSrc).show();
	}
	else {
		$("img", "#alertDlgArea").attr("src", "").hide();
	}
	$("#alertDlgArea").dialog({
		buttons: { Ok: function () { $(this).dialog("close"); } }
	});
}

//	Get Form values as query parameters to restore then
function keepValuesAsQueryParams() {
	var returnParams = "";
	var valueToRestore = tryGetValue("textarea.restore");
	if (valueToRestore != "")
		returnParams += "it=" + encodeURIComponent(valueToRestore) + "&";
	valueToRestore = tryGetValue("#hdGameId");
	if (valueToRestore != "")
		returnParams += "gid=" + valueToRestore + "&";
	if (returnParams != "")
		returnParams += "eid=4";
	return returnParams;
}

//	Try to get input value
function tryGetValue(expr) {
	var input = $(expr);
	if (input.length)
		return input.val();
	else
		return "";
}

//	Init AddThis module
function initAddThis(url, title, description) {
	addthis.toolbox(
		"div.social",
		{
			pubid: "ra-4e75c1e67b263b7f",
			ui_open_windows: true,
			ui_language: "ru",
			data_track_clickback: true
		},
		{
			"url": url,
			"title": title,
			"description": description
		});
	}

//	Alamandi sxripts
function initAlmVideo() {
	initSwf(
	"video",
	"http://alamandi-game.ru/img/alamandi/alamandi.flv",
	"/img/alamandi/alamandi-video.png",
	640,
	457);
}
