$(function()
{
	$(window).bind('hashchange', parseHash);

	var games = $('#content > ul > li');

	if(games && games.length)
	{
		parseHash();
	}

	hideRomList();
	
	function hideRomList()
	{
		var romItems = $('#roms-list > li');
		var romList = $('#roms-list');
		var maxRoms = 10;
		var index = 0;
		
		if(romItems && romItems.length > maxRoms)
		{
			romList.empty();
			
			romItems.each(function()
			{
				if(index++ < maxRoms)
				{
					var li = $(this);
					romList.append(li);
				}
			});
			
			$('<a>')
				.attr('href', '#all')
				.attr('id', 'show-all-roms')
				.click(function()
				{
					romList.empty();
					romItems.each(function()
					{
						var li = $(this);
						romList.append(li);
					});
					
					$(this).remove();
					$('#roms-block .clear').remove();
				})
				.append('Show all roms...')
				.appendTo($('#roms-block'));
			
			$('<div>')
				.addClass('clear')
				.appendTo($('#roms-block'));
		}
	}
	
	function parseHash()
	{
		var hash = location.hash;
		
		if(hash == '#all')
		{
			fillGames(0);
		}
		else
		{
			var page = 1;
			
			if(hash != '')
			{
				page = hash.split('#page-').join('');
			}
			
			fillGames(page);
		}
	}

	function fillGames(page)
	{
		var gamesPerPage = 24;
		var pages = Math.ceil(games.length / gamesPerPage);
		
		if(pages > 20)
		{
			gamesPerPage = 28;
			pages = Math.ceil(games.length / gamesPerPage);
		}
		
		var index = 0;
		var start = (page - 1) * gamesPerPage;
		var end = page * gamesPerPage;

		if(page == 0)
		{
			start = 0;
			end = games.length;
		}
		
		$('#content > ul > li').remove();

		fillPages(pages, page);
		
		games.each(function()
		{
			if(index >= start && index < end)
			{
				var li = $(this);
				var link = $(li).find('a.small-box');
				var box = link.attr('box');
				var name = $(li).find('div.title > a').text();
				
				if(box)
				{
					link.removeAttr('box');
					link.empty();
					
					$('<img>')
						.attr('src', '/images/boxes/small/' + box + '.jpg')
						.attr('title', name)
						.appendTo(link);
				}
				
				$('#content > ul').append(li);
			}
				
			index++;
		});	
	}

	function fillPages(count, page)
	{
		$('.pages').empty();
		
		if(count == 1)
		{
			return;
		}

		for(index = 1; index <= count; ++index)
		{
			if(index == page)
			{
				$('<p>')
					.append(index)
					.appendTo('.pages');
			}
			else
			{
				$('<a>')
					.attr('href', '#page-' + index)
					.append(index)
					.appendTo('.pages');
			}
		}
		
		if(page == 0)
		{
			$('<p>')
				.append('All')
				.appendTo('.pages');
		}
		else
		{
			$('<a>')
				.attr('href', '#all')
				.append('All')
				.appendTo('.pages');
		}
	}

	showSignBox();
});

function showSignBox()
{
	$('#sidebar > ul .user-item').remove();

	api('verify', {}, function(data)
	{
		if(data.status == 'ok')
		{
			var login = data.data.login;
		
			$('#sidebar > ul')
				.prepend($('<li class="user-item"><p>User: <a href="/user/' + login.toLowerCase() + '">'+login+'</a></p></li>')
					.append($('<ul></ul>')
						.append('<li><a href="/user/' + login.toLowerCase() + '">View your Saved Games</a></li>')
						.append('<li><a class="user-exit" href="javascript:signOut()">Exit</a></li>')
					)
				);

		}
		else
		{
			$('#sidebar > ul')
				.prepend($('<li class="user-item"><p>User</p></li>')
					.append($('<ul></ul>')
						.append('<li><div class="text-label">Username:</div><input class="text-input user-input" type="text" placeholder="username..."></input></li>')
						.append('<li><div class="text-label">Password:</div><input class="text-input password-input" type="password" placeholder="password..."></input></li>')
						.append('<li><a class="signin-button" href="javascript:signInUser()">Sign In</a></li>')
					)
				);
		}
	});
}

function signInUser()
{
	var userName = $('.user-item .user-input').val();
	var password = $('.user-item .password-input').val();

	if(userName && userName.length && password && password.length )
	{
		api('signin', {login:userName, password:password}, function(data)
		{
			if(data.status == 'ok')
			{
				showSignBox();
			}
			else
			{
				alert(data.info);
			}
		});
	}
	else
	{
		alert('Invalid user name or password');
	}
}

function signOut()
{
	var loginBox = $('.sign-box');
	loginBox.empty();

	api('signout', {}, function(data)
	{
		showSignBox();
	});
}

function api(method, data, callback)
{
	$.post('/api/' + method, JSON.stringify(data), callback, 'json');
}

function hideAds()
{
	$('.left-banner').hide();
}

function showAds()
{
	$('.left-banner').show();
}

