﻿
if (location.href.indexOf("#") > 0)
{
	location.href = location.href.substring(0, location.href.indexOf("#"));
}

RelativeAchievementUrl = "../../";
ACHIEVEMENT_WIDTH = 40;
ACHIEVEMENT_HEIGHT = 20;

var CurrentPage = 1;
var CurrentLeaderboard;
var DefaultLeaderboard = "TopPlayers";
var CurrentLeaderboardClass;
var FetchingRecords = false;
var selectedBG = "url(Images/classes-selectedBG.png) no-repeat bottom center"; // red glow behind selected class ladder tab
var numBGs = 4;
var PageSize = 20;
var SearchCharacter = null;

var bgNum = Math.floor(Math.random() * numBGs) + 1;
document.getElementById("bgWrapper").style.background = "url(images/bg-main-" + bgNum + ".jpg) no-repeat top center";

var dropDown = document.getElementById("pageSize");
PageSize = parseInt(dropDown.options[dropDown.selectedIndex].innerHTML);

if(QueryString["search"] != null)
{
	document.getElementById("characterSearchName").value = unescape(QueryString["search"]);
	CurrentLeaderboard = DefaultLeaderboard;
	SetClass(document.getElementById("titlebar"), "titlebar-" + CurrentLeaderboard);
	SearchForCharacter();
}
else
{
	ChangeLeaderboard(DefaultLeaderboard);
}

function ChangeLeaderboard(leaderboardName)
{
	CurrentLeaderboard = leaderboardName;
	CurrentPage = 1;
	
    /* change leaderboard tab bg */
	SetClass(document.getElementById("titlebar"), "titlebar-" + CurrentLeaderboard);
	
	if(IsWarLeaderboard())
	{
	    ChangeWarLeaderboard(leaderboardName);
	    
	    document.getElementById("classes-wrapper").style.display = "none";
	    document.getElementById("sabukWarsDropDown").style.display = "block";
	    document.getElementById("sabukWarsViewSelector").style.display = "block";
	}
	else
	{
		ShowElement("classes-navigator");
		ShowElement("searchForm");
		ShowElement("resultsPPForm");
		
	    document.getElementById("classes-wrapper").style.display = "block";
	    document.getElementById("sabukWarsDropDown").style.display = "none";
	    document.getElementById("sabukWarsViewSelector").style.display = "none";
		RefreshLeaderboard();
	}
}

function ChangeLeaderboardClass(className)
{
    CurrentLeaderboardClass = className;
    CurrentPage = 1;

    RefreshLeaderboard();
}

function ChangePage(amount)
{
    var newPage = CurrentPage + parseInt(amount);

    if (newPage > 0)
    {
        CurrentPage = newPage;

        RefreshLeaderboard();
    }
}

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 RefreshLeaderboard()
{
    if (!FetchingRecords)
    {
        FetchingRecords = true;
        
        if(IsWarLeaderboard())
        {
			Mir3Services["Get" + CurrentLeaderboard + "Leaderboard"](CurrentWarInstance.WarId, CurrentPage, PageSize, EndGetWarLeaderboard, null);
        }
        else
        {
			Mir3Services["Get" + CurrentLeaderboard + "Leaderboard"](CurrentPage, PageSize, CurrentLeaderboardClass, EndGetClassLeaderboard, null);
		}
    }
}

function SearchForCharacter()
{
    if (!FetchingRecords)
    {
        var characterName = document.getElementById("characterSearchName").value;

        if (characterName == null || characterName.length < 1)
        {
            alert("Please enter a name to search for");
            return;
        }

        SearchCharacter = characterName;
        FetchingRecords = true;

		if(IsWarLeaderboard())
        {
			Mir3Services["Search" + CurrentLeaderboard + "Leaderboard"](CurrentWarInstance.WarId, characterName, PageSize, EndSearchWarLeaderboard, characterName);
        }
        else
        {
			Mir3Services["Search" + CurrentLeaderboard + "Leaderboard"](characterName, PageSize, CurrentLeaderboardClass, EndSearchClassLeaderboard, characterName);
		}
    }
}

