973 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			973 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
|   | <!DOCTYPE HTML> | ||
|  | <html> | ||
|  | 
 | ||
|  | <!--
 | ||
|  |   pgn4web javascript chessboard | ||
|  |   copyright (C) 2009-2013 Paolo Casaschi | ||
|  |   see README file and http://pgn4web.casaschi.net | ||
|  |   for credits, license and more details | ||
|  | --> | ||
|  | 
 | ||
|  | <head> | ||
|  | 
 | ||
|  | <title>pgn4web live results</title> | ||
|  | 
 | ||
|  | <link rel="shortcut icon" href="pawn.ico" /> | ||
|  | <link rel="apple-touch-icon" href="pawn.png" /> | ||
|  | 
 | ||
|  | <style type="text/css"> | ||
|  | 
 | ||
|  | html, | ||
|  | body { | ||
|  |   margin: 0px; | ||
|  |   padding: 0px; | ||
|  | } | ||
|  | 
 | ||
|  | body { | ||
|  |   padding: 40px; /* defined as body.padding */ | ||
|  |   font-family: sans-serif; | ||
|  |   font-size: 16px; /* defined as body.fontSize */ | ||
|  |   color: black; | ||
|  |   overflow-x: hidden; | ||
|  |   overflow-y: scroll; | ||
|  | } | ||
|  | 
 | ||
|  | a { | ||
|  |   color: black; | ||
|  |   text-decoration: none; | ||
|  | } | ||
|  | 
 | ||
|  | .pageHeader { | ||
|  |   color: red; | ||
|  |   text-decoration: none; | ||
|  | } | ||
|  | 
 | ||
|  | h1.pageHeader { | ||
|  |   margin-top: 0px; | ||
|  |   margin-bottom: 0px; | ||
|  |   padding-top: 0px; | ||
|  |   padding-bottom: 10px; /* = 1/4 * body.padding */ | ||
|  |   white-space: nowrap; | ||
|  | } | ||
|  | 
 | ||
|  | .gamesAnchor { | ||
|  |   display: inline-block; | ||
|  |   height: 40px; /* = body.padding */ | ||
|  |   width: 99%; | ||
|  | } | ||
|  | 
 | ||
|  | .event, .round, .match, .firstTeam, .secondTeam, .score, .player, .firstPlayer, .secondPlayer, .result, .newMoves, .noNewMoves { | ||
|  |   white-space: nowrap; | ||
|  |   display: inline-block; | ||
|  |   overflow: hidden; | ||
|  |   vertical-align: bottom; | ||
|  | } | ||
|  | 
 | ||
|  | .eventRound, .matchScore, .game { | ||
|  |   white-space: nowrap; | ||
|  | } | ||
|  | 
 | ||
|  | .team, .firstTeam, .secondTeam, .firstTeamScore, .secondTeamScore, .firstPlayer, .secondPlayer, .firstTeamPlayer, .secondTeamPlayer { | ||
|  |   white-space: nowrap; | ||
|  | } | ||
|  | 
 | ||
|  | .eventRound, .event, .match, .firstTeam, .game, .firstPlayer, .secondPlayer, .firstTeamPlayer, .secondTeamPlayer { | ||
|  |   margin-left: 0px; | ||
|  | } | ||
|  | 
 | ||
|  | .player { | ||
|  |   width: 180px; /* defined as player.width */ | ||
|  |   margin-right: 20px; /* defined as player.marginRight */ | ||
|  | } | ||
|  | 
 | ||
|  | .event, .firstTeam, .secondTeam, .firstPlayer, .secondPlayer { | ||
|  |   padding-left: 5px; /* defined as player.paddingLeft */ | ||
|  |   padding-right: 5px; /* = player.paddingLeft */ | ||
|  | } | ||
|  | 
 | ||
|  | .round, .secondTeam, .score, .newMoves, .noNewMoves { | ||
|  |   margin-left: 20px; /* defined as player.marginRight */ | ||
|  | } | ||
|  | 
 | ||
|  | .event { | ||
|  |   width: 370px; /* = 2 * player.width + 2 * player.paddingLeft */ | ||
|  | } | ||
|  | 
 | ||
|  | .round { | ||
|  |   width: 100px; /* defined as round.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .match { | ||
|  |   width: 380px; /* = 2 * player.width + 4 * player.paddingLeft */ | ||
|  | } | ||
|  | 
 | ||
|  | .score { | ||
|  |   width: 70px; /* = defined as score.width < round.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .result { | ||
|  |   width: 70px; /* = score.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .eventRound { | ||
|  |   font-size: 20px; /* = 5/4 * body.fontSize */ | ||
|  |   font-weight: normal; | ||
|  |   margin-top: 48px; /* = 3 * body.fontSize */ | ||
|  |   margin-bottom: 12px; /* = 3/4 * body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .matchScore { | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  |   font-weight: bold; | ||
|  |   margin-top: 24px; /* = 3/2 * body.fontSize */ | ||
|  |   margin-bottom: 12px; /* = 3/4 * body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .game { | ||
|  |   font-size: 14px; /* defined as game.fontSize */ | ||
|  |   font-weight: normal; | ||
|  |   margin-top: 0px; | ||
|  |   margin-bottom: 0px; | ||
|  | } | ||
|  | 
 | ||
|  | .secondTeam, .secondTeamPlayer { | ||
|  |   background-color: #F4F4F4; | ||
|  |   border-radius: 3px; /* = 1/4 * game.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .score, .result { | ||
|  |   text-align: center; | ||
|  | } | ||
|  | 
 | ||
|  | .newMoves, .noNewMoves { | ||
|  |   color: gray; | ||
|  |   font-weight: bold; | ||
|  | } | ||
|  | 
 | ||
|  | .noNewMoves { | ||
|  |   visibility: hidden; | ||
|  | } | ||
|  | 
 | ||
|  | .gameLiveStatus2 { | ||
|  |   display: inline-block; | ||
|  |   margin-top: 48px; /* = 3 * body.fontSize */ | ||
|  |   padding-left: 5px; /* = player.paddingLeft */ | ||
|  |   font-size: 14px; /* defined as game.fontSize */ | ||
|  |   color: gray; | ||
|  | } | ||
|  | 
 | ||
|  | .gameFloatingContainer { | ||
|  |   position: fixed; | ||
|  |   right: 30px; /* defined as gameFloatingContainer.right */ | ||
|  |   top: 30px; /* = gameFloatingContainer.right */ | ||
|  |   white-space: nowrap; | ||
|  |   background-color: white; | ||
|  | } | ||
|  | 
 | ||
|  | .gameAnalysisContainer { | ||
|  |   padding-top: 97px; /* = gameBoardContainer.paddingTop + 2 * (header.fontSize * header.lineHeight + header.paddingBottom) + boardTable.borderWidth = (20 + 2 * (11 * 1.4 + 22) + 2) */ | ||
|  |   overflow: hidden; | ||
|  |   width: 40px; /* defined as gameAnalysisContainer.width.closed = body.padding */ | ||
|  |   transition: width 1s linear; | ||
|  |   -moz-transition: width 1s linear; | ||
|  |   -webkit-transition: width 1s linear; | ||
|  |   -o-transition: width 1s linear; | ||
|  |   opacity: 0.8; | ||
|  | } | ||
|  | 
 | ||
