var scorePages = new Object;
var currentPage = new Object;
function scoresRequestPage(mapid, page) {
// console.log('scoresRequestPage', mapid, page);
if (typeof(ajax) != 'object') {
setTimeout(function() {scoresRequestPage(mapid, page)},200);
return false;
}
// Ask again if it's busy.
switch (ajax.xmlhttp.readyState) {
case 4:
case 0:
break;
default:
setTimeout(function() {scoresRequestPage(mapid, page)},300);
return false;
}
//console.log("Requesting Page", mapid, page, ajax.inUse);
// == Additionally, check for achievements.
//ajax.requestFile = "do.php?r=reqScorePage&mapid="+mapid+"&reqPage="+page;
ajax.requestFile = "a/score/"+mapid+"_"+page+".js";
ajax.onCompletion = scoresRequestPageDone; // Specify function to be executed on response.
//ajax.onLoading = '';
//ajax.onLoaded = '';
//ajax.onFail = '';
ajax.runAJAX();// Do it!
return true;
}
function scoresRequestLoading() {
//Signify that it's working in some manner?
//console.log("I'm loading teh page...");
}
function scoresRequestPageDone() {
//console.log("Request Page Done", ajax.response);
var JO = decryptJSON(ajax.response);
if (JO == undefined)
return;
scoresUpdatePage(JO.mapid, JO.page, scoresFormatPage(JO));
if (JO.notificationtext != undefined) {
showNotification(JO.notificationtext);
if (checkSound(JO.mapid)) {
soundManager.setVolume('achieve', 50);
setTimeout("soundManager.play('achieve');", 350);
}
}
}
function scoresUpdatePage(mapid, page, html) {
// console.log("Updating Page", mapid, page);
scoresPreparePage(mapid, page);
scorePages[mapid][page].html = html;
//if (scorePages[mapid][page] == currentPage[mapid]) {
if (page == currentPage[mapid]) {
scoresShowPage(page, mapid);
}
}
function scoresShowMyPage(mapid) {
//Future use
}
function scoresShowPage(page, mapid) {
mapid = mapid - 0;
page = page - 0;
// console.log('scoresShowPage', mapid, page);
if (scoresPreparePage(mapid, page) == false) {
currentPage[mapid] = page;
// currentPage[mapid] = scorePages[mapid][page];
//Signify some sort of loadingness?
//Request Page
scoresRequestPage(mapid, page);
return;
}
if (typeof(scorePages[mapid][page].html) === 'undefined') {
scoresRequestPage(mapid, page);
currentPage[mapid] = page;
return;
}
// console.log('scorpages', scorePages[mapid][page].html);
updateDsp(mapid, 'dspScore', scorePages[mapid][page].html);
//Also; update the page
// console.log('here', scorePages[mapid][page], currentPage[mapid], scorePages[mapid][page] != currentPage[mapid]);
if (page != currentPage[mapid]) {
scoresRequestPage(mapid, page);
}
currentPage[mapid] = page;
//currentPage[mapid] = scorePages[mapid][page];
}
function scoresPreparePage (mapid, page) {
if (typeof(scorePages[mapid]) != 'object') {
scorePages[mapid] = new Object;
scorePages[mapid][page] = new Object;
return false;
}
if (typeof(scorePages[mapid][page]) != 'object') {
scorePages[mapid][page] = new Object;
return false;
}
return true;
}
var scoresShowNavSideBtns = false;
function scoresFormatPage(JO) {
var p = "
";
//console.log("jo object", JO);
var navi = '';
if (JO.pageCount > 1) {
navi = ""+formatPageNavi(JO, "scoresShowPage", JO.mapid)+" |
";
p = p+navi;
}
var localTime = new Date();
var updatedLocalTime = new Date();
updatedLocalTime.setTime(JO.updateTime * 1000);
p = p+"";
p = p+"Rank | ";
p = p+"Name | ";
p = p+"Moves | ";
p = p+"Points | ";
p = p+"
";
var showedLastUser = true;
var x = 0;
var previousI = 0;
for (var i in JO.users) {
var u = JO.users[i];
var scoredLocalTime = new Date();
scoredLocalTime.setTime(scoredLocalTime.getTime() - u.secondsSinceScored * 1000);
var styleClass = '';
if (previousI != i + 1 && previousI < i - 1 && previousI != 0) {
styleClass = 'border-top: 6px solid #777799;';
}
var wasLongAgo = localTime.getTime() > (scoredLocalTime.getTime() + 43200000); //12*60*60*1000
var scoredTimeFormat = (wasLongAgo ? "mmm d, h:MM:ss TT" : "h:MM:ss TT");
var scoredTimeStr = scoredLocalTime.format(scoredTimeFormat);
var rowclass = 'scoreRow'+((i % 2)+1);
if (u.ID == userObj.ID) {
rowclass = 'scoreRowSelf';
}
if (typeof pointerSolutionID != 'undefined' && u.solutionID == pointerSolutionID && goToScorePointer) {
goToScorePointer = false;
setTimeout("useSolution(\""+JO.mapid+"\", \""+u.solution+"\", \""+u.moves+"\", \""+u.wallColor+"\", \""+u.wallEmblem+"\", \""+u.solutionID+"\");", 400);
rowclass += ' solutionSelected';
}
if (u.solution) {
rowclass += ' scoreRowSolutionAvailable';
p += "";
} else {
p = p+ "
";
}
// background-color: "+u.background+";
p = p+ "";
if (u.medal == 'gold') {
p = p+ " ";
} else if (u.medal == 'silver') {
p = p+ " ";
}
p = p+ i+ " | ";
p = p+ "";
p = p+ " ";
p = p+ " ";
p = p+ " ";
p = p+ " ";
p = p+ "";
p = p+ ""+u.display+"";
p = p+ " | ";
if (u.solution) {
p = p+ ""+u.moves+" | ";
p = p+ ""+u.points+" | ";
} else {
p = p+ ""+u.moves+" | ";
p = p+ " | ";
}
p = p+ "
";
previousI = i;
}
//p = p+""+navi+" |
";
p = p+navi;
p = p+"
";
var nextPage = JO.page - 0 + 1;
var prevPage = JO.page - 1;
//TODO: Re'enable this somehow?
if (JO.pageCount > 1 && scoresShowNavSideBtns) {
if (JO.page < JO.pageCount) {
p = p+">";
} else
p = ">
"+p;
if (JO.page > 1) {
p = "<"+p;
} else
p = "<
"+p;
}
p = ""+p+"
";
//console.log(p);
//console.log('jo page', JO.page);
//console.log('jo pagecount', JO.pageCount);
//javascript:scoresShowPage($mapid, $x)
//p = JO.navi+p;
return p;
}
//Memberlist related functions:
var membersPages = new Object;
var membersCurrentPage = 1;
var membersPageDivide = 50;
var membersOrderBy = 'totalMovesThisWeek';
var membersOrder = 'DESC';
function membersRequestPage(page) {
//console.log('membersRequestPage', page);
if (typeof(ajax) != 'object') {
setTimeout(function() {membersRequestPage(page)},200);
return false;
}
// Ask again if it's busy.
switch (ajax.xmlhttp.readyState) {
case 4:
case 0:
break;
default:
setTimeout(function() {membersRequestPage(page)},300);
return false;
}
//console.log("Requesting Page", page, ajax.inUse);
// == Additionally, check for achievements.
var requestString = "do.php?r=reqMemberPage&reqPage="+page+"&orderBy="+membersOrderBy
requestString += "&order="+membersOrder
requestString += "&membersPageDivide="+membersPageDivide
ajax.requestFile = requestString;
ajax.onCompletion = membersRequestPageDone; // Specify function to be executed on response.
//ajax.onLoading = '';
//ajax.onLoaded = '';
//ajax.onFail = '';
ajax.runAJAX();// Do it!
return true;
}
function membersRequestPageDone() {
//console.log("Request Page Done", ajax.response);
var JO = decryptJSON(ajax.response);
if (JO == undefined)
return;
membersUpdatePage(JO.page, membersFormatPage(JO));
}
function membersToggleOrder() {
if (membersOrder == 'ASC')
membersOrder = 'DESC';
else
membersOrder = 'ASC';
}
function membersShowPage(page, orderBy, force) {
if (orderBy) {
if (membersOrderBy == orderBy)
membersToggleOrder();
membersOrderBy = orderBy;
}
page = page - 0;
//console.log('membersShowPage', page);
if (membersPreparePage(page) == false) {
membersCurrentPage = page;
//Signify some sort of loadingness?
//Request Page
membersRequestPage(page);
return;
}
if (typeof(membersPages[page].html) === 'undefined') {
membersRequestPage(page);
membersCurrentPage = page;
return;
}
document.getElementById('members').innerHTML = membersPages[page].html
//Also; update the page
if (page != membersCurrentPage || orderBy || force) {
membersRequestPage(page);
}
membersCurrentPage = page;
}
function membersPreparePage (page) {
if (typeof(membersPages) != 'object') {
membersPages = new Object;
membersPages[page] = new Object;
return false;
}
if (typeof(membersPages[page]) != 'object') {
membersPages[page] = new Object;
return false;
}
return true;
}
function membersUpdatePage(page, html) {
//console.log("Updating Page", page);
membersPreparePage(page);
membersPages[page].html = html;
if (page == membersCurrentPage) {
membersShowPage(page);
}
}
function formatPageNavi(JO, callback) {
var r = '';
var showedPrevPage = true;
for (var i = 1; i <= JO.pageCount; i++) {
if (
(JO.page > i - 3 && JO.page < i + 3)
|| (i == 1)
|| (i == JO.pageCount)
|| (i == JO.userPage)
) {
if (!showedPrevPage)
r = r + ' ... ';
if (JO.page == i) {
r = r + " " + i + "";
} else if (i == JO.userPage) {
r = r + " " + i + '';
} else {
r = r + " " + i + '';
}
showedPrevPage = true;
} else {
showedPrevPage = false;
}
}
var nextPage = JO.page - 0 + 1;
var prevPage = JO.page - 1;
if (JO.pageCount > 1) {
if (JO.page < JO.pageCount) {
r = r+" >>>";
r = r+" >";
} else {
r = r+" >>>";
r = r+" >";
}
if (JO.page > 1) {
r = " <"+r;
r = " <<<"+r;
} else {
r = r+" <<<";
r = r+" <";
}
}
return r;
}
function membersFormatPage(JO) {
// console.log("Formating page");
var p = "";
var navi = '';
if (JO.pageCount > 1) {
navi = ""+formatPageNavi(JO, "membersShowPage")+" |
";
p = p+navi;
}
var headers = new Object;
headers['display'] = {'name':'Name', 'title':'They call him... Dovahkiin!'};
headers['championPoints'] = {'name':'Points', 'title':'Total Champion Points Earned'};
headers['totalMazes'] = {'name':'Mazes', 'title':'Total Mazes Played (aka. How Awesome You Are)'};
headers['totalMoves'] = {'name':'Moves', 'title':'Total Moves Mazed'};
headers['totalMovesThisWeek'] = {'name':'Past Week', 'title':'Total Moves In Past 7 Days (Excluding Today)'};
headers['totalTies'] = {'name':'Ties', 'title':'Total Ties'};
headers['totalWins'] = {'name':'Wins', 'title':'Total Wins - for bragging rights only'};
headers['dateJoined'] = {'name':'Joined', 'title':'Pathery Life Began'};
headers['dateLogin'] = {'name':'Last Login', 'title':'Last Pathery Fix'};
p = p+"";
p = p+"Rank | ";
var sortIndicator;
for (var i in headers) {
sortIndicator = '';
if (i == membersOrderBy) {
if (membersOrder == 'DESC')
sortIndicator = ' ⇧';
else
sortIndicator = ' ⇩';
}
p += "";
p += ""+ headers[i].name +""+sortIndicator+" | ";
}
p = p+"
";
var showedLastUser = true;
var x = 0;
var previousI = 0;
for (var i in JO.users) {
var u = JO.users[i];
var scoredLocalTime = new Date();
scoredLocalTime.setTime(scoredLocalTime.getTime() - u.secondsSinceScored * 1000);
var styleClass = '';
if (previousI != i + 1)
if (previousI < i - 1 && previousI != 0)
styleClass = 'border-top: 6px solid #777799;';
if (u.wallEmblem == undefined)
u.wallEmblem = 'blank.png';
p = p+ "";
p = p+ "";
p = p+ i+ " | ";
p = p+ "";
p = p+ " ";
p = p+ " ";
p = p+ " ";
p = p+ " ";
p = p+ " "+u.display+"";
p = p+ " | ";
p = p+ ""+u.championPoints+" | ";
p = p+ ""+u.totalMazes+" | ";
p = p+ ""+u.totalMoves+" | ";
p = p+ ""+u.totalMovesThisWeek+" | ";
p = p+ ""+u.totalTies+" | ";
p = p+ ""+u.totalWins+" | ";
p = p+ ""+u.dateJoined+" | ";
p = p+ ""+u.dateLogin+" | ";
p = p+ "
";
previousI = i;
}
p = p+navi;
p = p+"
";
return p;
}