function ClearSearch()
{
    SearchCharacter = null;
    document.getElementById("characterSearchName").value = "";

    RefreshLeaderboard();
}

function IsWarLeaderboard()
{
	return CurrentLeaderboard == "SabukWars";
}

function EndSearchClassLeaderboard(response, characterName)
{
    if (!HandleCommonResults(response))
    {
        if (IsSuccessResult(response))
        {
            CurrentPage = response.PageNumber;
            document.getElementById("currentPage").innerHTML = CurrentPage;

			SortCharacterAchievements(response);

            PopulateTable(response.CharacterList);
        }
        else if (response.Result == "InvalidCharacterName")
        {
            alert("A character by the name '" + characterName + "' was not found.");
        }
        else if (response.Result == "CharacterNotOnLeaderboard")
        {
            alert(characterName + " is not on this leaderboard.");
        }
        else
        {
            UnknownResult(response);
        }
    }

    FetchingRecords = false;
}

function EndGetClassLeaderboard(response)
{
    if (!HandleCommonResults(response))
    {
        if (IsSuccessResult(response))
        {
            if (response.CharacterList.length > 0)
            {
				SortCharacterAchievements(response);            
            
                PopulateTable(response.CharacterList);
            }
            else
            {
                CurrentPage--;
            }
        }
        else
        {
            UnknownResult(response);
        }
    }

    FetchingRecords = false;
}

