// buildScoreboards.js
// ===================

function buildGameAnchorCells(numGames)
{
    var mainAnchorElement;
    var anchorTable;
    var numFullRows;
    var numGamesOnPartialRow;
    var trRow;
    var tdCell;
    var tBody;
    var cc;

    // first, store currentCalendar (from HTML) in a variable, for reuse.
    if (currentCalendar == null)
        currentCalendar = document.getElementById("calendar").cloneNode(true);
    cc = currentCalendar.cloneNode(true);

    mainAnchorElement = document.getElementById("scoreTable");
    mainAnchorElement.innerHTML = "";

    mainAnchorElement.appendChild(cc);

    if (numGames <= 0) 
    {
        //log.write("Error: buildAnchorTables() function... invalid paramater value passed");
        return;
    }

    numFullRows = getNumFullRows(numGames);
    //log.write("getNumFullRows() function returned " + numFullRows);
    anchorTable = document.createElement("table");
    anchorTable.setAttribute("border","0");
    anchorTable.setAttribute("cellSpacing","4");
    anchorTable.setAttribute("width","822");
    anchorTable.className = "cnnnhlScore";

    tBody = document.createElement("tbody");
    
    for (var i = 0; i < numFullRows; i++)
    {
        trRow = document.createElement('tr');
        trRow.setAttribute("valign","top");
    
        tdGameAnchor = document.createElement('td');
        tdGameAnchor.id = (i * 2) + 1;
        trRow.appendChild(tdGameAnchor);
        tdGameAnchor = document.createElement('td');
        tdGameAnchor.id = (i * 2) + 2;
        trRow.appendChild(tdGameAnchor);

        tBody.appendChild(trRow);        
    }

    numGamesOnPartialRow = getNumGamesOnPartialRow(numGames);

    if (numGamesOnPartialRow > 0)
    {
        trRow = document.createElement('tr');

        switch(numGamesOnPartialRow)
        {
            case 1:
                tdGameAnchor = document.createElement('td');
                tdGameAnchor.id = (numFullRows * 2) + 1;
                trRow.appendChild(tdGameAnchor);
                break;
            case 2:
            default:
                ;
        }
        tBody.appendChild(trRow);
    }
    anchorTable.appendChild(tBody);


    if (mainAnchorElement != null)
        mainAnchorElement.appendChild(anchorTable);
    else
     {}
        //alert("Error: the 'gamesTable' DOM Id was not found on the page");
}


function buildMiniscoreboard(domIdSequence, contestO)
{
    var gamePlaceholder;    
    
    var outerDiv = document.createElement("div");
    if (contestO.visitingTeam.isNewScore || contestO.homeTeam.isNewScore)
        outerDiv.className = "cnnboxcontactive";
    else
        outerDiv.className = "cnnboxcont";

    var innerDiv = document.createElement("div");
    innerDiv.className = "cnnscorebox";
    innerDiv.appendChild(createGameTable(contestO));
    innerDiv.appendChild(createGameLinks(contestO));
    
    outerDiv.appendChild(innerDiv);
    
    // Find game placeholder on the page and insert newly built miniscoreboard
    gamePlaceholder = document.getElementById(domIdSequence);
    if (gamePlaceholder != null)
    {
       gamePlaceholder.innerHTML = "";
       gamePlaceholder.appendChild(outerDiv);
    }
    else 
    {}
        //alert("Error: attempted to create a scoreBox table in a game placeholder[" + domIdSequence + "]");
}


