﻿

var CurrentLeaderboard;
var CurrentPage;
var PageSize = 20;
var FetchingRecords = false;

var numBGs = 1;

var bgNum = Math.floor(Math.random() * numBGs) + 1;
document.getElementById("bgWrapper").style.background = "url(images/bg-main-" + bgNum + ".jpg) no-repeat top center";

LeaderboardServices.GetLeaderboardList("Emoticons", null, null, EndGetLeaderboardList, null);

function EndGetLeaderboardList(response, state)
{
	if (!HandleCommonResults(response))
	{
		if (IsSuccessResult(response))
		{
			var leaderboardListContainer = document.getElementById("leaderboardSelectionMenu");
			ClearContainer(leaderboardListContainer);

			for (var i = 0; i < response.Leaderboards.length; i++)
			{
				var leaderboard = response.Leaderboards[i];

				var link = document.createElement("a");
				link.Leaderboard = leaderboard;
				link.href = "#";
				link.onclick = LeaderboardClick;

				var bullet = document.createElement("img");
				bullet.src = "images/categoryBullet.png";
				bullet.Leaderboard = leaderboard;
				bullet.onclick = LeaderboardClick;
				link.appendChild(bullet);

				link.innerHTML += leaderboard.InstanceDescription;
				leaderboardListContainer.appendChild(link);
			}
			
			if(response.Leaderboards.length > 0)
			{
				LoadLeaderboard(response.Leaderboards[0]);
			}
		}
		else
		{
			UnknownResult(response);
		}
	}
}

function LeaderboardClick(e)
{
	if (e == null)
	{
		e = window.event;
	}

	var sender = GetEventSource(e);
	
	if(sender.Leaderboard == null)
	{
		sender = sender.parentNode;
	}
	
	LoadLeaderboard(sender.Leaderboard);
}

function LoadLeaderboard(leaderboard)
{
	CurrentLeaderboard = leaderboard;

	CurrentPage = 0;
	
	ChangePage(1);	 
}

function RefreshLeaderboard()
{
	LoadLeaderboard(CurrentLeaderboard);
}

function ChangePage(amount)
{
	if (FetchingRecords)
	{
		return;
	}

	if (CurrentPage + amount > 0)
	{
		FetchingRecords = true;
	
		CurrentPage += amount;
		
		LeaderboardServices.GetLeaderboardRecords(CurrentLeaderboard.LeaderboardId, CurrentPage, PageSize, EndGetLeaderboardRecords, null);
	}
}

function PageSizeChanged()
{
    var dropDown = document.getElementById("pageSize");
    PageSize = parseInt(dropDown.options[dropDown.selectedIndex].innerHTML);

    CurrentPage = 1;

    var searchCharacter = document.getElementById("characterSearchName").value;

    if (searchCharacter != null && searchCharacter.length > 0)
    {
        SearchForCharacter();
    }
    else
    {
        RefreshLeaderboard();
    }
}

function EndGetLeaderboardRecords(response, state)
{
	FetchingRecords = false;

	if (!HandleCommonResults(response))
	{
		if (IsSuccessResult(response))
		{
			document.getElementById("currentBoard").innerHTML = CurrentLeaderboard.InstanceDescription;
			
			if (response.Records.length > 0)
			{
				var recordsContainer = document.getElementById("leaderboardContainer");
				ClearContainer(recordsContainer);
				
				PopulateTable(response.Records);
			}
			else
			{
				if(CurrentPage > 1)
				{
					CurrentPage--;
				}
				else
				{
					recordsContainer.innerHTML = "No records on this leaderboard yet!";
				}
			}
		}
		else
		{
			UnknownResult(response);
		}
	}
}