function PopulateTable(characterList)
{
    var leaderboardContainer = document.getElementById("leaderboardContainer");
    ClearContainer(leaderboardContainer);

    var tbody = document.createElement("tbody");
    leaderboardContainer.appendChild(tbody);

    var searchCharacterOnPage = false;

    for (var i = 0; i < characterList.length; i++)
    {
        var character = characterList[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 rankChangeColumn = document.createElement("td");
		SetClass(rankChangeColumn, columnClass);
		characterRow.appendChild(rankChangeColumn);
    
		if(CurrentLeaderboardClass == null)
		{
			if(character.GameAttributes.RankChange != null)
			{
				var rankChangeLabel = document.createElement("span");
				rankChangeColumn.appendChild(rankChangeLabel);
				
				if(character.GameAttributes.RankChange > 0)
				{
					var rankChangeIcon = document.createElement("img");
					SetClass(rankChangeIcon, "rankChangeIcon");
					rankChangeIcon.align = "absmiddle";
					rankChangeLabel.appendChild(rankChangeIcon);
				
					rankChangeIcon.src = "images/rankChangeUp.png";
					
					if(character.GameAttributes.RankChange != 1)
					{
						rankChangeIcon.alt = character.GameAttributes.CharacterName + " has moved up " + character.GameAttributes.RankChange + " positions on the all classes leaderboard this week";
						rankChangeLabel.title = character.GameAttributes.CharacterName + " has moved up " + character.GameAttributes.RankChange + " positions on the all classes leaderboard this week";
					}
					else
					{
						rankChangeIcon.alt = character.GameAttributes.CharacterName + " has moved up " + character.GameAttributes.RankChange + " position on the all classes leaderboard this week";
						rankChangeLabel.title = character.GameAttributes.CharacterName + " has moved up " + character.GameAttributes.RankChange + " position on the all classes leaderboard this week";
					}
					
					SetClass(rankChangeLabel, "rankChangeUpLabel");
					rankChangeLabel.innerHTML += "+" + character.GameAttributes.RankChange;
				}
				else if(character.GameAttributes.RankChange < 0)
				{
					var rankChangeIcon = document.createElement("img");
					SetClass(rankChangeIcon, "rankChangeIcon");
					rankChangeIcon.align = "absmiddle";
					rankChangeLabel.appendChild(rankChangeIcon);
				
					rankChangeIcon.src = "images/rankChangeDown.png";
					
					if(Math.abs(character.GameAttributes.RankChange) != 1)
					{
						rankChangeIcon.alt = character.GameAttributes.CharacterName + " has moved down " + Math.abs(character.GameAttributes.RankChange) + " positions on the all classes leaderboard this week";
						rankChangeLabel.title = character.GameAttributes.CharacterName + " has moved down " + Math.abs(character.GameAttributes.RankChange) + " positions on the all classes leaderboard this week";
					}
					else
					{
						rankChangeIcon.alt = character.GameAttributes.CharacterName + " has moved down " + Math.abs(character.GameAttributes.RankChange) + " position on the all classes leaderboard this week";
						rankChangeLabel.title = character.GameAttributes.CharacterName + " has moved down " + Math.abs(character.GameAttributes.RankChange) + " position on the all classes leaderboard this week";
					}
					
					SetClass(rankChangeLabel, "rankChangeDownLabel");
					rankChangeLabel.innerHTML += character.GameAttributes.RankChange;
				}
			}
		}
		
        var iconColumn = document.createElement("td");
        SetClass(iconColumn, columnClass);

        var genderIcon = document.createElement("img");
        genderIcon.src = "images/" + character.GameAttributes.GenderName + ".png";
        genderIcon.alt = character.GameAttributes.GenderName;
        genderIcon.title = character.GameAttributes.GenderName; 
        var classIcon = document.createElement("img");
        SetClass(classIcon, "classIcon");
        classIcon.src = "images/classicon_" + character.GameAttributes.ClassName + ".png";
        classIcon.alt = character.GameAttributes.ClassName;
        classIcon.title = character.GameAttributes.ClassName;
        iconColumn.appendChild(genderIcon);
        iconColumn.appendChild(classIcon);
        characterRow.appendChild(iconColumn);

        var nameColumn = document.createElement("td");
        SetClass(nameColumn, columnClass);

        var nameLink = document.createElement("a");
        SetClass(nameLink, "nameLink");
        nameLink.target = "_top";

        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);
        }
        
        if(CurrentLeaderboard == "TopPlayers")
        {
			if(rank < 100 && character.GameAttributes.TimeInPosition != null && character.GameAttributes.TimeInPosition > 0)
			{
				var streakIcon = document.createElement("img");
				streakIcon.align = "absmiddle";
				streakIcon.alt = character.GameAttributes.CharacterName + " maintained rank " + character.GameAttributes.WeekStartRank + " on the all classes leaderboard for " + character.GameAttributes.TimeInPosition + " week";
				streakIcon.title = character.GameAttributes.CharacterName + " maintained rank " + character.GameAttributes.WeekStartRank + " on the all classes leaderboard for " + character.GameAttributes.TimeInPosition + " week";
				SetClass(streakIcon, "streakIcon");
				
				if(character.GameAttributes.TimeInPosition != 1)
				{
					streakIcon.alt += "s";
					streakIcon.title += "s";
				}
				
				if(character.GameAttributes.TimeInPosition < 4)
				{
					streakIcon.src = "images/streak-" + character.GameAttributes.TimeInPosition + ".png";
				}
				else
				{
					streakIcon.src = "images/streak-4.png";		
				}
				
				nameLink.appendChild(streakIcon);
			}	
		}

        nameLink.innerHTML += character.GameAttributes.CharacterName;
		nameLink.title = character.GameAttributes.PKPoints + " PK Points";
        
        if(character.GameAttributes.PKPoints >= 500)
        {
			SetClass(nameLink, "murderer1");
        }
        else if(character.GameAttributes.PKPoints >= 300)
        {
			SetClass(nameLink, "murderer2");
        }
		
        nameColumn.appendChild(nameLink);
        characterRow.appendChild(nameColumn);

		var achievementsColumn = document.createElement("td");
        SetClass(achievementsColumn, columnClass);
        characterRow.appendChild(achievementsColumn);
        
        if(character.Achievements.length > 0)
        {
			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.appendChild(document.createElement("br"));
					achievementsColumn.style.paddingTop = "4px";
					achievementsColumn.style.paddingBottom = "4px";
				}
			}
		}
		else
		{
			var showLink = document.createElement("a");
			SetClass(showLink, "leaderboardShowAchievementsLink");
			showLink.href = "../../login.htm?reason=mir3Ad";
			showLink.innerHTML = "[not signed up]";
			showLink.title = "This character has not signed up for the WeMade Community yet. To display your achievements on the leaderboards, click here to join. It's quick and easy!";
			achievementsColumn.appendChild(showLink);
		}

