/* TF2Lobby.com
 * Copyright 2010 Ryan "FLOOR_MASTER" Mannion. All rights reserved.
 * The contents of this file may not be used in any other context than
 * tf2lobby.com without permission
 */

$(document).ready(function(){window.bClasses={scout:false,soldier:false,pyro:false,demoman:false,heavy:false,engineer:false,medic:false,sniper:false,spy:false};window.classArray=["scout","soldier","pyro","demoman","heavy","engineer","medic","sniper","spy"];window.shortWeekdays=["Sun","Mon","Tue","Wed","Thur","Fri","Sat"];window.profile={qualityPrefixes:{7:"Community "},days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],selectedLobby:null,baseAvatarUrl:"http://media.steampowered.com/steamcommunity/public/images/avatars/",lobbies:{},lobbyInfoCache:{},loadBar:new Image(128,15),itemPage:1,classItems:{scout:{},soldier:{},pyro:{},demoman:{},heavy:{},engineer:{},medic:{},sniper:{},spy:{},none:{}},classEquip:{scout:0,sniper:1,soldier:2,demoman:3,medic:4,heavy:5,pyro:6,spy:7,engineer:8},selectedItemClass:"none",selectedClassKillsClass:"none",selectedClassKillsType:"Kills",favorites:{weapon:null,weaponCount:0,"class":null,classCount:0,map:null,mapCount:0},mapLobbies:{}};window.profile.loadBar.src="/img/loadBar.gif";window.tooltip=new Tooltip();window.items=new Object();window.itemId=0;$(".dialog").dialog({modal:true,autoOpen:false,height:370,open:function(i,m){$(".ui-dialog-titlebar-close").hide()},width:475});$(window).mousedown(function(i){window.disableTooltip=true}).mouseup(function(i){window.disableTooltip=false});if(window.startedLobbies.length>0){$("#noLobbies").hide()}else{$("#lhInfo").hide()}$("#itemNavButton").click(function(i){i.preventDefault();if(window.profile.itemPage==1){window.profile.itemPage=2;$(this).html("&lt;&lt;");$("ul#tf2ItemList li.itemPage1").hide();$("ul#tf2ItemList li.itemPage2").show()}else{window.profile.itemPage=1;$(this).html("&gt;&gt;");$("ul#tf2ItemList li.itemPage1").show();$("ul#tf2ItemList li.itemPage2").hide()}$("div#itemNav span#itemNavPage").html("Page "+window.profile.itemPage+" of 2")});var d={};for(var g=window.startedLobbies.length-1;g>=0;g--){var f=window.startedLobbies[g];var l=new LobbyHistory(f);if(window.profile.mapLobbies[f.mapName]==null){window.profile.mapLobbies[f.mapName]={mapPreview:f.mapPreview,lobbies:[]}}window.profile.mapLobbies[f.mapName].lobbies.push(l);window.profile.lobbies[l.id]=l;var e=l.getTimeKey();if(d[e.key]==null){d[e.key]=$.extend(e,{lobbies:[l]})}else{d[e.key].lobbies.push(l)}}for(var j in d){var e=d[j];var k=$('<h3><a href="#">'+window.profile.months[e.month-1]+" "+e.year+" ("+e.lobbies.length+(e.lobbies.length==1?" lobby)":" lobbies)")+"</a></h3>").appendTo("#lhAccordion");var a=$("<div></div>").addClass("lhContent").appendTo("#lhAccordion");var c=$("<ul></ul>").appendTo(a);for(var h in e.lobbies){var l=e.lobbies[h];l._listNode.appendTo(c)}}$("div#chooseClassBackpack img.classIcon").addClass("pointer").click(function(i){window.profile.selectedItemClass=$(this).attr("type");buildItemInfoList()});$("#lhAccordion").accordion({autoHeight:true,collapsible:false});if(window.tf2Items!=null&&window.tf2Items[0]!="Access denied"){buildSlots();parseItems(window.tf2Items);$("#noBackpack").hide();$("div#chooseClassBackpack img.classIcon").each(function(){var n=$(this).attr("type");var o=0;for(var m in window.profile.classItems[n]){o+=window.profile.classItems[n][m].count}window.tooltip.setup($(this),window.translate.className[n]+" - "+o+(o==1?" item":" items"))});buildItemInfoList()}else{$("#yesBackpack").hide()}$("#resetItemsButton").click(function(n){n.preventDefault();for(var m in window.items){window.items[m].destroy();delete window.items[m]}if(window.tf2Items[0]!="Access denied"){parseItems(window.tf2Items)}window.profile.itemPage=1;$("#itemNavButton").html("&gt;&gt;");$("ul#tf2ItemList li.itemPage1").show();$("ul#tf2ItemList li.itemPage2").hide();buildItemInfoList()});$("#craftItemsButton").click(function(i){i.preventDefault();craftItems()});if(window.stats.total.matches>0){buildCStats();$("#noStats").hide()}else{$("#yesStats").hide()}var b=$("#lhAccordion > div").eq($("#lhAccordion h3").index($("#lhAccordion h3.ui-state-active"))).find("ul > li:first").attr("lobbyId");window.profile.lobbies[b].onClick()});function buildCStats(){window.stats.classes=new Object();for(var h in window.stats.cClasses.rawData){var a=new Object();for(var d in window.stats.cClasses.columns){a[window.stats.cClasses.columns[d]]=window.stats.cClasses.rawData[h][d]}window.stats.classes[a["class"]]=a}window.stats.weapons=new Object();for(var h in window.stats.cWeapons.rawData){var a=new Object();for(var d in window.stats.cWeapons.columns){a[window.stats.cWeapons.columns[d]]=window.stats.cWeapons.rawData[h][d]}window.stats.weapons[a.weapon]=a}window.stats.maps=new Object();for(var h in window.stats.cMaps.rawData){var a=new Object();for(var d in window.stats.cMaps.columns){a[window.stats.cMaps.columns[d]]=window.stats.cMaps.rawData[h][d]}window.stats.maps[a.map]=a}window.stats.intervals=new Object();for(var h in window.stats.cIntervals.rawData){var a=new Object();for(var d in window.stats.cIntervals.columns){a[window.stats.cIntervals.columns[d]]=window.stats.cIntervals.rawData[h][d]}window.stats.intervals[a.interval]=a}window.stats.wIntervals=new Object();for(var h=0;h<7;h++){window.stats.wIntervals[h]={kills:0,deaths:0,assists:0}}window.stats.hIntervals=new Object();for(var h=0;h<24;h++){window.stats.hIntervals[h]={kills:0,deaths:0,assists:0}}for(var c in window.stats.intervals){var k=parseInt(c/(24*2));var f=parseInt((c%(24*2))/2);window.stats.wIntervals[k].kills+=window.stats.intervals[c].kills;window.stats.wIntervals[k].deaths+=window.stats.intervals[c].deaths;window.stats.wIntervals[k].assists+=window.stats.intervals[c].assists;window.stats.hIntervals[f].kills+=window.stats.intervals[c].kills;window.stats.hIntervals[f].deaths+=window.stats.intervals[c].deaths;window.stats.hIntervals[f].assists+=window.stats.intervals[c].assists}var l=window.stats.total;$("#tKills").html(l.kills);$("#tAssists").html(l.assists);$("#tDeaths").html(l.deaths);$("#tKADRatio").html((l.deaths==0?0:Math.round((l.kills+l.assists)/l.deaths*100)/100));window.tooltip.setup($("#tKADRatio").parent(),"Kills and Assists : Deaths Ratio");$("#tKAPM").html(l.time>60?Math.round((l.kills+l.assists)/(l.time/60)*100)/100:0);window.tooltip.setup($("#tKAPM").parent(),"Kills + Assists per Minute");$("#tMatches").html(l.matches);var g=(l.missing>0?Math.round(l.missing/(l.missing+l.matches)*100)+"%":"0%");window.tooltip.setup($("#tLobbies").html(window.startedLobbies.length+"/"+l.missing+"<sup>*</sup>").parent(),window.startedLobbies.length+" matches played total<br/>"+l.matches+" matches with recorded stats reflected here<br/>"+l.missing+" matches detected as no-shows/ragequits ("+g+")");$("#tTimePlayed").html(String.secondsToDuration(l.time));$("#tKillStreak").html(l.killStreak);window.tooltip.setup($("#tKillStreakContainer").addClass("pointer").click(function(i){i.preventDefault();window.open("/stats/lobby?id="+l.killStreakLobbyId)}),"Click to view Match Stats for player's best kill streak");$("#tDeathStreak").html(l.deathStreak);window.tooltip.setup($("#tDeathStreakContainer").addClass("pointer").click(function(i){i.preventDefault();window.open("/stats/lobby?id="+l.deathStreakLobbyId)}),"Click to view Match Stats for player's worst death streak");$("#tHealing").html(l.healing);$("#tHealing").html(l.ubers);$("ul#chooseClassStats li img").click(function(n){n.preventDefault();var i=$(this).attr("type");buildClassStats(i);window.profile.selectedClassKillsClass=i;buildClassKillsChart(window.profile.selectedClassKillsClass,window.profile.selectedClassKillsType)}).addClass("pointer");$("#classKillsType").click(function(i){i.preventDefault();if(window.profile.selectedClassKillsType=="Kills"){window.profile.selectedClassKillsType="Deaths"}else{window.profile.selectedClassKillsType="Kills"}buildClassKillsChart(window.profile.selectedClassKillsClass,window.profile.selectedClassKillsType)});buildClassTimeChart();buildClassKillsTable();buildClassStats("none");buildClassKillsChart("none","Kills");buildWeaponsTable();buildBuildTable();buildMedicTable();if(window.profile.favorites.weapon==null){for(var e in window.stats.weapons){window.profile.favorites.weapon=e;break}}buildWeaponKDChart(window.profile.favorites.weapon);buildWeaponChart("Kills");buildWeaponChart("Deaths");buildWIntervalChart();buildHIntervalChart();buildMapHistory(window.stats.cMaps.fMap);window.tooltip.setup($("#fClass").html('<img src="/img/class/'+window.profile.favorites["class"]+'.png" class="classIcon"/>'),window.translate.className[window.profile.favorites["class"]]+" - "+String.secondsToDuration(window.profile.favorites.classCount)+" played");var b="/img/weaps/"+window.profile.favorites.weapon+".png";var j=false;if(window.translate.weaponImages[window.profile.favorites.weapon]!=null){b="/img/backpack/"+window.translate.weaponImages[window.profile.favorites.weapon]+".png";j=true}var m=window.tooltip.setup($("#fWeapon").html('<img src="'+b+'" class="weapon" width="70"/>'),window.translate.weapons[window.profile.favorites.weapon]+" - "+window.profile.favorites.weaponCount+" kills");if(j==true){m.find("img").css({position:"relative",top:"-15px"})}if(window.stats.cMaps.fMap!=null){window.tooltip.setup($("#fMap").html('<img src="/img/maps/'+window.stats.cMaps.fMapImage+'" class="map"/>'),window.stats.cMaps.fMap+" - "+window.stats.cMaps.fMapCount+" matches")}buildMapsTable();$("#weaponsTablePager .pagesize").change()}function buildMapHistory(b){$("#mapHistoryPreview").attr("src","/img/maps/"+window.profile.mapLobbies[b].mapPreview);$("#mapHistoryName").html(b);var c=$("table#mapTable");$("#mhCpCaptures").html(window.stats.maps[b].cpCaptures);$("#mhCpBlocks").html(window.stats.maps[b].cpBlocks);$("#mhFlagCaptures").html(window.stats.maps[b].flagCaptures);$("#mhFlagDefends").html(window.stats.maps[b].flagDefends);c.find("tr:even").addClass("even");c.find("tr:odd").addClass("odd");c.find("td").each(function(d,e){$(e).attr("zero",($(e).html()=="0"||$(e).html()=="0s"))});var a=$("table#mapTable2");$("#mhDominations").html(window.stats.maps[b].dominations);$("#mhDominated").html(window.stats.maps[b].dominated);$("#mhRevenges").html(window.stats.maps[b].revenges);$("#mhSuicides").html(window.stats.maps[b].suicides);a.find("tr:even").addClass("even");a.find("tr:odd").addClass("odd");a.find("td").each(function(d,e){$(e).attr("zero",($(e).html()=="0"||$(e).html()=="0s"))})}function buildClassStats(f){var a=new Array();var j=new Array();var h=new Array();if(f=="none"){var g=window.stats.total;$("#classKDClass").html("All");for(var b in window.classArray){var d=window.classArray[b];j.push([(b*3)+1,g[d+"Kills"]]);h.push([(b*3)+2,g[d+"Deaths"]]);a.push([(b*3)+2,'<img src="/img/class/'+d+'.png" class="classIcon" />'])}}else{$("#classKDClass").html(window.translate.className[f]);var e=window.stats.classes[f];for(var b in window.classArray){var d=window.classArray[b];j.push([(b*3)+1,e[d+"Kills"]]);h.push([(b*3)+2,e[d+"Deaths"]]);a.push([(b*3)+2,'<img src="/img/class/'+d+'.png" class="classIcon" />'])}}var i=$.plot("#classKDChart",[{data:j,label:"Kills",bars:{show:true}},{data:h,label:"Deaths",bars:{show:true}}],{xaxis:{ticks:a},legend:{show:true,position:"ne",labelBoxBorderColor:null,backgroundColor:"#2a2725",backgroundOpacity:0.25},grid:{hoverable:true}});$("#classKDChartData").html("");var c=(f=="none"?"For all classes":"As "+window.translate.className[f]);$("#classKDChart").bind("plothover",function(l,n,m){if(m!=null){var k=window.translate.className[window.classArray[m.dataIndex]];$("#classKDChartData").html(c+", killed "+j[m.dataIndex][1]+" "+k+", killed by "+h[m.dataIndex][1]+" "+k)}})}function buildWIntervalChart(){var f=new Array();var a=new Array();var d=new Array();var c=new Array();for(var b in window.shortWeekdays){a.push([b+0.5,window.stats.wIntervals[b].kills]);d.push([b+0.5,window.stats.wIntervals[b].deaths]);c.push([b+0.5,window.stats.wIntervals[b].assists]);f.push([b+0.5,window.shortWeekdays[b]])}var e=$.plot("#wIntervalChart",[{data:a,label:"Kills"},{data:d,label:"Deaths"},{data:c,label:"Assists"}],{xaxis:{ticks:f},legend:{show:true,position:"ne",labelBoxBorderColor:null,backgroundColor:"#2a2725",backgroundOpacity:0.25}})}function buildHIntervalChart(){var j=new Array();var a=new Array();var f=new Array();var e=new Array();var h=new Date();var g=h.getTimezoneOffset()/60;var c=function(i){i-=g;if(i<0){i+=24}var k=parseInt(i);var d=parseInt((i*60)%60);return((k<10?"0":"")+k+":"+(d<10?"0":"")+d)};for(var b in window.stats.hIntervals){a.push([b+0.5,window.stats.hIntervals[b].kills]);f.push([b+0.5,window.stats.hIntervals[b].deaths]);e.push([b+0.5,window.stats.hIntervals[b].assists]);if(b%6==0){j.push([b+0.5,c(b)])}}window.profile.hIntervalChart=$.plot("#hIntervalChart",[{data:a,label:"Kills"},{data:f,label:"Deaths"},{data:e,label:"Assists"}],{xaxis:{ticks:j},legend:{show:true,position:"ne",labelBoxBorderColor:null,backgroundColor:"#2a2725",backgroundOpacity:0.25},crosshair:{mode:"x",color:"white"}})}function buildWeaponKDChart(a){var b=new Array();var i=new Array();var g=new Array();var f=window.translate.weapons[a];$("#weaponsKDWeapon").html(f);var e=window.stats.weapons[a];for(var c in window.classArray){var d=window.classArray[c];i.push([(c*3)+1,e[d+"Kills"]]);g.push([(c*3)+2,e[d+"Deaths"]]);b.push([(c*3)+2,'<img src="/img/class/'+d+'.png" class="classIcon" />'])}var h=$.plot("#weaponsKDChart",[{data:i,label:"Kills",bars:{show:true}},{data:g,label:"Deaths",bars:{show:true}}],{xaxis:{ticks:b},legend:{show:true,position:"ne",labelBoxBorderColor:null,backgroundColor:"#2a2725",backgroundOpacity:0.25},grid:{hoverable:true}});$("#weaponsKDChartData").html("");$("#weaponsKDChart").bind("plothover",function(m,o,n){if(n!=null){var l=window.translate.className[window.classArray[n.dataIndex]];var j=window.translate.classPlural[window.classArray[n.dataIndex]];var k=(window.translate.weaponClasses[a]=="none"?"":" as "+window.translate.className[window.translate.weaponClasses[a]]);$("#weaponsKDChartData").html(f+": Killed "+i[n.dataIndex][1]+" "+j+k+", died as "+l+" "+g[n.dataIndex][1]+" times.")}})}function buildWeaponChart(c){var f=new Array();var d=c.toLowerCase();var e=window.stats.weapons;for(var b in window.stats.weapons){if(window.stats.weapons[b][d]>0){f.push({data:window.stats.weapons[b][d],label:'<img src="/img/weaps/'+b+'.png" width="35" class="weapon" type="'+b+'"/>'})}}var a=$.plot("#weapon"+c+"Chart",f,{series:{pie:{show:true,stroke:{width:0,color:"#2a2725"},label:{show:true},combine:{threshold:0.03,label:"Other"}}},legend:{show:false},grid:{hoverable:true}});$("#weapon"+c+"ChartData").html("");$("#weapon"+c+"Chart").bind("plothover",function(i,k,j){if(j!=null){var h=parseFloat(j.series.percent).toFixed(2);var g=$(j.series.label).attr("type");$("#weapon"+c+"ChartData").html((g==null?"Other":window.translate.weapons[g])+": "+j.series.data[0][1]+" "+d+" ("+h+"%)").css({color:j.series.color})}})}function buildClassKillsChart(e,d){var g=new Array();$("#classKillsType").html(d);if(e=="none"){$("#classKillsClass").html("All");var f=window.stats.total;for(var c in window.classArray){var b=window.stats.total[window.classArray[c]+d];if(b>0){g.push({data:b,label:'<img src="/img/class/'+window.classArray[c]+'.png" width="35" class="classIcon" type="'+window.classArray[c]+'"/>'})}}}else{$("#classKillsClass").html(window.translate.className[e]);var f=window.stats.classes[e];for(var c in window.classArray){var b=f[window.classArray[c]+d];if(b>0){g.push({data:b,label:'<img src="/img/class/'+window.classArray[c]+'.png" class="classIcon" type="'+window.classArray[c]+'"/>'})}}}var a=$.plot("#classKillsChart",g,{series:{pie:{show:true,stroke:{width:0,color:"#2a2725"},label:{show:true},combine:{threshold:0.03,label:"Other"}}},legend:{show:false},grid:{hoverable:true}});$("#classKillsChartData").html("");var h=(e=="none"?"For all classes":"As "+window.translate.className[e]);$("#classKillsChart").unbind("plothover").bind("plothover",function(k,m,l){if(l!=null){var j=parseFloat(l.series.percent).toFixed(2);var i=$(l.series.label).attr("type");$("#classKillsChartData").html((i==null?"Other":window.translate.className[i])+": "+(d=="Kills"?"Killed ":"Killed by ")+l.series.data[0][1]+" ("+j+"%)").css({color:l.series.color})}})}function buildClassTimeChart(){var e=new Array();var d=window.stats.classes;for(var a in d){var c=d[a];if(c.time>0){e.push({data:c.time,label:'<img src="/img/class/'+a+'.png" class="classIcon" type="'+a+'"/>'})}}var b=$.plot("#classTimeChart",e,{series:{pie:{show:true,stroke:{width:0,color:"#2a2725"},label:{show:true},combine:{threshold:0.03,label:"Other"}}},legend:{show:false},grid:{hoverable:true}});$("#classTimeChartData").html("");$("#classTimeChart").bind("plothover",function(h,j,i){var g=parseFloat(i.series.percent).toFixed(2);var f=$(i.series.label).attr("type");$("#classTimeChartData").html((f==null?"Other":window.translate.className[f])+": "+String.secondsToDuration(i.series.data[0][1])+" ("+g+"%)").css({color:i.series.color})})}function buildMapsTable(){var b=$("table#mapsTable");var c=$("<thead></thead>").appendTo(b);var g=$("<tr></tr>").appendTo(c);var a=$("<tbody></tbody>").appendTo(b);$("<th></th>").html("Name").appendTo(g);window.tooltip.setup($("<th></th>").html("M").appendTo(g),"Number of Matches Played");$("<th></th>").html("Time").appendTo(g);window.tooltip.setup($("<th></th>").html("K").appendTo(g),"Kills");window.tooltip.setup($("<th></th>").html("A").appendTo(g),"Assists");window.tooltip.setup($("<th></th>").html("D").appendTo(g),"Deaths");window.tooltip.setup($("<th></th>").html("R").appendTo(g),"Rate: Kills + Assists per Minute");window.tooltip.setup($("<th></th>").html("KA:D").appendTo(g),"Kills and Assists : Deaths Ratio");for(var d in window.stats.maps){var f=window.stats.maps[d];var e=$("<tr></tr>").appendTo(a);$("<td></td>").html(f.map).attr("mapName",d).appendTo(e).addClass("pointer").click(function(i){i.preventDefault();var h=$(this).attr("mapName");buildMapHistory(h)});$("<td></td>").html(f.matches).appendTo(e);$("<td></td>").html(String.secondsToDuration(f.time)).appendTo(e);$("<td></td>").html(f.kills).appendTo(e);$("<td></td>").html(f.assists).appendTo(e);$("<td></td>").html(f.deaths).appendTo(e);$("<td></td>").html((f.time/60>0?Math.round((f.kills+f.assists)/(f.time/60)*100)/100:0)).appendTo(e);$("<td></td>").html((f.deaths==0?0:(Math.round((f.kills+f.assists)/f.deaths*100)/100))).appendTo(e)}b.find("td").each(function(h,i){$(i).attr("zero",($(i).html()=="0"||$(i).html()=="0s"))});b.tablesorter({widgets:["zebra"]});if(window.stats.cMaps.rawData.length>5){b.tablesorterPager({container:$("#mapsTablePager"),size:5})}else{$("#mapsTablePager").hide()}}function buildMedicTable(){var a=$("table#medicTable");$("#mtHealing").html(window.stats.total.healing);$("#mtUberDeploys").html(window.stats.total.uberDeploys);$("#mtUberDrops").html(window.stats.total.uberDrops);$("#mtUbersDropped").html(window.stats.total.ubersDropped);window.tooltip.setup($("#mtUbersDroppedName"),"Medics player killed that had an Ubercharge available");$("#mtTime").html(String.secondsToDuration(window.stats.classes.medic.time));a.find("tr:even").addClass("even");a.find("tr:odd").addClass("odd")}function buildBuildTable(){var h=$("table#buildTable");var e=$("<thead></thead>").appendTo(h);var a=$("<tr></tr>").appendTo(e);var c=$("<tbody></tbody>").appendTo(h);$("<th></th>").html("&nbsp;").appendTo(a);window.tooltip.setup($("<th></th>").html('<img src="/img/weaps/wrench.png" class="weapon"/>').appendTo(a),"Bulids");window.tooltip.setup($("<th></th>").html('<img src="/img/weaps/world.png" class="weapon"/>').appendTo(a),"Destroys");var d=["Dispensers","Entrances","Exits","Sentries","Sappers"];var f=window.stats.total;for(var b in d){var g=d[b];var j=$("<tr></tr>").appendTo(c);$("<td></td>").html(g).appendTo(j);$("<td></td>").html(f["build"+g]).appendTo(j);$("<td></td>").html(f["kill"+g]).appendTo(j)}h.tablesorter({widgets:["zebra"]})}function buildWeaponsTable(){var k=$("table#weaponsTable");var h=$("<thead></thead>").appendTo(k);var a=$("<tr></tr>").appendTo(h);var e=$("<tbody></tbody>").appendTo(k);var j=$("<tfoot></tfoot>").appendTo(k);var f=$("<tr></tr>").appendTo(j);$("<th></th>").attr("colspan",2).addClass("rightBorder").html("&nbsp;").appendTo(f);$("<th></th>").attr("colspan",window.classArray.length+1).addClass("rightBorder").html('Kills - <span class="note">Classes you killed with this weapon</span>').appendTo(f);$("<th></th>").attr("colspan",window.classArray.length+1).html('Deaths - <span class="note">Deaths by this weapon while playing class</span>').appendTo(f);$("<th></th>").html("").css({width:"185px"}).appendTo(a);window.tooltip.setup($("<th></th>").html("C").addClass("rightBorder").appendTo(a),"Weapon Class");for(var d in window.classArray){$("<th></th>").html('<img src="/img/class/'+window.classArray[d]+'.png" class="classIcon"/>').appendTo(a)}window.tooltip.setup($("<th></th>").html("K").addClass("rightBorder").appendTo(a),"Kills");for(var d in window.classArray){$("<th></th>").html('<img src="/img/class/'+window.classArray[d]+'.png" class="classIcon"/>').appendTo(a)}window.tooltip.setup($("<th></th>").html("D").appendTo(a),"Deaths");for(var b in window.stats.weapons){var c=window.stats.weapons[b];var l=$("<tr></tr>").appendTo(e);$("<td></td>").html('<img src="/img/weaps/'+b+'.png" width="30" class="weapon"/>'+window.translate.weapons[b]).attr("weapon",b).addClass("pointer").click(function(i){i.preventDefault();buildWeaponKDChart($(this).attr("weapon"))}).appendTo(l);$("<td></td>").html('<img src="/img/class/'+window.translate.weaponClasses[b]+'.png" class="classIcon"/>').addClass("rightBorder").appendTo(l);for(var g in window.stats.classes){$("<td></td>").html(c[g+"Kills"]).appendTo(l)}$("<td></td>").html(c.kills).addClass("rightBorder").appendTo(l);if(c.kills>window.profile.favorites.weaponCount){window.profile.favorites.weaponCount=c.kills;window.profile.favorites.weapon=b}for(var g in window.stats.classes){$("<td></td>").html(c[g+"Deaths"]).appendTo(l)}$("<td></td>").html(c.deaths).appendTo(l)}k.find("td").each(function(i,m){$(m).attr("zero",($(m).html()=="0"||$(m).html()=="0s"))});k.tablesorter({widgets:["zebra"],sortList:[[window.classArray.length+2,1]]});if(window.stats.cWeapons.rawData.length>10){k.tablesorterPager({container:$("#weaponsTablePager")});$("#weaponsTablePager .pagesize").change(function(i){var m=parseInt($(this).val());m=Math.min(m,window.stats.cWeapons.rawData.length);$("#weaponsTableContainer").css({height:((m+2)*29)+"px"})})}else{$("#weaponsTablePager").hide();$("#weaponsTableContainer").css({height:"auto"})}}function buildClassKillsTable(){var j=$("table#classKillsTable");var e=$("<thead></thead>").appendTo(j);var a=$("<tr></tr>").appendTo(e);var c=$("<tbody></tbody>").appendTo(j);var b=$("<tfoot></tfoot>").appendTo(j);var d=$("<tr></tr>").appendTo(b);var i=0;for(var f in window.stats.classes){i++}$("<th></th>").html('<img src="/img/class/none.png" class="classIcon main"/>All').addClass("pointer").addClass("rightBorder").attr("type","none").click(function(n){n.preventDefault();var m=$(this).attr("type");buildClassStats(m);window.profile.selectedClassKillsClass=m;buildClassKillsChart(window.profile.selectedClassKillsClass,window.profile.selectedClassKillsType)}).appendTo(d);$('<th colspan="'+(i+4)+'"></th>').html('Kills - <span class="note">Number of times you killed this class</span>').addClass("rightBorder").appendTo(d);$('<th colspan="'+(i+1)+'"></th>').html('Deaths - <span class="note">Number of times this class killed you</span>').addClass("rightBorder").appendTo(d);$("<th></th>").html("").addClass("rightBorder").appendTo(a);for(var f in window.stats.classes){var l=window.stats.classes[f];$("<th></th>").html('<img src="/img/class/'+l["class"]+'.png" class="classIcon"/>').appendTo(a);var k=$("<tr></tr>").appendTo(c);$("<td></td>").html('<img src="/img/class/'+l["class"]+'.png" class="classIcon main"/>'+window.translate.className[l["class"]]).addClass("pointer").attr("type",l["class"]).click(function(n){n.preventDefault();var m=$(this).attr("type");buildClassStats(m);window.profile.selectedClassKillsClass=m;buildClassKillsChart(window.profile.selectedClassKillsClass,window.profile.selectedClassKillsType)}).appendTo(k);for(var h in window.stats.classes){$("<td></td>").html(l[h+"Kills"]).appendTo(k)}$("<td></td>").html(l.kills).appendTo(k);$("<td></td>").html(l.assists).appendTo(k);$("<td></td>").html(l.killStreak).appendTo(k);$("<td></td>").html((l.time/60>0?Math.round((l.kills+l.assists)/(l.time/60)*100)/100:0)).appendTo(k);for(var h in window.stats.classes){$("<td></td>").html(l[h+"Deaths"]).appendTo(k)}$("<td></td>").html(l.deaths).appendTo(k);$("<td></td>").html((l.deaths==0?0:(Math.round((l.kills+l.assists)/l.deaths*100)/100))).appendTo(k);$("<td></td>").html(String.secondsToDuration(l.time)).attr("val",l.time).appendTo(k);if(l.time>window.profile.favorites.classCount){window.profile.favorites.classCount=l.time;window.profile.favorites["class"]=f}}window.tooltip.setup($("<th></th>").html("K").appendTo(a),"Kills");window.tooltip.setup($("<th></th>").html("A").appendTo(a),"Assists");window.tooltip.setup($("<th></th>").html("S").appendTo(a),"Best Kill Streak");window.tooltip.setup($("<th></th>").html("R").addClass("rightBorder").appendTo(a),"Rate: Kills + Assists per Minute");for(var f in window.stats.classes){$("<th></th>").html('<img src="/img/class/'+f+'.png" class="classIcon"/>').appendTo(a)}window.tooltip.setup($("<th></th>").html("D").addClass("rightBorder").appendTo(a),"Deaths");window.tooltip.setup($("<th></th>").html("KA:D").appendTo(a),"Kills and Assists : Deaths Ratio");$("<th></th>").html("Time").appendTo(a);j.find("tr").each(function(m,n){$(n).find("td:eq(0)").addClass("rightBorder");$(n).find("td:eq("+(i+4)+")").addClass("rightBorder");$(n).find("td:eq("+((i*2)+5)+")").addClass("rightBorder")});j.find("td").each(function(m,n){$(n).attr("zero",($(n).html()=="0"||$(n).html()=="0s"))});$.tablesorter.addParser({id:"duration",is:function(m){return false},format:function(m){return String.durationToSeconds(m)},type:"numeric"});var g=new Object();g[(window.stats.classes.length*2)+6]={sorter:"duration"};j.tablesorter({widgets:["zebra"],headers:g})}function buildSummaryTable(){var b=$("table#summaryTable");var c=$("<thead></thead>").appendTo(b);var d=$("<tr></tr>").appendTo(c);var a=$("<tbody></tbody>").appendTo(b);$("<th></th>").html("Kills").appendTo(d)}function buildItemInfoList(){$("ul#tf2ItemInfoList").empty();for(var b in window.profile.classItems[window.profile.selectedItemClass]){var a=window.profile.classItems[window.profile.selectedItemClass][b];var c=$('<li><img src="/img/backpack/'+a.image+'.png" class="item"/><div class="count">x '+a.count+"</div></li>").appendTo("ul#tf2ItemInfoList");if(a.equipped){c.addClass("equipped")}window.tooltip.setup(c,buildItemTooltip(b,a.quality))}}function craftItems(){var c=new Array();$("ul#craftingSlots li img.item").each(function(g,h){var i=$(h).attr("itemId");c.push(window.items[i])});var f=1;var b=false;if(c.length==2){if(c[0].isHat()&&c[1].isHat()){var d=window.classArray[Math.floor(Math.random()*window.classArray.length)];var e=window.crafting.classHats[d];var a=e[Math.floor(Math.random()*e.length)];b=buildCraftedItem(c,a,1)}if(c[0].isCraftToken()&&c[0].itemClass=="class_token"&&c[1].isWeapon()){b=buildCraftedItem(c,window.crafting.classTokens[c[1].lastClassUsed],1)}else{if(c[0].isWeapon()&&c[1].isCraftToken()&&c[1].itemClass=="class_token"){b=buildCraftedItem(c,window.crafting.classTokens[c[0].lastClassUsed],1)}}if(c[0].isCraftToken()&&c[0].itemClass=="slot_token"&&c[1].isWeapon()){b=buildCraftedItem(c,window.crafting.slotTokens[c[1].slot],1)}else{if(c[0].isWeapon()&&c[1].isCraftToken()&&c[1].itemClass=="slot_token"){b=buildCraftedItem(c,window.crafting.slotTokens[c[0].slot],1)}}}else{if(c.length==3){if(c[0].isWeapon()&&c[1].isWeapon()&&c[2].isWeapon()&&Array.classesMatch(c)){b=buildCraftedItem(c,5000,1)}else{if(c[0].isCraftBar()&&c[1].isCraftBar()&&c[2].isCraftBar()){if(c[0].mil==1&&c[1].mil==1&&c[2].mil==1){b=buildCraftedItem(c,5001,1)}else{if(c[0].mil==2&&c[1].mil==2&&c[2].mil==2){b=buildCraftedItem(c,5002,1)}else{if(c[0].mil==3&&c[1].mil==3&&c[2].mil==3){var d=window.classArray[Math.floor(Math.random()*window.classArray.length)];var e=window.crafting.classHats[d];var a=e[Math.floor(Math.random()*e.length)];b=buildCraftedItem(c,a,1)}}}}else{if(c[0].isCraftToken()&&c[1].isCraftToken()&&c[2].isCraftToken()){b=buildCraftedItem(c,5001,1)}else{if((b=tryFabricateClassWeapon(c))==true){}}}}}else{if(c.length==4){if(Array.slotsMatch(c)){if(c[0].slot in window.crafting.slotTokens){b=buildCraftedItem(c,window.crafting.slotTokens[c[0].slot],1)}}else{if(Array.classesMatch(c)){b=buildCraftedItem(c,window.crafting.classTokens[c[0].lastClassUsed],1)}}}else{if(c.length==5){if((b=tryFabricateClassHat(c))==true){}}}}}if(b==true){}else{$("ul#craftingSlots img.item").each(function(g,h){var i=$(h).attr("itemId");window.items[i].reset()})}}function tryFabricateClassHat(a){var d=0;var e=null;if(a.length!=5){return false}for(var c in a){if(a[c].isCraftToken()&&a[c].itemClass=="class_token"){e=a[c].lastClassUsed}else{if(a[c].isCraftBar()&&a[c].mil==3){d++}}}if(d==4&&e!=null){var f=window.crafting.classHats[e];if(f.length>0){var b=Math.floor(Math.random()*f.length);return buildCraftedItem(a,f[b],1)}}return false}function tryFabricateClassWeapon(b){var g=null;var f=null;var d=false;if(b.length!=3){return false}for(var e in b){if(b[e].isCraftToken()){if(b[e].itemClass=="slot_token"){f=b[e].slot}else{if(b[e].itemClass=="class_token"){g=b[e].lastClassUsed}}}else{if(b[e].isCraftBar()&&b[0].mil==1){d=true}}}if(g!=null&&f!=null&&d){var a=window.crafting.classWeapons[g][f];if(a!=null&&a.length>0){var c=Math.floor(Math.random()*a.length);return buildCraftedItem(b,a[c],1)}}return false}Array.slotsMatch=function(b){if(b.length==0){return false}var a=b[0].slot;for(var c in b){if(b[c].slot!=a){return false}}return true};Array.classesMatch=function(a){if(a.length==0){return false}var c=a[0].lastClassUsed;for(var b in a){if(a[b].lastClassUsed!=c){return false}}return true};function buildCraftedItem(a,d,f){if(f==null){f=1}if(a.length==0){return false}for(var b in a){a[b].destroy(true);delete a[b]}var e=$("ul#tf2ItemList li:not(:has(img)):first");if(e.length==0){return false}var c=parseInt(e.attr("slot"))+1;$("#newitemImage").attr("src","/img/backpack/"+window.itemsGame[d].image+".png");$("#newitemName").html(window.itemsGame[d].name).removeClass().addClass("quality"+f);window.setTimeout(function(){var g=new Item({defindex:d,inventory:c,quality:f});g.img.draggable({containment:"#yesBackpack",revert:"invalid",stop:function(h,i){window.disableTooltip=false}});buildItemInfoList();$("#newitemDialog").dialog("open")},750);return true}function buildSlots(){window.itemSlots=new Array();for(var a=0;a<100;a++){window.itemSlots[a]=new ItemSlot({id:a,type:"item"},"ul#tf2ItemList")}window.craftingSlots=new Array();for(var a=0;a<12;a++){window.craftingSlots[a]=new ItemSlot({id:a,type:"crafting"},"ul#craftingSlots")}}function parseItems(b){for(var d in b){var a=b[d];var c=new Item(a)}$("ul#tf2ItemList li img").draggable({containment:"#yesBackpack",revert:"invalid",stop:function(e,f){window.disableTooltip=false}});$("ul.itemSlots li:not(:has(.item))").droppable({accept:".item",drop:function(e,f){var g=$(f.draggable).attr("itemId");window.items[g].move(this)}})}function Item(a,c){this.defindex=a.defindex;this.inventory=parseInt(a.inventory);this.quality=a.quality;this.invSlot=(this.inventory&255)-1;this.equipped=((this.inventory&33488896)!=0);this.name=window.itemsGame[this.defindex].name;this.craftClass=window.itemsGame[this.defindex].craft;this.mil=window.itemsGame[this.defindex].mil;this.slot=window.itemsGame[this.defindex].slot;this.itemClass=window.itemsGame[this.defindex].iclass;this.lastClassUsed=null;this.id=window.itemId++;window.items[this.id]=this;this.classEquipped=$.extend(true,{},window.bClasses);window.itemSlots[this.invSlot]=this;if(c==null){this._parentNode=$('ul#tf2ItemList li[slot="'+this.invSlot+'"]');if(window.itemsGame[this.defindex].classes.length){for(var d in window.itemsGame[this.defindex].classes){var e=window.itemsGame[this.defindex].classes[d];var b=((((this.inventory&33488896)>>16)&(1<<window.profile.classEquip[e]))!=0);this.lastClassUsed=e;this.classEquipped[e]|=true;if(window.profile.classItems[e][this.defindex]==null){window.profile.classItems[e][this.defindex]={image:window.itemsGame[this.defindex].image,name:window.itemsGame[this.defindex].name,equipped:b,count:1,quality:this.quality}}else{window.profile.classItems[e][this.defindex].count++;window.profile.classItems[e][this.defindex].equipped|=b;window.profile.classItems[e][this.defindex].quality=Math.max(window.profile.classItems[e][this.defindex].quality,this.quality)}}}else{if(window.profile.classItems.none[this.defindex]==null){window.profile.classItems.none[this.defindex]={image:window.itemsGame[this.defindex].image,name:window.itemsGame[this.defindex].name,equipped:false,count:1,quality:this.quality}}else{window.profile.classItems.none[this.defindex].count++;window.profile.classItems.none[this.defindex].quality=Math.max(window.profile.classItems.none[this.defindex].quality,this.quality)}}}else{this._parentNode=c}this._firstParentNode=this._parentNode;this.img=$('<img src="/img/backpack/'+window.itemsGame[this.defindex].image+'.png" class="item"/>').attr("itemId",this.id).appendTo(this._parentNode).dblclick(function(g){g.preventDefault();var f=window.items[$(this).attr("itemId")];var h=$("ul#craftingSlots li:not(:has(img)):first");if(h.length==0){return false}f.move(h);window.disableTooltip=false;window.tooltip.hide()});if(this.equipped){this._parentNode.addClass("equipped")}window.tooltip.setup(this.img,buildItemTooltip(this.defindex,this.quality,a.attributes));return this}Item.prototype.destroy=function(b){if(window.itemsGame[this.defindex].classes.length){for(var c in window.itemsGame[this.defindex].classes){var d=window.itemsGame[this.defindex].classes[c];window.profile.classItems[d][this.defindex].count--;if(window.profile.classItems[d][this.defindex].count==0){delete window.profile.classItems[d][this.defindex]}}}else{window.profile.classItems.none[this.defindex].count--;if(window.profile.classItems.none[this.defindex].count==0){delete window.profile.classItems.none[this.defindex]}}this._parentNode.droppable({accept:".item",drop:function(e,f){var g=$(f.draggable).attr("itemId");window.items[g].move(this)}});this.img.draggable("destroy");var a=this.img;if(b){this.img.hide("puff",null,null,function(){a.remove()})}else{this.img.remove()}delete window.items[this.id]};Item.prototype.isHat=function(){return(this.craftClass=="hat")};Item.prototype.isWeapon=function(){return(this.craftClass=="weapon")};Item.prototype.isCraftBar=function(){return(this.craftClass=="craft_bar")};Item.prototype.isCraftToken=function(){return(this.craftClass=="craft_token")};Item.prototype.reset=function(){if(this._firstParentNode!=this._parentNode){this.move(this._firstParentNode)}};Item.prototype.move=function(a){this._parentNode.removeClass("equipped");this.img.appendTo(a).css({left:"0px",top:"0px"});this._parentNode.droppable({accept:".item",drop:function(b,c){var d=$(c.draggable).attr("itemId");window.items[d].move(this)}});$(a).droppable("destroy");if(this.equipped&&$(a).attr("slotType")=="item"){$(a).addClass("equipped")}this._parentNode=$(a)};function buildItemTooltip(e,h,c){var a=window.itemsGame[e].name;if(window.profile.qualityPrefixes[h]!=null){a=window.profile.qualityPrefixes[h]+" "+a}var a=$("<div></div>").html(a).addClass("quality"+h);var j=$("<div></div>").append(a);if(window.itemsGame[e].attributes!=null){for(var i in window.itemsGame[e].attributes){if(e==164||e==165||e==166||e==170){continue}var g=window.itemsGame[e].attributes[i];if(window.itemsAttributes[i].fmt.match(/percentage$/)!=null){g*=100}if(window.itemsAttributes[i].fmt.match(/inverted_percentage$/)!=null){g=100-g}var d=window.itemsAttributes[i].desc.replace(/%s1/,g);d=d.replace(/\\n/,"<br/>");if(d.match(/unused/)==null&&i.match(/particle/)==null){j.append('<div class="gray">'+d+"</div>")}}}if(c!=null){for(var i in c){var g=c[i];var f=window.itemsAttributesByKey[i];var d=window.itemsAttributes[f].desc.replace(/%s1/,parseInt(g));if(e==164||e==165||e==166||e==170){var b=new Date(parseInt(c[143])*1000);d=window.itemsAttributes[f].desc.replace(/%s1/,b.toDateString())}if(f.match(/particle/)==null){j.append('<div class="gray">'+d+"</div>")}}}return j}function ItemSlot(b,a){this.id=b.id;this.type=b.type;this._listNode=$("<li></li>").attr("slotType",this.type).attr("slot",this.id);if(this.type=="item"){this._listNode.addClass("itemPage"+(parseInt(this.id/50)+1))}this._listNode.appendTo(a);return this}function LobbyHistory(a){this.startTime=null;this.name=a.name;this.id=a.lobbyId;this.mapPreview=a.mapPreview;this.mapName=a.mapName;this.statsAvailable=a.statsAvailable;var b=new Date();b.setTime(a.startTime*1000);this.startTime=b;this._listNode=$("<li></li>").addClass("pointer").attr("lobbyId",this.id);this._mapNode=$('<img src="/img/maps/'+this.mapPreview+'" class="mapPreview"/>').appendTo(this._listNode);this._dateNode=$('<div class="date">'+String.secondsToDateTime(this.startTime.getTime()/1000)+"</div>").appendTo(this._listNode);this._nameNode=$('<div class="lobbyName">'+this.name+"</div>").appendTo(this._listNode);this._mapNameNode=$('<div class="mapName">'+this.mapName+"</div>").appendTo(this._listNode);this._clearNode=$("<div></div>").addClass("clear").appendTo(this._listNode);var c=this;this._listNode.click(function(d){c.onClick(d)});return this}LobbyHistory.prototype.onClick=function(a){if(a!=null){a.preventDefault()}if(window.profile.selectedLobby!=null){window.profile.lobbies[window.profile.selectedLobby]._listNode.removeClass("active")}this._listNode.addClass("active");window.profile.selectedLobby=this.id;$("#lhInfo .note").hide();$("#lhInfo #lhiBody").hide();$("#lhInfo div#loadBar").show();if(window.profile.lobbyInfoCache[this.id]==null){$.post("/ajax/lobbyhistory",{context:$.toJSON(window.context),lobbyId:this.id},function(b){window.profile.lobbyInfoCache[b.lobbyId]=b;generateLobbyInfo(b);$("#lhInfo div#loadBar").hide();$("#lhInfo #lhiBody").show()},"json")}else{generateLobbyInfo(window.profile.lobbyInfoCache[this.id]);$("#lhInfo div#loadBar").hide();$("#lhInfo #lhiBody").show()}};function generateLobbyInfo(g){var b=g.lobbyHistory.info;$(".lobbyId").html(b.lobbyId);var j=["blu","red"];for(var f in j){var c=j[f];$("#"+c+"LhiList").empty();for(var e in g.lobbyHistory.members[c]){var h=g.lobbyHistory.members[c][e];var a=$("<li></li>").addClass("pointer").appendTo("#"+c+"LhiList");var d=$('<a href="/profile?id='+h.accountId+'"></a>').appendTo(a);var i=$('<img src="'+window.profile.baseAvatarUrl+h.avatar+'" class="avatar"/>').appendTo(d);var k=$('<div><img src="/img/class/'+h["class"]+'.png" class="classIcon"/>'+h.name.htmlEncode()+"</div>");if(h.accountId==b.leaderId){i.addClass("lobbyLeader").addClass(c);k.append('<div class="note">Lobby Leader</div>')}window.tooltip.setup(a,k)}}$("#lhiMap").html(b.mapName);$("#mapPreview").attr("src","/img/maps/"+b.mapPreview);$("#lhiGameType").html(window.translate.lobbyOptions.game_type[b.gameType]);$("#lhiClassLimits").html(window.translate.lobbyOptions.class_limits[b.classLimits]);$("#lhiVoiceOptions").html(window.translate.lobbyOptions.voice_options[b.voiceOptions]);$("#lhiDamage").html(window.translate.lobbyOptions.damage[b.damage]);if(b.statsAvailable==true){$("#statsAvailable").show();$("#statsAvailable a").attr("href","/stats/lobby?id="+g.lobbyId)}else{$("#statsAvailable").hide()}}LobbyHistory.prototype.getTimeKey=function(){return{key:this.startTime.getFullYear()+(this.startTime.getMonth()<9?"0"+(this.startTime.getMonth()+1):""+(this.startTime.getMonth()+1)),month:this.startTime.getMonth()+1,year:this.startTime.getFullYear()}};