function PopulateTable(records)
{
    var leaderboardContainer = document.getElementById("leaderboardContainer");
    ClearContainer(leaderboardContainer);

    var tbody = document.createElement("tbody");
    leaderboardContainer.appendChild(tbody);

    for (var i = 0; i < records.length; i++)
    {
		var record = records[i];

        var characterRow = document.createElement("tr");

        var columnClass;

        if (i % 2 == 0)
        {
            SetClass(characterRow, "evenTR");
            columnClass = "evenTD";
        }
        else
        {
            SetClass(characterRow, "oddTR");
            columnClass = "oddTD";
        }
        
        var rankColumn = document.createElement("td");
        SetClass(rankColumn, columnClass);
		AppendClass(rankColumn, "rankColumn");
        characterRow.appendChild(rankColumn);

        var rankLabel = document.createElement("span");
        SetClass(rankLabel, "rankLabel");
        //          special case for "award" ranks (123)
        var rank = (i + 1) + ((CurrentPage - 1) * PageSize);
        rankLabel.innerHTML = rank;
        rankColumn.appendChild(rankLabel);
        
        var nameColumn = document.createElement("td");
        SetClass(nameColumn, columnClass);

        var nameLink = document.createElement("a");
        SetClass(nameLink, "nameLink");

        if (rank < 4)
        {
            var rankIcon = document.createElement("img");
            rankIcon.align = "absmiddle";

            if (rank == 1)
            {
                SetClass(nameLink, "leader1");
                rankIcon.src = "images/first.png";
                rankIcon.alt = "Rank #1";
                rankIcon.title = "Rank #1";
                AppendClass(characterRow, "leader1Row");
            }
            else if (rank == 2)
            {
                SetClass(nameLink, "leader2");
                rankIcon.src = "images/second.png";
                rankIcon.alt = "Rank #2";
                rankIcon.title = "Rank #2";
                AppendClass(characterRow, "leader2Row");
            }
            else
            {
                SetClass(nameLink, "leader3");
                rankIcon.src = "images/third.png";
                rankIcon.alt = "Rank #3";
                rankIcon.title = "Rank #3";
                AppendClass(characterRow, "leader3Row");
            }

            nameLink.appendChild(rankIcon);
        }
        
        nameLink.innerHTML += record.PlayerName;
        nameLink.href = "../../playerProfile.htm?name=" + record.PlayerName;

        nameColumn.appendChild(nameLink);
        characterRow.appendChild(nameColumn);
        
		var achievementsColumn = document.createElement("td");
        SetClass(achievementsColumn, columnClass);
        characterRow.appendChild(achievementsColumn);
        
        if(record.Achievements != null)
        {
			for(var iAchievement = 0; iAchievement < character.Achievements.length; iAchievement++)
			{
				var characterAchievement = character.Achievements[iAchievement];
				var achievement = characterAchievement.Achievement;
				
				var achievementImage = document.createElement("img");
				//SetClass(achievementImage, "achievementImage");
				achievementImage.src = "../../images/achievements/" + achievement.GameName + "/" + GetAchievementImageName(achievement, "small");
				achievementImage.PlayerAchievement = characterAchievement;
				achievementImage.onmouseover = AchievementMouseEnter;
				achievementImage.onmouseout = AchievementMouseLeave;
				achievementsColumn.appendChild(achievementImage);
				
				if(iAchievement > 0 && (iAchievement + 1) % 6 == 0)
				{
					achievementsColumn.innerHTML += "<br/>";
				}
			}
		}
		
        var scoreLabel = document.createElement("td");
        SetClass(scoreLabel, columnClass);
        scoreLabel.innerHTML =  Math.round(record.RecordValue);
        characterRow.appendChild(scoreLabel);
        
        var dateLabel = document.createElement("td");
        SetClass(dateLabel, columnClass);
		dateLabel.innerHTML = GetDate(record.RecordDate).toLocaleDateString();
        characterRow.appendChild(dateLabel);

        tbody.appendChild(characterRow);
    }

    if (CurrentPage < 100)
    {
        var p = document.getElementById("currentPage");
        p.style.fontSize = 30;
        p.style.paddingTop = 9;
    } else
    {
        var p = document.getElementById("currentPage");
        p.style.fontSize = 20;
        p.style.paddingTop = 15;
    }

    document.getElementById("currentPage").innerHTML = CurrentPage;
}

function EndSignOut(response, state)
{
    if (!HandleCommonResults(response))
    {
        if (!IsSuccessResult(response))
        {
            UnknownResult(response);
        }
    }

    ExpireSession();

    location.href = "../../login.htm?reason=signout";

    SigningOut = false;
}