//        var fameLabel = document.createElement("td");
//        SetClass(fameLabel, columnClass);
//        fameLabel.innerHTML = character.GameAttributes.Fame + " fame";
//        characterRow.appendChild(fameLabel);
        
        var guildColumn = document.createElement("td");
        SetClass(guildColumn, columnClass);
        characterRow.appendChild(guildColumn);
        
        if(character.GameAttributes.GuildName != null)
        {
			var guildImage = document.createElement("img");
			SetClass(guildImage, "guildImage");
			guildImage.title = character.GameAttributes.GuildName;
			guildImage.style.verticalAlign = "middle";
			guildImage.onerror = function(e)
			{
				if(e == null)
				{
					e = window.event;
				}
				
				var sender = GetEventSource(e);
				
				if(sender != null)
				{
					sender.src = "images/guilds/default.png";					
				}
			}
			guildImage.onload = function(e)
			{
				if(e == null)
				{
					e = window.event;
				}
				
				var sender = GetEventSource(e);
				sender.style.display = "inline";					
			}
			guildImage.src = "images/guilds/" + character.GameAttributes.GuildName + ".png";
			guildImage.style.display = "none";				
			guildColumn.appendChild(guildImage);
				
			var guildLink = document.createElement("a");
			SetClass(guildLink, "guildLink");
			SetInnerText(guildLink, character.GameAttributes.GuildName);
			guildLink.href = "guildProfile.htm?name=" + character.GameAttributes.GuildName;
			guildColumn.appendChild(guildLink);
        }
        
        if (SearchCharacter != null && character.GameAttributes.CharacterName.toLowerCase().trim() == SearchCharacter.toLowerCase().trim())
        {
        	var anchor = document.createElement("a");
			anchor.id = "searchResult";
			nameColumn.appendChild(anchor);

        	AppendClass(characterRow, "searchCharacter");

        	searchCharacterOnPage = true;
        }

        tbody.appendChild(characterRow);
    }

    clearClassTabBGs();

    if (CurrentLeaderboardClass == null)
    {
        document.getElementById("classes-all").style.background = selectedBG;
    }
    else
    {
        document.getElementById("classes-" + CurrentLeaderboardClass + "s").style.background = selectedBG;
    }

    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;

    if (searchCharacterOnPage)
    {
    	location.href = "#searchResult";		
    }
}

function clearClassTabBGs()
{
    document.getElementById("classes-all").style.background = "";
    document.getElementById("classes-warriors").style.background = "";
    document.getElementById("classes-taoists").style.background = "";
    document.getElementById("classes-assassins").style.background = "";
    document.getElementById("classes-wizards").style.background = "";
}

function SortCharacterAchievements(response)
{
	var characterLookup = new Array();
	
	for(var i = 0; i < response.CharacterList.length; i++)
	{
		var character = response.CharacterList[i];
		character.Achievements = new Array();
		characterLookup[character.GameAttributes.CharacterName] = character;
	}
	
	for(var i = 0; i < response.CharacterAchievements.length; i++)
	{
		var characterAchievement = response.CharacterAchievements[i];
		var character = characterLookup[characterAchievement.CharacterName];
		
		character.Achievements.push(characterAchievement);
	}
}


function EndSignOut(response, state)
{
    if (!HandleCommonResults(response))
    {
        if (!IsSuccessResult(response))
        {
            UnknownResult(response);
        }
    }

    ExpireSession();

    location.href = "../../login.htm?reason=signout";

    SigningOut = false;
}