function createGameTable(contestO)
{
    var tr, td, tbody, div, b, span, telem;
    var table = document.createElement("table");
    table.setAttribute("border","0");
    table.setAttribute("cellPadding","0");
    table.setAttribute("cellSpacing","0");
    
    tbody = document.createElement("tbody");
    tr = document.createElement("tr");
    
    td = document.createElement("td");
    td.setAttribute("colSpan", "5");
    
    div = document.createElement("div");
    div.className = "cnngamedate";
    var idiv = document.createElement("div");
    idiv.className = "cnnsitime"; 
    b = document.createElement("b");
    
    // start of time/status + tickets + venue row
        var period = parseInt(contestO.gameState.period);
    if (contestO.statusInd == "FINA")
    {
            b.appendChild(document.createTextNode("FINAL"));
            if (contestO.stageID == "0" || contestO.stageID != "2") {
                if (period == 4)
                    b.appendChild(document.createTextNode(" - OT"));
                else if (period == 5)
                    b.appendChild(document.createTextNode(" - SHOOTOUT"));
            } else {
                if (period > 3)
                    b.appendChild(document.createTextNode(" - " + (period > 4 ? (period - 3) + " " : "") + "OT"));
            }
            idiv.appendChild(b);
    }
    else if (contestO.statusInd == "DELA")
    {
       b.appendChild(document.createTextNode("DELAYED"));
       idiv.appendChild(b);
    }
    else if (contestO.statusInd == "POST")
    {
       b.appendChild(document.createTextNode("POSTPONED"));
       idiv.appendChild(b);
    }
    else if (contestO.statusInd == "CANC")
    {
       b.appendChild(document.createTextNode("CANCELLED"));
       idiv.appendChild(b);
    }
    else if (contestO.statusInd == "SUSP")
    {
       b.appendChild(document.createTextNode("SUSPENDED"));
       idiv.appendChild(b);
    }
    else if (contestO.isInprogress)
    {
            if (period >= 1 && period <= 3) {
                b.appendChild(document.createTextNode(contestO.gameState.ordinalPeriod + " Period"));
      } else {
                if (contestO.stageID == "0" || contestO.stageID == "1") {
                    if (period == 4)
                        b.appendChild(document.createTextNode("OT"));
                    else if (period == 5)
                        b.appendChild(document.createTextNode("SHOOTOUT"));
                } else {
                    b.appendChild(document.createTextNode((period > 4 ? (period - 3) + " " : "") + "OT"));
                }
            }

            idiv.appendChild(b);
            idiv.appendChild(document.createTextNode(" "));
        
            if (contestO.gameState.clock != "")
            {
                span = document.createElement("span");
                span.appendChild(document.createTextNode("|"));
                idiv.appendChild(span);
                idiv.appendChild(document.createTextNode(" " + contestO.gameState.clock));
            }        
    }
    else if (contestO.isPregame)
    {
        b.appendChild(document.createTextNode(contestO.gameDateStr + " "));
        idiv.appendChild(b);
        span = document.createElement("span");
        span.appendChild(document.createTextNode("|"));
        idiv.appendChild(span);
        idiv.appendChild(document.createTextNode(" "));
        div.appendChild(idiv);
        
        idiv = document.createElement("div");
        idiv.className = "cnnsitick";
        
           var searchString = contestO.homeTeam.name.toLowerCase() + "-" + contestO.homeTeam.nickname.toLowerCase();
        searchString = searchString.replace(/ /g,"-");
        searchString = searchString.replace(/\./g,"");

        var ticketLink = createLinkElement(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/buytickets_99x14.gif", "14","99","0","StubHub: Buy Tickets Now", null,null),
        "http://www.stubhub.com/" + searchString + "-tickets/","_new",true);
        ticketLink.setAttribute("onclick","this.href=this.href+'?gcid=C12289x440'");
        
        idiv.appendChild(ticketLink);
       }
       div.appendChild(idiv);
       
       idiv = document.createElement("div");
       idiv.className = "cnnsivenue";
       
       if (contestO.venue != null)
    {
        idiv.appendChild(document.createTextNode(contestO.venue.stadium));
/*
        if (contestO.venue.city != "" && contestO.venue.state != "")
        {
            //idiv.appendChild(document.createElement("br"));
            idiv.appendChild(document.createTextNode(" " + contestO.venue.city));
            // silly workaround for Washington DC that comes with "DC" in the city name
            if (contestO.venue.city.indexOf("D.C.") == -1 && contestO.venue.city.indexOf("DC") == -1)
                idiv.appendChild(document.createTextNode(", " + contestO.venue.state));
        }
*/
    }
    div.appendChild(idiv);
    idiv = document.createElement("div");
    idiv.className = "cnnClr";
    div.appendChild(idiv);

    td.appendChild(div);
    tr.appendChild(td);

    tbody.appendChild(tr);
    // end of time/status + tickets + venue row
    
    tr = document.createElement("tr");
    tr.setAttribute("valign","top");
    
    tr.appendChild(createTeamCell(contestO.visitingTeam, contestO.isAllstarGame));
    td = document.createElement("td");
    td.className = "cnnDivMid";
    
    idiv = document.createElement("div");
    idiv.appendChild(document.createTextNode("|"));
    td.appendChild(idiv);
    
    tr.appendChild(td);
    
    tr.appendChild(createTeamCell(contestO.homeTeam, contestO.isAllstarGame));
    
    td = document.createElement("td");
    td.className = "cnnDivRt";
    
    idiv = document.createElement("div");
    idiv.appendChild(document.createTextNode("|"));
    td.appendChild(idiv);
    
    tr.appendChild(td);
    
    td = document.createElement("td");
    idiv = document.createElement("div");
    idiv.className = "cnnNhlBxSc";
    
        if (contestO.isPregame) {
            idiv.appendChild(createGameLeaders(contestO));
        } else {
            idiv.appendChild(createScoringSummary(contestO));
        }
    
    td.appendChild(idiv);
    tr.appendChild(td);
    tbody.appendChild(tr);

    table.appendChild(tbody);
    tbody = null;
    tr = null;
    td = null;
    div = null;
    span = null;
    idiv = null;
    return table; 
}