|  | .gameAnalysisButtons { | ||
|  |   height: 14px; /* = engine.html squareSize / 2 */ | ||
|  |   width: 224px; /* = gameAnalysisFrame.width */ | ||
|  |   margin-left: 40px; /* = body.padding */ | ||
|  |   margin-bottom: 14px; /* = engine.html squareSize / 2 */ | ||
|  | } | ||
|  | 
 | ||
|  | .gameAnalysisFrame { | ||
|  |   width: 224px; /* defined as gameAnalysisFrame.width = engine.html width */ | ||
|  |   height: 280px; /* = engine.html height */ | ||
|  |   margin-left: 40px; /* defined as gameAnalysisFrame.marginLeft = body.padding */ | ||
|  | } | ||
|  | 
 | ||
|  | .gameBoardContainer { | ||
|  |   width: 324px; | ||
|  |   padding: 10px; /* defined as gameBoardContainer.padding = body.padding - gameFloatingContainer.right */ | ||
|  |   padding-top: 20px; /* defined as gameBoardContainer.paddingTop = 2 * gameBoardContainer.padding */ | ||
|  |   padding-left: 0px; | ||
|  |   margin-bottom: 16px; /* = body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .whiteSquare, | ||
|  | .blackSquare, | ||
|  | .highlightWhiteSquare, | ||
|  | .highlightBlackSquare { | ||
|  |   width: 38px; /* defined as whiteSquare.bareWidth */ | ||
|  |   height: 38px; /* = whiteSquare.bareWidth */ | ||
|  |   border-style: solid; | ||
|  |   border-width: 1px; /* defined as whiteSquare.borderWidth */ | ||
|  |   /* whiteSquare.width = whiteSquare.bareWidth + 2 * whiteSquare.borderWidth */ | ||
|  | } | ||
|  | 
 | ||
|  | .boardTable { | ||
|  |   border-style: solid; | ||
|  |   border-color: #818780; | ||
|  |   border-width: 2px; /* defined as boardTable.borderWidth */ | ||
|  |   box-shadow: 0px 0px 20px #B0B8AE; | ||
|  |   width: 324px; /* = 8 * whiteSquare.width + 2 * boardTable.borderWidth */ | ||
|  |   height: 324px; /* = 8 * whiteSquare.width + 2 * boardTable.borderWidth */ | ||
|  |   background-color: #FFFFFF; | ||
|  | } | ||
|  | 
 | ||
