﻿
var SabukWarInstances = null;
var CurrentWarInstance = null;
var CurrentWarView = "";

function ChangeWarLeaderboard(leaderboardName)
{
	if(SabukWarInstances == null)
	{
		Mir3Services["Get" + leaderboardName + "List"](function(response)
		{
			if (!HandleCommonResults(response))
			{
				if (IsSuccessResult(response))
				{
					SabukWarInstances = response.SabukWarInstances;
					var sabukWarsDropDown = document.getElementById("sabukWarsDropDown");
					
					for(var i = 0; i < SabukWarInstances.length; i++)
					{
						var warInstance = SabukWarInstances[i];
						
						var option = document.createElement("option");
						option.innerHTML = GetDate(warInstance.StartDate).toLocaleString() + " - " + GetDate(warInstance.EndDate).toLocaleString();
						option.WarInstance = warInstance;
						
						sabukWarsDropDown.appendChild(option);
					}
					
					sabukWarsDropDown.selectedIndex = 0;
					ChangeWarDateRange();
				}
				else
				{
					UnknownResult(response);
				}
			}
		});
	}
	else
	{
		var sabukWarsDropDown = document.getElementById("sabukWarsDropDown");
		if(sabukWarsDropDown.selectedIndex != 0)
		{
			sabukWarsDropDown.selectedIndex = 0;
		}
		else
		{
			ChangeWarDateRange();
		}
	}
}

function ChangeWarDateRange()
{
	var sabukWarsDropDown = document.getElementById("sabukWarsDropDown");
	var sender = sabukWarsDropDown.options[sabukWarsDropDown.selectedIndex];
	
	CurrentWarInstance = sender.WarInstance;
	
	ChangeWarView();
}

function ChangeWarView()
{
	var sabukWarsViewSelector = document.getElementById("sabukWarsViewSelector");
	var sender = sabukWarsViewSelector.options[sabukWarsViewSelector.selectedIndex];
	
	if(sender.innerHTML == "Guilds")
	{
		CurrentWarView = "Guild";
	}
	else
	{
		CurrentWarView = "";
	}
	
	RefreshWarLeaderboard();	
}

function RefreshWarLeaderboard()
{
	if(CurrentWarView == "Guild")
	{
		HideElement("classes-navigator");
		HideElement("searchForm");
		HideElement("resultsPPForm");
		Mir3Services["Get" + CurrentLeaderboard + "GuildLeaderboard"](CurrentWarInstance.WarId, EndGetWarGuildLeaderboard);
	}
	else
	{
		ShowElement("classes-navigator");
		ShowElement("searchForm");
		ShowElement("resultsPPForm");
		Mir3Services["Get" + CurrentLeaderboard + "Leaderboard"](CurrentWarInstance.WarId, CurrentPage, PageSize, EndGetWarLeaderboard);
	}
}

function EndGetWarLeaderboard(response)
{
    if (!HandleCommonResults(response))
    {
        if (IsSuccessResult(response))
        {
            if (response.CharacterList.length > 0)
            {
				SortCharacterAchievements(response);            
            
                PopulateWarTable(response.CharacterList);
            }
            else
            {
                CurrentPage--;
            }
        }
        else
        {
            UnknownResult(response);
        }
    }

    FetchingRecords = false;
}

function EndGetWarGuildLeaderboard(response)
{
    if (!HandleCommonResults(response))
    {
        if (IsSuccessResult(response))
        {
            if (response.GuildList.length > 0)
            {
                PopulateWarGuildTable(response.GuildList);
            }
            else
            {
                CurrentPage--;
            }
        }
        else
        {
            UnknownResult(response);
        }
    }

    FetchingRecords = false;
}

function EndSearchWarLeaderboard(response, characterName)
{
    if (!HandleCommonResults(response))
    {
        if (IsSuccessResult(response))
        {
            CurrentPage = response.PageNumber;
            document.getElementById("currentPage").innerHTML = CurrentPage;

            PopulateWarTable(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 PopulateWarTable(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.href = "?search=" + character.GameAttributes.CharacterName;

        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 += character.GameAttributes.CharacterName;

        nameColumn.appendChild(nameLink);
        characterRow.appendChild(nameColumn);
        
        var killsLabel = document.createElement("td");
        SetClass(killsLabel, columnClass);
        killsLabel.innerHTML = character.GameAttributes.Kills + " kills";
        characterRow.appendChild(killsLabel);
        
        var deathsLabel = document.createElement("td");
        SetClass(deathsLabel, columnClass);
        deathsLabel.innerHTML = character.GameAttributes.Deaths + " deaths";
        characterRow.appendChild(deathsLabel);
        
		var achievementsColumn = document.createElement("td");
        SetClass(achievementsColumn, columnClass);
        characterRow.appendChild(achievementsColumn);
        
        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.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 PopulateWarGuildTable(guildList)
{
    var leaderboardContainer = document.getElementById("leaderboardContainer");
    ClearContainer(leaderboardContainer);

    var tbody = document.createElement("tbody");
    leaderboardContainer.appendChild(tbody);

    var searchCharacterOnPage = false;

    for (var i = 0; i < guildList.length; i++)
    {
        var guild = guildList[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;
        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);
        }
        
        if(guild.GuildName == null)
        {
			nameLink.innerHTML += "[characters with no guild]";
			nameLink.style.fontStyle = "italic";
        }
        else
        {
			nameLink.innerHTML += guild.GuildName;
			nameLink.href = "guildProfile.htm?name=" + guild.GuildName;
		}
		
        nameColumn.appendChild(nameLink);
        characterRow.appendChild(nameColumn);
        
        var killsLabel = document.createElement("td");
        SetClass(killsLabel, columnClass);
        killsLabel.innerHTML = guild.Kills + " kills";
        characterRow.appendChild(killsLabel);
        
        var deathsLabel = document.createElement("td");
        SetClass(deathsLabel, columnClass);
        deathsLabel.innerHTML = guild.Deaths + " deaths";
        characterRow.appendChild(deathsLabel);
        
        tbody.appendChild(characterRow);
    }

    clearClassTabBGs();
}