function createGameLeaders(contestO)
{
    var table, tbody, tr, td, div;

    table = document.createElement("table");
    tbody = document.createElement("tbody");

    tr = document.createElement("tr");
    tr.className = "cnnFstRw";
    tr.setAttribute("valign","top");
    
    td = document.createElement("td");
    td.className = "cnnNHLCat";
    td.appendChild(document.createElement("div"));

    tr.appendChild(td);

    td = document.createElement("td");
    td.className = "cnnTeamName";
    div = document.createElement("div");
    if (contestO.isAllstarGame)
        div.appendChild(document.createTextNode(contestO.visitingTeam.name + " " + contestO.visitingTeam.nickname));
    else
        div.appendChild(createLinkElement(contestO.visitingTeam.nickname,"/hockey/nhl/teams/"+contestO.visitingTeam.urlName+"/",null,false));

    td.appendChild(div);
    tr.appendChild(td);

    td = document.createElement("td");
    td.className = "cnnTeamName";
    div = document.createElement("div");
    if (contestO.isAllstarGame)
        div.appendChild(document.createTextNode(contestO.homeTeam.name + " " + contestO.homeTeam.nickname));
    else
        div.appendChild(createLinkElement(contestO.homeTeam.nickname,"/hockey/nhl/teams/"+contestO.homeTeam.urlName+"/",null,false));

    td.appendChild(div);
    tr.appendChild(td);
    tbody.appendChild(tr);
 
    tr = document.createElement("tr");
    td = document.createElement("td");
    td.className = "cnnNHLCat";
    div = document.createElement("div");
    div.appendChild(document.createTextNode("Points"));
    td.appendChild(div);
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.visitingTeam.pointsLeader != null)
    {
        var leader = contestO.visitingTeam.pointsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.homeTeam.pointsLeader != null)
    {
        var leader = contestO.homeTeam.pointsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);
    tbody.appendChild(tr);

    tr = document.createElement("tr");
    td = document.createElement("td");
    td.className = "cnnNHLCat";
    div = document.createElement("div");
    div.appendChild(document.createTextNode("Goals"));
    td.appendChild(div);
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.visitingTeam.goalsLeader != null)
    {
        var leader = contestO.visitingTeam.goalsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.homeTeam.goalsLeader != null)
    {
        var leader = contestO.homeTeam.goalsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);
    tbody.appendChild(tr);

    tr = document.createElement("tr");
    td = document.createElement("td");
    td.className = "cnnNHLCat";
    div = document.createElement("div");
    div.appendChild(document.createTextNode("Assists"));
    td.appendChild(div);
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.visitingTeam.assistsLeader != null)
    {
        var leader = contestO.visitingTeam.assistsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.homeTeam.assistsLeader != null)
    {
        var leader = contestO.homeTeam.assistsLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);
    tbody.appendChild(tr);

    tr = document.createElement("tr");
    tr.className = "cnnLstRw";
    td = document.createElement("td");
    td.className = "cnnNHLCat";
    div = document.createElement("div");
    div.appendChild(document.createTextNode("GAA"));
    td.appendChild(div);
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.visitingTeam.goalsAllowedLeader != null)
    {
        var leader = contestO.visitingTeam.goalsAllowedLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);

    td = document.createElement("td");
    div = document.createElement("div");
    
    if (contestO.homeTeam.goalsAllowedLeader != null)
    {
        var leader = contestO.homeTeam.goalsAllowedLeader;
        if (leader.linkable == "T" && leader.id != "0")
        {
           var link = createLinkElement("","/hockey/nhl/players/" + leader.id + "/", null, false);
           link.appendChild(document.createTextNode(leader.name));
           div.appendChild(link);
        }
        else
            div.appendChild(document.createTextNode(leader.name));

        div.appendChild(document.createTextNode(" " + leader.stat));
        td.appendChild(div);
    }
    tr.appendChild(td);
    tbody.appendChild(tr);

    table.appendChild(tbody);

    return table;
}

