// BElib.txt v20130324a peter.brazier@ntlworld.com var BE = {}; //BE is the Bridge Event object BE.lastPair; //pair number of last score card displayed BE.points = []; BE.hands = []; BE.thisHand; BE.simsLink = ''; //default - not a sims event var members = []; var visitor; function shortDelay() { var x = 1; var y = null; // To keep under proper scope setTimeout(function() { x = x * 3 + 2; y = x / 2; }, 100); } function getDayName(sessionDate) { switch (sessionDate.getDay()) { case 0: return "Sunday"; case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday"; } } function getMonthName(sessionDate) { switch (sessionDate.getMonth()) { case 0: return "January"; case 1: return "February"; case 2: return "March"; case 3: return "April"; case 4: return "May"; case 5: return "June"; case 6: return "July"; case 7: return "August"; case 8: return "September"; case 9: return "October"; case 10: return "November"; case 11: return "December"; } } function vulnerable(board, pos) { var t = true, f = false, vul_a = [0, [f, f], [t, f], [f, t], [t, t], [t, f], [f, t], [t, t], [f, f], [f, t], [t, t], [f, f], [t, f], [t, t], [f, f], [t, f], [f, t], [f, f], [t, f], [f, t], [t, t], [t, f], [f, t], [t, t], [f, f], [f, t], [t, t], [f, f], [t, f], [t, t], [f, f], [t, f], [f, t], [f, f], [t, f], [f, t], [t, t]]; return vul_a[board][pos]; } //END vulnerable(board, pos) function round2dp(Number) { //Rounds Number to the nearest 2dp return (Math.round(100 * Number)) / 100; } function percentage(pair) { return round2dp(100 * BE.pairs[pair][3] / BE.pairs[pair][4]); } function processPage() { //Wait for the page to load before running the process and display. This funciton is called onload processData(); displayResults(); } function getMembersID(name) { //returns Id if a memeber otherwith returns undefined var id, temp; for (id = 1; id < members.length; id += 1){ if (members[id] !== undefined){ if (members[id][0] === name){ return id; } } } return 0; } function sortArray(arrayName, index) { // Sort arrayName by the index ( in range 0 to ?) in each array - see: http://stackoverflow.com/questions/4382098/javascript-multidimensional-array-sort-by-specified-index arrayName.sort(function (a, b) { if (a[index] === b[index]) { return 0; } return a[index] > b[index] ? -1 : 1; }); } function processData() { //alert("date = " + BE.date); var pn, i, r, board, sessionDate = new Date(BE.date.slice(0, 4), (BE.date.slice(4, 6) - 1), BE.date.slice(6, 8)); BE.sessionDateStr = getDayName(sessionDate) + " " + sessionDate.getDate() + " " + getMonthName(sessionDate) + " " + sessionDate.getFullYear(); BE.rank = [[],[]]; //[0] for NS or 1 winner, [1] for EW with 2 winners. [0 or 1][pair number, %] if (BE.winners === 1) { for (i = 1; i <= 2 * BE.tables; i += 1) { BE.rank[0][i - 1] = [i, BE.pairs[i][5]]; //[pair row, %] row starts at 0 } sortArray(BE.rank[0],1); //sort results array in decending % order rankResults(); } else { // 2 winners for (i = 1; i <= BE.tables; i += 1) { pn = i; BE.rank[0][i - 1] = [pn, BE.pairs[pn][5]]; //NS BE.rank[0][i - 1] = [pn, %] pn = i + BE.tables; BE.rank[1][i - 1] = [pn, BE.pairs[pn][5]]; //EW } sortArray(BE.rank[0],1); //NS rankResults(); sortArray(BE.rank[1],1); //EW rankResults(); } //alert("members.length = " + members.length); if (members.length > 0) { filterNames(); //Filter names for members, non members and pairs of couple } //Sort Travellers for (board = 1; board < BE.travellers.length ; board += 1) { travellerRank(board, 5, 7); //sorts on index 5 (EWmps) and puts EW ranks in index 7 travellerRank(board, 4, 6); //sorts on index 4 (NSmps) and puts NS ranks in index 6 ***THIS WILL BE THE ORDER USED IN ALL SUBSEQUENT OPERATIONS BUT IS NOT SAVED WHEN CLOSED***** } } //END function ProcessData() function rankResults() { // Sorts the traveller rows in order of BE.travellers[board][index1] and places the ranks in BE.travellers[board][index2] // On exit the traveller rows are in the final sorted order var r, rank_a = [[], [], [], []], pn, pc, ns = 0, ew = 1; if (BE.winners === 1){ for (r = 0; r < BE.rank[0].length; r += 1) { // initialize rank_a[r] pn = BE.rank[0][r][0]; pc = BE.rank[0][r][1]; rank_a[r] = [r, pn, r + 1, "", pc]; } for (r = 1; r < BE.rank[0].length; r += 1) { if(rank_a[r][4] === rank_a[r - 1][4]) { // same % rank_a[r][2] = rank_a[r - 1][2]; rank_a[r][3] = "="; rank_a[r - 1][3] = "="; // alert("resultsRank r = " + r); } } // alert("rank_a = " + rank_a); for (r = 0; r < BE.rank[0].length; r += 1) { // write ranks to BE.travellers[board][r][index2] pn = BE.rank[0][r][0]; BE.pairs[pn][2] = rank_a[r][2] + rank_a[r][3]; // alert("NS pn = " + pn + " rank = " + BE.pairs[pn][2]); } } else { //2 winners // NS for (r = 0; r < BE.tables; r += 1) { // initialize rank_a[r] pn = BE.rank[ns][r][0]; pc = BE.rank[ns][r][1]; rank_a[r] = [r, pn, r + 1, "", pc]; } for (r = 1; r < BE.tables; r += 1) { if(rank_a[r][4] === rank_a[r - 1][4]) { // same % rank_a[r][2] = rank_a[r - 1][2]; rank_a[r][3] = "="; rank_a[r - 1][3] = "="; //alert("NS resultsRank r = " + r); } } //alert("rank_a = " + rank_a); for (r = 0; r < BE.rank[0].length; r += 1) { // write ranks to BE.pairs[pn][2] pn = BE.rank[ns][r][0]; BE.pairs[pn][2] = rank_a[r][2] + rank_a[r][3]; } // EW for (r = 0; r < BE.tables; r += 1) { // initialize rank_a[r] pn = BE.rank[ew][r][0]; pc = BE.rank[ew][r][1]; rank_a[r] = [r, pn, r + 1, "", pc]; } //alert("A rank_a = " + rank_a); for (r = 1; r < BE.tables; r += 1) { if(rank_a[r][4] === rank_a[r - 1][4]) { // same % rank_a[r][2] = rank_a[r - 1][2]; rank_a[r][3] = "="; rank_a[r - 1][3] = "="; // alert("EW resultsRank r = " + r); } } //alert("EW rank_a = " + rank_a); for (r = 0; r < BE.rank[1].length; r += 1) { // write ranks to BE.travellers[board][r][index2] pn = BE.rank[ew][r][0]; BE.pairs[pn][2] = rank_a[r][2] + rank_a[r][3]; // alert("EW pn = " + pn + " rank = " + BE.pairs[pn][2]); } } } //END function rankResults() function filterNames(){ var id1, id2, id1spouse; //tag visitors as <i>name</i> - the name is then displayed in italics visitor = false; for (pn = 1; pn < BE.pairs.length; pn +=1) { if (BE.pairs[pn][0] !== undefined) { // is not a missing pair //name1 id1 = getMembersID(BE.pairs[pn][0]); if (id1 === 0) { //a visitor visitor = true; BE.pairs[pn][0] = "<i>" + BE.pairs[pn][0] + "</i>"; id1spouse = 0; //alert("visitor: pn = " + pn + " " + BE.pairs[pn][0]); } else { // member if (members[id1][1].length > 0) { // has nickname BE.pairs[pn][0] = members[id1][1] + BE.pairs[pn][0].substring(BE.pairs[pn][0].indexOf(' ')); //alert("BE.pairs[pn][0] = " + BE.pairs[pn][0]); } id1spouse = members[id1][2]; } //name2 id2 = getMembersID(BE.pairs[pn][1]); if (id2 === 0) { //a visitor visitor = true; BE.pairs[pn][1] = "<i>" + BE.pairs[pn][1] + "</i>"; //alert("visitor: pn = " + pn + " " + BE.pairs[pn][1]); } else { // member if (members[id2][1].length > 0) { // has nickname BE.pairs[pn][1] = members[id2][1] + BE.pairs[pn][1].substring(BE.pairs[pn][1].indexOf(' ')); //alert("nickname = " + members[id2][1]); //alert("surname = " + BE.pairs[pn][1].substring(BE.pairs[pn][1].indexOf(' '))); //alert("BE.pairs[pn][1] = " + BE.pairs[pn][1]); } //look for couples if (id2 === id1spouse) { // a couple BE.pairs[pn][0] = BE.pairs[pn][0].substring(0, BE.pairs[pn][0].indexOf(' ')); //alert("couple pn = " + pn + " " + BE.pairs[pn][0] + " & " + BE.pairs[pn][1]); } } } } } function travellerRank(board, index1, index2) { // Sorts the traveller rows in order of BE.travellers[board][index1] and places the ranks in BE.travellers[board][index2] // On exit the traveller rows are in the final sorted order var r, rank_a = [[], [], [], []]; sortArray(BE.travellers[board], index1); for (r = 0; r < BE.travellers[board].length; r += 1) { // initialize rank_a[r] rank_a[r] = [r, BE.travellers[board][r][index1], r + 1, ""]; } for (r = 1; r < BE.travellers[board].length; r += 1) { if(rank_a[r][1] === rank_a[r - 1][1]) { // find = positions rank_a[r][2] = rank_a[r - 1][2]; rank_a[r][3] = "="; rank_a[r - 1][3] = "="; } } for (r = 0; r < BE.travellers[board].length; r += 1) { // write ranks to BE.travellers[board][r][index2] BE.travellers[board][r][index2] = rank_a[r][2] + rank_a[r][3]; } }//END function travellerRank(board, indrx) function displayResults() { function writePairData(pair) { var url, id1, id2; if (BE.pairs[pair][0] === undefined) { divString += "<td class='right2px' colspan=" + nCols + "><font color='DarkGrey'>missing pair</fontcolor></td>"; } else { //alert(getMembersID("Peter Brazier")); divString += "<td>" + BE.pairs[pair][2] + "</td>"; //Rank url = "javascript: displayScoreCard(" + pair + ")"; divString += "<td class='left'>" + (BE.pairs[pair][0] + " & " + BE.pairs[pair][1]).link(url) + "</td>"; //pair names divString += "<td>" + BE.pairs[pair][5] + "</td>"; //% if (BE.points[2]) { // green points awarded divString += "<td>" + (BE.pairs[pair][6] === undefined ? "" : BE.pairs[pair][6]) + "</td>"; //green points } if (BE.points[1]) { // blue points awarded divString += "<td>" + (BE.pairs[pair][7] === undefined ? "" : BE.pairs[pair][7]) + "</td>"; //green points } if (BE.points[0]) { // local points awarded divString += "<td>" + (BE.pairs[pair][8] === undefined ? "" : BE.pairs[pair][8]) + "</td>"; //green points } divString += "<td>" + BE.pairs[pair][3] + "</td>"; //match points divString += "<td class='right2px'>" + BE.pairs[pair][4] + "</td>"; //max match points } } //END function writePairData(pair) function writePointsHeadings() { if (BE.points[2]) { divString += "<th class='small'>green<br>pts</th>"; } if (BE.points[1]) { divString += "<th class='small'>blue<br>pts</th>"; } if (BE.points[0]) { divString += "<th class='small'>local<br>pts</th>"; } } //END function writePointsHeadings var r, b, url, pair, pairNames, nCols = 5, divString = ""; divString += "<div class='page'>"; divString += "<div class ='banner'>"; divString += "<h2>" + BE.sessionDateStr; if (BE.session !== 1 && BE.section === '') { divString += "-" + BE.session; } if (BE.section !== ''){ divString += "-" + BE.session + "-" + BE.section; } divString += " " + BE.title +"</h2>"; divString += "<h3>" + BE.movementDescription + " Director: " + BE.director + " Scorer: " + BE.scorer + "</h3>"; if (BE.simsLink !== '') { //displays sims linl divString += "<p><a href='" + BE.simsLink + "')>" + BE.simsLinkCaption + "</a></p>"; } divString += "</div>"; divString += "<div class ='main'>"; divString += "<table>"; if (BE.winners === 1) { nCols = nCols + BE.points[0] + BE.points[1] + BE.points[2] divString += "<tr><th>Rank</th><th>Pair</th><th>%</th>"; writePointsHeadings(); //divString += GPs ? "<th>GP</th>" : ""; //divString += "<th>LP</th>"; divString += "<th class='small'>match<br>points</th><th class='small'>max<br>mps</th></tr>"; for (r = 0; r < BE.pairs.length - 1; r += 1) { pair = BE.rank[0][r][0]; divString += "<tr>"; writePairData(pair); divString += "</tr>"; } } else{ // 2 winners nCols = nCols + BE.points[0] + BE.points[1] + BE.points[2] //alert(nCols); divString += "<tr><th class='right2px' colspan=" + nCols + "><b>North/South</b></th><th colspan=" + nCols + "><b>East/West</b></th></tr>"; divString += "<tr>"; divString += "<th>Rank</th><th>Pair</th><th>%</th>"; writePointsHeadings(); divString += "<th class='small'>match<br>points</th><th class='small right2px'>max<br>mps</th>"; divString += "<th>Rank</th><th>Pair</th><th>%</th>"; writePointsHeadings(); divString += "<th class='small'>match<br>points</th><th class='small right2px'>max<br>mps</th>"; divString += "</tr>"; for (r = 0; r <= BE.tables - 1; r += 1) { divString += "<tr>"; pair = BE.rank[0][r][0]; // NS writePairData(pair); pair = BE.rank[1][r][0]; // EW writePairData(pair); divString += "</tr>"; } } divString += "</table>"; if (visitor) { divString += "<i>Vistors are shown in italics</i>"; } divString += "<div class ='footer'>"; divString += "<p>For a pair's score card click on their names or for a board's traveller"; if (BE.hands.length>0) { //H file present divString += " and hands"; } divString += " - click on its board number below:</p>"; for (b = 1; b < BE.travellers.length; b += 1) { divString += "<a href='javascript:displayTraveller(" + b + ")'>" + b + "</a>"; divString += "  "; } //Close window and return to Home page of web site divString += "<p>Scored with PairsScorer " + BE.version + "(c)JAS<p>"; divString += "</div>"; divString += "</div>"; divString += "</div>"; //Set the divString to the div on the page document.getElementById('pageContent').innerHTML = divString; }// END function DisplayResults function displayTraveller(board) { function displayHand(){ function writeHand(iSeat){ return "♠ " + thisHand[iSeat][0] + "<br>" + "<font color='red'>♥ </font>" + thisHand[iSeat][1] + "<br>" + "<font color='red'>♦ </font>" + thisHand[iSeat][2] + "<br>" + "♣ " + thisHand[iSeat][3]; } //END function writeHand(hand) //Start of function displayHand() var thisHand, iSeat; if (BE.hands[board] === undefined){ //no hand data for this board return; } else { //generate hand[seat][suit] array where seat = 0 for N, 1 for E, 2 for S and 3 for W suit = 0 for spades, 1 for hearts, 2 for diamonds and 3 for clubs //alert("BE.hands[board].length = " + BE.hands[1].length); if (BE.hands[board].length === 67){ //exact number of characters required thisHand = BE.hands[board]; thisHand = thisHand.split(","); for (iSeat = 0; iSeat < 4; iSeat += 1){ thisHand[iSeat] = thisHand[iSeat].split(" "); } divString += "<table class='hands'>"; divString += "<tr><td class='blank'></td><td class='cards' colspan='2'>" + writeHand(0) + "</td></tr>"; //north divString += "<tr><td class='cards'>" + writeHand(3) + "</td>"; //west divString += "<td class='tableTop' bgcolor='#80FF80'><div class='dealer_" + dealer + "'><img src='dealer.gif' width='20' height='20'></div></td>"; divString += "<td class='cards'>" + writeHand(1) + "</td></tr>";//east divString += "<tr><td class='blank'></td><td class='cards' colspan='2'>" + writeHand(2) + "</td></tr>"; //south divString += "</table>"; } } } //end of displayHand() //Start of function displayTraveller(board) var positions = ['north','east','south','west'], b, row, url, leadColumn, contract, dealer = positions[(board-1)%4], NSvul = (vulnerable(board, 0) ? true: false), EWvul = (vulnerable(board, 1) ? true: false), divString = ""; divString += "<link rel='stylesheet' type='text/css' href='ResultsStyles.css'>"; divString += "<h2>Traveller for Board " + board + " -  " + BE.sessionDateStr + "</h2>"; if (BE.hands.length>0) { //H file present displayHand(); } leadColumn = displayLead(board); //true if a lead on this board has been entered divString += "<table class='table'>"; divString += "<tr>"; divString += "<th colspan='2' class='right2px " + (NSvul ? "vul" : "nonvul") + "'>North/South " + (NSvul ? "(vulnerable)" : "(not vulnerable)") + "</th>"; divString += "<th colspan='2' class='right2px " + (EWvul ? "vul" : "nonvul") + "'>East/West " + (EWvul ? "(vulnerable)" : "(not vulnerable)") + "</th>"; divString += leadColumn ? "<th colspan='7'>" + " Dealer " + dealer + "</th>" : "<th colspan='6'>" + " Dealer " + dealer + "</th>"; divString += "</tr>"; divString += "<tr>"; divString += "<th class='small'>rank on<br>board</th><th class='right2px'>pair</th><th class='small'>rank on<br>board</th><th class='right2px'>pair</th>"; divString += "<th>contract</th><th align='center'>by</th>"; if (leadColumn) { divString += "<th align='center'>lead</th>"; } divString += "<th>tricks</th><th class='small'> score<br>NS</th><th colspan='2' class='small'>match pts<br>NS EW</th></tr>"; for (row = 0; row < BE.travellers[board].length; row += 1) { clrStr = parseCRLstr(board, row); contract = clrStr[0]; tricksMade = clrStr[1]; declarer = clrStr[2]; lead = clrStr[3]; divString += "<tr>"; divString += "<td>" + BE.travellers[board][row][6] + "</td>"; //rank divString += "<td class='right2px left " + (NSvul ? "vul" : "nonvul") + "'>" + (BE.pairs[BE.travellers[board][row][0]][0] + " & " + BE.pairs[BE.travellers[board][row][0]][1]) + "</td>"; //NS pair names divString += "<td>" + BE.travellers[board][row][7] + "</td>"; //EW rank divString += "<td class='right2px left " + (EWvul ? "vul" : "nonvul") + "'>" + (BE.pairs[BE.travellers[board][row][1]][0] + " & " + BE.pairs[BE.travellers[board][row][1]][1]) + "</td>"; //EW pair names divString += "<td>" + contract + '</td>'; //contract divString += "<td>" + declarer + '</td>'; //by if (leadColumn) { divString += "<td>" + lead + '</td>'; } if (contract !== "Pass") { divString += '<td>' + tricksMade + '</td>'; //tricks } else { divString += '<td></td>'; //tricks blank } divString += '<td>' + BE.travellers[board][row][3] + '</td>'; //NS score divString += '<td>' + round2dp(BE.travellers[board][row][4]) + '</td>'; //NS match points rounded to nearest/up 2dp divString += '<td>' + round2dp(BE.travellers[board][row][5]) + '</td>'; //EW match points rounded to nearest/up 2dp divString += '</tr>'; } divString += '</table>'; divString += "<p>For another traveller click on the board number below</p>"; if(board > 1) { b = board - 1; divString += "<a href='javascript:displayTraveller(" + b + ")'>Previous </a>"; } else { divString += " "; } for (b = 1; b < BE.travellers.length; b += 1) { divString += "<a href='javascript:displayTraveller(" + b + ")'>" + b + "</a>"; divString += "  "; } if(board < BE.travellers.length - 1) { b = board + 1; divString += "<a href='javascript:displayTraveller(" + b + ")'> Next </a>"; } divString += "<p><a href='javascript:displayResults();'>Back to Results</a>"; if(BE.lastPair !== undefined) { divString += "<a href='javascript:displayScoreCard(BE.lastPair);'> Back to Score Card</a>"; } divString += "</p>"; document.getElementById('pageContent').innerHTML = divString; } //End displayTraveller(board) function getTravellerRow(board, pair) {// finds the row in travN in which pair occurs and returns the array[row][0 if sitting NS or 1 for EW][opposition pair number] var r = 0; for (r = 0; r < BE.travellers[board].length; r += 1) { if (pair === BE.travellers[board][r][0] || pair === BE.travellers[board][r][1]) { return r; } } return undefined; // pair did not play board } function parseCRLstr(board, row) { var crlStr, // the Contract/Score/Lead string from PairsScorer i, //index starting ar 0 of character in crlStr contract, tricksBid, tricksMade, declarer, lead; crlStr = BE.travellers[board][row][2]; if(crlStr.length > 0) { //not an average tricksBid = parseInt(crlStr,10); if (tricksBid > 0 && tricksBid < 8) { i = 1; if (crlStr.charAt(i) === 'N') { declarer = 'NT'; i = 3; } else { declarer = crlStr.charAt(i); i = 2; } while (crlStr.charAt(i) === 'x') { //skip over x or xx i += 1; } contract = crlStr.slice(0, i); //alert("contract = " + contract); switch(crlStr.charAt(i)) { case '=': tricksMade = tricksBid + 6; break; case '+': i += 1; tricksMade = tricksBid + 6 + parseInt(crlStr.charAt(i), 10); break; case '-': i += 1; tricksMade = tricksBid + 6 - parseInt(crlStr.charAt(i), 10); break; } i += 1; declarer = crlStr.charAt(i); i += 1; if (crlStr.length > i) { //lead has been entered lead = crlStr.slice(i); } else { lead = ' '; } return [contract, tricksMade, declarer, lead]; } if (crlStr.charAt(0) === 'P') { //Passed out return ['Pass',' ',' ',' ']; } else return [' ',' ',' ',' ']; //average } } //END function parseCRLstr(board, row) function displayLead(board) { var row, lead; for (row = 0; row < BE.travellers[board].length; row += 1) { lead = parseCRLstr(board, row)[3]; if (lead.length > 1) { return true; } } return false; } function displayScoreCard(pair) { var NSvul, EWvul, clrStr, contract, score, matchPoints, rank, sitting, board, url, row, oppPair, tricksMade, divString = ""; BE.lastPair = pair; divString += "<div class='page'>"; divString += "<div class ='banner'>"; divString = "<h2>Score Card for " + (BE.pairs[pair][0] + " & " + BE.pairs[pair][1]) + " -  " + BE.sessionDateStr + "</h2>"; //pair = primary pair number divString += "</div>"; divString += "<div class ='main'>"; divString += "<table class='center'>"; divString += "<tr>"; divString += "<th> Board </th><th> Sitting </th><th>Opponents</th>"; divString += "<th rowspan='1'>contract</th><th rowspan='1'>by</th><th rowspan='1'>tricks</th>"; divString += "<th>score</th><th class='small'>match<br>points</th><th class='small'>rank on <br>board</th>"; divString += "</tr>"; for (board = 1; board < BE.travellers.length; board += 1) { row = getTravellerRow(board, pair); if (row !== undefined) { clrStr = parseCRLstr(board, row); contract = clrStr[0]; tricksMade = clrStr[1]; declarer = clrStr[2]; lead = clrStr[3]; NSvul = (vulnerable(board, 0) ? true: false); EWvul = (vulnerable(board, 1) ? true: false); divString += "<tr>"; url = "javascript: displayTraveller(" + board.toString() + ")"; board_str = board.toString(); divString += "<td>" + board.toString().link(url) + "</td>"; sitting = (pair === BE.travellers[board][row][0]) ? "NS" : "EW"; if (sitting === "NS") { divString += "<td class='" + (NSvul ? "vul": "nonvul") + "'>NS</td>"; oppPair = BE.travellers[board][row][1]; divString += "<td class='left " + (NSvul ? "vul": "nonvul") + "'>" + (BE.pairs[oppPair][0] + " & " + BE.pairs[oppPair][1]) + "</td>"; rank = BE.travellers[board][row][6]; } else { divString += "<td class='" + (EWvul ? "vul": "nonvul") + "'>EW</td>"; oppPair = BE.travellers[board][row][0]; divString += "<td class='left " + (EWvul ? "vul": "nonvul") + "'>" + (BE.pairs[oppPair][0] + " & " + BE.pairs[oppPair][1]) + "</td>"; rank = BE.travellers[board][row][7]; } divString += "<td>" + contract + "</td>"; if (contract === "Pass") { divString += "<td></td>"; //by divString += "<td></td>"; //tricks made divString += "<td>" + 0 + "</td>"; //score } else if (contract ===' ') { // average divString += "<td></td>"; //by divString += "<td></td>"; //tricks made divString += "<td>" + BE.travellers[board][row][3] + "</td>"; //score } else { divString += "<td>" + declarer + "</td>"; //by divString += "<td>" + tricksMade + "</td>"; //tricks made score = BE.travellers[board][row][3]; if (sitting === "EW") { score *= -1; } divString += "<td>" + score + "</td>"; //score } if (sitting === "NS") { matchPoints = BE.travellers[board][row][4]; } else { matchPoints = BE.travellers[board][row][5]; } divString += "<td>" + round2dp(matchPoints) + "</td>"; //match points divString += "<td>" + rank + "</td>"; //rank divString += "</tr>"; } } divString += "</table>"; divString += "<div><span class='vul')>vulnerable</span> not vulnerable </div>"; divString += "<div class ='footer'>"; divString += "<p>For a board's traveller click on the board number or "; divString += "<a href='javascript:displayResults();'>Back to results</a></p>"; divString += "</div>"; divString += "</div>"; divString += "</div>"; document.getElementById('pageContent').innerHTML = divString; } //End displayScoreCard