// if all is chosen, you pass in all the events with '_' between each
function highlightPlatform(tmpVal) {
var tmpOptions = document.getElementById('drp_platform').getElementsByTagName('option');
for(i = 0; i < tmpOptions.length; i++){
if(tmpOptions[i].value == tmpVal){
tmpOptions[i].selected = 'true';
}
}
}
function loadCustomLeader(divId, lbID, pageNum, fltTime, fltEvent, fltPlatform){
if(fltPlatform == 'XBL_SUB' || fltPlatform == 'PS3_SUB' || fltPlatform == 'MAIN'){
highlightPlatform(fltPlatform);
}
else {
fltPlatform = 'XBL_SUB';
}
document.getElementById('pageNum').value = pageNum;
var range = 50;
var start = (pageNum - 1) * range;
var feed = '/nfs/prostreet/game/xmlapi/get_leaderboard.jsp?ns=' + fltPlatform + '&raceDay=' + lbID + '&range=' + range + '&start=' + start + '&periodType=' + fltTime;
// user is logged in and has "closest to me" selected
if(document.getElementById('displayName')){
if(document.getElementById('displayName').value != ''){
if(document.getElementById('drp_stats').value == '1'){
feed += '&rangeType=closeToMe&user=' + document.getElementById('displayName').value;
}
}
}
var eventIds = document.getElementById('eventIds').value;
if(fltEvent != ''){
if(fltEvent.split('_').length == 1){
feed += '&raceDayEvents=' + fltEvent + '&outputType=event';
}
else {
feed += '&raceDayEvents=' + fltEvent + '&outputType=overall';
}
loadLBDropDown(fltEvent, eventIds);
}
//console.log(feed);
//feed = '/prostreet/xml/leaderboards7.xml';
loadXMLDoc(feed, divId, function(){ racedayLBReady(divId, lbID, pageNum, fltTime, fltEvent, fltPlatform, range, start) }, function(){ racedayWait(divId) });
}
function loadLBDropDown(selectedEvent, eventIds){
document.getElementById('drp_event').innerHTML = '';
var newOption = document.createElement('option');
newOption.value = eventIds;
newOption.innerHTML = 'All';
document.getElementById('drp_event').appendChild(newOption);
var tmpEvents = eventIds.split('_');
for(var i = 0; i < tmpEvents.length; i++){
newOption = document.createElement('option');
newOption.value = i;
newOption.innerHTML = 'Event ' + (i+1);
if(+selectedEvent == i){
newOption.selected = 'true';
}
document.getElementById('drp_event').appendChild(newOption);
}
}
function loadRaceday(raceId, divId) {
var feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxGetRacedayDetailsWorkflow&id=' + raceId;
if(document.getElementById('displayName')){
if(document.getElementById('displayName').value != ''){
feed += '&user=' + document.getElementById('displayName').value + '&ns=' + document.getElementById('platformName').value;
}
}
//console.log(feed);
//var feed = '/prostreet/xml/racedays_detail.xml';
loadXMLDoc(feed, divId, function(){ racedayDetailReady(divId) }, function(){ racedayWait(divId) });
}
function loadRacedayList(filterVal, divId, pageNum) {
var feed = '';
if(filterVal == '1'){
feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxGetAllInActiveRacedaysWorkflow';
}
else if(filterVal == '2'){
feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxGetAllActiveRacedaysWorkflow';
}
else if(filterVal == '3'){
feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxGetUserRacedaysWorkflow';
}
else {
feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxGetAllRacedaysWorkflow';
}
feed += '&list_pagenum=' + pageNum + '&list_maxresults=5';
// user is logged in and has "closest to me" selected
if(document.getElementById('displayName').value != ''){
feed += '&user=' + document.getElementById('displayName').value + '&ns=' + document.getElementById('platformName').value;
}
//console.log(feed);
//feed = '/prostreet/xml/racedays_list2.xml';
loadXMLDoc(feed, divId, function(){ racedayReady(filterVal, divId, pageNum) }, function(){ racedayWait(divId) });
}
function racedayWait(divId){
var curTarget = getElm(divId);
if(!curTarget)
return;
var waitHTML = "
Loading...
"
writeHTML(curTarget,waitHTML);
}
function racedayLBReady (divId, raceId, pageNum, fltTime, fltEvent, fltPlatform, range, start) {
var retVal = "";
var curTarget = getElm(divId);
if(!curTarget)
return;
if(!xmlDocs[divId])
return;
var curXML = xmlDocs[divId].xml;
if(!curXML)
return;
clearElm(curTarget);
var retval = "";
var curHeaders = curXML.getElementsByTagName("query");
retval += getTableHeader(curHeaders, divId, ''); //leaderboard.js
var curEntries = curXML.getElementsByTagName("entry");
if(curEntries.length > 0){
retval += getTableBody(curEntries, divId, '');
}
else {
retval += "";
retval += "
";
retval += "
";
retval += "
";
retval += "
";
retval += "
";
retval += "
";
retval += "
";
}
writeHTML(curTarget,retval);
var nlScrollbar = new scrollbar("na_leadboard_listing_scroll","leaderboard_listing_scroll");
//Paging Call
var curResults = curXML.getElementsByTagName("results");
var pageHTML = '';
if(curResults.length > 0){
pageHTML = loadLBPages(+curResults[0].getAttribute('size'), divId, raceId, pageNum, fltTime, fltEvent, fltPlatform, range, start);
document.getElementById('paganation').innerHTML = pageHTML;
}
}
function racedayDetailReady(divId){
if(!xmlDocs[divId])
return;
var curXML = xmlDocs[divId].xml;
if(!curXML)
return;
var curRaces = curXML.getElementsByTagName("RaceDay");
var nodeValue;
var nodeName;
var raceDayId;
for(var i=0; i < curRaces.length; i++) {
for(var j=0; j < curRaces[i].childNodes.length; j++) {
if(curRaces[i].childNodes[j].nodeType == 1){
nodeName = curRaces[i].childNodes[j].nodeName;
curRaces[i].childNodes[j].firstChild ? nodeValue = curRaces[i].childNodes[j].firstChild.nodeValue : nodeValue = '';
if(nodeName == 'description') {
document.getElementById('rd_desc').innerHTML = nodeValue;
}
else if(nodeName == 'endDateTime') {
document.getElementById('rd_endsons').innerHTML = buildDate(+nodeValue, "m/d/yyyy h:MM:ss TT");
}
else if(nodeName == 'imageDetailLink') {
document.getElementById('rd_img').src = nodeValue;
}
else if(nodeName == 'sponsorName'){
document.getElementById('rd_sponsor').innerHTML = nodeValue;
}
else if(nodeName == 'sponsorLink'){
document.getElementById('rd_sponser_link').href = nodeValue;
}
else if(nodeName == 'imageSponsorLink') {
document.getElementById('rd_sponsor_img').src = nodeValue;
}
else if(nodeName == 'prizes') {
if(nodeValue == ''){
document.getElementById('rd_prizes_label').style.display = 'none';
document.getElementById('rd_prizes').style.display = 'none';
}
else {
document.getElementById('rd_prizes').innerHTML = nodeValue;
}
}
else if(nodeName == 'rulesLink') {
if(nodeValue == ''){
document.getElementById('rd_rules_label').style.display = 'none';
document.getElementById('rd_rules_link').style.display = 'none';
document.getElementById('rd_accept_rules').style.display = 'none';
}
else {
document.getElementById('rd_rules').innerHTML = nodeValue;
}
}
else if(nodeName == 'startDateTime') {
document.getElementById('rd_startsons').innerHTML = buildDate(+nodeValue, "m/d/yyyy h:MM:ss TT");
}
else if(nodeName == 'title') {
document.getElementById('rd_img').alt = nodeValue;
document.getElementById('rd_title').innerHTML = nodeValue;
}
else if(nodeName == 'difficulty') {
document.getElementById('rd_difficulty').innerHTML = nodeValue;
}
else if(nodeName == 'location') {
document.getElementById('rd_location').innerHTML = nodeValue;
}
else if(nodeName == 'mode') {
document.getElementById('rd_mode').innerHTML = nodeValue;
}
else if(nodeName == 'repairMarkers') {
document.getElementById('rd_repair').innerHTML = nodeValue;
}
else if(nodeName == 'active'){
if(+nodeValue == 2){ // race complete
document.getElementById('rd_accept_rules').style.display = 'none';
}
}
else if(nodeName == 'userJoined'){
if(nodeValue == 'true'){ // user already joined
document.getElementById('rd_accept_rules').style.display = 'none';
}
}
//console.log(j + " : " + nodeName + " : " + nodeValue);
}
}
}
}
function racedayReady(filterVal, divId, pageNum){
var retVal = "";
var curTarget = getElm(divId);
if(!curTarget)
return;
if(!xmlDocs[divId])
return;
var curXML = xmlDocs[divId].xml;
if(!curXML)
return;
clearElm(curTarget);
retVal += '';
retVal += '';
retVal += '';
retVal += '';
retVal += '';
retVal += '';
retVal += '';
var curRaces = curXML.getElementsByTagName("RaceDay");
var nodeValue;
var nodeName;
var raceDayId;
var raceDays = new Array()
for(var i=0; i < curRaces.length; i++) {
//console.log(curRaces[i].getAttribute('id'));
raceDayId = curRaces[i].getAttribute('id');
for(var j=0; j < curRaces[i].childNodes.length; j++) {
if(curRaces[i].childNodes[j].nodeType == 1){
nodeName = curRaces[i].childNodes[j].nodeName;
if(nodeName == 'leaderboardInfo'){
var tmpLBInfo = curRaces[i].childNodes[j].childNodes;
for(var k = 0; k < tmpLBInfo.length; k++){
if(tmpLBInfo[k].nodeType == 1){
nodeName = tmpLBInfo[k].nodeName;
raceDays[nodeName] = tmpLBInfo[k].firstChild ? tmpLBInfo[k].firstChild.nodeValue : '';
}
}
}
else{
raceDays[nodeName] = curRaces[i].childNodes[j].firstChild ? curRaces[i].childNodes[j].firstChild.nodeValue : '';
//console.log(j + " : " + nodeName + " : " + nodeValue);
}
}
}
var detailUrl = 'viewRaceday.jsp?raceId=' + raceDayId + '&lbId=' + raceDays['racedayId'] + '&eventIds=' + raceDays['overallEvents'] + '&raceActive=' + raceDays['active'] + '&userJoined=' + raceDays['userJoined'] + '&isCommunity=' + raceDays['community'];
retVal += '';
retVal += '';
if(raceDayId != ''){
retVal += '' + raceDays['title'] + ' ' + raceDays['sponsorName'] + ' | ';
}
else {
retVal += '' + raceDays['title'] + ' ' + raceDays['sponsorName'] + ' | ';
}
retVal += '' + buildDate(+raceDays['startDateTime'], "m/d/yyyy h:MM:ss TT") + ' | ';
retVal += '' + buildDate(+raceDays['endDateTime'], "m/d/yyyy h:MM:ss TT") + ' | ';
retVal += '' + raceDays['location'] + ' | ';
if(raceDays['userJoined'] == 'true'){
if(raceDayId != ''){
retVal += '' + document.getElementById('locale_results').value + ' > | ';
}
else {
retVal += ' | ';
}
}
else {
if(raceDays['active'] == '0'){
retVal += '' + document.getElementById('locale_join').value + ' > | ';
}
else if(raceDays['active'] == '1'){
retVal += '' + document.getElementById('locale_join').value + ' > | ';
}
else if(raceDays['active'] == '2'){
if(raceDayId != ''){
retVal += '' + document.getElementById('locale_results').value + ' > | ';
}
else {
retVal += ' | ';
}
}
}
retVal += '
';
}
retVal += '
';
document.getElementById(divId).innerHTML = retVal;
var curPages = curXML.getElementsByTagName("pagingInfo");
document.getElementById('paganation').innerHTML = loadPaganation(curPages, filterVal, divId, pageNum);
}
function checkLoggedInDetail(detailUrl){
//var tmpUrl = 'http://www.beta.ea.com/prostreet/' + detailUrl; //beta
var tmpUrl = 'http://www.ea.com/prostreet/' + detailUrl; //prod
var userName = document.getElementById('displayName').value;
if(userName != ''){ // logged in
window.location.href = tmpUrl
}
else {
//window.location.href = 'https://profile.integration.ea.com/login.do?surl=' + encodeURIComponent(tmpUrl) + '&selectprofile=true®istrationSource=EA-EA.com'; //beta
window.location.href = 'https://profile.ea.com/login.do?surl=' + encodeURIComponent(tmpUrl) + '&selectprofile=true®istrationSource=EA-EA.com';
}
return false;
}
function checkLoggedIn(raceId){
var userName = document.getElementById('displayName').value;
var platformName = document.getElementById('platformName').value;
if(userName == '' && platformName == ''){ //not logged in
window.location.href = 'https://profile.ea.com/login.do?surl=' + encodeURIComponent(window.location.href) + '&selectprofile=true®istrationSource=EA-EA.com';
//window.location.href = 'https://profile.integration.ea.com/login.do?surl=' + encodeURIComponent(window.location.href) + '&selectprofile=true®istrationSource=EA-EA.com';
}
else {
//feed = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxJoinRacedayWorkflow&id=' + raceId + '&ns=' + document.getElementById('platformName').value + '&user=' + userName;
if(platformName == 'XBL_SUB' || platformName == 'PS3_SUB' || platformName == 'MAIN'){
if(document.getElementById('rd_accept_rules').style.display == 'none'){ // no rules
addUser(raceId, platformName, userName);
}
else { // have rules
if(document.getElementById("chk_accept").checked == false){ // check if boxed is checked
alert('You must accept the rules');
}
else {
addUser(raceId, platformName, userName);
}
}
}
else {
alert('You must select a Need For Speed Persona to join this race');
}
}
return false;
}
function addUser(raceId, platformName, displayName ) {
url = '/racedayadmin/racedays-api/ajax.do?_workflow=AjaxJoinRacedayWorkflow&id=' + raceId + '&ns=' + platformName + '&user=' + displayName;
if (window.XMLHttpRequest) { // Non-IE browsers
req = new XMLHttpRequest();
req.onreadystatechange = function() { targetRDDiv() };
try {
req.open("GET", url, true);
} catch (e) {
alert(e);
}
req.send(null);
}
else if (window.ActiveXObject) { // IE
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = function() { targetRDDiv() };
req.open("GET", url, true);
req.send();
}
}
}
function targetRDDiv() {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
//alert(req.responseText);
document.getElementById('buttonContainer').className += " acceptSucces";
document.getElementById('buttonContainer').innerHTML = '' + document.getElementById('locale_succes').value + '
';
document.getElementById('rd_accept_rules').style.display = 'none';
} else {
//alert("Error: " + req.statusText);
alert('Error: could not add to raceday');
}
}
}
function loadPaganation(curPages, filterVal, divId, pageNum) {
var pageInfo = new Array()
for(var i=0; i < curPages.length; i++) {
for(var j=0; j < curPages[i].childNodes.length; j++) {
if(curPages[i].childNodes[j].nodeType == 1){
var nName = curPages[i].childNodes[j].nodeName;
var nValue= curPages[i].childNodes[j].firstChild.nodeValue;
pageInfo[nName] = nValue;
}
}
}
var pages = +pageInfo['numPages'];
//var pageNum = +pageInfo['currentPage']; // sets page num from value in xml
var firstPage = 0;
var prevPage = getPrevPage(+pageNum);
var lastPage = (pages - 1);
var nextPage = getNextPage(+pageNum, (pages - 1));
//list_pagenum=0
var retval = "";
retval +="<<";
retval +="<";
for(i = 0; i < pages; i++){
retval +="" + (i+1) + "";
}
retval +=">";
retval +=">>";
return retval;
}
/*
*
* results - number of results in the returned set
* pageNume - the current page number
* range - results per page
* start - starting point of data set
*/
function loadLBPages(results, divId, raceId, pageNum, fltTime, fltEvent, fltPlatform, range, start) {
//console.log(results);
var pages = Math.ceil((results + start)/range);
var prevPage = getPrevPage(pageNum);
prevPage++; // 1 indexed
var nextPage = getNextPage(pageNum, pages);
nextPage++;
//list_pagenum=0
var retval = "";
retval +="<";
for(i = 1; i <= pages; i++){
retval += "" + i + "";
}
retval +=">";
return retval;
}
/*
* getPrevPage - returns the previous page assuming the paganation is
* 0 indexed
*/
function getPrevPage(pageNum){
var prevPage;
if(pageNum == 0){
prevPage = 0;
}
else {
prevPage = pageNum - 1;
}
return prevPage;
}
/*
* getNextPage - returns the next page
*/
function getNextPage(pageNum, pages){
var nextPage;
//console.log(pageNum + ' : ' + pages);
if(pageNum == pages){
nextPage = pages;
}
else {
nextPage = pageNum + 1;
}
return nextPage;
}
function buildDate(millis, curformat){
if(millis == ''){
return " ";
}
else {
if(!(/^\d+$/.test(millis))) {
return " ";
}
else {
var tmpDate = new Date(millis);
return tmpDate.format(curformat);
}
}
}
function closeDialog(){
document.getElementById("dialog_bg").style.display = "none";
document.getElementById("dialog_alert").style.display = "none";
return false;
}
function openDialog(){
document.getElementById("dialog_bg").style.display = "block";
document.getElementById("dialog_alert").style.display = "block";
return false;
}
/*
Date Format 1.1
(c) 2007 Steven Levithan
MIT license
With code by Scott Trenda (Z and o flags, and enhanced brevity)
*/
/*** dateFormat
Accepts a date, a mask, or a date and a mask.
Returns a formatted version of the given date.
The date defaults to the current date/time.
The mask defaults ``"ddd mmm d yyyy HH:MM:ss"``.
*/
var dateFormat = function () {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloZ]|"[^"]*"|'[^']*'/g,
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
timezoneClip = /[^-+\dA-Z]/g,
pad = function (value, length) {
value = String(value);
length = parseInt(length) || 2;
while (value.length < length)
value = "0" + value;
return value;
};
// Regexes and supporting functions are cached through closure
return function (date, mask) {
// Treat the first argument as a mask if it doesn't contain any numbers
if (
arguments.length == 1 &&
(typeof date == "string" || date instanceof String) &&
!/\d/.test(date)
) {
mask = date;
date = undefined;
}
date = date ? new Date(date) : new Date();
if (isNaN(date))
throw "invalid date";
var dF = dateFormat;
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
var d = date.getDate(),
D = date.getDay(),
m = date.getMonth(),
y = date.getFullYear(),
H = date.getHours(),
M = date.getMinutes(),
s = date.getSeconds(),
L = date.getMilliseconds(),
o = date.getTimezoneOffset(),
flags = {
d: d,
dd: pad(d),
ddd: dF.i18n.dayNames[D],
dddd: dF.i18n.dayNames[D + 7],
m: m + 1,
mm: pad(m + 1),
mmm: dF.i18n.monthNames[m],
mmmm: dF.i18n.monthNames[m + 12],
yy: String(y).slice(2),
yyyy: y,
h: H % 12 || 12,
hh: pad(H % 12 || 12),
H: H,
HH: pad(H),
M: M,
MM: pad(M),
s: s,
ss: pad(s),
l: pad(L, 3),
L: pad(L > 99 ? Math.round(L / 10) : L),
t: H < 12 ? "a" : "p",
tt: H < 12 ? "am" : "pm",
T: H < 12 ? "A" : "P",
TT: H < 12 ? "AM" : "PM",
Z: (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4)
};
return mask.replace(token, function ($0) {
return ($0 in flags) ? flags[$0] : $0.slice(1, $0.length - 1);
});
};
}();
// Some common format strings
dateFormat.masks = {
"default": "ddd mmm d yyyy HH:MM:ss",
shortDate: "m/d/yy",
mediumDate: "mmm d, yyyy",
longDate: "mmmm d, yyyy",
fullDate: "dddd, mmmm d, yyyy",
shortTime: "h:MM TT",
mediumTime: "h:MM:ss TT",
longTime: "h:MM:ss TT Z",
isoDate: "yyyy-mm-dd",
isoTime: "HH:MM:ss",
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
isoFullDateTime: "yyyy-mm-dd'T'HH:MM:ss.lo"
};
// Internationalization strings
dateFormat.i18n = {
dayNames: [
"Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat",
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};
// For convenience...
Date.prototype.format = function (mask) {
return dateFormat(this, mask);
}