//пути к картинкам
var addToListPicture = "/i/track_short_do.png";
var deleteFromListPicture = "/i/track_short_undo.png";
var importantPicture = "img/emblem-important.png";
var successPicture = "/i/track_short_inlist.gif";
var errorPicture = "img/dialog-error.png";
var processingPicture = "/i/tracker_work.gif";

//URL для AJAX запросов
var ServerScriptUrl = "http://www.ag.ru/ajax/";


//константы для общения с сервером
var ServerGameFoundedCount = 0;
var ServerGameFoundedHash = {};
var ServerGameFoundedTrackedHash = {};
var ServerGameFoundedIdArray = [];
var ServerGameFoundedPage = 1;
var ServerGameLoadCount = 0;
var ServerGameLoadHash = {};
var ServerGameLoadIdArray = [];
var ServerAddResponse = false;
var ServerAddResponseGameId = -1;
var ServerDeleteResponse = false;
var ServerDeleteResponseGameId = -1;
var ServerErrorMessage = '';


var ClientDoAdd = 0;


var myGlobalHandlers = {
		onCreate: function(){
			Element.show('progress');
		},
		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Element.hide('progress');
			}
		}
};

function MakeRequest(url,isGetSymbols,params,options,isRandomActive){
		if (isRandomActive) params+="&rand="+Math.random()+'aab'+Math.random();
		var trueParams = (!isGetSymbols && (params[0] != "?")) ? "?"+params : params;
		options["parameters"] = trueParams; 
		return new Ajax.Request(url,options);
		
}

function SearchGamesOnServer(page){
	ProcessAction();
	Ajax.Responders.register(myGlobalHandlers);

	if (!page) page = 1;
	var params = Form.serialize("searchForm")+'&page='+page+RandTail();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromSearch,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
	});

}

function ShowResponseFromSearch(originalRequest,json)
{
	if(Ajax.activeRequestCount == 0){
		Element.hide('progress');
	}
	eval(originalRequest.responseText);
	if (ServerGameFoundedCount >=0) {
		ProcessSearchResponse();
	}
}
function ReportErrorFromSearch(request)
{
	alert('Произошла ошибка при обращении к серверу. Попробуйте еще раз через несколько секунд');	
}
function ShowError(msg)
{
	alert(msg);	
}
function ReportExceptionFromSearch (request, exc)
{
	alert("exception:\n"+exc.message);
}

function ProcessSearchResponse ()
{
	$("FoundedResults").style.display = 'block';

	if(ServerGameFoundedCount > 0){
	    var html = "<table border=0 width=100% cellpadding=1 cellspacing=0  id=list_table>";
		var cnt=1;
		for(i=0;i<ServerGameFoundedIdArray.length;i++){
			var gameId = ServerGameFoundedIdArray[i];
			html = html + '<tr id=game_id'+cnt+'><td class=tr'+cnt+'c><a class="sb os" target=_blank href=/games/'+gameId+'>'+(ServerGameFoundedHash[gameId])+'</a></td><td class=tr'+cnt+'d1 title="Занести игру в список отслеживаемых" id="finded_'+gameId+'"><div id="add_'+gameId+'" style="width:20px;"></div></td></tr>';
			cnt++;
			if (cnt > 2) cnt=1;
		}
		html = html + "</table>";
		$("GamesFromServer").innerHTML = html;
		for(i=0;i<ServerGameFoundedIdArray.length;i++){
			var gameId = ServerGameFoundedIdArray[i];
			$('add_'+gameId).style.backgroundImage = 'url('+(ServerGameFoundedTrackedHash[gameId]?successPicture:addToListPicture)+')';
			eval("onClickFunction = function() { ServerAddRequest("+gameId+"); }");
			Event.observe("add_"+gameId, 'click', onClickFunction, false);
		}
	}
	else{
		$("GamesFromServer").innerHTML = "<div class='p10 s2 j'>Ничего не найдено. Попробуйте сформулировать более точный поисковый запрос, если уверены, что такая игра должна быть в нашей базе.</div>";
	}

	if(ServerGameFoundedCount > 20){
		$("FoundedCount").innerHTML = 'Найдено игр: <b>'+ServerGameFoundedCount + '</b>, на странице показано максимум <b>20</b>.'
	}
	else{
		$("FoundedCount").innerHTML = 'Найдено игр: <b>'+ServerGameFoundedCount + '</b>';
	}
	$("FoundedPages").innerHTML = BuildSearchPages(ServerGameFoundedPage,Math.floor(ServerGameFoundedCount / 20) + (ServerGameFoundedCount % 20?1:0));

}