function createScoringSummary(contest) {
    var table = document.createElement("table");
    var tbody = document.createElement("tbody");
    table.appendChild(tbody);
    tbody.appendChild(createTeamScoringSummary(contest, contest.visitingTeam, "cnnFstRw", "top"));
    tbody.appendChild(createTeamScoringSummary(contest, contest.homeTeam, "cnnLstRw"));
    return table;
}

function createTeamScoringSummary(contest, team, trClass, trValign) {
    var tr = document.createElement("tr");
    tr.className = trClass;
    if (trValign) tr.setAttribute("valign", trValign);
    var td = document.createElement("td");
    td.className = "cnnNHLPlays";
    tr.appendChild(td);
    var div = document.createElement("div");
    td.appendChild(div);
    
    var b = document.createElement("b");
    b.appendChild(document.createTextNode(team.nickname + ":"));
    div.appendChild(b);
    
    if (team.scoringSummary && team.scoringSummary.length && team.scoringSummary.length > 0) {
        var lastPeriod = 0, scoresInPeriod = 0;
        for (var i = 0; i < team.scoringSummary.length; i++) {
            var score = team.scoringSummary[i];
            // period label
            var period = parseInt(score.period);
            if (score.period != lastPeriod) {
                div.appendChild(document.createTextNode(" "));
                var periodSpan = document.createElement("span");
                var periodName;
                if (period <= 3) {
                    periodName = score.ordinalPeriod;
                } else {
                    if (contest.stageID == "0" || contest.stageID == "1") {
                        if (period == 4) {
                            periodName = "OT";
                        } else if (period == 5) {
                            periodName = "SO";
                        }
                    } else {
                        periodName = "OT" + (period > 4 ? (period - 3) : "");
                    }
                }
                periodSpan.appendChild(document.createTextNode(periodName));
                div.appendChild(periodSpan);
                div.appendChild(document.createTextNode(" "));
                lastPeriod = score.period;
                scoresInPeriod = 0;
            } else {
                scoresInPeriod++;
                if (i < team.scoringSummary.length) div.appendChild(document.createTextNode(",")); 
            }
            div.appendChild(document.createTextNode(" "));
            var scoreParent = div;
            // color this red if it's the last one and there's a recent score
            if (i == team.scoringSummary.length - 1 && team.isNewScore) {
                scoreParent = document.createElement("span");
                scoreParent.className = "cnnredscore";
                div.appendChild(scoreParent);
            }
            // possibly-linked player last name
            if (score.playerLinkable) {
                var link = document.createElement("a");
                link.setAttribute("href", "/hockey/nhl/players/" + score.playerId + "/");
                link.appendChild(document.createTextNode(score.playerLastName));
                scoreParent.appendChild(link);
            } else {
                scoreParent.appendChild(document.createTextNode(score.playerLastName));
            }
            // season goals
            scoreParent.appendChild(document.createTextNode(" (" + score.playerGoals + ")"));
        }
    } else {
        div.appendChild(document.createTextNode(" No goals"));
    }
    return tr;
}

