// Copyright 2005 David Caldwell <david@porkrind.org> -*- c -*-
function elapsed(seconds){var s=[];s.unshift(Math.floor(seconds%60)+"s");seconds=Math.floor(seconds/60);if(seconds)s.unshift(Math.floor(seconds%60)+"m");seconds=Math.floor(seconds/60);if(seconds)s.unshift(Math.floor(seconds%24)+"h");seconds=Math.floor(seconds/24);if(seconds)s.unshift(Math.floor(seconds%7)+"d");seconds=Math.floor(seconds/7);if(seconds)s.unshift(Math.floor(seconds)+"w");return s.slice(0,2).join('');}
function highscore_query(url,completion){loadJSON(url,function(scores,error,status){if(error)
printf("Error loading high score table: %s\n",error);completion(scores&&scores.high_score_table,error,status);});}
function highscore_leaders(seed,options,completion){highscore_query(makeurl('query/leaders/'+seed.join(","),options),completion);}
function highscore_seed(title,seed,options,completion){highscore_query(makeurl('query/leaders/'+seed+'/'+title,options),function(scores,error,status){if(scores)scores=scores[seed];if(scores)scores=scores[title];return completion(scores,error,status);});}
function highscore_day(title,days,options,completion){highscore_query(makeurl('query/high/days/'+days+'/'+title,options),completion);}
function short_date(d){return sprintf("%d/%02d/%02d %2d:%02d%s",d.getFullYear(),d.getMonth()+1,d.getDate(),d.getHours()%12||12,d.getMinutes(),d.getHours()>=12?"pm":"am");}
function render_highscores(div,scores,play_id,append){var rows=new Array(0);var show_name=false;if(!scores){print("unable to load high scores\n");return;}
for(var i=1;i<scores.length;i++)
if(scores[i].name!=scores[i-1].name)
show_name=true;rows.push(doc.el("tr",{className:"hiscore"},scores[0]&&scores[0].place&&doc.el("th",{},doc.text("#")),doc.el("th",{},doc.text("Name")),doc.el("th",{},doc.text("Date")),show_name&&scores[0].name?doc.el("th",{},doc.text("Game")):undefined,doc.el("th",{},doc.text("Game #")),doc.el("th",{},doc.text("Score")),doc.el("th",{},doc.text("Time"))));for(var i=0;i<scores.length;i++){var d=new Date();d.setTime(scores[i].date+"000");rows.push(tr=doc.el("tr",{},scores[i].place&&doc.el("td",{},i>0&&scores[i-1].place==scores[i].place?'':doc.text(scores[i].place)),doc.el("td",{},doc.text(scores[i].user)),doc.el("td",{},doc.text(short_date(d))),show_name&&scores[i].name?doc.el("td",{},doc.text(scores[i].name)):undefined,doc.el("td",{},doc.el("a",{href:(scores[i].name?scores[i].name+".html":document.URL.split('?')[0])+
"?game="+scores[i].seed},doc.text(scores[i].seed))),doc.el("td",{align:"center"},doc.text(scores[i].score)),doc.el("td",{},doc.text(elapsed(scores[i].elapsed)))));var add_class=function(el,new_class){el.className+=(el.className?' ':'')+new_class};if(play_id&&scores[i].play_id==play_id)
add_class(tr,"lastscore");if(Login.is_logged_in()&&scores[i].user==Login.user)
add_class(tr,"myscore");if(i>0&&scores[i-1].place!=scores[i].place&&scores[i].place!=1+i)
add_class(tr,"discontinuous");}
var table=doc.el("div",{className:"highscore",style:{border:"none"}},doc.el.apply(null,["table",{}].concat(rows)));var parent=div.parentNode;if(append)
div.appendChild(table);else if(parent)
parent.replaceChild(table,div);return table;}
function append_highscores(div,scores,play_id){return render_highscores(div,scores,play_id,true);}