//'<b>1</b> <a href=/files/videos/nhl_07/p2 class=sb>2</a>'
function BuildSearchPages(page,total)
{
	if(total == 1 || !total){
		return "<b>1</b>";
	}

	var html = '';
	for(i=1;i<=total;i++){
	    if(i == page){
			html = html+"<b>"+i+"</b> ";
	    }
	    else{
			html = html+"<a OnClick='SearchGamesOnServer("+i+");return false;' href=#"+i+" class=sb>"+i+"</a> ";
	    }
	}
	return html;
}

//Добавляем игру
function ServerAddRequest(id)
{	
	ProcessAction();
	$('add_'+id).style.backgroundImage = 'url('+processingPicture+')';
	
	Ajax.Responders.unregister(myGlobalHandlers);

	var params = "code=ag.tracker&action=add&gameId="+id+"&rand="+Math.random()+'12'+Math.random();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromAdd,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromAdd (originalRequest,json)
{
	ServerAddResponseGameId = -1;
	eval(originalRequest.responseText);	
	if ($("added_"+ServerAddResponseGameId)){
			$('add_'+ServerAddResponseGameId).style.backgroundImage = 'url('+successPicture+')';
	} else if (ServerAddResponse ) {
		$('add_'+ServerAddResponseGameId).style.backgroundImage = 'url('+successPicture+')';
		
			var newTr = document.createElement("tr");
			newTr.id = "added_"+ServerAddResponseGameId;
			var newTd = document.createElement("td");

			newTd.className='tr'+1+'c';

			newTd.innerHTML = '<a target=_blank class="sb os" href=/games/'+ServerAddResponseGameId+'>'+ServerGameFoundedHash[ServerAddResponseGameId]+'</a>';
			newTr.appendChild(newTd);

			newTd = document.createElement("td");
			newTd.className='tr'+1+'d2';
			newTd.innerHTML = '<div id="delete_'+ServerAddResponseGameId+'" style="width:20px;"></div>';
			newTr.appendChild(newTd);
			
			$("ChosenGames").appendChild(newTr);

		eval("onClickFunction = function() {ServerDeleteRequest("+ServerAddResponseGameId+");}");
		Event.observe("delete_"+ServerAddResponseGameId, 'click', onClickFunction, false);
		ServerGameLoadCount++;
		$("TrackCount").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount2").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount3").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
	} 
	else {
		$('add_'+ServerAddResponseGameId).style.backgroundImage = 'url('+addToListPicture+')';
		if(ServerErrorMessage.length){
			ShowError(ServerErrorMessage);
		}
	}
}

//Удаляем игру
function ServerDeleteRequest(id)
{	
	ProcessAction();
	$('delete_'+id).style.backgroundImage = 'url('+processingPicture+')';
	
	Ajax.Responders.unregister(myGlobalHandlers);
	var params = "code=ag.tracker&action=delete&gameId="+id+RandTail();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromDelete,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromDelete (originalRequest,json)
{
	ServerDeleteResponseGameId = -1;
	eval(originalRequest.responseText);	
	if (ServerDeleteResponse) {
		if ($("finded_"+ServerDeleteResponseGameId))
			$('add_'+ServerDeleteResponseGameId).style.backgroundImage = 'url('+addToListPicture+')';
		$("ChosenGames").removeChild($("added_"+ServerDeleteResponseGameId));
		ServerGameLoadCount--;
		$("TrackCount").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount2").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount3").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
	} else {
		$('delete_'+ServerDeleteResponseGameId).style.backgroundImage = 'url('+deleteFromListPicture+')';
	}
}

function LoadSelectedGamesFromServer()
{
	ProcessAction();
	$("GamesLoading").style.visibility="visible";
	$("GamesLoading2").style.visibility="visible";
	var params = "code=ag.tracker&action=loadtracker"+RandTail();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromLoadGames,
			onFailure: ReportErrorFromSearch
		});
}