function createGameLinks(contestO)
{
    if (contestO.links == null)
        return null;
        
    var table = document.createElement("table");
    table.setAttribute("border","0");
    table.setAttribute("cellPadding","0");
    table.setAttribute("cellSpacing","0");
    table.className = "cnngreylnks";
    
    var tbody = document.createElement("tbody");
    var tr = document.createElement("tr");
       
    if (contestO.isFinal || contestO.isInprogress)
    {
	    if (contestO.links.recapInd == "T" && contestO.isFinal)
	    {
	        if (VIEWCAST_ACTIVE)
	        {
	            td = document.createElement("td");
	            td.setAttribute("align","center");
	            var a = document.createElement("a");

	            a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_recap.html";
	            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
	            a.appendChild(document.createTextNode(" RECAP"));
	            td.appendChild(a);
	            tr.appendChild(td);
	        }
	        else
	        {
	            td = document.createElement("td");
	            td.setAttribute("align","center");
	            var a = document.createElement("a");
	            a.href = "/hockey/nhl/recaps/" + contestO.gameDateUrl + "/" + contestO.contestID + "_recap.html";
	            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
	            a.appendChild(document.createTextNode(" RECAP"));
	            td.appendChild(a);
	            tr.appendChild(td);
	        }
	    }
	    if (contestO.links.boxscoreInd == "T" && contestO.isPregame == false)
	    {        
	        if (VIEWCAST_ACTIVE)
	        {
	            td = document.createElement("td");
	            td.setAttribute("align","center");
	            var a = document.createElement("a");
	            a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_boxscore.html";
	            a.className = "viewcast";
	            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"greyarrow"));
	            a.appendChild(document.createTextNode(" BOX SCORE"));
	            td.appendChild(a);
	            tr.appendChild(td);

	            td = document.createElement("td");
	            td.setAttribute("align","center");
	            var a = document.createElement("a");
	            a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_photos.html";
	            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
	            a.appendChild(document.createTextNode(" PHOTOS"));
	            td.appendChild(a);
	            tr.appendChild(td);
	        }
	        else
	        {
	            td = document.createElement("td");
	            td.setAttribute("align","center");
	            var a = document.createElement("a");
	            a.href = "/hockey/nhl/boxscores/" + contestO.gameDateUrl + "/" + contestO.contestID + "_boxscore.html";
	            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
	            a.appendChild(document.createTextNode(" BOX SCORE"));
	            td.appendChild(a);
	            tr.appendChild(td);
	        }
	    }
        if (VIEWCAST_ACTIVE)
        {
       	    td = document.createElement("td");
	    td.setAttribute("align","center");
            var a = document.createElement("a");
            a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_fancomment.html";
            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
            a.appendChild(document.createTextNode(" FAN COMMENTS"));
            td.appendChild(a);
            tr.appendChild(td);
        }
    }
    else
    {
        if (VIEWCAST_ACTIVE)
        {
       	    td = document.createElement("td");
            td.setAttribute("align","center");
            var a = document.createElement("a");
            if (contestO.links.previewInd == "T")
	            a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_preview_story.html";
            else
	        a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_viewcast_preview.html";
            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
            a.appendChild(document.createTextNode(" GAME PREVIEW"));
            td.appendChild(a);
            tr.appendChild(td);
        }
        else
        {
            if (contestO.links.previewInd == "T")
            {
       	        td = document.createElement("td");
                td.setAttribute("align","center");
                var a = document.createElement("a");
                a.href = "/hockey/nhl/viewcast/" + contestO.gameDateUrl + "/" + contestO.contestID + "_preview.html";
                a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
                a.appendChild(document.createTextNode(" PREVIEW"));
                td.appendChild(a);
                tr.appendChild(td);
            }
        }
        if (! contestO.isAllstarGame)
        {
            td = document.createElement("td");
            td.setAttribute("align","center");
            var a = document.createElement("a");
            a.href = "/hockey/nhl/teams/" + contestO.visitingTeam.urlName + "/";
            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
            a.appendChild(document.createTextNode(" MORE " + (contestO.visitingTeam.nickname).toUpperCase()));
            td.appendChild(a);
            tr.appendChild(td);
		    
	    td = document.createElement("td");
            td.setAttribute("align","center");
            a = document.createElement("a");
            a.href = "/hockey/nhl/teams/" + contestO.homeTeam.urlName + "/";
            a.appendChild(createImageElement(IMG_SERVER + IMG_PATH + "/scoreboards/arrow_transp.gif","7","6","0","",null,"whitearrow"));
            a.appendChild(document.createTextNode(" MORE " + (contestO.homeTeam.nickname).toUpperCase()));
            td.appendChild(a);
            tr.appendChild(td);
        }
    }
    
	tbody.appendChild(tr);
	table.appendChild(tbody);
	
	return table;
}