|  | .pieceImage { | ||
|  |   width: 32px; /* defined as pieceImage.width < whiteSquare.bareWidth */ | ||
|  |   height: 32px; /* = pieceImage.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .whiteSquare, | ||
|  | .highlightWhiteSquare { | ||
|  |   background: #EFF4EC; | ||
|  |   border-color: #EFF4EC; | ||
|  | } | ||
|  | 
 | ||
|  | .blackSquare, | ||
|  | .highlightBlackSquare { | ||
|  |   background: #C6CEC3; | ||
|  |   border-color: #C6CEC3; | ||
|  | } | ||
|  | 
 | ||
|  | .highlightWhiteSquare, | ||
|  | .highlightBlackSquare { | ||
|  |   border-color: #818780; | ||
|  | } | ||
|  | 
 | ||
|  | .selectControl { | ||
|  | /* a "width" attribute here must use the !important flag to override default settings */ | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .optionSelectControl { | ||
|  | } | ||
|  | 
 | ||
|  | .buttonControlPlay, | ||
|  | .buttonControlStop, | ||
|  | .buttonControl { | ||
|  | /* a "width" attribute here must use the !important flag to override default settings */ | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  |   border-style: none; | ||
|  |   background-color: transparent; | ||
|  | } | ||
|  | 
 | ||
|  | .buttonControlSpace { | ||
|  | /* a "width" attribute here must use the !important flag to override default settings */ | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .searchPgnButton { | ||
|  | /* a "width" attribute here must use the !important flag to override default settings */ | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .searchPgnExpression { | ||
|  | /* a "width" attribute here must use the !important flag to override default settings */ | ||
|  |   font-size: 16px; /* = body.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .move, | ||
|  | .variation { | ||
|  |   text-decoration: none; | ||
|  | } | ||
|  | 
 | ||
|  | .move { | ||
|  |   color: black; | ||
|  | } | ||
|  | 
 | ||
|  | .comment, | ||
|  | .variation { | ||
|  |   color: gray !important; | ||
|  | } | ||
|  | 
 | ||
|  | a.variation { | ||
|  |   color: gray !important; | ||
|  | } | ||
|  | 
 | ||
|  | .moveOn, | ||
|  | .variationOn { | ||
|  |   background: #DAF4D7; | ||
|  | } | ||
|  | 
 | ||
|  | .header, .footer { | ||
|  |   font-size: 11px; /* defined as header.fontSize */ | ||
|  |   line-height: 1.4em; /* defined as header.lineHeight */ | ||
|  |   white-space: nowrap; | ||
|  |   margin-left: 2px; /* = boardTable.borderWidth */ | ||
|  |   margin-right: 2px; /* = boardTable.borderWidth */ | ||
|  |   width: 320px; /* = 8 * whiteSquare.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .header { | ||
|  |   margin-bottom: 22px; /* defined as header.marginBottom = 2 * header.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .footer { | ||
|  |   margin-top: 22px; /* = 2 * header.fontSize */ | ||
|  | } | ||
|  | 
 | ||
|  | .gameEvent, .gameLiveStatus, .gameWhite, .gameWhiteClock, .gameBlackClock, .gameBlack { | ||
|  |   display: inline-block; | ||
|  |   overflow: hidden; | ||
|  | } | ||
|  | 
 | ||
|  | .gameEvent { | ||
|  |   width: 220px; /* = 5.5 * whiteSquare.width */ | ||
|  |   margin-right: 20px; /* = 1/2 * whiteSquare.width */ | ||
|  |   text-align: left; | ||
|  |   color: gray; | ||
|  | } | ||
|  | 
 | ||
|  | .gameLiveStatus { | ||
|  |   width: 80px; /* = 2 * whiteSquare.width */ | ||
|  |   text-align: right; | ||
|  |   text-decoration: none; | ||
|  |   color: gray; | ||
|  | } | ||
|  | 
 | ||
|  | .gameWhite, .gameBlack { | ||
|  |   width: 80px; /* = 2 * whiteSquare.width */ | ||
|  |   text-decoration: none; | ||
|  |   color: black; | ||
|  | } | ||
|  | 
 | ||
|  | .gameWhiteClock, .gameBlackClock { | ||
|  |   width: 50px; /* defined as gameWhiteClock.width */ | ||
|  |   margin-left: 15px; /* = 1/2 * (2 * whiteSquare.width - gameWhiteClock.width) */ | ||
|  |   margin-right: 15px; /* = 1/2 * (2 * whiteSquare.width - gameWhiteClock.width) */ | ||
|  | } | ||
|  | 
 | ||
|  | .gameWhite, .gameBlackClock { | ||
|  |   text-align: left; | ||
|  | } | ||
|  | 
 | ||
|  | .gameWhiteClock, .gameBlack { | ||
|  |   text-align: right; | ||
|  | } | ||
|  | 
 | ||
|  | .gameSideToMove, .gameText, .gameResult { | ||
|  |   white-space: nowrap; | ||
|  |   display: inline-block; | ||
|  |   overflow-x: hidden; | ||
|  | } | ||
|  | 
 | ||
|  | .gameSideToMove, .gameResult { | ||
|  |   width: 50px; /* = gameWhiteClock.width */ | ||
|  | } | ||
|  | 
 | ||
|  | .gameText { | ||
|  |   width: 220px; /* = 8 * whiteSquare.width - 2 * gameWhiteClock.width */ | ||
|  |   text-align: center; | ||
|  | } | ||
|  | 
 | ||
|  | .gameResult { | ||
|  |   text-align: right; | ||
|  | } | ||
|  | 
 | ||
|  | .sideToMove { | ||
|  |   height: 1ex; | ||
|  |   width: 1ex; | ||
|  |   border-style: solid; | ||
|  |   border-color: black; | ||
|  |   border-width: 1px; | ||
|  |   margin-bottom: 1px; | ||
|  | } | ||
|  | 
 | ||
|  | .sideToMoveHidden { | ||
|  |   visibility: hidden; | ||
|  | } | ||
|  | 
 | ||
|  | </style> | ||
|  | 
 | ||
|  | <script src="pgn4web.js" type="text/javascript"></script> | ||
|  | <script src="engine.js" type="text/javascript"></script> | ||
|  | 
 | ||
|  | <script src="fide-lookup.js" type="text/javascript"></script> | ||
|  | 
 | ||
|  | <script src="crc32.js" type="text/javascript"></script> | ||
|  | 
 | ||
|  | <script type="text/javascript"> | ||
|  |   "use strict"; | ||
|  | 
 | ||
|  |   var pgn4web_engineWindowUrlParameters = "lch=FFFFFF&dch=E4E4E4&hch=BCDEB4&ctch=888888&ss=28&ps=24&fms=11&fcs=19&fpr=0"; | ||
|  |   var pgn4web_engineWindowTarget = "pgn4webAnalysisBoardForLiveResultsViewer"; | ||
|  |   var pgn4web_engineWindowHeight = ""; | ||
|  |   var pgn4web_engineWindowWidth = ""; | ||
|  | 
 | ||
|  |   var pgnFile; | ||
|  |   var pgnFile_default = detectBaseLocation() ? | ||
|  |     location.protocol + "//" + location.hostname + location.pathname.replace(/\/[^\/]*$/, "/live/live.pgn") : | ||
|  |     "live/live.pgn"; | ||
|  |   // accepts pgnData as alias for pgnFile for consistency with board.html | ||
|  |   if ((pgnFile = gup("pgnData")) === "") { | ||
|  |     if ((pgnFile = gup("pgnFile")) === "") { | ||
|  |       pgnFile = pgnFile_default; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var demoFlag = false; | ||
|  |   var alertFlag = false; | ||
|  |   if ((gup("demo") == "true") || (gup("demo") == "t") || | ||
|  |       (gup("refreshDemo") == "true") || (gup("refreshDemo") == "t")) { | ||
|  |     demoFlag = true; alertFlag = true; | ||
|  |   } | ||
|  | 
 | ||
|  |   var refreshMinutes; | ||
|  |   if ((refreshMinutes = gup("refreshMinutes")) === "") { | ||
|  |     refreshMinutes = 1; | ||
|  |   } else { | ||
|  |     var testMinutes = refreshMinutes + ""; | ||
|  |     if ((testMinutes.match(/[^0-9\.]/)) || (refreshMinutes === 0)) { | ||
|  |       if (alertFlag) { | ||
|  |         alert("ERROR: refreshMinutes parameter must be a positive number.\n" + | ||
|  |         "Supplied " + testMinutes + "; defaulting to 1."); | ||
|  |       } | ||
|  |       refreshMinutes = 1; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var iniGame; | ||
|  |   var delayIniGame = false; | ||
|  |   if ((iniGame = gup("initialGame")) === "") {iniGame = 1; } | ||
|  |   if (!(isNaN(parseInt(iniGame, 10)))) { | ||
|  |     iniGame = parseInt(iniGame, 10); | ||
|  |     delayIniGame = (iniGame > 0); | ||
|  |   } | ||
|  | 
 | ||
|  |   var showBoard = true; | ||
|  |   if ((gup("showBoard") == "false") || (gup("showBoard") == "f")) { showBoard = false; } | ||
|  | 
 | ||
|  |   var showEvent = true; | ||
|  |   if ((gup("showEvent") == "false") || (gup("showEvent") == "f")) { showEvent = false; } | ||
|  | 
 | ||
|  |   var showTeams = true; | ||
|  |   if ((gup("showTeams") == "false") || (gup("showTeams") == "f")) { showTeams = false; } | ||
|  | 
 | ||
|  |   var showPlayersInfo = true; | ||
|  |   if ((gup("showPlayersInfo") == "false") || (gup("showPlayersInfo") == "f")) { showPlayersInfo = false; } | ||
|  | 
 | ||
|  |   var autoHighlightNewmoves = true; | ||
|  |   if ((gup("autoHighlightNewmoves") == "false") || (gup("autoHighlightNewmoves") == "f")) { autoHighlightNewmoves = false; } | ||
|  | 
 | ||
|  |   var autoSwitchNewgames = false; | ||
|  |   if ((gup("autoSwitchNewgames") == "true") || (gup("autoSwitchNewgames") == "t")) { autoSwitchNewgames = true; } | ||
|  | 
 | ||
|  |   var showAnalysis = false; // does not fit the design to allow this as URL parameter | ||
|  | 
 | ||
|  |   var disableEngine = true; // does not fit the design to allow this as URL parameter; preset as true to preload the analysis board | ||
|  | 
 | ||
|  |   var autoUpdateAnalysis = false; | ||
|  |   if ((gup("autoUpdateAnalysis") == "true") || (gup("autoUpdateAnalysis") == "t")) { autoUpdateAnalysis = true; } | ||
|  | 
 | ||
|  |   var headlessPage = false; | ||
|  |   if ((gup("headlessPage") == "true") || (gup("headlessPage") == "t")) { headlessPage = true; } | ||
|  | 
 | ||
|  |   if ((gup("help") == "true") || (gup("help") == "t")) { | ||
|  |       document.write("<pre style='font-size:11px;'>" + | ||
|  |       "pgn4web live-results.html parameters" + "\n\n" + | ||
|  |       " - pgnData = " + pgnFile + "; PGN file to load (default " + pgnFile_default + ")" + "\n" + | ||
|  |       " - refreshMinutes = " + refreshMinutes + "; refresh interval in minutes, decimals allowed (default 1)" + "\n" + | ||
|  |       " - refreshDemo = " + demoFlag + "; sets live demo mode (default false)" + "\n" + | ||
|  |       " - initialGame = " + iniGame + "; initial game to load, a number or first, last, random or a search string (default 1)" + "\n" + | ||
|  |       " - showBoard = " + showBoard + "; shows the chessboard (default true)" + "\n" + | ||
|  |       " - showEvent = " + showEvent + "; shows event information (default true)" + "\n" + | ||
|  |       " - showTeams = " + showTeams + "; shows teams information (default true)" + "\n" + | ||
|  |       " - autoHighlightNewmoves = " + autoHighlightNewmoves + "; automatically highlights new moves (default true)" + "\n" + | ||
|  |       " - autoSwitchNewgames = " + autoSwitchNewgames + "; automatically switches to games with new moves (default false)" + "\n" + | ||
|  |       " - autoUpdateAnalysis = " + autoUpdateAnalysis + "; automatically updates analysis board from main board (default false)" + "\n" + | ||
|  |       " - showPlayersInfo = " + showPlayersInfo + "; shows title/elo players information (default true)" + "\n" + | ||
|  |       " - headlessPage = " + headlessPage + "; displays a page without heading (default false)" + "\n" + | ||
|  |       " - help = true" + "\n\n" + | ||
|  |       "</pre>"); | ||
|  |   } | ||
|  | 
 | ||
|  |   SetPgnUrl(pgnFile); | ||
|  |   SetImagePath ("images/alpha/32"); | ||
|  |   SetImageType("png"); | ||
|  |   SetHighlightOption(false); | ||
|  |   SetCommentsIntoMoveText(false); | ||
|  |   SetCommentsOnSeparateLines(false); | ||
|  |   SetAutoplayDelay(1000); | ||
|  |   SetAutostartAutoplay(false); | ||
|  |   SetAutoplayNextGame(false); | ||
|  |   SetInitialHalfmove("end", true); | ||
|  |   SetInitialVariation(0); | ||
|  |   SetInitialGame(delayIniGame ? "first" : iniGame); | ||
|  |   SetShortcutKeysEnabled(showBoard); | ||
|  |   SetLiveBroadcast(refreshMinutes, alertFlag, demoFlag, true); | ||
|  | 
 | ||
|  |   function customFunctionOnCheckLiveBroadcastStatus() { | ||
|  |     var theObj, theObjFrom, theObjTo; | ||
|  |     if ((theObjFrom = document.getElementById("GameLiveStatus")) && (theObjTo = document.getElementById("GameLiveStatus2"))) { | ||
|  |       theObjTo.innerHTML = theObjFrom.innerHTML; | ||
|  |       theObjTo.title = theObjFrom.title; | ||
|  |     } | ||
|  |     for (var gg in gameId) { | ||
|  |       if (theObj = document.getElementById("newMoves_" + gameId[gg])) { | ||
|  |         theObj.className = "noNewMoves"; | ||
|  |       } | ||
|  |     } | ||
|  |     gameNewMoves = new Array(); | ||
|  |     SetHighlight(false); | ||
|  |   } | ||
|  | 
 | ||
|  |   var gameId; | ||
|  |   var gameWhiteTeam; | ||
|  |   var gameBlackTeam; | ||
|  |   var gameWhiteTitle; | ||
|  |   var gameBlackTitle; | ||
|  |   var gameWhiteElo; | ||
|  |   var gameBlackElo; | ||
|  |   var gameMatch; | ||
|  |   var gameBoard; | ||
|  |   var newGameLengthFromCrc = new Array(); | ||
|  |   var gameLengthFromCrc = new Array(); | ||
|  |   var gameNewMoves; | ||
|  |   var firstCustomFunctionOnPgnTextLoad = true; | ||
|  |   function customFunctionOnPgnTextLoad() { | ||
|  |     var theObj; | ||
|  | 
 | ||
|  |     gameId = new Array(); | ||
|  | 
 | ||
|  |     gameWhiteTeam = new Array(); | ||
|  |     gameBlackTeam = new Array(); | ||
|  |     gameWhiteTitle = new Array(); | ||
|  |     gameBlackTitle = new Array(); | ||
|  |     gameWhiteElo = new Array(); | ||
|  |     gameBlackElo = new Array(); | ||
|  |     gameMatch = new Array(); | ||
|  |     gameBoard = new Array(); | ||
|  |     gameNewMoves = new Array(); | ||
|  |     for (var gg = 0; gg < numberOfGames; gg++) { | ||
|  |       gameId[gg] = gg; | ||
|  |       gameWhiteTeam[gg] = customPgnHeaderTag("WhiteTeam", null, gg); | ||
|  |       gameBlackTeam[gg] = customPgnHeaderTag("BlackTeam", null, gg); | ||
|  |       gameWhiteTitle[gg] = customPgnHeaderTag("WhiteTitle", null, gg); | ||
|  |       gameBlackTitle[gg] = customPgnHeaderTag("BlackTitle", null, gg); | ||
|  |       gameWhiteElo[gg] = customPgnHeaderTag("WhiteElo", null, gg); | ||
|  |       gameBlackElo[gg] = customPgnHeaderTag("BlackElo", null, gg); | ||
|  |       gameMatch[gg] = crc32(gameWhiteTeam[gg]) + crc32(gameBlackTeam[gg]); | ||
|  |       gameBoard[gg] = customPgnHeaderTag("Board", null, gg); | ||
|  |       var thisCrc = (typeof(pgnHeader[gg]) == "string") ? (crc32(pgnHeader[gg].replace(/(^\s*|\s*$)/g, "")) % 65535) + 65535 : 0; | ||
|  |       newGameLengthFromCrc[thisCrc] = LiveBroadcastDemo ? gameDemoMaxPly[gg] : pgnGame[gg].replace(/(^\s*|\s*$)/g, "").length; | ||
|  |       gameNewMoves[gg] = ((newGameLengthFromCrc[thisCrc] !== gameLengthFromCrc[thisCrc]) && (!LiveBroadcastEnded)); | ||
|  |     } | ||
|  |     gameLengthFromCrc = newGameLengthFromCrc.splice(0, newGameLengthFromCrc.length); | ||
|  |     gameId.sort(sortGameId); | ||
|  | 
 | ||
|  |     printGames(); | ||
|  |     if (autoHighlightNewmoves) { | ||
|  |       SetHighlight((typeof(gameNewMoves) != "undefined") && (typeof(gameNewMoves[currentGame]) != "undefined") && (gameNewMoves[currentGame])); | ||
|  |     } | ||
|  | 
 | ||
|  |     if ((LiveBroadcastTicker < 2) && delayIniGame) { | ||
|  |       Init(typeof(gameId[iniGame - 1]) != "undefined" ? gameId[iniGame - 1] : "0"); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (autoSwitchNewgames && ((typeof(gameNewMoves) == "undefined") || (!gameNewMoves[currentGame]))) { searchGameWithNewMoves(false); } | ||
|  | 
 | ||
|  |     if (firstCustomFunctionOnPgnTextLoad) { | ||
|  |       firstCustomFunctionOnPgnTextLoad = false; | ||
|  |       if (theObj = document.getElementById("SideToMove")) { theObj.className = "sideToMove"; } | ||
|  |       showEngineAnalysisBoard(disableEngine, true); // prepare analysis frame with an idle board | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function myCompare(AA, ZZ) { | ||
|  |     if (!AA && !ZZ) { return 0; } | ||
|  |     if (AA && !ZZ) { return -1; } | ||
|  |     if (!AA && ZZ) { return 1; } | ||
|  |     if (AA > ZZ) { return 1; } | ||
|  |     if (AA < ZZ) { return -1; } | ||
|  |     return 0; | ||
|  |   } | ||
|  | 
 | ||
|  |   function myCompareRound(AA, ZZ) { | ||
|  |     try { | ||
|  |       if (!AA && !ZZ) { return 0; } | ||
|  |       if (AA && !ZZ) { return -1; } | ||
|  |       if (!AA && ZZ) { return 1; } | ||
|  |       if (AA.match(/[^0-9.]/) || ZZ.match(/[^0-9.]/)) { return myCompare(AA, ZZ); } | ||
|  |       var AA_A = AA.split("."); | ||
|  |       var ZZ_Z = ZZ.split("."); | ||
|  |       var jm = Math.max(AA_A.length, ZZ_Z.length); | ||
|  |       for (var jj = 0; jj < jm; jj++) { | ||
|  |         if (AA_A[jj] && !ZZ_Z[jj]) { return -1; } | ||
|  |         if (!AA_A[jj] && ZZ_Z[jj]) { return 1; } | ||
|  |         AA_A[jj] = parseInt(AA_A[jj], 10); | ||
|  |         ZZ_Z[jj] = parseInt(ZZ_Z[jj], 10); | ||
|  |         if (AA_A[jj] > ZZ_Z[jj]) { return 1; } | ||
|  |         if (AA_A[jj] < ZZ_Z[jj]) { return -1; } | ||
|  |       } | ||
|  |       return 0; | ||
|  |     } catch(e) { | ||
|  |       myAlert("warming: myCompareRound failed with AA=" + AA + "; ZZ=" + ZZ + ";", false); | ||
|  |       return myCompare(AA, ZZ); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function sortGameId(aa, zz) { | ||
|  |     var res; | ||
|  | 
 | ||
|  |     res = myCompare(gameEvent[aa], gameEvent[zz]); | ||
|  |     if (res !== 0) { return res; } | ||
|  | 
 | ||
|  |     res = myCompareRound(fixRound(gameRound[aa]), fixRound(gameRound[zz])); | ||
|  |     if (res !== 0) { return res; } | ||
|  | 
 | ||
|  |     res = myCompare(gameMatch[aa], gameMatch[zz]); | ||
|  |     if (res !== 0) { return res; } | ||
|  | 
 | ||
|  |     res = myCompareRound(gameRound[aa], gameRound[zz]); | ||
|  |     if (res !== 0) { return res; } | ||
|  | 
 | ||
|  |     res = myCompare(gameBoard[aa], gameBoard[zz]); | ||
|  |     if (res !== 0) { return res; } | ||
|  | 
 | ||
|  |     if (aa > zz) { return 1; } | ||
|  |     if (aa < zz) { return -1; } | ||
|  | 
 | ||
|  |     return 0; | ||
|  | 
 | ||
|  |   } | ||
|  | 
 | ||
|  |   function fixRound(thisRound) { | ||
|  |     return thisRound.replace(/\..*$/, ""); // only use the first number of rounds like 1.2.3 | ||
|  |   } | ||
|  | 
 | ||
|  |   function printGames() { | ||
|  |     var firstRow = true; | ||
|  |     var lastEventRound = ""; | ||
|  |     var lastMatch = 0; | ||
|  |     var theObj = document.getElementById("results"); | ||
|  |     if (theObj) { | ||
|  |       var resultTable = ""; | ||
|  |       var ggId, fixedRound, currentEventRound, whitePlayer, whiteTitle, whiteElo, blackPlayer, blackTitle, blackElo; | ||
|  |       for (var gg in gameId) { | ||
|  |         ggId = gameId[gg]; | ||
|  |         fixedRound = fixRound(gameRound[ggId]); | ||
|  |         currentEventRound = gameEvent[ggId] + fixedRound; | ||
|  |         if (showEvent && currentEventRound && (currentEventRound !== lastEventRound)) { | ||
|  |           resultTable += '<div class="eventRound"' + (firstRow ? ' style="margin-top:0px;"' : '') + '><span class="event" title="' + gameEvent[ggId] + '">' + gameEvent[ggId] + '</span><span class="round" title="' + 'round ' + fixedRound + '">' + (fixedRound !== '' ? 'round ' + fixedRound : '') + '</span></div>'; | ||
|  |           if (firstRow) { firstRow = false; } | ||
|  |           lastEventRound = currentEventRound; | ||
|  |           lastMatch = 0; | ||
|  |         } | ||
|  |         if (showTeams && gameMatch[ggId] && (gameMatch[ggId] !== lastMatch)) { | ||
|  |           resultTable += matchRow(gameEvent[ggId], gameRound[ggId], gameMatch[ggId], firstRow); | ||
|  |           if (firstRow) { firstRow = false; } | ||
|  |           lastMatch = gameMatch[ggId]; | ||
|  |         } | ||
|  |         whiteTitle = gameWhiteTitle[ggId]; | ||
|  |         whiteElo = gameWhiteElo[ggId]; | ||
|  |         whitePlayer = gameWhite[ggId] + (showPlayersInfo ? (whiteTitle ? "   " + whiteTitle : "") + (whiteElo ? "   " + whiteElo : "") : ""); | ||
|  |         blackTitle = gameBlackTitle[ggId]; | ||
|  |         blackElo = gameBlackElo[ggId]; | ||
|  |         blackPlayer = gameBlack[ggId] + (showPlayersInfo ? (blackTitle ? "   " + blackTitle : "") + (blackElo ? "   " + blackElo : "") : ""); | ||
|  |         resultTable += '<div class="game" id="gameRow_' + ggId + '" onclick="selectGame(' + ggId + ');" style="' + ((showBoard && (ggId === oldSelectedGame)) ? 'font-weight:bold;' : '') + (firstRow ? 'margin-top:0px;' : '') + '"><span class="player"><span class="firstPlayer' + ((firstTeam && gameWhiteTeam[ggId] === firstTeam) ? ' firstTeamPlayer' : '') + ((secondTeam && gameWhiteTeam[ggId] === secondTeam) ? ' secondTeamPlayer' : '') + '" title="' + whitePlayer.replace(/ /, ' ') + '">' + whitePlayer + '</span></span><span class="player"><span class="secondPlayer' + ((firstTeam && gameWhiteTeam[ggId] === firstTeam) ? ' firstTeamPlayer' : '') + ((secondTeam && gameBlackTeam[ggId] === secondTeam) ? ' secondTeamPlayer' : '') + '" title="' + blackPlayer.replace(/ /, ' ') + '">' + blackPlayer + '</span></span><span class="result" title="' + gameResult[ggId] + '">' + gameResult[ggId] + '</span><span id="newMoves_' + ggId + '" class="' + (gameNewMoves[ggId] ? 'newMoves' : 'noNewMoves') + '" title="new moves received">*</span></div>'; | ||
|  |         if (firstRow) { firstRow = false; } | ||
|  |       } | ||
|  |       theObj.innerHTML = resultTable; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   var firstTeam = ""; | ||
|  |   var secondTeam = ""; | ||
|  |   function matchRow(eventStr, roundStr, matchId, firstRow) { | ||
|  |     firstTeam = ""; | ||
|  |     secondTeam = ""; | ||
|  |     if (matchId === 0) { return ""; } | ||
|  |     var firstTeamScore = 0; | ||
|  |     var secondTeamScore = 0; | ||
|  |     for (var ii in gameId) { | ||
|  |       if ((gameEvent[gameId[ii]] === eventStr) && (fixRound(gameRound[gameId[ii]]) === fixRound(roundStr)) && (gameMatch[gameId[ii]] === matchId)) { | ||
|  |         if (!firstTeam || !secondTeam) { | ||
|  |           firstTeam = gameWhiteTeam[gameId[ii]]; | ||
|  |           secondTeam = gameBlackTeam[gameId[ii]]; | ||
|  |         } | ||
|  |         switch (gameResult[gameId[ii]]) { | ||
|  |           case "1-0": | ||
|  |             if (firstTeam == gameWhiteTeam[gameId[ii]]) { firstTeamScore += 1; } | ||
|  |             else if (secondTeam == gameWhiteTeam[gameId[ii]]) { secondTeamScore += 1; } | ||
|  |             break; | ||
|  |           case "0-1": | ||
|  |             if (firstTeam == gameBlackTeam[gameId[ii]]) { firstTeamScore += 1; } | ||
|  |             else if (secondTeam == gameBlackTeam[gameId[ii]]) { secondTeamScore += 1; } | ||
|  |             break; | ||
|  |           case "1/2-1/2": | ||
|  |             firstTeamScore += 0.5; | ||
|  |             secondTeamScore += 0.5; | ||
|  |             break; | ||
|  |           default: | ||
|  |             break; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     return '<div class="matchScore"' + (firstRow? ' style="margin-top:0px;"' : '') + '><span class="match" title="' + firstTeam + ' - ' + secondTeam + '"><span class="team"><span class="firstTeam">' + firstTeam + '</span></span><span class="team"><span class="secondTeam">' + secondTeam + '</span></span></span><span class="score" title="' + firstTeamScore + '-' + secondTeamScore + '">' + firstTeamScore + '-' + secondTeamScore + '</span></div>'; | ||
|  |   } | ||
|  | 
 | ||
|  |   var oldSelectedGame = -1; | ||
|  |   function selectGame(gameNum) { | ||
|  |     if (!showBoard) { return; } | ||
|  |     Init(gameNum); | ||
|  |     highlightGame(gameNum); | ||
|  |   } | ||
|  | 
 | ||
|  |   function highlightGame(gameNum) { | ||
|  |     var theObj; | ||
|  |     if (!showBoard) { return; } | ||
|  |     if (theObj = document.getElementById("gameRow_" + oldSelectedGame)) { | ||
|  |       if (oldSelectedGame !== gameNum) { | ||
|  |         theObj.style.fontWeight = ""; | ||
|  |       } | ||
|  |     } | ||
|  |     if (theObj = document.getElementById("gameRow_" + gameNum)) { | ||
|  |        theObj.style.fontWeight = "bold"; | ||
|  |     } | ||
|  |     oldSelectedGame = gameNum; | ||
|  |   } | ||
|  | 
 | ||
|  |   function customFunctionOnPgnGameLoad() { | ||
|  |     var theObj; | ||
|  | 
 | ||
|  |     highlightGame(currentGame); | ||
|  | 
 | ||
|  |     if (theObj = document.getElementById("GameWhite")) { | ||
|  |       var whiteTitle = customPgnHeaderTag("WhiteTitle"); | ||
|  |       var whiteElo = customPgnHeaderTag("WhiteElo"); | ||
|  |       theObj.title = simpleHtmlentitiesDecode("white player:   " + gameWhite[currentGame] + (showPlayersInfo ? (whiteTitle ? "   " + whiteTitle : "") + (whiteElo ? "   " + whiteElo : "") : "")); | ||
|  |       if (theObj.innerHTML === "") { theObj.innerHTML = " "; } | ||
|  |     } | ||
|  |     if (theObj = document.getElementById("GameBlack")) { | ||
|  |       var blackTitle = customPgnHeaderTag("BlackTitle"); | ||
|  |       var blackElo = customPgnHeaderTag("BlackElo"); | ||
|  |       theObj.title = simpleHtmlentitiesDecode("black player:   " + gameBlack[currentGame] + (showPlayersInfo ? (blackTitle ? "   " + blackTitle : "") + (blackElo ? "   " + blackElo : "") : "")); | ||
|  |       if (theObj.innerHTML === "") { theObj.innerHTML = " "; } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (theObj = document.getElementById("GameEvent")) { | ||
|  |       theObj.title = simpleHtmlentitiesDecode("event: " + gameEvent[currentGame] + (gameRound[currentGame] ? "   round: " + gameRound[currentGame] : "") + (gameDate[currentGame] ? "   date: " + gameDate[currentGame] : "") + (gameSite[currentGame] ? "   site: " + gameSite[currentGame] : "")); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (autoHighlightNewmoves) { | ||
|  |       SetHighlight((typeof(gameNewMoves) != "undefined") && (typeof(gameNewMoves[currentGame]) != "undefined") && (gameNewMoves[currentGame])); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function customFunctionOnMove() { | ||
|  |     var extraMoves = 2; | ||
|  | 
 | ||
|  |     document.getElementById("GamePrevMoves").innerHTML = ""; | ||
|  |     document.getElementById("GameCurrMove").innerHTML = ""; | ||
|  |     document.getElementById("GameNextMoves").innerHTML = ""; | ||
|  |     var theObj = document.getElementById("GamePrevMoves"); | ||
|  |     var thisPly = Math.max(CurrentPly - extraMoves - 1, StartPly); | ||
|  |     if (thisPly > StartPly) { theObj.innerHTML += "... "; } | ||
|  |     for (; thisPly < Math.min(CurrentPly + extraMoves, StartPly + PlyNumber); thisPly++) { | ||
|  |       if (thisPly == CurrentPly) { | ||
|  |         theObj = document.getElementById("GameNextMoves"); | ||
|  |       } | ||
|  |       if (thisPly % 2 === 0) { theObj.innerHTML += Math.floor(1 + thisPly / 2) + ". "; } | ||
|  |       if (thisPly == CurrentPly - 1) { | ||
|  |         theObj = document.getElementById("GameCurrMove"); | ||
|  |       } | ||
|  |       theObj.innerHTML += Moves[thisPly] + " "; | ||
|  |     } | ||
|  |     if (thisPly < StartPly + PlyNumber) { theObj.innerHTML += "..."; } | ||
|  | 
 | ||
|  |     if (theObj = document.getElementById("SideToMove")) { | ||
|  |       theObj.style.backgroundColor = CurrentPly % 2 ? "black" : "white"; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (showBoard && showAnalysis && autoUpdateAnalysis) { | ||
|  |       showAnalysisBoard(disableEngine); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function searchGameWithNewMoves(backward) { | ||
|  |     if (typeof(gameId) == "undefined") { return; } | ||
|  |     if (typeof(gameNewMoves) == "undefined") { return; } | ||
|  | 
 | ||
|  |     for (var thisGameIndex = 0; thisGameIndex < gameId.length; thisGameIndex++) { | ||
|  |       if (gameId[thisGameIndex] == currentGame) { break; } | ||
|  |     } | ||
|  |     if (thisGameIndex === gameId.length) { return; } | ||
|  | 
 | ||
|  |     var indexIncrement = backward ? -1 : 1; | ||
|  |     for (var thisIndex = (thisGameIndex + indexIncrement + gameId.length) % gameId.length; thisIndex !== thisGameIndex; thisIndex = (thisIndex + indexIncrement + gameId.length) % gameId.length) { | ||
|  |       if (gameNewMoves[gameId[thisIndex]]) { break; } | ||
|  |     } | ||
|  |     if (thisIndex !== thisGameIndex) { Init(gameId[thisIndex]); } | ||
|  |   } | ||
|  | 
 | ||
|  |   function customDebugInfo() { | ||
|  |     return "showEvent=" + showEvent + " showTeams=" + showTeams + " showPlayersInfo=" + showPlayersInfo + " showBoard=" + showBoard + " autoHighlightNewmoves=" + autoHighlightNewmoves + " autoSwitchNewgames=" + autoSwitchNewgames + " showAnalysis=" + showAnalysis; | ||
|  |   } | ||
|  | 
 | ||
|  |   // customShortcutKey_Shift_1 defined by fide-lookup.js | ||
|  |   // customShortcutKey_Shift_2 defined by fide-lookup.js | ||
|  | 
 | ||
|  |   function customShortcutKey_Shift_3() { searchGameWithNewMoves(true); } | ||
|  |   function customShortcutKey_Shift_4() { searchGameWithNewMoves(false); } | ||
|  |   function customShortcutKey_Shift_5() { autoHighlightNewmoves = !autoHighlightNewmoves; } | ||
|  |   function customShortcutKey_Shift_6() { autoSwitchNewgames = !autoSwitchNewgames; } | ||
|  |   function customShortcutKey_Shift_7() { toggleShowBoard(); } | ||
|  | 
 | ||
|  |   // overwriting engine.js definitions of customShortcutKey_Shift_8 9 0 | ||
|  |   function customShortcutKey_Shift_8() { showAnalysisBoard(true); } | ||
|  |   function customShortcutKey_Shift_9() { showAnalysisBoard(false); } | ||
|  |   function customShortcutKey_Shift_0() { if (showAnalysis) { hideAnalysisBoard(); } else { showAnalysisBoard(disableEngine); } } | ||
|  | 
 | ||
|  |   boardShortcut("F5", "toggle event information", function(t,e){ toggleShowEvent(); }); | ||
|  |   boardShortcut("G5", "toggle teams information", function(t,e){ toggleShowTeams(); }); | ||
|  |   boardShortcut("H5", "toggle title/elo players information", function(t,e){ toggleShowPlayersInfo(); }); | ||
|  | 
 | ||
|  |   boardShortcut("B7", "search previous game with new moves", function(t,e){ searchGameWithNewMoves(true); }); | ||
|  |   boardShortcut("C7", "search next game with new moves", function(t,e){ searchGameWithNewMoves(false); }); | ||
|  |   boardShortcut("F7", "toggle autohighlight new moves", function(t,e){ autoHighlightNewmoves = !autoHighlightNewmoves && !e.shiftKey; }); | ||
|  |   boardShortcut("G7", "toggle autoswitch to games with new moves", function(t,e){ autoSwitchNewgames = !autoSwitchNewgames && !e.shiftKey; }); | ||
|  | 
 | ||
|  |   boardShortcut("F8", "close/pause analysis board", function(t,e){ if (!e.shiftKey) { hideAnalysisBoard(); } }); | ||
|  |   boardShortcut("E8", "open/update analysis board", function(t,e){ showAnalysisBoard(e.shiftKey); }, true); | ||
|  | 
 | ||
|  | 
 | ||
|  |   function toggleShowEvent() { | ||
|  |     showEvent = !showEvent; | ||
|  |     printGames(); | ||
|  |   } | ||
|  | 
 | ||
|  |   function toggleShowTeams() { | ||
|  |     showTeams = !showTeams; | ||
|  |     printGames(); | ||
|  |    } | ||
|  | 
 | ||
|  |   function toggleShowPlayersInfo() { | ||
|  |     showPlayersInfo = !showPlayersInfo; | ||
|  |     printGames(); | ||
|  |     customFunctionOnPgnGameLoad(); | ||
|  |   } | ||
|  | 
 | ||
|  |   function toggleShowBoard() { | ||
|  |     var theObj; | ||
|  |     showBoard = !showBoard; | ||
|  |     if (theObj = document.getElementById("GameFloatingContainer")) { | ||
|  |       theObj.style.display = showBoard ? "" : "none"; | ||
|  |     } | ||
|  |     if (theObj = document.getElementById("GameLiveStatus2")) { | ||
|  |       theObj.style.display = showBoard ? "none" : ""; | ||
|  |     } | ||
|  |     if (showBoard) { Init(currentGame); } | ||
|  |     printGames(); | ||
|  |   } | ||
|  | 
 | ||
|  |   var thisEngineWin; | ||
|  |   function showAnalysisBoard(de) { | ||
|  |     var theObj; | ||
|  |     if (!showBoard) { return; } | ||
|  |     thisEngineWin = showEngineAnalysisBoard(de); | ||
|  |     if (thisEngineWin) { | ||
|  |       disableEngine = de; | ||
|  |       if (theObj = document.getElementById('GameAnalysisContainer')) { | ||
|  |         theObj.style.width = "304px"; // defined as gameAnalysisContainer.width.open = gameAnalysisFrame.width + gameAnalysisFrame.marginLeft + body.padding | ||
|  |       } | ||
|  |       showAnalysis = true; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function hideAnalysisBoard() { | ||
|  |     var theObj; | ||
|  |     if (theObj = document.getElementById('GameAnalysisContainer')) { | ||
|  |       theObj.style.width = "40px"; // = gameAnalysisContainer.width.closed | ||
|  |     } | ||
|  |     if (typeof(thisEngineWin) != "undefined") { | ||
|  |       if (typeof(thisEngineWin.StopBackgroundEngine) == "function") { thisEngineWin.StopBackgroundEngine(); } | ||
|  |       if (typeof(thisEngineWin.autoUpdate) != "undefined") { thisEngineWin.autoUpdate = false; } | ||
|  |     } | ||
|  |     showAnalysis = false; | ||
|  |   } | ||
|  | 
 | ||
|  |   function gup(name) { | ||
|  | 
 | ||
|  |     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); | ||
|  |     var regexS = "[\\?&]"+name+"=([^&#]*)"; | ||
|  |     // commented below to match first occurrence (to avoid users overruling setting) | ||
|  |     // regexS = regexS+"(?!.*"+regexS+")"; // matches the LAST occurrence | ||
|  |     var regex = new RegExp( regexS, "i" ); | ||
|  |     var results = regex.exec( window.location.href ); | ||
|  |     if (results !== null) { return decodeURIComponent(results[1]); } | ||
|  | 
 | ||
|  |     // allows for short version of the URL parameters, for instance sC matches squareColor | ||
|  |     var compact_name = name.charAt(0); | ||
|  |     for (var i=1; i<name.length; i++) { | ||
|  |       if (name.charAt(i).match(/[A-Z]/)) { compact_name = compact_name + name.charAt(i).toLowerCase(); } | ||
|  |     } | ||
|  |     name = compact_name; | ||
|  | 
 | ||
|  |     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); | ||
|  |     regexS = "[\\?&]"+name+"=([^&#]*)"; | ||
|  |     // commented below to match first occurrence (to avoid users overruling setting) | ||
|  |     // regexS = regexS+"(?!.*"+regexS+")"; // matches the LAST occurrence | ||
|  |     regex = new RegExp( regexS, "i" ); | ||
|  | 
 | ||
|  |     results = regex.exec( window.location.href ); | ||
|  |     if (results !== null) { return decodeURIComponent(results[1]); } | ||
|  | 
 | ||
|  |     return ""; | ||
|  |   } | ||
|  | 
 | ||
|  | </script> | ||
|  | 
 | ||
|  | </head> | ||
|  | 
 | ||
|  | <body> | ||
|  | 
 | ||
|  | <h1 class="pageHeader" id="pageHeader">pgn4web <a class="pageHeader" href="#games">live chess broadcast</a></h1> | ||
|  | 
 | ||
|  | <table class="gameFloatingContainer" id="GameFloatingContainer" cellspacing="0" cellpadding="0" border="0"><tr valign="top"><td align="leftt"> | ||
|  | <div class="gameAnalysisContainer" id="GameAnalysisContainer"> | ||
|  | <div class="gameAnalysisButtons" id="GameAnalysisButtons" title="analysis board: try moves clicking from/to squares" onclick="hideAnalysisBoard();"></div> | ||
|  | <iframe class="gameAnalysisFrame" id="GameAnalysisFrame" name="pgn4webAnalysisBoardForLiveResultsViewer" src="./blank.html" frameborder="0" scrolling="no" marginheight="0" marginwidth="0">your web browser and/or your host do not support iframes as required</iframe> | ||
|  | </div> | ||
|  | </td><td align="left"> | ||
|  | <div class="gameBoardContainer" id="GameBoardContainer"> | ||
|  | <div class="header"><span class="gameEvent" id="GameEvent"> </span><a class="gameLiveStatus" id="GameLiveStatus" href="javascript:void(0);" onclick="refreshPgnSource(); this.blur();"> </a></div> | ||
|  | <div class="header"><a class="gameWhite" id="GameWhite" title="white player" href="javascript:void(0);" onclick="openFidePlayerUrl(this.innerHTML, customPgnHeaderTag('WhiteFideId')); this.blur();"></a><span class="gameWhiteClock" id="GameWhiteClock" title="white clock"></span><span class="gameBlackClock" id="GameBlackClock" title="black clock"></span><a class="gameBlack" id="GameBlack" title="black player" href="javascript:void(0);" onclick="openFidePlayerUrl(this.innerHTML, customPgnHeaderTag('BlackFideId')); this.blur();"></a></div> | ||
|  | <div id="GameBoard"></div> | ||
|  | <div class="footer"><span class="gameSideToMove"><img class="sideToMove sideToMoveHidden" id="SideToMove" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoEAYAAADcbmQuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAMAAwADAGp0HVAAAAAlwSFlzAAAASAAAAEgARslrPgAAAAl2cEFnAAAAKAAAACgAo3CU+AAAACNJREFUaN7twQENAAAAwqD3T20PBxQAAAAAAAAAAAAAAAAPBjIoAAFxtd2pAAAAAElFTkSuQmCC" title="side to move"/> </span><span class="gameText"> <a id="GamePrevMoves" href="javascript:void(0);" onclick="GoToMove(CurrentPly - 1); this.blur();" title="previous moves"></a><a href="javascript:void(0);" onclick="SetHighlight(!highlightOption); this.blur();" style="font-weight: bold;" id="GameCurrMove" title="current move as shown on chessboard"></a><a id="GameNextMoves" href="javascript:void(0);" onclick="GoToMove(CurrentPly + 1); this.blur();" title="next moves"></a><span style="font-weight: bold;"> </span></span><a class="gameResult" id="GameResult" href="javascript:void(0);" onclick="GoToMove(StartPlyVar[0] + PlyNumberVar[0], 0); this.blur();" title="go to game end"></a></div> | ||
|  | </div> | ||
|  | </td></tr></table> | ||
|  | 
 | ||
|  | <a name="games" class="gamesAnchor" id="gamesAnchor"></a> | ||
|  | 
 | ||
|  | <div id="results"></div> | ||
|  | <a class="gameLiveStatus2" id="GameLiveStatus2" href="javascript:void(0);" onclick="refreshPgnSource(); this.blur();"></a> | ||
|  | 
 | ||
|  | <script type="text/javascript"> | ||
|  |   "use strict"; | ||
|  | 
 | ||
|  |   var theObj; | ||
|  | 
 | ||
|  |   if (theObj = document.getElementById("GameFloatingContainer")) { | ||
|  |     theObj.style.display = showBoard ? "" : "none"; | ||
|  |   } | ||
|  |   if (theObj = document.getElementById("GameLiveStatus2")) { | ||
|  |       theObj.style.display = showBoard ? "none" : ""; | ||
|  |   } | ||
|  |   if (theObj = document.getElementById("pageHeader")) { | ||
|  |     theObj.style.display = headlessPage ? "none" : ""; | ||
|  |   } | ||
|  |   if (theObj = document.getElementById("gamesAnchor")) { | ||
|  |     theObj.style.display = headlessPage ? "none" : ""; | ||
|  |   } | ||
|  | 
 | ||
|  | </script> | ||
|  | 
 | ||
|  | </body> | ||
|  | 
 | ||
|  | </html> |