(function(d){d.widget("pp.ppgrid",{options:{colModel:[],colId:null,click:null,showLoading:true,treeTable:false},_create:function(){var a=this,c,b="",e=this.options.colModel;for(c=0;c<e.length;++c)b+='<th class="pp-grid-hcell pp-grid-hcell-'+e[c].name+'">'+e[c].label+"</th>";this.element.append('<div class="pp-grid-outer"><div class="pp-grid-container"><table cellpadding="0" cellspacing="0"><thead><tr class="ui-state-default">'+b+'</tr></thead><tbody></tbody></table></div><div class="pp-grid-hcontainer"><table cellpadding="0" cellspacing="0"><thead><tr class="ui-state-default">'+
b+'</tr></thead></table></div><div class="pp-grid-loading ui-state-highlight ui-corner-all">Loading...</div></div>');this.id="pp-grid-id-"+ ++d.pp.ppgrid._idGen;this.outer=this.element.children(".pp-grid-outer");this.container=this.outer.children(".pp-grid-container");this.table=this.container.children("table");this.thead=this.table.children("thead");this.tbody=this.table.children("tbody");this.hcontainer=this.outer.children(".pp-grid-hcontainer");this.htable=this.hcontainer.children("table");this.hthead=
this.htable.children("thead");this.loading=this.outer.children(".pp-grid-loading");this.idIndex={};this._onClick=function(f){a.tbody.children(".pp-grid-selected").removeClass("pp-grid-selected ui-state-highlight");d(this).addClass("pp-grid-selected");a.options.click&&a.options.click(f.data)};this.container.bind("treetable-toggle",function(){a._contentUpdated()});this.container.bind("scroll",function(){a._onScroll()});this._contentUpdated();this.options.showLoading&&this.loading.fadeIn("normal")},
load:function(a,c){var b,e,f,h,i,g=this.options.colModel;if(!c){this.idIndex={};this.tbody.children().remove()}for(c=0;c<a.length;++c){f=a[c];e="";for(b=0;b<g.length;++b){h=g[b].name;i=f[h];if(i==undefined||i==null)i="";e=e+'<td class="pp-grid-cell pp-grid-cell-'+h+'">'+i+"</td>"}e='<tr class="ui-widget-content pp-grid-row">'+e+"</tr>";b=d(e).appendTo(this.tbody);b.hover(this._onHoverIn,this._onHoverOut);typeof f._rowId!="undefined"&&b.attr("id",this.id+"-row-"+f._rowId);typeof f._rowParent!="undefined"&&
b.addClass("child-of-"+this.id+"-row-"+f._rowParent);f._rowExpanded&&b.addClass("expanded");f._rowNoClick?b.addClass("pp-grid-row-branch"):b.bind("click",f,this._onClick);if(this.options.colId)this.idIndex[f[this.options.colId]]=b}this.options.treeTable&&this.table.treeTable({initialState:"collapsed"});this._contentUpdated();this.loading.fadeOut("normal")},updateRow:function(a,c){var b,e;if(a in this.idIndex){a=this.idIndex[a];for(b in c)if(c.hasOwnProperty(b)){e=c[b];if(e==undefined||e==null)e="";
a.find(".pp-grid-cell-"+b).html(e)}this._contentUpdated()}},clear:function(){this.load([],false)},resize:function(){this._syncHeaders();this._onScroll()},_contentUpdated:function(){this._syncHeaders();this._onScroll()},_syncHeaders:function(){var a=this.thead.children("tr").children("th"),c=this.hthead.children("tr").children("th");this.htable.width("0px");c.each(function(b,e){d(e).width(a.eq(b).width()-1+"px")});this.htable.width(this.table.width()-0+"px");this.hcontainer.width(this.container[0].clientWidth+
"px")},_onHoverIn:function(){d(this).addClass("ui-state-hover")},_onHoverOut:function(){d(this).removeClass("ui-state-hover")},_onScroll:function(){this.htable.css({left:0-this.container.scrollLeft()+"px"})}});d.extend(d.pp.ppgrid,{version:"0.2",_idGen:0})})(jQuery);cbOpts=$.extend({adBoard:true,adHeader:true,adLarge:false,adLargish:false,adLeft:true,adRight:true,analysis:true,chat:true,embed:0,header:true,miniAnalysis:false,resizable:true,tabGameRight:0,tabRooms:true},cbOpts);
var SIMPUB_BASE="/chessbomb",cbShowAds=false,cbLayoutDefaults={closable:false,resizable:cbOpts.resizable,spacing_open:5,spacing_closed:5},connectedBefore=false,isClosing=false,nickname=userNickname,communication=null,tabsPanel=null;function nodeFromId(d){return d.replace("__","/")}function idFromNode(d){return d.replace("/","__")}function parseJid(d){return{node:Strophe.getNodeFromJid(d)||"",domain:Strophe.getDomainFromJid(d)||"",resource:Strophe.getResourceFromJid(d)||""}}
function htmlEnc(d){d=d.replace(/&/g,"&amp;");d=d.replace(/</g,"&lt;");d=d.replace(/>/g,"&gt;");d=d.replace(/\"/g,"&quot;");return d=d.replace(/\n/g,"<br />")}function constructDiv(d,a,c){return"<div "+(a?' class="'+a+'"':"")+(c?' id="'+c+'"':"")+">"+(d||"")+"</div>"}function constructWidget(d,a,c,b){return constructDiv(a,"ui-layout-"+d+" ui-widget-content"+(c?" "+c:""),b)}
function constructTabsWidget(d,a,c,b){return constructWidget(d,"<ul></ul>"+(b?b:"")+'<div class="ui-layout-content"></div>',a,c)}function constructWidgetHeader(d,a,c){return constructDiv(d,"ui-widget-header cb-header"+(a?" "+a:""),c)}function constructWidgetFooter(d,a,c){return constructDiv(d,"ui-widget-header cb-footer"+(a?" "+a:""),c)}function constructWidgetContent(d,a,c){return constructDiv(d,"ui-layout-content"+(a?" "+a:""),c)}
function constructAccordion(d,a,c){return constructDiv(d,"cb-accordion"+(a?" "+a:""),c)}function constructAccordionHeader(d,a){return'<h3 class="cb-accordion-header'+(a?" "+a:"")+'"><a href="#">'+(d||"")+"</a></h3>"}function constructAccordionPanel(d,a,c){return constructDiv(d,"cb-accordion-panel"+(a?" "+a:""),c)}function constructAdContainer(d){if(!cbShowAds)return"";return constructDiv('<div class="cb-ad-holder'+(d?" "+d:"")+'"></div>',"cb-ad-container")}
function constructAdContainerHalf(d){if(!cbShowAds)return"";return constructDiv('<div class="cb-ad-holder-half'+(d?" "+d:"")+'"></div>',"cb-ad-container")}function constructAdContainerLeaderboard(d){if(!cbShowAds)return"";return constructDiv('<div class="cb-ad-holder-leaderboard'+(d?" "+d:"")+'"></div>',"cb-ad-container-leaderboard")}
function constructHelpTrigger(){return constructWidgetFooter('Help<span class="ui-icon ui-icon-help cb-inline-block" style="vertical-align: top;" />',"cb-help-trigger ui-state-highlight")}function bindHelpTrigger(d,a){var c=function(){$(document).bind("click",b);d.unbind("click",c);a.fadeIn("normal");return false},b=function(){d.bind("click",c);$(document).unbind("click",b);a.fadeOut("normal");return false};d.bind("click",c)}
function cbShortenPlayerName(d){var a,c=d;c=c.replace(/^[A-Z]{1,3}[ .,]+/,"");if(a=c.match(/^([a-z'-]+) +([a-z' -]+)/i))return a[2].replace(/^ +/,"").replace(/ +$/,"");if(a=c.match(/^([a-z'-]+)/i))return a[1];return d}function cbAdFollowHolder(d,a){if(d&&d.length>0){d=d.offset();if(d.left<0||d.top<0)return}else d={left:-5000,top:0};a.css({left:d.left+"px",top:d.top+"px"})}
function resizePaneChildren(d,a,c,b,e){a.children(".ui-layout-content").children(".cb-pane-layout").each(function(){var f=$(this).data("cb-pane-layout");f&&f.resizeAll()})}function cbTrackPageView(d){try{pageTracker&&pageTracker._trackPageview(d);pageTrackerJV&&pageTrackerJV._trackPageview(d)}catch(a){}}function centerElement(d){var a=d.outerWidth(),c=d.outerHeight();d.css({left:"50%",top:"50%","margin-left":-Math.floor(a/2)+"px","margin-top":-Math.floor(c/2)+"px"})}
function tabsInit(d){d.tabs({});d.children(".ui-tabs-nav").sortable({containment:"window"});d.removeClass("ui-corner-all ui-widget");return d}function tabsResizeMarker(d){return d.children(".ui-tabs-nav").height()}function tabsResize(d,a){if(!(a&&a==tabsResizeMarker(d))){mainLayout.sizeContent("center");$(window).resize()}}
function tabsAdd(d,a,c,b,e){var f;f=tabsResizeMarker(d);d.tabs("add",a,c);$(a).appendTo(d.children(".ui-layout-content"));a=d.children("ul").find("a[href='"+a+"']").parents("li:first");if(b){a.append('<span class="ui-tabs-close ui-icon ui-icon-close"></span>');c=a.children(".ui-tabs-close:last");c.click(function(){if(!(d.tabs("length")<=1)){var h=tabsResizeMarker(d);try{b()}catch(i){}try{d.tabs("remove",d.tabs("option","selected"))}catch(g){}tabsResize(d,h)}})}e&&a.addClass(e);tabsResize(d,f);return d}
function filterTestData(d){var a,c=[];if(accountStaff())return d;for(a=0;a<d.length;++a)d[a].id.substr(0,7)!="cbtest-"&&c.push(d[a]);return c}function getResultBoth(d){if(d=="1/2-1/2")return"&#189;-&#189;";return d}function getResultWhite(d){if(d=="*")return"*";d=getResultBoth(d);return d.substr(0,d.indexOf("-"))}function getResultBlack(d){if(d=="*")return"*";d=getResultBoth(d);return d.substr(d.indexOf("-")+1)}function getDateStr(d){return(new Date(d*1E3)).toDateString()}
var CB_TYPE_GUEST=0,CB_TYPE_REGISTERED=1,CB_TYPE_PREMIUM=2,CB_TYPE_PREMIUM_EXTRA=3;function getAccountType(){if(!userAuthenticated)return CB_TYPE_GUEST;if(typeof cbTypeToken=="undefined")return CB_TYPE_REGISTERED;return cbTypeToken%7}function accountPremium(){return getAccountType()>=CB_TYPE_PREMIUM}function accountPremiumExtra(){return getAccountType()>=CB_TYPE_PREMIUM_EXTRA}function accountStaff(){return typeof cbDNKROZStaff!="undefined"&&cbDNKROZStaff}accountPremium()||(cbShowAds=true);
if(!cbShowAds){cbOpts.adHeader=false;cbOpts.adBoard=false;cbOpts.adLeft=false;cbOpts.adRight=false}function cbMoveToCBN(d){return d.split("_")[0]}function cbMoveToLAN(d){d=cbMoveToCBN(d);if(d.charAt(0)=="P")return d.substr(1);if(d=="Ke1-g1"||d=="Ke8-g8")return"O-O";if(d=="Ke1-c1"||d=="Ke8-c8")return"O-O-O";return d}
function cbMoveToSAN(d){d=d.split("_");var a=d[0];if(d.length>1)return d[1];if(a=="Ke1-g1"||a=="Ke8-g8")return"O-O";if(a=="Ke1-c1"||a=="Ke8-c8")return"O-O-O";if(a.charAt(0)=="P"){if(a.charAt(3)=="x")return a.charAt(1)+"x"+a.substr(4);return a.substr(4)}if(a.charAt(3)=="x")return a.charAt(0)+"x"+a.substr(4);return a.charAt(0)+a.substr(4)}
(function(d){d.widget("cb.chessboard",{options:{fieldSize:40,flipped:false,numbering:true,onMove:null},_create:function(){this.id=++d.cb.chessboard._idGen;this.pieces={};this.highlights={};this._render();this.options.fieldSize||this.autoSize()},add:function(a,c,b){var e="cb-board-pid-"+this.id+"-"+b;this.remove(b);this.pieces[b]={color:a,piece:c};d("#"+e).addClass("cb-board-piece-"+a+c)},remove:function(a){var c,b=this.pieces[a];if(b){c="cb-board-pid-"+this.id+"-"+a;d("#"+c).removeClass("cb-board-piece-"+
b.color+b.piece);delete this.pieces[a]}},move:function(a){var c=a.substr(0,2);a=a.substr(3,2);var b;if(c!=a){b=this.pieces[c];this.add(b.color,b.piece,a);this.remove(c)}},highlight:function(a,c){var b="cb-board-fid-"+this.id+"-"+a;if(c){d("#"+b).addClass("cb-board-highlight");this.highlights[a]=true}else{d("#"+b).removeClass("cb-board-highlight");delete this.highlights[a]}},clear:function(){var a=this;d.each(this.pieces,function(c){a.remove(c)})},clearHighlight:function(){var a=this;d.each(this.highlights,
function(c){a.highlight(c,false)})},setup:function(a){var c=this;this.clear();d.each(a,function(b,e){c.add(e.color,e.code,b)})},initial:function(){var a=["R","N","B","Q","K","B","N","R"],c=["a","b","c","d","e","f","g","h"],b;this.clear();for(b=0;b<8;++b){this.add("W",a[b],c[b]+"1");this.add("B",a[b],c[b]+"8");this.add("W","P",c[b]+"2");this.add("B","P",c[b]+"7")}},setFieldSize:function(a){var c=this.element.children(".cb-board");c.removeClass("cb-board-size-"+this.options.fieldSize);this.options.fieldSize=
a;c.addClass("cb-board-size-"+this.options.fieldSize)},autoSize:function(a,c){a||(a=this.element.innerWidth());c||(c=this.element.innerHeight());var b=d.cb.chessboard.fieldSizes;a=Math.floor(((a<c?a:c)-44)/8);c=b[0];var e;for(e=1;e<b.length;++e){if(b[e]>a)break;c=b[e]}this.setFieldSize(c)},flip:function(){var a=this;this.options.flipped=!this.options.flipped;this._render();d.each(this.pieces,function(c,b){a.add(b.color,b.piece,c)});d.each(this.highlights,function(c,b){a.highlight(c,b)})},_render:function(){var a,
c,b,e,f,h,i="",g;for(a=0;a<=9;++a){b=this.options.flipped?a:9-a;g='<div class="cb-board-row">';for(c=0;c<=9;++c){e=String.fromCharCode("a".charCodeAt(0)+(this.options.flipped?8-c:c-1));if(c>=1&&c<=8&&a>=1&&a<=8){f=e+b;e="cb-board-fid-"+this.id+"-"+f;f="cb-board-pid-"+this.id+"-"+f;h=(a+c)%2==0?"w":"b";g+='<span class="cb-board-field cb-board-xsize cb-board-ysize cb-board-'+h+'field" id="'+e+'"><span class="cb-board-highlight-frame"></span><div class="cb-board-piece cb-board-xsize cb-board-ysize" id="'+
f+'"></div></span>'}else if(this.options.numbering){e=c==0||c==9?a==0||a==9?" ":b:e;f=c==0||c==9?a==0||a==9?"":" cb-board-ysize":" cb-board-xsize";g+='<span class="cb-board-numbering'+f+'">'+e+"</span>"}}g+="</div>";i+=g}i='<div class="cb-board cb-board-size-'+this.options.fieldSize+'">'+i+"</div>";this.element.html(i)}});d.extend(d.cb.chessboard,{version:"0.2",fieldSizes:[20,24,32,36,40,48,56,64,72,80],_idGen:0,F_WHITE:"W",F_BLACK:"B",P_KING:"K",P_QUEEN:"Q",P_ROOK:"R",P_BISHOP:"B",P_KNIGHT:"N",P_PAWN:"P"})})(jQuery);
function go(d,a,c){getTabGame(c).cbViewer.go(d,a)}function refresh(d){getTabGame(d).cbViewer.removeAnalysisMoves()}
function util(){this.cloneArray=function(d){for(var a=[],c=-1;c<d.length;++c)a[c]=d[c];return a};this.isEven=function(d){return!(d%2)};this.isOdd=function(d){return!this.isEven(d)};this.h2d=function(d){return parseInt(d,16)};this.d2h=function(d){return d.toString(16)};this.getRGB=function(d){if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(d))return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)]};this.interpolateColor=function(d){var a={r:48,g:96,b:192},c=
{r:224,g:32,b:32},b=a.r+Math.round((c.r-a.r)*d),e=a.g+Math.round((c.g-a.g)*d);d=a.b+Math.round((c.b-a.b)*d);return"#"+this.d2h(b)+this.d2h(e)+this.d2h(d)};this.flattenEval=function(d){var a=Math.E,c=Math.abs(d);a=Math.log(c+1)/Math.log(a);c=Math.min(a,c);return d>=0?c:-c}}util=new util;function Piece(d,a,c){this.code=d;this.color=a;this.field=c}
function Board(d){this.init=function(a){this.pieces={};this.setFEN(null);this.view=a};this.setPiece=function(a){this.pieces[a.field]=a};this.delPiece=function(a){delete this.pieces[a]};this.getPiece=function(a){return this.pieces[a]};this.makeMove=function(a){var c=a.substr(1,2),b=a.substr(4,2),e=this.getPiece(c),f=this.getPiece(b);if(e){e.field=b;this.delPiece(c);this.setPiece(e);if(e.code=="K")if(c=="e1"&&b=="g1")this.makeMove(" h1-f1");else if(c=="e1"&&b=="c1")this.makeMove(" a1-d1");else if(c==
"e8"&&b=="g8")this.makeMove(" h8-f8");else c=="e8"&&b=="c8"&&this.makeMove(" a8-d8");else if(a.substr(6,1)=="="){a=a.substr(7,1);e.code=a}else if(a.substr(0,1)=="P"&&a.substr(3,1)=="x")f||this.delPiece(b.substr(0,1)+c.substr(1,1))}};this.startPosition=function(){this.pieces={};var a=this.fen.split(" ",1)[0].split("/"),c=["a","b","c","d","e","f","g","h"],b,e;for(b=0;b<a.length;++b){var f=0;for(e=0;e<a[b].length;++e){var h=a[b].charAt(e),i=+h;if(isNaN(i)){i=h.toUpperCase();this.setPiece(new Piece(i,
i==h?"W":"B",c[f]+String(8-b)));f+=1}else f+=i}}};this.startPositionOld=function(){this.pieces={};for(var a=["R","N","B","Q","K","B","N","R"],c=["a","b","c","d","e","f","g","h"],b=0;b<8;++b){this.setPiece(new Piece(a[b],"W",c[b]+1));this.setPiece(new Piece(a[b],"B",c[b]+8));this.setPiece(new Piece("P","W",c[b]+2));this.setPiece(new Piece("P","B",c[b]+7))}};this.highlight=function(a,c){if(a){var b=a.substr(1,2);a=a.substr(4,2);this.view.chessboard("highlight",b,c);this.view.chessboard("highlight",
a,c)}};this.setFEN=function(a){this.fen=a?a:"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";this._turn=this.fen.split(" ")[1]=="w"};this.whiteTurn=function(a){return result=this._turn==(a%2===0)};this.setPosition=function(a,c){this.startPosition();for(var b=0;b<c;++b)this.makeMove(a[b])};this.draw=function(a,c){if(typeof c=="undefined")c=a.length;this.setPosition(a,c);this.view.chessboard("clearHighlight");this.view.chessboard("setup",this.pieces);this.highlight(a[c-1],"#2615a7")};this.init(d)}
function History(d){var a=d.cbTabGame.cbId;d.cbTabGame.cbViewerToolbar.html('<button type="button" id="navFirstMove'+a+'" class="ui-corner-all ui-state-default cb-icon-button"><span class="ui-icon ui-icon-seek-first"></span></button><button type="button" id="navPrevMove'+a+'" class="ui-corner-all ui-state-default cb-icon-button"><span class="ui-icon ui-icon-triangle-1-w"></span></button><button type="button" id="navNextMove'+a+'" class="ui-corner-all ui-state-default cb-icon-button"><span class="ui-icon ui-icon-triangle-1-e"></span></button><button type="button" id="navLastMove'+
a+'" class="ui-corner-all ui-state-default cb-icon-button"><span class="ui-icon ui-icon-seek-end"></span></button>');$("#navFirstMove"+a).click(function(){d.first()});$("#navPrevMove"+a).click(function(){d.backward()});$("#navNextMove"+a).click(function(){d.forward()});$("#navLastMove"+a).click(function(){d.last()});d.cbTabGame.click(function(c){var b="#"+d.cbTabGame.cbId+"v"+d.currVariant+"m"+d.currMove;$(c.target||c.srcElement).is("input")||$(b).focus()});d.cbTabGame.keydown(function(c){if(!$(c.target||
c.srcElement).is("input")){if(c.keyCode==37)d.backward();else c.keyCode==39&&d.forward();return false}return true});this.update=function(){d.cbTabGame.cbViewerPanel.html(d.html)};this.clearHighlight=function(){d.highlightGameMoves();for(var c=0;c<d.moves.length;++c)for(var b=0;b<d.moves[c].length;++b){var e="#"+d.cbTabGame.cbId+"v"+c+"m"+b;$(e).removeClass("cb-viewer-move-current");c==0&&d.highlight[b]!=null&&$(e).css("color",d.highlight[b]);if(c==d.analysisIndex&&d.analysisCss[b]){var f=d.analysisCss[b].split(":");
$(e).css(f[0],f[1])}}};this.highlight=function(){this.clearHighlight();if(d.currMove==-1)d.cbTabGame.cbViewerPanel.scrollLeft(0).scrollTop(0);else{var c="#"+d.cbTabGame.cbId+"v"+d.currVariant+"m"+d.currMove;$(c).addClass("cb-viewer-move-current");d.cbTabGame.cbViewerPanel.ensureVisible($(c)[0]);if(d.currVariant==d.analysisIndex){c="#"+d.cbTabGame.cbId+"v0m"+d.analysisParent;$(c).addClass("cb-viewer-move-current")}}}}
function Drawer(d){this.drawMove=function(a,c,b,e){a=cbMoveToSAN(a);return"<a "+('class="'+e+'" ')+(' id="'+d.cbTabGame.cbId+"v"+c+"m"+b+'" ')+'href="javascript:go('+(c+", "+b+", '"+d.cbTabGame.cbId+"'")+')">'+a+"</a>"};this.number=function(a,c,b){b='<span class="'+b+'">';b+=Math.floor(c/2)+1+Math.round(a/2)+".";if(util.isOdd(c+a))b+="..";b+="&nbsp;</span>";return b}}
function GameViewer(d){this.r=[];this.moves=[];this.currVariant=0;this.currMove=-1;this.highlight=[];this.isLastMove=true;this.html="";this.analysisMoves=[];this.analysisIndex=null;this.analysisParentNext=this.analysisParent=0;this.analysisCss=[];this.cbTabGame=d;this.history=new History(this);this.drawer=new Drawer(this);this.board=new Board(d.cbBoard);this.addNewLine=this.addNumber=false;this.whiteTurn=function(a){return this.board.whiteTurn(a)};this.setFEN=function(a){this.board.setFEN(a)};this.process=
function(a,c){this.html="";this.moves=[];this.parents=[[0,-1]];this.html+='<div id="'+this.cbTabGame.cbId+'cb-viewer-data" class="cb-viewer-data"><span id="'+this.cbTabGame.cbId+'v0m-1"></span>';this.addNumber=true;this._process(a,c);this.html+=" "+getResultBoth(this.cbTabGame.cbGameData.result||"");if(cbOpts.analysis||cbOpts.miniAnalysis)this.html+='<p><br /><u>Colors:</u><b><br />&nbsp;&nbsp;<span style="color:#3060c0;">Optimal move</span><br />&nbsp;&nbsp;<span style="color:#884070;">Suboptimal move</span><br />&nbsp;&nbsp;<span style="color:#e02020;">Weak move</span><br />&nbsp;&nbsp;Unanalyzed move</b></p>';
this.html+="</div>"};this._process=function(a,c){var b=this.moves.length,e=0;this.moves.push([]);for(var f=c,h=0;h<a.length;h++){var i=a[h];if($.isArray(i)){var g=i.shift();this.parents.push([b,g-f-1]);this.html+=" ( ";this.addNumber=true;this._process(i,g);i.unshift(g);this.html+=" ) ";this.addNewLine=this.addNumber=true}else if(i.charAt(0)==" "){this.html+='<span class="cb-annotation">'+i+" </span>";this.addNewLine=this.addNumber=true}else{c++;if(this.addNewLine&&b==0)this.html+='<br class="cb-annotation" />';
this.addNewLine=false;if(this.addNumber||!this.whiteTurn(c)){g=" "+Math.round((c+!this.whiteTurn(0))/2);if(this.whiteTurn(c)){g+="...";g='<span class="cb-annotation">'+g+"</span>&nbsp;"}else g+=".&nbsp;";this.html+=g;this.addNumber=false}else this.html+="&nbsp;";g=cbMoveToCBN(i);cbMoveToSAN(i);this.moves[b].push(g);this.html+=this.drawer.drawMove(i,b,e,"cb-viewer-move-normal");e++;this.processAnalysis(b,c)}}};this.processAnalysis=function(a,c){if(this.isLoadedAnalysis())if(a==0)if(c-1==this.analysisParent){this.html+=
" [ ";this.analysisIndex=this.moves.length;this.moves.push(this.analysisMoves);this.parents.push([0,this.analysisParent]);a=c+1;for(c=0;c<this.analysisMoves.length;c++){if(c==0||!this.whiteTurn(a)){this.html+=" "+Math.round(a/2);this.html+=this.whiteTurn(a)?". ... ":". "}a++;this.html+=this.drawer.drawMove(this.analysisMoves[c],this.analysisIndex,c,"cb-viewer-move-variant")+" "}this.html+=" ]<sup><a href=\"javascript:refresh('"+this.cbTabGame.cbId+"')\" >X</a></sup>  ";this.addNumber=true}};this.loadGameMoves=
function(){var a=util.cloneArray(this.cbTabGame.cbMoves),c=util.cloneArray(this.cbTabGame.cbComments),b=[];if(c[-1])b=b.concat(c[-1]);for(var e=0;e<a.length;e++){b.push(a[e]);if(c[e])b=b.concat(c[e])}this.r=b;this.process(b,0);this.history.update();this.isLastMove?this.last():this.go(this.currVariant,this.currMove)};this.loadAnalysisMoves=function(a){a=util.cloneArray(a);this.analysisParent=this.analysisParentNext;this.analysisMoves=a;this.process(this.r,0);this.highlightAnalysisMoves();this.history.update();
this.currVariant=this.analysisIndex;this.currMove=0;this.go(this.currVariant,this.currMove)};this.removeAnalysisMoves=function(){if(this.analysisIndex==this.currVariant){this.currVariant=0;this.currMove=this.analysisParent}this.analysisMoves=[];this.analysisIndex=null;this.process(this.r,0);this.history.update();this.go(this.currVariant,this.currMove)};this.isLoadedAnalysis=function(){return Boolean(this.analysisMoves.length)};this.updateAnalysisPanel=function(){var a=0;if(this.currVariant==0||this.currVariant==
this.analysisIndex)a=this.analysisParentNext+1;for(var c in this.cbTabGame.cbAnalysisPanels)this.cbTabGame.cbAnalysisPanels[c].cbSetPosition(a)};this.highlightAnalysisMoves=function(){if(this.isLoadedAnalysis()){this.analysisCss=[];for(var a=0;a<this.moves[0].length;++a)this.analysisCss[a]="color:#444";a=0;for(var c=this.parents[this.analysisIndex][1]+1;a+c<this.moves[0].length&&a<this.moves[this.analysisIndex].length;){if(this.moves[0][a+c]!=this.moves[this.analysisIndex][a])break;this.analysisCss[a]=
"color:#005e33";a++}}};this.highlightGameMoves=function(){for(var a=0;a<this.moves[0].length;++a)this.highlight[a]=null;for(var c in this.cbTabGame.cbAnalysisPanels)for(a=1;a<this.moves[0].length;++a){var b=this.cbTabGame.cbAnalysisPanels[c].cbGameData[a-1],e=this.cbTabGame.cbAnalysisPanels[c].cbGameData[a];if(!(b==undefined||e==undefined))if(!(b.l.length<=0||e.l.length<=0)){var f=parseFloat(b.l[0].eval);e=parseFloat(e.l[0].eval);for(var h=this.moves[0][a],i=0;i<b.l.length;++i)if(cbMoveToCBN(b.l[i].moves[0])==
h){var g=parseFloat(b.l[i].eval);if(util.isEven(a)){if(g>e)e=g}else if(g<e)e=g}b=util.flattenEval(f)-util.flattenEval(e);if(util.isOdd(a))b=-b;if(b<0)b=0;if(b>1)b=1;this.highlight[a]=util.interpolateColor(b)}}};this.go=function(a,c){this.currVariant=a;this.currMove=c;if(a==0)this.analysisParentNext=c;this.isLastMove=this.moves[a].length-1==c?true:false;var b=[];do{for(c=c;c>-1;--c)b.push(this.moves[a][c]);c=this.parents[a][1];a=this.parents[a][0]}while(!(a==0&&c==-1));this.history.highlight();this.board.draw(b.reverse());
this.updateAnalysisPanel();this.cbTabGame.cbSetCurrentMove(this.currMove+1)};this.forward=function(){if(this.moves[this.currVariant].length-1!=this.currMove){this.currMove++;this.go(this.currVariant,this.currMove)}};this.backward=function(){if(this.currMove!=-1){if(this.currMove==0){this.currMove=this.parents[this.currVariant][1];this.currVariant=this.parents[this.currVariant][0]}else this.currMove--;this.go(this.currVariant,this.currMove)}};this.first=function(){this.currVariant=0;this.currMove=
-1;this.go(this.currVariant,this.currMove)};this.last=function(){this.currMove=this.moves[this.currVariant].length-1;this.go(this.currVariant,this.currMove)}}var _chatPanel={};
function createChatPanel(d,a){var c=$(d),b,e;c.MAX_HISTORY=1024;c.CHAT_GUEST=0;c.CHAT_NORMAL=1;c.CHAT_PREMIUM=2;c.CHAT_VIP=3;c.CHAT_COMMENTATOR=4;c.CHAT_POWER=5;c.CHAT_ADMIN=6;c.CHAT_DISABLED=-1;c.append(constructWidget("center",constructWidgetContent(null,"chat-content")+(userAuthenticated?constructDiv('\t\t\t\t\t<form>\t\t\t\t\t\t<button type="submit" class="cb-button ui-state-default ui-priority-primary ui-state-disabled ui-corner-all" disabled="disabled">Send</button>\t\t\t\t\t\t<div><input type="text" maxlength="255" /></div>\t\t\t\t\t</form>\t\t\t\t',"cb-footer chat-input"):
constructDiv('<b>Only <a href="/login/">registered members</a> can post</b>',"cb-footer"))));c.addClass("cb-pane-layout");c.cbLayout=c.layout({defaults:$.extend({},cbLayoutDefaults,{})});c.data("cb-pane-layout",c.cbLayout);c.cbNode=a;d=c.find("form");b=d.find("input");e=d.find("button");c.cbHistory=[];b.bind("change keyup",function(){(b.val()||"")==""?e.attr("disabled","disabled").addClass("ui-state-disabled"):e.removeAttr("disabled").removeClass("ui-state-disabled")});d.bind("submit",function(){var f=
b.val()||"";f!=""&&$.ajax({type:"POST",url:"/ajax/chat_post/",data:{n:c.cbNode,m:f},error:function(h){if(h.responseText){c.cbAppend('<p class="ui-state-error">'+h.responseText+"</p>");c.cbAppendRefresh()}}});b.val("").blur().focus();e.attr("disabled","disabled").addClass("ui-state-disabled");return false});c.cbPost=function(f,h,i,g){var j="",k,l;for(k=0;k<c.cbHistory.length;++k){l=c.cbHistory[k];if(i==l.uid)return}for(;c.cbHistory.length>=c.MAX_HISTORY;)c.cbHistory.shift();c.cbHistory.push({uid:i});
if(f==nickname)j=" ui-state-highlight";g=g||c.CHAT_GUEST;c.cbAppend("<p"+(' class="chat-cls-'+g+'"')+'><span class="chat-author'+j+'">'+htmlEnc(f)+'</span><span class="chat-message">: '+htmlEnc(h)+"</span></p>")};c.cbTail=false;c.cbContent=c.find(".chat-content");c.cbAppend=function(f){if(c.cbContent.scrollTop()+c.cbContent.innerHeight()>=c.cbContent[0].scrollHeight)c.cbTail=true;c.cbContent.append(f)};c.cbAppendRefresh=function(){if(c.cbTail)c.cbContent[0].scrollTop=c.cbContent[0].scrollHeight;c.cbTail=
false};return c}function getChatPanel(d){return _chatPanel[d]}function openChatPanel(d,a){var c=_chatPanel[a];if(!c){c=createChatPanel(d[0],a);_chatPanel[a]=c}return c}function closeChatPanel(d){d=d.cbNode;_chatPanel[d]&&delete _chatPanel[d]}var _analysisPanel={};
function createAnalysisPanel(d,a,c){var b=$(d);b.cbNode=a;b.cbTabGame=c;b.cbGrid=b.ppgrid({colModel:[{name:"eval",label:"Evaluation"},{name:"display",label:"Line"}],click:function(e){b.cbTabGame.cbViewer.loadAnalysisMoves(e.moves)}});b.cbStatus=$('<div class="cb-analysis-status"></div>').appendTo(b.cbGrid.children(".pp-grid-outer").children(".pp-grid-container"));b.cbGameInfo={engineName:""};b.cbGameData=[];b.cbGameDataStd=[];b.cbGameDataInf=[];b.cbGamePosition=0;b.cbConvertItemData=function(e){var f;
for(f=0;f<e.l.length;++f){e.l[f].moves=e.l[f].m.split("|");e.l[f].eval=e.l[f].e/100}return e};b.cbItemDataMerge=function(e){var f=b.cbGameDataStd[e-1],h=b.cbGameDataInf[e-1];b.cbGameData[e-1]=f?h&&h.t-f.t>=0?h:f:h};b.cbHandleItem=function(e,f){if(e==0)b.cbGameInfo=f;else{b.cbGameDataStd[e-1]=b.cbConvertItemData(f);b.cbItemDataMerge(e)}};b.cbHandleItemInf=function(e,f){if(e==0)b.cbGameInfo=f;else{b.cbGameDataInf[e-1]=b.cbConvertItemData(f);b.cbItemDataMerge(e)}};b.cbSetPosition=function(e){var f=[],
h=e>0?b.cbGameData[e-1]:null,i,g,j,k,l;b.cbGamePosition=e;if(h)for(i=0;i<h.l.length;++i){if(cbOpts.miniAnalysis&&i>0)break;g=h.l[i];j="";k=g.eval;if(e%2==1)j+=""+(e+1)/2+". ...";for(l=0;l<g.moves.length;++l){if((l+e)%2==0)j+=" "+Math.floor((e+l+2)/2)+".";j+=" "+cbMoveToSAN(g.moves[l])}if(i==0){j="<b>"+j+"</b>";k="<b>"+k+"</b>"}f.push({eval:k,display:j,moves:g.moves})}b.cbGrid.ppgrid("load",f);j=b.cbGameInfo.engineName;if(b.cbGameInfo.engineLink)j='<a href="'+b.cbGameInfo.engineLink+'" target="_blank">'+
j+"</a>";if(h)j+=", "+h.t+" sec";if(h)j+=", depth "+(h.l[0]?h.l[0].d:0);if(h&&!accountPremium())j+=' [<a href="http://chessbomb.com/upgrade/"><b>Upgrade</b></a>]';cbOpts.miniAnalysis||b.cbStatus.html(j)};b.cbResize=function(){b.cbGrid.ppgrid("resize")};return b}function getAnalysisPanel(d){return _analysisPanel[d]}
function openAnalysisPanel(d,a,c){var b=_analysisPanel[a];if(!b){b=createAnalysisPanel(d[0],a,c);_analysisPanel[a]=b;simpub.send({cmd:"subscribe",node:a,retrieve:true});accountPremium()&&simpub.send({cmd:"subscribe",node:a+"/infinite",retrieve:true})}return b}function closeAnalysisPanel(d){d=d.cbNode;if(_analysisPanel[d]){accountPremium()&&simpub.send({cmd:"unsubscribe",node:d+"/infinite"});simpub.send({cmd:"unsubscribe",node:d});delete _analysisPanel[d]}}var _tabGame={};
function createTabGame(d,a,c,b){var e=$(d);d="http://chessbomb.com/o/"+b.id+"/"+c.id+"/";var f="http://chessbomb.com/cp/comment/"+b.id+"/"+c.id+"/",h="http://chessbomb.com/embed/?room="+b.id+"&game="+c.id,i="http://chessbomb.com/pgn/"+b.id+"/"+c.id+".pgn";e.append(constructWidget("center",(cbOpts.adBoard?constructAdContainer("cb-ad-holder-board"):"")+constructDiv('<table cellpadding="0" cellspacing="0"><tr><td style="width: 55%;"><span class="cb-player-panel-name">&nbsp;</span><br /><span class="cb-player-panel-time">&nbsp;</span></td><td><div class="cb-player-panel-color ui-corner-all">&nbsp;</div></td><td class="cb-player-panel-points">&nbsp;</td><td class="cb-player-panel-turn" style="width: 45%;"><span class="ui-icon ui-icon-arrowthick-1-w" style="visibility: hidden;"></span></td></tr></table>',
"ui-widget-header cb-player-panel")+constructWidgetContent('<div style="position:absolute;"></div>')+constructDiv('<table cellpadding="0" cellspacing="0"><tr><td style="width: 55%;"><span class="cb-player-panel-name">&nbsp;</span><br /><span class="cb-player-panel-time">&nbsp;</span></td><td><div class="cb-player-panel-color ui-corner-all">&nbsp;</div></td><td class="cb-player-panel-points">&nbsp;</td><td class="cb-player-panel-turn" style="width: 45%;"><span class="ui-icon ui-icon-arrowthick-1-w" style="visibility: hidden;"></span></td></tr></table>',
"ui-widget-header cb-player-panel")+(cbOpts.miniAnalysis?'<div class="cb-analysis-mini" style="height: 64px;"></div>':""))+constructWidget("east",constructWidget("north",(cbOpts.adRight?constructAdContainerHalf("cb-ad-holder-secondary"):"")+constructWidgetHeader("Game Info")+constructWidgetContent('<p>[<a href="'+d+'" target="_top"><b>Direct Link</b></a>] '+(accountStaff()?'[<a href="'+f+'" target="_top"><b>Comment</b></a>]</p>':"")+'[<a href="'+h+'" target="_top"><b>Embed</b></a>]</p><p><b>Tournament</b>: <span class="cb-info-tournament"><a href="#">'+
b.name+'</a></span></p><p><b>Round</b>: <span class="cb-info-round">'+c.round+'</span></p><p><b>White</b>: <span class="cb-info-white">'+c.whiteName+'</span></p><p><b>Black</b>: <span class="cb-info-black">'+c.blackName+'</span></p><p><b>Date</b>: <span class="cb-info-date">'+getDateStr(c.startTime)+'</span></p><p><b>Result</b>: <span class="cb-result">'+getResultBoth(c.result)+'</span> [<a href="'+i+'" target="_blank"><b>Download PGN</b></a>]</p>',"cb-info"))+constructWidget("center",constructWidgetHeader("Moves")+
constructWidgetContent()+constructWidgetFooter("(toolbar)")))+(cbOpts.chat||cbOpts.analysis?constructWidget("west",(cbOpts.analysis?constructWidget("south",constructWidgetHeader("Analysis")+constructWidgetContent()+constructHelpTrigger()):"")+(cbOpts.chat?constructWidget("center",(cbOpts.adLeft?constructAdContainerHalf("cb-ad-holder-primary"):"")+constructWidgetHeader("Chat")+constructWidgetContent()):"")):""));e.cbId=a;e.cbExtData=c;e.cbExtRoomData=b;e.cbSimPubBase=SIMPUB_BASE+"/rooms/"+b.id+"/games/"+
c.id;e.cbMoves=[];e.cbComments=[];e.cbGameData={};e.cbGameTime={};e.cbCurrentMove=0;e.cbCenterPanel=e.children(".ui-layout-center");e.cbLeftPanel=e.children(".ui-layout-west");e.cbRightPanel=e.children(".ui-layout-east");e.cbPlayerPanelNorth=e.cbCenterPanel.children(".cb-player-panel:first");e.cbPlayerPanelSouth=e.cbCenterPanel.children(".cb-player-panel:last");e.cbPlayerPanelWhite=e.cbPlayerPanelSouth;e.cbPlayerPanelBlack=e.cbPlayerPanelNorth;e.cbAdHolderBoard=e.find(".cb-ad-holder-board");e.cbAdHolderPrimary=
e.find(".cb-ad-holder-primary");e.cbAdHolderSecondary=e.find(".cb-ad-holder-secondary");e.cbHelpTrigger=e.find(".cb-help-trigger");bindHelpTrigger(e.cbHelpTrigger,$("#cb-tip-game"));a=e.innerWidth()-940;if(a<0)a=0;e.cbBoardResize=function(){e.cbBoard.chessboard("autoSize",e.cbBoardContentPane.innerWidth(),e.cbBoardContentPane.innerHeight());centerElement(e.cbBoardContainer);cbAdFollowHolder(e.cbAdHolderBoard,$("#cb-ad-banner-board"))};e.cbLayout=e.layout({defaults:$.extend({},cbLayoutDefaults,{}),
center:{minWidth:cbOpts.adBoard?468:234,onresize_end:e.cbBoardResize},east:{minSize:cbOpts.adRight?234:168,size:cbOpts.tabGameRight||Math.floor(a*0.2+234),onresize_end:function(){e.cbRightLayout.resizeAll()}},west:cbOpts.chat||cbOpts.analysis?{minSize:234,size:Math.floor(a*0.6+234),onresize_end:function(){e.cbLeftLayout.resizeAll()}}:{}});e.cbBoardContentPane=e.children(".ui-layout-center").children(".ui-layout-content");e.cbBoardContainer=e.cbBoardContentPane.children("div");e.cbBoard=e.cbBoardContainer.chessboard({});
e.cbBoardResize();e.cbInfoPanel=e.cbRightPanel.children(".ui-layout-north").children(".ui-layout-content");e.cbInfoPanel.find(".cb-info-tournament a").click(function(){openTabRoom(e.cbExtRoomData.id,e.cbExtRoomData);return false});e.cbViewerPanel=e.cbRightPanel.children(".ui-layout-center").children(".ui-layout-content");e.cbViewerToolbar=e.cbRightPanel.children(".ui-layout-center").children(".cb-footer");e.cbViewer=new GameViewer(e);e.cbViewerToolbar.append('<button type="button" class="cb-button-flip ui-corner-all ui-state-default cb-icon-button" style="vertical-align: top; float: none;">Flip</button><button type="button" class="cb-button-settings ui-corner-all ui-state-default cb-icon-button" style="vertical-align: top; float: none;"><span class="ui-icon ui-icon-wrench"></span></button>');
e.cbViewerToolbar.find(".cb-button-flip").click(function(){var g=e.cbPlayerPanelWhite;e.cbPlayerPanelWhite=e.cbPlayerPanelBlack;e.cbPlayerPanelBlack=g;e.cbHandleData(e.cbGameData);e.cbSetCurrentMove(e.cbCurrentMove);e.cbBoard.chessboard("flip")});e.cbButtonSettings=e.cbViewerToolbar.find(".cb-button-settings");e.cbButtonSettings.click(function(g){g.stopPropagation();cbMenuSettings.toggle("fade","fast").position({my:"bottom",at:"top",of:e.cbButtonSettings,collision:"fit fit"});$(document).one("click",
function(){cbMenuSettings.hide("fade","fast")})});e.cbRightLayout=e.cbRightPanel.layout({defaults:$.extend({},cbLayoutDefaults,{closable:false}),north:{size:200+(cbOpts.adRight?60:0),onresize_end:function(){cbAdFollowHolder(e.cbAdHolderSecondary,$("#cb-ad-hbanner-secondary"))}}});if(cbOpts.chat||cbOpts.analysis)e.cbLeftLayout=e.cbLeftPanel.layout({defaults:$.extend({},cbLayoutDefaults,{closable:false}),south:{size:196,onresize_end:function(){e.cbAnalysisPanel.cbResize()}},center:{onresize_end:function(){e.cbChatPanel.cbLayout.resizeAll();
cbAdFollowHolder(e.cbAdHolderPrimary,$("#cb-ad-hbanner-primary"))}}});e.cbChatPanel=e.cbLeftPanel.children(".ui-layout-center").children(".ui-layout-content");if(cbOpts.chat)e.cbChatPanel=openChatPanel(e.cbChatPanel,e.cbSimPubBase+"/chat");e.cbAnalysisPanel=e.cbLeftPanel.children(".ui-layout-south").children(".ui-layout-content");if(cbOpts.miniAnalysis)e.cbAnalysisPanel=e.find(".cb-analysis-mini");e.cbAnalysisPanels={};e.cbOpenAnalysis=function(g,j){g=e.cbAnalysisPanels[j];if(!g){g=openAnalysisPanel(e.cbAnalysisPanel,
j,e);e.cbAnalysisPanel=g;e.cbAnalysisPanels[j]=g;e.cbLeftLayout.sizeContent("south")}return g};e.cbCloseAnalysis=function(g,j){if(e.cbAnalysisPanels[j]){closeAnalysisPanel(e.cbAnalysisPanel);delete e.cbAnalysisPanels[j]}};e.cbTimeTimer=null;e.cbTimerStart=0;e.cbTimerFunc=function(){var g=(new Date).getTime()-e.cbTimerStart,j=e.cbGameTime.whiteTime,k=e.cbGameTime.blackTime;if(e.cbViewer.whiteTurn(e.cbMoves.length)){j-=g/1E3;e.cbPlayerPanelWhite.find(".cb-player-panel-time").text(e.cbConvertTime(j,
true))}else{k-=g/1E3;e.cbPlayerPanelBlack.find(".cb-player-panel-time").text(e.cbConvertTime(k,true))}};e.cbHandleMove=function(g,j){e.cbMoves[g-1]=j};e.cbHandleComment=function(g,j){e.cbComments[g-1]=j};e.cbHandleTime=function(g,j){e.cbGameTime=g;if(e.cbTimeTimer){clearInterval(e.cbTimeTimer);e.cbTimeTimer=null}e.cbPlayerPanelWhite.find(".cb-player-panel-time").text(e.cbConvertTime(g.whiteTime,true));e.cbPlayerPanelBlack.find(".cb-player-panel-time").text(e.cbConvertTime(g.blackTime,true));if(j==
"itemsPublished"&&(e.cbGameData.result=="*"||!e.cbGameData.result)){e.cbTimerStart=(new Date).getTime();e.cbTimeTimer=setInterval(e.cbTimerFunc,500)}};e.cbHandleData=function(g){e.cbGameData=g;e.cbInfoPanel.find(".cb-info-round").html(g.round);e.cbInfoPanel.find(".cb-info-white").html(g.whiteName);e.cbInfoPanel.find(".cb-info-black").html(g.blackName);e.cbInfoPanel.find(".cb-info-date").html(getDateStr(g.startTime));e.cbInfoPanel.find(".cb-result").html(getResultBoth(g.result));e.cbPlayerPanelWhite.find(".cb-player-panel-name").text(g.whiteName);
g.whiteTime&&e.cbPlayerPanelWhite.find(".cb-player-panel-time").text(e.cbConvertTime(g.whiteTime));e.cbPlayerPanelWhite.find(".cb-player-panel-points").html(getResultWhite(g.result));e.cbPlayerPanelWhite.find(".cb-player-panel-color").addClass("cb-player-panel-color-white").removeClass("cb-player-panel-color-black");e.cbPlayerPanelBlack.find(".cb-player-panel-name").text(g.blackName);g.blackTime&&e.cbPlayerPanelBlack.find(".cb-player-panel-time").text(e.cbConvertTime(g.blackTime));e.cbPlayerPanelBlack.find(".cb-player-panel-points").html(getResultBlack(g.result));
e.cbPlayerPanelBlack.find(".cb-player-panel-color").addClass("cb-player-panel-color-black").removeClass("cb-player-panel-color-white");if(e.cbGameData.result&&e.cbGameData.result!="*")if(e.cbTimeTimer){clearInterval(e.cbTimeTimer);e.cbTimeTimer=null}e.cbViewer.setFEN(e.cbGameData.fen)};e.cbRefreshMoves=function(){e.cbViewer.loadGameMoves()};e.cbSetCurrentMove=function(g){e.cbCurrentMove=g;if(e.cbViewer.whiteTurn(g)){e.cbPlayerPanelBlack.find(".cb-player-panel-turn .ui-icon").css({visibility:"hidden"});
e.cbPlayerPanelWhite.find(".cb-player-panel-turn .ui-icon").css({visibility:"visible"})}else{e.cbPlayerPanelWhite.find(".cb-player-panel-turn .ui-icon").css({visibility:"hidden"});e.cbPlayerPanelBlack.find(".cb-player-panel-turn .ui-icon").css({visibility:"visible"})}};e.cbConvertTime=function(g,j){var k,l;g=g||0;if(g<0)g=0;k=Math.floor(g/3600);g-=k*3600;l=Math.floor(g/60);g-=l*60;g=Math.floor(g);if(l<10)l="0"+l;if(g<10)g="0"+g;if(j)return k+"h:"+l+"m:"+g+"s";return k+"h:"+l+"m"};e.cbLayout.resizeAll();
cbAdFollowHolder(e.cbAdHolderBoard,$("#cb-ad-banner-board"));cbAdFollowHolder(e.cbAdHolderPrimary,$("#cb-ad-hbanner-primary"));cbAdFollowHolder(e.cbAdHolderSecondary,$("#cb-ad-hbanner-secondary"));return e}function getTabGame(d){return _tabGame[d]}
function openTabGame(d,a){var c=a.id+"__"+d.id,b=SIMPUB_BASE+"/rooms/"+a.id+"/games/"+d.id,e="#tab-game-"+c,f=_tabGame[c],h;if(f)tabsPanel.tabs("select",e);else{h=cbShortenPlayerName(d.whiteName)+" - "+cbShortenPlayerName(d.blackName);tabsAdd(tabsPanel,e,h,function(){if(cbOpts.analysis||cbOpts.miniAnalysis)f.cbCloseAnalysis("default",b+"/analysis/default");cbOpts.chat&&closeChatPanel(f.cbChatPanel);cbOpts.chat&&simpub.send({cmd:"unsubscribe",node:b+"/chat"});simpub.send({cmd:"unsubscribe",node:b+
"/broadcast"});delete _tabGame[c]},"cb-tab cb-tab-game").tabs("select",e);f=createTabGame(tabsPanel.find(e)[0],c,d,a);_tabGame[c]=f;simpub.send({cmd:"subscribe",node:b+"/broadcast",retrieve:true});cbOpts.chat&&simpub.send({cmd:"subscribe",node:b+"/chat",retrieve:true});if(cbOpts.analysis||cbOpts.miniAnalysis)f.cbOpenAnalysis("default",b+"/analysis/default",true)}return f}var _tabRoom={};function Player(d,a,c){this.elo=a;this.points=c;this.name=d;this.NeustadtlScore=0}
function standings(d){this.init=function(){this.players=[];this.names=[]};this.init();this.pointsMode=d||0;this.calculate=function(a){a=filterTestData(a);for(var c=0;c<a.length;++c){var b=a[c];if(!(!b||b.round=="00")){this.addPoints(b.whiteName,b.whiteElo,this.getWhitePoints(b.result));this.addPoints(b.blackName,b.blackElo,this.getBlackPoints(b.result))}}this.calculateNeustadtlScore(a)};this.whoIsWinner=function(a){if(this.getWhitePoints(a)==0&&this.getBlackPoints(a)==0)return"playing";if(this.pointsMode==
1)if(this.getWhitePoints(a)==3)return"white";else if(this.getWhitePoints(a)==0)return"black";else{if(this.getWhitePoints(a)==1)return"none"}else if(this.getWhitePoints(a)==1)return"white";else if(this.getWhitePoints(a)==0)return"black";else if(this.getWhitePoints(a)==0.5)return"none"};this.calculateNeustadtlScore=function(a){a=filterTestData(a);for(var c=0;c<a.length;++c){var b=a[c];if(!(!b||b.round=="00")){var e=this.players[this.normName(b.whiteName)],f=this.players[this.normName(b.blackName)];
if(e&&f)if(this.whoIsWinner(b.result)=="white")e.NeustadtlScore+=f.points;else if(this.whoIsWinner(b.result)=="none"){e.NeustadtlScore+=f.points/2;f.NeustadtlScore+=e.points/2}else if(this.whoIsWinner(b.result)=="black")f.NeustadtlScore+=e.points}}};this.createHtml=function(a){if(this.pointsMode==-1)return'<div style="padding: 10px;">Standings are disabled for this event</div>';this.init();this.calculate(a);a=this.sortPlayers();for(var c='<div class="pp-grid-container"><table cellpadding="0" cellspacing="0"><thead><tr class="ui-state-default"><th>#</th><th>Name</th>'+
(cbOpts.embed?"":"<th>ELO</th>")+"<th>Pts</th><th>S-B</th></tr></thead><tbody>",b=0;b<a.length;++b){var e=a[b];c+='<tr class="ui-widget-content"><td class="pp-grid-cell">'+(b>0&&a[b].points==a[b-1].points?"":b+1)+'</td><td class="pp-grid-cell">'+(e.name||"")+"</td>"+(cbOpts.embed?"":'<td class="pp-grid-cell">'+(e.elo||"")+"</td>")+'<td class="pp-grid-cell"><b>'+e.points+'</b></td><td class="pp-grid-cell">'+e.NeustadtlScore+"</td></tr>"}c+="</tbody></table></div>";return c};this.getWhitePoints=function(a){if(typeof a==
"undefined"||a=="*")return 0;return this.prepareResult(a.substr(0,a.indexOf("-")))};this.getBlackPoints=function(a){if(typeof a=="undefined"||a=="*")return 0;return this.prepareResult(a.substr(a.indexOf("-")+1))};this.prepareResult=function(a){if(a=="&#189;")a=0.5;a=parseFloat(a);if(this.pointsMode==1){if(a==1)a=3;if(a==0.5)a=1}return a};this.normName=function(a){a=a.replace(/(\s+)?\d+(\s+)?$/,"");a=a.replace(/\.$/,"");a=a.replace(/(\s+)?\([A-Z]{3}\)(\s+)?$/,"");a=a.replace(/^\s+/,"");return a=a.replace(/\s+$/,
"")};this.addPoints=function(a,c,b){var e=a.match(/(?:\s+)?(\d{4})(?:\s+)?$/);if(e!=null)e=e[1];if(e&&!c)c=e;a=this.normName(a);if(typeof this.players[a]=="undefined")this.players[a]=new Player(a,c,b);else this.players[a].points+=b;if(c)this.players[a].elo=c};this.sortPlayers=function(){var a=[];for(var c in this.players)this.players.hasOwnProperty(c)&&a.push(this.players[c]);return a.sort(function(b,e){return e.points!=b.points?e.points-b.points:e.NeustadtlScore-b.NeustadtlScore})}}
function createTabRoom(d,a,c){var b=$(d),e=new standings(c.points==3?1:c.points||0);d="http://chessbomb.com/o/"+a+"/";var f="http://chessbomb.com/embed/?room="+a;b.append(constructWidget("center",(cbOpts.adBoard?constructAdContainer("cb-ad-holder-board"):"")+constructWidgetHeader("Games")+constructWidgetContent())+constructWidget("west",constructWidget("center",(cbOpts.adLeft?constructAdContainerHalf("cb-ad-holder-primary"):"")+constructWidgetContent(constructAccordion(constructAccordionHeader("Room Info")+
constructAccordionPanel('<p>[<a href="'+d+'" target="_top"><b>Direct Link</b></a>] [<a href="'+f+'" target="_top"><b>Embed</b></a>]</p><p><b>Tournament</b>: <span class="cb-tournament">'+c.name+'</span></p><p><b>Start Date</b>: <span class="cb-date">'+getDateStr(c.startTime)+'</span></p><p><span class="cb-extra"></span></p>',"cb-info")+constructAccordionHeader("Standings")+constructAccordionPanel("","cb-standings"),"cb-no-overflow")),"cb-no-overflow")+(cbOpts.chat?constructWidget("south",constructWidgetHeader("Chat")+
constructWidgetContent()+constructHelpTrigger()):"")));b.cbId=a;b.cbExtData=c;b.cbData={};b.cbItems={};b.cbGames=[];b.cbSimPubBase=SIMPUB_BASE+"/rooms/"+a;b.cbCenterPanel=b.children(".ui-layout-center");b.cbLeftPanel=b.children(".ui-layout-west");b.cbAccordionPanel=b.cbLeftPanel.children(".ui-layout-center").find(".cb-accordion");b.cbChatPanel=b.cbLeftPanel.children(".ui-layout-south").children(".ui-layout-content");b.cbInfoPanel=b.cbAccordionPanel.children(".cb-info");b.cbStandingsPanel=b.cbAccordionPanel.children(".cb-standings");
b.cbAdHolderBoard=b.find(".cb-ad-holder-board");b.cbAdHolderPrimary=b.find(".cb-ad-holder-primary");b.cbHelpTrigger=b.find(".cb-help-trigger");bindHelpTrigger(b.cbHelpTrigger,$("#cb-tip-room"));b.cbLayout=b.layout({defaults:$.extend({},cbLayoutDefaults,{}),center:{minWidth:468,onresize_end:function(){b.cbGrid.ppgrid("resize");cbAdFollowHolder(b.cbAdHolderBoard,$("#cb-ad-banner-board"))}},west:{minSize:234,size:350,onresize_end:function(){b.cbLeftLayout.resizeAll()}}});b.cbLeftLayout=b.cbLeftPanel.layout({defaults:$.extend({},
cbLayoutDefaults,{closable:false}),center:{minHeight:200,height:280,onresize_end:function(){b.cbAccordionPanel.accordion("resize");cbAdFollowHolder(b.cbAdHolderPrimary,$("#cb-ad-hbanner-primary"))}},south:cbOpts.chat?{minSize:"200",size:"50%",onresize_end:function(){b.cbChatPanel.cbLayout.resizeAll()}}:{}});b.cbAccordionPanel.accordion({active:1,fillSpace:true}).removeClass("ui-widget");b.cbGrid=b.cbCenterPanel.children(".ui-layout-content").ppgrid({colModel:cbOpts.embed?[{name:"_round",label:"Round"},
{name:"whiteName",label:"White"},{name:"blackName",label:"Black"},{name:"result",label:"Result"}]:[{name:"_round",label:"Round"},{name:"whiteName",label:"White"},{name:"whiteElo",label:"ELO (W)"},{name:"blackName",label:"Black"},{name:"blackElo",label:"ELO (B)"},{name:"result",label:"Result"}],colId:"id",click:function(h){openTabGame(h,b.cbExtData)},treeTable:true});if(cbOpts.chat)b.cbChatPanel=openChatPanel(b.cbChatPanel,b.cbSimPubBase+"/chat");b.cbHandleItem=function(h){var i;if(h.name==0)b.cbData=
h.payload;else{i=h.name in b.cbItems;h.payload.result=getResultBoth(h.payload.result);b.cbItems[h.name]=h.payload;b.cbItems[h.name].id=h.name;if(i){b.cbGrid.ppgrid("updateRow",h.name,b.cbItems[h.name]);b.cbProcessGames();b.cbStandingsPanel.html(e.createHtml(b.cbGames))}else{b.cbRefreshForce=b.cbRefreshForce||(b.cbRefreshInitial?1:1E4);b.cbRefreshInitial=false}}};b.cbRefreshTimeout=null;b.cbRefreshForce=null;b.cbRefreshInitial=true;b.cbRefreshData=function(){if(b.cbRefreshInitial){b.cbRefreshForce=
1;b.cbRefreshInitial=false}if(b.cbRefreshForce){b.cbRefreshTimeout&&clearTimeout(b.cbRefreshTimeout);b.cbRefreshTimeout=setTimeout(b.cbRefreshDataReal,b.cbRefreshForce);b.cbRefreshForce=null}};b.cbProcessGames=function(){var h=[],i;for(i in b.cbItems)b.cbItems.hasOwnProperty(i)&&h.push(b.cbItems[i]);h.sort(function(g,j){if(g.round<j.round)return 1;if(g.round>j.round)return-1;if(g.whiteName<j.whiteName)return-1;if(g.whiteName>j.whiteName)return 1;if(g.blackName<j.blackName)return-1;if(g.blackName>
j.blackName)return 1;return 0});b.cbGames=h};b.cbRefreshDataReal=function(){b.cbRefreshTimeout=null;b.cbProcessGames();b.cbStandingsPanel.html(e.createHtml(b.cbGames));b.cbGrid.ppgrid("load",prepareRoomData(filterTestData(b.cbGames)))};b.cbLayout.resizeAll();cbAdFollowHolder(b.cbAdHolderBoard,$("#cb-ad-banner-board"));cbAdFollowHolder(b.cbAdHolderPrimary,$("#cb-ad-hbanner-primary"));$.get("/ajax/room_info/",{room_id:b.cbId},function(h){b.cbInfoPanel.find(".cb-extra").html(h)});return b}
function getTabRoom(d){return _tabRoom[d]}
function openTabRoom(d,a){var c="#tab-room-"+d,b=_tabRoom[d],e=SIMPUB_BASE+"/rooms/"+d;if(b)tabsPanel.tabs("select",c);else{tabsAdd(tabsPanel,c,a.name,function(){b.cbRefreshTimeout&&clearTimeout(b.cbRefreshTimeout);cbOpts.chat&&closeChatPanel(b.cbChatPanel);cbOpts.chat&&simpub.send({cmd:"unsubscribe",node:e+"/chat"});simpub.send({cmd:"unsubscribe",node:e+"/index"});delete _tabRoom[d]},"cb-tab cb-tab-room").tabs("select",c);b=createTabRoom(tabsPanel.find(c)[0],d,a);_tabRoom[d]=b;simpub.send({cmd:"subscribe",
node:e+"/index",retrieve:true});cbOpts.chat&&simpub.send({cmd:"subscribe",node:e+"/chat",retrieve:true})}return b}function prepareRoomData(d){var a,c,b=true,e=undefined,f,h=0,i=[];for(a=0;a<d.length;++a){c=d[a];if(c.round!=e){e=c.round;f=++h;i.push({_round:e,_rowId:f,_rowExpanded:b,_rowNoClick:true});b=false}if(typeof e!="undefined"){c._rowId=++h;c._rowParent=f}i.push(c)}return i}var _tabRooms=null;
function profileContent(){var d="",a=getAccountType(),c="",b="";if(a>=CB_TYPE_PREMIUM_EXTRA)c="Extra Premium";else if(a>=CB_TYPE_PREMIUM)c="Premium";else if(a>=CB_TYPE_REGISTERED)c="Free";else if(a>=CB_TYPE_GUEST)c="Guest";d+=userAuthenticated?'<p>Welcome, <span class="cb-profile-username">'+userUsername+"</span>.</p>":'<p>Welcome, <span class="cb-profile-username">'+userNickname+"</span>.</p>";if(a<=CB_TYPE_GUEST)b=' (<a href="/register/"><b>Register</b></a>)';else if(a==CB_TYPE_REGISTERED)b=' (<a href="http://chessbomb.com/upgrade/"><b>Upgrade to Premium</b></a>)';
d+="<p>Account Type: "+c+b+"</p>";if(a>=CB_TYPE_PREMIUM&&typeof cbPUntil!="undefined")d+="<p>ChessBomb Premium expires at:<br />"+cbPUntil+' (<a href="http://chessbomb.com/upgrade/"><b>Extend</b></a>)</p>';if(a>=CB_TYPE_PREMIUM_EXTRA&&typeof cbPEUntil!="undefined")d+="<p>ChessBomb Extra Premium expires at:<br />"+cbPEUntil+' (<a href="http://chessbomb.com/upgrade/"><b>Extend</b></a>)</p>';return d}
function createTabRooms(d){var a=$(d);a.append(constructWidget("center",(cbOpts.adBoard?constructAdContainer("cb-ad-holder-board"):"")+constructWidgetHeader("Room List")+constructWidgetContent())+constructWidget("west",(cbOpts.adLeft?constructAdContainerHalf("cb-ad-holder-primary"):"")+constructWidgetHeader("Profile")+constructWidgetContent(profileContent(),null,"cb-profile")+constructHelpTrigger()));a.cbItems={};a.cbAdHolderBoard=a.find(".cb-ad-holder-board");a.cbAdHolderPrimary=a.find(".cb-ad-holder-primary");
a.cbHelpTrigger=a.find(".cb-help-trigger");bindHelpTrigger(a.cbHelpTrigger,$("#cb-tip-rooms"));a.cbLayout=a.layout({defaults:$.extend({},cbLayoutDefaults,{}),center:{minWidth:468,onresize_end:function(){a.cbGrid.ppgrid("resize");cbAdFollowHolder(a.cbAdHolderBoard,$("#cb-ad-banner-board"))}},west:{minSize:234,size:350,onresize_end:function(){cbAdFollowHolder(a.cbAdHolderPrimary,$("#cb-ad-hbanner-primary"))}}});a.cbGrid=a.find(".ui-layout-center > .ui-layout-content").ppgrid({colModel:[{name:"name",
label:"Name"},{name:"type",label:"Type"}],click:function(c){openTabRoom(c.id,c)}});a.cbHandleItem=function(c){a.cbItems[c.name]=c};a.cbRefreshData=function(){var c=[],b,e;for(b in a.cbItems)if(a.cbItems.hasOwnProperty(b)){e=a.cbItems[b];c.push($.extend({id:e.name,startTime:0},e.payload))}c.sort(function(f,h){return f.startTime==h.startTime?0:h.startTime-f.startTime});a.cbGrid.ppgrid("load",filterTestData(c))};a.cbLayout.resizeAll();cbAdFollowHolder(a.cbAdHolderBoard,$("#cb-ad-banner-board"));cbAdFollowHolder(a.cbAdHolderPrimary,
$("#cb-ad-hbanner-primary"));return a}function getTabRooms(){return _tabRooms}function openTabRooms(){if(_tabRooms)tabsPanel.tabs("select","#tab-rooms");else{tabsAdd(tabsPanel,"#tab-rooms","Rooms",null,"cb-tab cb-tab-rooms").tabs("select","#tab-rooms");_tabRooms=createTabRooms(tabsPanel.find("#tab-rooms")[0])}return _tabRooms}function setStatus(d,a){a=typeof a=="undefined"?"#dddddd":typeof a=="string"?a:a?"green":"red";$("#status-bar").html(d).css({color:a})}var cbInitialAds=true;
function cbGetNewAds(){cbInitialAds||$("iframe.cb-ifrad").each(function(d,a){try{a.contentWindow.location.reload()}catch(c){a.src=a.src}});cbInitialAds=false}var cbMenuSettings;
function initMenus(){cbMenuSettings=$("#popup-menu-settings");cbMenuSettings=cbMenuSettings.menu({selected:function(d,a){a=a.item;d=a.attr("id");a=a.find("a");var c=$("#layout-main");if(d=="cb-check-highlight"){c.toggleClass("cb-board-highlight-on");a.toggleClass("ui-state-active")}else if(d=="cb-check-publicchat"){c.toggleClass("cb-hide-publicchat");a.toggleClass("ui-state-active")}else if(d=="cb-check-annotation"){c.toggleClass("cb-hide-annotation");a.toggleClass("ui-state-active")}}})}
var mainLayoutPanel,mainLayout,mainHeader,mainFooter;
function createMainLayout(){var d=false,a="",c,b;if(cbOpts.adLarge)a=constructAdContainerLeaderboard("cb-ad-holder-large");else if(cbOpts.adLargish)a=constructAdContainer("cb-ad-holder-largish");mainLayoutPanel=$("#layout-main").append(constructTabsWidget("center",null,"main-tabs",a));c=mainLayoutPanel.find(".cb-ad-holder-leaderboard");b=mainLayoutPanel.find(".cb-ad-holder-largish");mainHeader=$(".header").addClass("ui-layout-north cb-no-overflow").appendTo(mainLayoutPanel);mainFooter=$(".footer").addClass("ui-layout-south cb-no-overflow").appendTo(mainLayoutPanel);
tabsPanel=mainLayoutPanel.children(".ui-layout-center");mainLayout=mainLayoutPanel.layout({defaults:$.extend({},cbLayoutDefaults,{closable:false,resizable:false,slidable:false,spacing_open:0}),center:{onresize_end:function(){cbAdFollowHolder(c,$("#cb-ad-leaderboard-large"));cbAdFollowHolder(b,$("#cb-ad-banner-largish"))}},north:cbOpts.header?{size:60,onresize_end:function(){cbAdFollowHolder($("#header-banner"),$("#cb-ad-banner-header"))}}:{},south:{size:20}});tabsPanel.css({overflow:"hidden"});tabsPanel=
tabsInit(tabsPanel);tabsPanel.bind("tabsshow",function(e,f){e=$(f.panel).find(".cb-ad-holder-board");var h=$(f.panel).find(".cb-ad-holder-primary"),i=$(f.panel).find(".cb-ad-holder-secondary"),g=$("#cb-ad-banner-board"),j=$("#cb-ad-hbanner-primary"),k=$("#cb-ad-hbanner-secondary");cbGetNewAds();cbAdFollowHolder(c,$("#cb-ad-leaderboard-large"));cbAdFollowHolder(b,$("#cb-ad-banner-largish"));cbAdFollowHolder(e,g);cbAdFollowHolder(h,j);cbAdFollowHolder(i,k);d&&cbTrackPageView("/site/_dynamic/"+f.panel.id);
d=true});mainLayout.sizeContent("center");cbAdFollowHolder(c,$("#cb-ad-leaderboard-large"));cbAdFollowHolder(b,$("#cb-ad-banner-largish"));cbAdFollowHolder($("#header-banner"),$("#cb-ad-banner-header"))}
function handleSimPubItems(d,a,c){var b,e,f,h;b=d.split("/");var i=null,g=null,j=null,k=null,l=null;e=b[1];f=b[2];if(f=="index"){i=e;for(b=0;b<a.length;++b)getTabRooms().cbHandleItem(a[b])}else if(f=="rooms"){e=b[3];f=b[4];if(f=="index"){g=e;for(b=0;b<a.length;++b)getTabRoom(e).cbHandleItem(a[b])}else if(f=="chat"){l=d;for(b=0;b<a.length;++b)getChatPanel(d).cbPost(a[b].payload.a,a[b].payload.m,a[b].name,a[b].payload.c)}else if(f=="games"){f=b[5];h=b[6];if(h=="broadcast"){j=e+"__"+f;for(b=0;b<a.length;++b){d=
a[b];if(d.payload.type=="game-data")getTabGame(j).cbHandleData(d.payload);else if(d.payload.type=="game-move")getTabGame(j).cbHandleMove(d.name,d.payload.move);else if(d.payload.type=="game-comment")getTabGame(j).cbHandleComment(d.name.substr(1),d.payload.comment);else d.name=="t"&&getTabGame(j).cbHandleTime(d.payload,c)}}else if(h=="analysis"){c=b.length>8?b[8]:null;k=getAnalysisPanel(b.slice(0,8).join("/"));if(c)for(b=0;b<a.length;++b)k.cbHandleItemInf(a[b].name,a[b].payload);else for(b=0;b<a.length;++b)k.cbHandleItem(a[b].name,
a[b].payload)}else if(h=="chat"){l=d;for(b=0;b<a.length;++b)getChatPanel(d).cbPost(a[b].payload.a,a[b].payload.m,a[b].name,a[b].payload.c)}}}if(i){getTabRooms().cbRefreshData();setStatus("Connected",true)}g&&getTabRoom(g).cbRefreshData();j&&getTabGame(j).cbRefreshMoves();if(k){k.cbSetPosition(k.cbGamePosition);k.cbTabGame.cbViewer.history.highlight()}l&&getChatPanel(l).cbAppendRefresh()}function doConnect(){setStatus("Connecting...");simpub.connect("simpub.int.chessbomb.com",80)}
$(document).ready(function(){CometPP.init();initMenus();createMainLayout();cbOpts.tabRooms&&openTabRooms();simpub=new SimPubClient;simpub.onOpen=function(){var d,a;setStatus("Loading...");if(connectedBefore)simpub.resubscribe();else{simpub.send({cmd:"subscribe",node:SIMPUB_BASE+"/index",retrieve:true});for(d=0;d<cbAutoRooms.length;++d){a=cbAutoRooms[d];openTabRoom(a.id,a)}for(d=0;d<cbAutoGames.length;++d){a=cbAutoGames[d];openTabGame(a[0],a[1])}}connectedBefore=true};simpub.onClose=function(){if(!isClosing){var d=
Math.round(15+Math.random()*15);setStatus("Disconnected... (auto-reconnect in "+d+"s)",false);setTimeout(function(){doConnect()},d*1E3)}};simpub.onMessage=function(d){try{if(d.type=="itemsPublished")handleSimPubItems(d.node,d.items,d.type);else d.type=="itemsRetrieved"&&handleSimPubItems(d.node,d.items,d.type)}catch(a){}};$(window).unload(function(){isClosing=true;simpub.close()});doConnect()});