function createTeamCell(teamO, isAllstarGame)
{
    var tTd = document.createElement("td");
    tTd.className = "cnnNHLlogo";
    
    var linkTo = "/hockey/nhl/teams/" + teamO.urlName ;
    var teamLogo = createImageElement(IMG_SERVER + LOGO_PATH +
        teamO.urlName + ".jpg", "40", "60", "0", teamO.name + " " + teamO.nickname, null,null);

    var tempE = document.createElement("div");       
    var tempS = document.createElement("span");
    tempS.appendChild(document.createTextNode(createTeamRecord(teamO.wins, teamO.losses, teamO.ties, true)));
    tempE.appendChild(tempS);
    tTd.appendChild(tempE);
    if (isAllstarGame)
        tTd.appendChild(teamLogo);
    else
        tTd.appendChild(createLinkElement(teamLogo, linkTo, null, true));
    
    if (teamO.totalScore != "")
    { 
        tempE = document.createElement("div");
        if (teamO.isNewScore)
            tempE.className = "cnnredscore";

        tempE.appendChild(document.createTextNode(teamO.totalScore));
        tTd.appendChild(tempE);
    }
    return tTd;
}

function getNumFullRows(numGames)
{    
    // this value is a UI design constant, and will not change often
    var gamesPerRow = GAMES_IN_ROW;
    var numFullRows;

    // The simple division will return a floating point value (ex: 3.1, if there are 10 games).
    // We have to use the floor() function to pull out the integer part of that number.  The 
    // round() function will not give us what we want - we always want to round down.
    //
    numFullRows = Math.floor(numGames / gamesPerRow);
    return numFullRows;
}

function getNumGamesOnPartialRow(numGames)
{
    // this value is a UI design constant, and will not change often
        var gamesPerRow = GAMES_IN_ROW;
    
        return (numGames % gamesPerRow);
}    
    