function ShowResponseFromLoadGames(originalRequest,json){
		eval(originalRequest.responseText);
		$("GamesLoading").style.display = "none";
		$("GamesLoading2").style.display = "none";
		var cnt=1;
		for(i=0;i<ServerGameLoadIdArray.length;i++){
			var gameId = ServerGameLoadIdArray[i];

			var newTr = document.createElement("tr");
			newTr.id = "added_"+gameId;
			var newTd = document.createElement("td");

			newTd.className='tr'+cnt+'c';

			newTd.innerHTML = '<a target=_blank class="sb os" href=/games/'+gameId+'>'+ServerGameLoadHash[gameId]+'</a>';
//			newTd.style.width='';

			newTr.appendChild(newTd);

			newTd = document.createElement("td");
			newTd.className='tr'+cnt+'d2';

			
			newDiv = document.createElement("div");
			newDiv.id = 'delete_'+gameId;

			newTd.appendChild(newDiv);
			newDiv.style.width = '20px';
			
//			newTd.innerHTML = '<div id="delete_'+gameId+'" style="width:20px;"></div>';
			newTr.appendChild(newTd);
			
			$("ChosenGames").appendChild(newTr);

			var onClickFunction = 0;
			eval("onClickFunction = function() {ServerDeleteRequest("+gameId+");}");
			Event.observe("delete_"+gameId, 'click', onClickFunction, false);
			cnt++;
			if (cnt > 2) cnt=1;
		}
		$("TrackCount").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount2").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		$("TrackCount3").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
		var newTr = document.createElement("tr");
		$("ChosenGames").appendChild(newTr);
		$("ChosenGames").removeChild(newTr);
}
function RandTail()
{
		return '&rand='+Math.random()+'12'+Math.random();
}


