/*********************************
nation_leaderboards.js for EA.com
*********************************/
// global vars
var leaderboardList = new Array();
var currentListElement;
var currentFilterElement;
var currentPlayerName = '';
var currentPlatform;
// constants
var columnHeaders = new Array();
var xmlBaseURL = '/_includes/nation/xml_leader_boards.jsp';
var personaNodeName;
/******************************************************************************
Initialization
*****************************************************************************/
function initLeaderboards() {
if (initPlatform) {
currentPlatform = initPlatform;
} else if (playerPlatform) {
currentPlatform = playerPlatform;
} else {
currentPlatform = 'ps2';
}
// show header
document.getElementById('leaderboard-header2').innerHTML = '
';
// set dropdown to match
var dropdown = document.getElementById('filter-platforms');
for (var optionIndex = 0; optionIndex < dropdown.options.length; optionIndex++) {
if (dropdown.options[optionIndex].value == currentPlatform) {
dropdown.selectedIndex = optionIndex;
break;
}
}
// display the leaderboard nav
displayLeaderboardList();
// load initial leader
if (initLeaderboard) {
var numLeaderboards = leaderboardList.length;
for (var listIndex = 0; listIndex < numLeaderboards; listIndex++) {
var leaderboardItem = leaderboardList[listIndex];
if (leaderboardItem.name == initLeaderboard) {
setLeaderboard(document.getElementById('leaderboard-list').childNodes[0].childNodes[listIndex], leaderboardList[listIndex].name);
break;
}
}
}
else {
setLeaderboard(document.getElementById('leaderboard-list').childNodes[0].childNodes[0], leaderboardList[0].name);
}
}
function displayLeaderboardList() {
var listHTML = '';
listHTML += '
';
// set dropdown to match
var dropdown = document.getElementById('filter-platforms');
for (var optionIndex = 0; optionIndex < dropdown.options.length; optionIndex++) {
if (dropdown.options[optionIndex].value == currentPlatform) {
dropdown.selectedIndex = optionIndex;
break;
}
}
loadLeaderboard(currentQueryString);
}
function setFilter(filterElement, url) {
// highlight correct item
if (currentFilterElement) {
currentFilterElement.className = '';
}
currentFilterElement = filterElement;
currentFilterElement.className = 'currentFilterItem';
// load new leaderboard
loadLeaderboard(url);
}
function setPage(url) {
loadLeaderboard(url, true);
}
/******************************************************************************
Load leaderboard data
*****************************************************************************/
function loadLeaderboard(queryString, isURL) {
// replace platform with current platform
queryString = queryString.replace(/platform=[^&]+/, 'platform=' + currentPlatform);
xmlDocs["leaderboardData"] = null;
if (isURL) {
loadXMLDoc(queryString, 'leaderboardData', doLeaderboardXMLReady, doLeaderboardXMLWait);
// loadXMLDoc('/_includes/xml_leader_boards2.jsp.xml', 'leaderboardData', doLeaderboardXMLReady, doLeaderboardXMLWait);
} else {
loadXMLDoc(xmlBaseURL + '?' + queryString, 'leaderboardData', doLeaderboardXMLReady, doLeaderboardXMLWait);
}
//loadXMLDoc(xmlBaseURL, 'leaderboardData', doLeaderboardXMLReady, doLeaderboardXMLWait)
currentQueryString = queryString;
}
/******************************************************************************
XML Callbacks
*****************************************************************************/
function doLeaderboardXMLWait() {
// display loading message in place of data table
document.getElementById('leaderboard-table-container').innerHTML = 'Loading Data...
'; } function doLeaderboardXMLReady() { var leaderboardXML = xmlDocs["leaderboardData"].xml; // find the first ELEMENT_NODE node - its our root (IE will place a PROCESSING_INSTRUCTION_NODE in there) for (var childIndex = 0; childIndex < leaderboardXML.childNodes.length; childIndex++) { if (leaderboardXML.childNodes[childIndex].nodeType == Node.ELEMENT_NODE) { leaderboardXML = leaderboardXML.childNodes[childIndex]; break; } } // clean whitespace from the DOM cleanWhitespace(leaderboardXML); // extract data from xml file for (var childIndex = 0; childIndex < leaderboardXML.childNodes.length; childIndex++) { var sectionNode = leaderboardXML.childNodes[childIndex]; switch (sectionNode.nodeName) { // column names case 'ColumnNames': var columnNames = new Array(); var numColumns = sectionNode.childNodes.length; for (var columnIndex = 0; columnIndex < numColumns; columnIndex++) { columnNames[columnIndex] = sectionNode.childNodes[columnIndex].firstChild.nodeValue; switch (columnNames[columnIndex]) { case 'Persona': personaNodeName = 'Persona'; break; case 'Name': personaNodeName = 'Name'; break; } } break; // player data case 'Leaders': var players = new Array(); var numPlayers = sectionNode.childNodes.length; for (var playerIndex = 0; playerIndex < numPlayers; playerIndex++) { var leaderNode = sectionNode.childNodes[playerIndex]; players[playerIndex] = new Array(); for (var columnIndex = 0; columnIndex < numColumns; columnIndex++) { var columnNode = leaderNode.childNodes[columnIndex]; if (columnNode.childNodes[0].firstChild.nodeValue == 'Persona') { players[playerIndex][personaNodeName] = columnNode.childNodes[1].childNodes[1].firstChild.nodeValue; players[playerIndex][columnNode.childNodes[1].childNodes[0].nodeName] = columnNode.childNodes[1].childNodes[0].firstChild.nodeValue; players[playerIndex][columnNode.childNodes[1].childNodes[2].nodeName] = columnNode.childNodes[1].childNodes[2].firstChild.nodeValue; } else { players[playerIndex][columnNode.childNodes[0].firstChild.nodeValue] = columnNode.childNodes[1].firstChild.nodeValue; } } } break; // current player stats case 'MyStat': var myStats = new Array(); if (sectionNode.childNodes.length) { for (var columnIndex = 0; columnIndex < numColumns; columnIndex++) { var columnNode = sectionNode.firstChild.childNodes[columnIndex]; if (columnNode.firstChild.firstChild.nodeValue == 'Persona') { myStats[personaNodeName] = columnNode.childNodes[1].childNodes[1].firstChild.nodeValue; myStats[columnNode.childNodes[1].childNodes[0].nodeValue] = columnNode.childNodes[1].childNodes[0].firstChild.nodeValue; myStats[columnNode.childNodes[1].childNodes[2].nodeValue] = columnNode.childNodes[1].childNodes[2].firstChild.nodeValue; } else { myStats[columnNode.childNodes[0].firstChild.nodeValue] = columnNode.childNodes[1].firstChild.nodeValue; } } currentPlayerName = myStats[personaNodeName]; } break; // paging info case 'Pages': var numPageBlocks = sectionNode.childNodes.length; for (var pageBlockIndex = 0; pageBlockIndex < numPageBlocks; pageBlockIndex++) { var pageBlockNode = sectionNode.childNodes[pageBlockIndex]; switch (pageBlockNode.nodeName) { case 'PreviousPages': var previousPages = new Array(); var numPreviousPages = pageBlockNode.childNodes.length - 1; for (var pageIndex = 0; pageIndex < numPreviousPages; pageIndex++) { var page = pageBlockNode.childNodes[pageIndex + 1]; previousPages[page.childNodes[0].firstChild.nodeValue] = page.childNodes[1].firstChild.nodeValue; } break; case 'NextPages': var nextPages = new Array(); var numNextPages = pageBlockNode.childNodes.length - 1; for (var pageIndex = 0; pageIndex < numNextPages; pageIndex++) { var page = pageBlockNode.childNodes[pageIndex + 1]; nextPages[page.childNodes[0].firstChild.nodeValue] = page.childNodes[1].firstChild.nodeValue; } break; } } break; } } // write out table of players data var tableHtml = ''; tableHtml += '| ' + columnHeaders[columnNames[columnIndex]] + ' | '; } tableHtml += '|
|---|---|
| ' + myStats[columnNames[columnIndex]] + ' | '; } tableHtml += '|
| ' + player[personaNodeName] + ' | '; } else { tableHtml += '' + player[columnNames[columnIndex]] + ' | '; } } tableHtml += '
| '; } tableHtml += ' | |