function buildViewCastGameAnchorCells(numGames)
{
    var mainAnchorElement;
    var anchorTable;
    var trRow;
    var tdCell;
    var tBody;

    mainAnchorElement = document.getElementById("topGames");
    //log.write("Found game placeholder: " + mainAnchorElement);
    mainAnchorElement.innerHTML = "";

    var colgroup = document.createElement("colgroup");
    var col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    col = document.createElement("col");
    colgroup.appendChild(col);

    anchorTable = document.createElement("table");
    anchorTable.id = "cnnScoreboard";

    var tbody = document.createElement("tbody");
    tbody.appendChild(colgroup);

    var rowCount = 1;
    var cellCount = 1;

    if (numGames <= 0)
    {
        //log.write("Error: buildAnchorTables() function... invalid paramater value passed");
        return;
    }

    var tr = null;
    var td = null;

    for (var count = 0; count < numGames; count++)
    {
        if (cellCount == 1)
            tr = document.createElement("tr");

        td = document.createElement("td");
        td.id = count+1;
        td.setAttribute("onmouseover","this.bgColor='#eeeeee'");
        td.setAttribute("onmouseout","this.bgColor='#ffffff'");
        //log.write("Creating table cell: " + count);

        if (cellCount == 1)
            tr = document.createElement("tr");

        td = document.createElement("td");
        td.id = count+1;
        td.setAttribute("onmouseover","this.bgColor='#eeeeee'");
        td.setAttribute("onmouseout","this.bgColor='#ffffff'");

        //log.write("Creating table cell: " + count);

        if (cellCount == 7 || count == (numGames - 1))
        {
           if (rowCount == 1 && count == (numGames - 1))
           {
               td.className = "cnnTbBotDwnLast";
               tr.appendChild(td);

               for (j = 0; j < (7 - cellCount); j++)
               {
                   td = document.createElement("td");
                   td.setAttribute("width","125");
                   td.appendChild(document.createTextNode(" "));
                   tr.appendChild(td);
               }
           }
           else if (rowCount == 1 && (numGames < 14 && numGames > 7))
           {
               td.className = "cnnTbBotDwnLast";
               tr.appendChild(td);
           }
           else if (rowCount == 1)
           {
               td.className = "cnnJustCCCBot";
               tr.appendChild(td);
           }
           else
           {
               td.className = "cnnJustCCCTop";
               tr.appendChild(td);
           }


           // wrap up the row
           tbody.appendChild(tr);

           // reset the count
           cellCount = 0;

           // increment the rowCount
           rowCount++;
        }
        else
        {
            if (rowCount == 1)
                td.className = "cnnTdGreyBotRgt";
            else
                td.className = "cnnTbBotDwn";

            tr.appendChild(td);
        }

        cellCount++;
    }
    anchorTable.appendChild(tbody);

    if (mainAnchorElement != null)
        mainAnchorElement.appendChild(anchorTable);
    else
    {
        //alert("Can't find a place for my topScores!");
    }
}

function buildViewCastMiniscoreboard(domIdSequence,contestO)
{
    var gamePlaceholder;

    gamePlaceholder = document.getElementById(domIdSequence);
    if (gamePlaceholder != null)
    {
        gamePlaceholder.innerHTML = "";
        gamePlaceholder = paintViewCastBox(contestO,gamePlaceholder);
    }
    else
    {
        //alert("Error: attempted to create a scoreBox table in a game placeholder[" + domIdSequence + "]");
    }
}