//Добавляем игру
function ServerAddRequest2(id)
{	
	ProcessAction();
	$('add_'+id).style.backgroundImage = 'url('+processingPicture+')';
	
	Ajax.Responders.unregister(myGlobalHandlers);

	var params = "code=ag.tracker&action=add&gameId="+id+"&rand="+Math.random()+'12'+Math.random();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromAdd2,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromAdd2 (originalRequest,json)
{
	ServerAddResponseGameId = -1;
	eval(originalRequest.responseText);	

	if (ServerAddResponse ) {
		$('add_'+ServerAddResponseGameId).style.backgroundImage = 'url('+deleteFromListPicture+')';
		eval("onClickFunction = function() { ServerDeleteRequest("+ServerAddResponseGameId+"); }");
		Event.observe("add_"+ServerAddResponseGameId, 'click', onClickFunction, false);

//		ServerGameLoadCount++;
//		$("TrackCount").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
//		$("TrackCount2").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
//		$("TrackCount3").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
	} 
	else {
		$('add_'+ServerAddResponseGameId).style.backgroundImage = 'url('+addToListPicture+')';
		if(ServerErrorMessage.length){
			ShowError(ServerErrorMessage);
		}
	}
}

//Удаляем игру
function ServerDeleteRequest2(id)
{	
	ProcessAction();
	$('add_'+id).style.backgroundImage = 'url('+processingPicture+')';
	
	Ajax.Responders.unregister(myGlobalHandlers);
	var params = "code=ag.tracker&action=delete&gameId="+id+RandTail();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromDelete2,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromDelete2 (originalRequest,json)
{
	ServerDeleteResponseGameId = -1;
	eval(originalRequest.responseText);	
	if (ServerDeleteResponse) {
		$('add_'+ServerDeleteResponseGameId).style.backgroundImage = 'url('+addToListPicture+')';
		eval("onClickFunction = function() { ServerAddRequest("+ServerDeleteResponseGameId+"); }");
		Event.observe("add_"+ServerDeleteResponseGameId, 'click', onClickFunction, false);
//		ServerGameLoadCount--;
//		$("TrackCount").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
//		$("TrackCount2").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
//		$("TrackCount3").innerHTML = ServerGameLoadCount?ServerGameLoadCount:0;
	} else {
		$('add_'+ServerDeleteResponseGameId).style.backgroundImage = 'url('+deleteFromListPicture+')';
	}
}


function ProcessAction()
{
}

//////////////////////////////////////////////////////////////////////////////

//добавляем игру со страницы Top100
function ServerAddRequestTop100(id)
{	
	var addon = "";
	var pos = 0;
	while($('add_'+id+addon)){
		$('add_'+id+addon).style.backgroundImage = 'url('+processingPicture+')';
		pos++;
		addon = '_'+pos;
	}

	Ajax.Responders.unregister(myGlobalHandlers);

	var params = "code=ag.tracker&stat=1&action=add&gameId="+id+"&rand="+Math.random()+'12'+Math.random();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromAddTop100,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromAddTop100 (originalRequest,json)
{
	ServerAddResponseGameId = -1;
	ServerUsersTrackerCount = -1;
	ServerGamesTrackerCount = -1;
	
	eval(originalRequest.responseText);	
//	alert(ServerAddResponse + "\n" + ServerAddResponseGameId);
	if (ServerAddResponse ) {

		var addon = "";
		var pos = 0;
		while($('add_'+ServerAddResponseGameId+addon)){
			$('add_'+ServerAddResponseGameId+addon).style.backgroundImage = 'url('+deleteFromListPicture+')';
			$('add_'+ServerAddResponseGameId+addon).title='Удалить игру из списка отслеживаемых';
			$('add_'+ServerAddResponseGameId+addon).id = 'delete_'+ServerAddResponseGameId+addon;

			pos++;
			addon = '_'+pos;
		}
		if($('usersTrackerCount')) $('usersTrackerCount').innerHTML = ServerUsersTrackerCount;
		if($('gamesTrackerCount')) $('gamesTrackerCount').innerHTML = ServerGamesTrackerCount;	
		if($('count_'+ServerAddResponseGameId)) $('count_'+ServerAddResponseGameId).innerHTML++;	
		if($('TrackCount')) $('TrackCount').innerHTML++;
	} 
	else {
		var addon = "";
		var pos = 0;
		while($('add_'+ServerAddResponseGameId+addon)){
			$('add_'+ServerAddResponseGameId+addon).style.backgroundImage = 'url('+addToListPicture+')';
			pos++;
			addon = '_'+pos;
		}

		if(ServerErrorMessage.length){
			ShowError(ServerErrorMessage);
		}
	}

}

//Удаляем игру на странице Top100
function ServerDeleteRequestTop100(id)
{	
	var addon = "";
	var pos = 0;
	while($('delete_'+id+addon)){
		$('delete_'+id+addon).style.backgroundImage = 'url('+processingPicture+')';
		pos++;
		addon = '_'+pos;
	}
	
	Ajax.Responders.unregister(myGlobalHandlers);
	var params = "code=ag.tracker&stat=1&action=delete&gameId="+id+RandTail();
	var myAjax = new Ajax.Request(
		ServerScriptUrl, 
		{
			method: 'get', 
			parameters: params, 
			onComplete: ShowResponseFromDeleteTop100,
			onFailure: ReportErrorFromSearch,
			onException: ReportExceptionFromSearch
		});
		
}

function ShowResponseFromDeleteTop100 (originalRequest,json)
{
	ServerDeleteResponseGameId = -1;
	eval(originalRequest.responseText);	
	if (ServerDeleteResponse) {
//		$("td_"+ServerDeleteResponseGameId).className = $("td_"+ServerDeleteResponseGameId).className.substr(0,4)+"1";
		var addon = "";
		var pos = 0;
		while($('delete_'+ServerDeleteResponseGameId+addon)){
			$('delete_'+ServerDeleteResponseGameId+addon).style.backgroundImage = 'url('+addToListPicture+')';
			$('delete_'+ServerDeleteResponseGameId+addon).title='Занести игру в список отслеживаемых вами';
			$('delete_'+ServerDeleteResponseGameId+addon).id = 'add_'+ServerDeleteResponseGameId+addon;
			pos++;
			addon = '_'+pos;
		}
		
		if($('usersTrackerCount')) $('usersTrackerCount').innerHTML = ServerUsersTrackerCount;
		if($('gamesTrackerCount')) $('gamesTrackerCount').innerHTML = ServerGamesTrackerCount;
		if($('count_'+ServerDeleteResponseGameId)) $('count_'+ServerDeleteResponseGameId).innerHTML--;
		if($('TrackCount')) $('TrackCount').innerHTML--;
	}
	else {
		var addon = "";
		var pos = 0;
		while($('delete_'+ServerDeleteResponseGameId+addon)){
			$('delete_'+ServerDeleteResponseGameId+addon).style.backgroundImage = 'url('+deleteFromListPicture+')';
			pos++;
			addon = '_'+pos;
		}
	}
}

function ServerRequestTop100 (id)
{
    if(!check_reg_status()) return false;
	
	if ($('add_'+id))
		ServerAddRequestTop100(id)
	else if ($('delete_'+id))
		ServerDeleteRequestTop100(id);
		
}