function paintViewCastBox(contestO, elem)
{
    var html = "";

    var pageType = "";

    if (contestO.links.recapInd == "T")
        pageType = "recap";
    else if (contestO.links.boxscoreInd == "T")
        pageType = "boxscore"
    else if (contestO.links.previewInd == "T")
        pageType = "preview_story";
    else
        pageType = "preview";

    html = html + "<a href=\"javascript:void(0)\" onclick=\"javascript:showContest(" + contestO.contestID +
                                                ", " + contestO.vendorContestID +
                                                ", " + contestO.homeTeam.id +
                                                ", " + contestO.visitingTeam.id +
                                                ", '" + pageType + "');\">";
    if (! contestO.isFinal &&
           (contestO.homeTeam.isNewScore || contestO.visitingTeam.isNewScore))
        html = html +  "<div class=\"cnnRedRound\">";
    else
        html = html +  "<div class=\"cnnTbTopUp\">";

    html = html +  "<table align=\"center\">";

    var teamO = contestO.visitingTeam;

    html = html +  "<tr><td class=\"cnnTeamName\">" + teamO.nickname.toUpperCase() + "</td>";

    if (contestO.isPregame)
        html = html +  "<td class=\"cnnScore\"> </td>";
    else if (teamO.isNewScore)
        html = html +  "<td class=\"cnnScoreWin\">" + teamO.totalScore + "</td>";
    else
        html = html +  "<td class=\"cnnScore\">" + teamO.totalScore + "</td>";
    html = html +  "</tr>";

    teamO = contestO.homeTeam;

    html = html +  "<tr><td class=\"cnnTeamName\">" + teamO.nickname.toUpperCase() + "</td>";

    if (contestO.isPregame)
        html = html +  "<td class=\"cnnScore\"> </td>";
    else if (teamO.isNewScore)
        html = html +  "<td class=\"cnnScoreWin\">" + teamO.totalScore + "</td>";
    else
        html = html +  "<td class=\"cnnScore\">" + teamO.totalScore + "</td>";

    html = html +  "</tr>";
    html = html +  "<tr><td colspan=\"2\" align=\"center\">";
    html = html +  "<table><tr>";

    var periodNum = contestO.gameState.period;
    if (contestO.isPregame || contestO.isFinal)
    {
        html = html +  "<td class=\"cnnSgleLine\">";
        var status;
        if (contestO.statusInd == "FINA")
        {
            status = "FINAL";
            if (periodNum > 3)
            {
                if (contestO.stageID == "0" || contestO.stageID != "2")
                {
                    if (periodNum == 4)
                        status = status + "-OT";
                    else if (periodNum == 5)
                        status = status + "-SO";
                }
                else
                    status = status + "-" + (periodNum > 4 ? (periodNum - 3) : "") + "OT";
            }
        }
        else if (contestO.statusInd == "DELA")
           status = "DELAYED";
        else if (contestO.statusInd == "POST")
           status = "POSTPONED";
        else if (contestO.statusInd == "CANC")
           status = "CANCELLED";
        else if (contestO.statusInd == "SUSP")
           status = "SUSPENDED";
        else
        {
           status = contestO.gameDateStr;
        }
        html = html +  status;
    }
    else
    {
        html = html +  "<td class=\"cnnBotRow\">";
        var period;
        if (periodNum == 1)
             period = "1st";
        else if (periodNum == 2)
             period = "2nd";
        else if (periodNum == 3)
             period = "3rd";
        else if (periodNum > 3)
        {
            if (contestO.stageID == "0" || contestO.stageID == "1")
            {
                if (periodNum == 4)
                    period = "OT";
                else if (periodNum == 5)
                    period = "SO";
            }
            else
                period = (periodNum > 4 ? (periodNum - 3) : "") + "OT";
        }
        html = html +  period;
        if (contestO.gameState.clock != "")
        {
            html = html + "</td>";
            html = html + "<td class=\"cnnLineCCCSep\">|</td>";
            html = html + "<td class=\"cnnBotRow2\">";
            html = html + contestO.gameState.clock;
        }
    }
    html = html +  "</td></tr></table></td></tr></table></div></a>";
    log.write(html);
    elem.innerHTML = html;
    return elem;
}

