﻿function getData() {
    window.status = 'Checking for updates...';
    if (null != window.IScoringDataService) {
        IScoringDataService.GetScorecardFullData(window.__matchId, window.__scorecardVersion, null, onGetDataComplete, onGetDataError);
    } else {
        window.location.reload(); //Service not loaded
    }
}

function onGetDataComplete(result) {

    text("lastUpdated", new Date().format('d MMMM yyyy HH:mm:ss'));

    if (!result) {
        window.status = 'No new data';
        return;
    }

    document.title = result.CurrentScore ? String.format("{0} | {1}", result.CurrentScore, result.MatchTitle) : result.MatchTitle;

    text("state", result.State);
    $get("state").className = result.StateColour;

    text("toss", result.Toss);
    visible("tossBox", result.Toss != null && result.Toss != "");
    text("result", result.MatchResult);
    visible("resultBox", result.MatchResult != null && result.MatchResult != "");
    text("daySession", result.DaySession);
    visibleInline("daySession", result.DaySession != null && result.DaySession != "");
    text("team1Players", result.Team1Players);
    text("team2Players", result.Team2Players);

    visible("currentProgress", result.ShowCurrentProgress); 

    if (result.ShowCurrentProgress == true) {

        
        text("matchSummary", result.MatchSummary);
        visible("matchSummaryBox", result.MatchSummary != null && result.MatchSummary != "");

        text("currentTeamScore", result.BattingTeam + " " + result.CurrentScore);

        text("recentOvers", result.RecentOvers);
        text("currentPartnership", result.CurrentPartnership);
        text("currentRR", result.CurrentRunRate);

        if (result.ShowLast5Overs) {
            visible("last5OversBox", true);
            text("last5OversScore", result.Last5OversScore);
            text("last5OversRR", result.Last5OversRunRate);    
        }
        else {
            visible("last5OversBox", false);
        }

        visible("runsRequiredBox", result.ShowRunsRequired);
        text("runsRequired", result.RunsRequired);

        // Batsman 1
        if (result.ShowCurrentBatsman1) {

            var tbl = $get("currentBatting");
            tbl.rows[1].style.display = "table-row";

            if (result.Batsman1ProfileLink != "" && result.Batsman1ProfileLink != null) {
                href("batsman1Link", result.Batsman1ProfileLink);
                text("batsman1Link", result.Batsman1);
            }
            else {
                text("batsman1Name", result.Batsman1);
            }
            visibleInline("batsman1Link", result.Batsman1ProfileLink != "" && result.Batsman1ProfileLink != null);
            visibleInline("batsman1Name", result.Batsman1ProfileLink == "" | result.Batsman1ProfileLink == null);

            text("batsman1Runs", result.Batsman1Runs);
            text("batsman1Balls", result.Batsman1Balls);
            text("batsman1Fours", result.Batsman1Fours);
            text("batsman1Sixes", result.Batsman1Sixes);
            text("batsman1SR", result.Batsman1SR);
            text("batsman1Last5Overs", result.Batsman1Last5Overs);
        }
        else {
            var tbl = $get("currentBatting");
            tbl.rows[1].style.display = "none";
        }

        // Batsman 2
        if (result.ShowCurrentBatsman1) {

            var tbl = $get("currentBatting");
            tbl.rows[1].style.display = "table-row";

            if (result.Batsman2ProfileLink != "" && result.Batsman2ProfileLink != null) {
                href("batsman2Link", result.Batsman2ProfileLink);
                text("batsman2Link", result.Batsman2);
            }
            else {
                text("batsman2Name", result.Batsman2);
            }
            visibleInline("batsman2Link", result.Batsman2ProfileLink != "" && result.Batsman2ProfileLink != null);
            visibleInline("batsman2Name", result.Batsman2ProfileLink == "" | result.Batsman2ProfileLink == null);

            text("batsman2Runs", result.Batsman2Runs);
            text("batsman2Balls", result.Batsman2Balls);
            text("batsman2Fours", result.Batsman2Fours);
            text("batsman2Sixes", result.Batsman2Sixes);
            text("batsman2SR", result.Batsman2SR);
            text("batsman2Last5Overs", result.Batsman2Last5Overs);
        }
        else {
            var tbl = $get("currentBatting");
            tbl.rows[2].style.display = "none";
        }

        // Display the * next to the current striker
        visibleInline("strikerBatsman1", result.StrikerBatsman1);
        visibleInline("strikerBatsman2", result.StrikerBatsman2);

        // Bowler 1
        if (result.ShowCurrentBowler1) {

            var tbl = $get("currentBowling");
            tbl.rows[1].style.display = "table-row";

            if (result.Bowler1ProfileLink != "" && result.Bowler1ProfileLink != null) {
                href("bowler1Link", result.Bowler1ProfileLink);
                text("bowler1Link", result.Bowler1);
            }
            else {
                text("bowler1Name", result.Bowler1);
            }
            visibleInline("bowler1Link", result.Bowler1ProfileLink != "" && result.Bowler1ProfileLink != null);
            visibleInline("bowler1Name", result.Bowler1ProfileLink == "" | result.Bowler1ProfileLink == null);

            text("bowler1Overs", result.Bowler1Overs);
            text("bowler1Maidens", result.Bowler1Maidens);
            text("bowler1Runs", result.Bowler1Runs);
            text("bowler1Wickets", result.Bowler1Wickets);
            text("bowler1Econ", result.Bowler1Econ);
            text("bowler1Spell", result.BowlerSpell1Figures);
        }
        else 
        {
            var tbl = $get("currentBowling");
            tbl.rows[1].style.display = "none";
        }

        // Bowler 2
        if (result.ShowCurrentBowler2) {

            var tbl = $get("currentBowling");
            tbl.rows[2].style.display = "table-row";

            if (result.Bowler2ProfileLink != "" && result.Bowler2ProfileLink != null) {
                href("bowler2Link", result.Bowler2ProfileLink);
                text("bowler2Link", result.Bowler2);
            }
            else {
                text("bowler2Name", result.Bowler2);
            }
            visibleInline("bowler2Link", result.Bowler2ProfileLink != "" && result.Bowler2ProfileLink != null);
            visibleInline("bowler2Name", result.Bowler2ProfileLink == "" | result.Bowler2ProfileLink == null);

            text("bowler2Overs", result.Bowler2Overs);
            text("bowler2Maidens", result.Bowler2Maidens);
            text("bowler2Runs", result.Bowler2Runs);
            text("bowler2Wickets", result.Bowler2Wickets);
            text("bowler2Econ", result.Bowler2Econ);
            text("bowler2Spell", result.BowlerSpell2Figures);
        }
        else 
        {
            var tbl = $get("currentBowling");
            tbl.rows[2].style.display = "none";
        }
    }

    visibleInline("innings1Jump", false);
    visibleInline("innings2Jump", false);
    visibleInline("innings3Jump", false);
    visibleInline("innings4Jump", false);

    var showInningsJumpTags = false;

    for (var i = 0; i < result.Innings.length; i++) {
        var inn = result.Innings[i];
        var ino = inn.InningsNumber;

        visible(inningsId(ino, "container"), inn.ShowInnings);

        if (inn.ShowInnings) {
            showInningsJumpTags = true;
        }

        switch (ino) {
            case 1:
                visibleInline("innings1Jump", inn.ShowInnings);
                break;
            case 2:
                visibleInline("innings2Jump", inn.ShowInnings);
                break;
            case 3:
                visibleInline("innings3Jump", inn.ShowInnings);
                break;
            case 4:
                visibleInline("innings4Jump", inn.ShowInnings);
                break;
        }

        $get(inningsId(ino, "container")).className = inn.IsCurrentInnings ? window.__currentInningsClass : "";

        var tbl = $get(inningsId(ino, "batting"));
        tbl.rows[0].cells[0].innerHTML = inn.BattingTeam;

        for (var b = 0; b < inn.BattingCard.length; b++) { //skip TH row
            var batter = inn.BattingCard[b];
            if (tbl.rows.length <= b + 1) {
                addBattingTableRow(tbl, 7);
            }
            var cells = tbl.rows[b + 1].cells;

            var anchor = cells[0].getElementsByTagName('A');
            var span = cells[0].getElementsByTagName('SPAN');
            var captain = cells[0].getElementsByTagName('STRONG');
            var keeper = cells[0].getElementsByTagName('SUP');

            if (anchor != null && anchor.length > 0) {
                if (batter.ProfileLink == null || batter.ProfileLink == "") {
                    anchor[0].style.display = 'none';
                    span[0].style.display = 'inline';
                    span[0].innerHTML =  batter.BatsmanName;
                }
                else {
                    span[0].style.display = 'none';
                    anchor[0].style.display = 'inline';
                    anchor[0].innerHTML = batter.BatsmanName;
                }

         
         
                if (batter.Captain) {
                    captain[0].style.display = 'inline';
                }
                else {
                    captain[0].style.display = 'none';
                }

                if (batter.Keeper) {
                    keeper[0].style.display = 'inline';
                }
                else {
                    keeper[0].style.display = 'none';
                } 
                
            }
                     

            elemText(cells[1], batter.HowOut);
            elemText(cells[2], batter.Runs);
            elemText(cells[3], batter.Balls);
            elemText(cells[4], batter.Mins);
            elemText(cells[5], batter.Fours);
            elemText(cells[6], batter.Sixes);

        }

        while (tbl.rows.length > inn.BattingCard.length + 1) {
            removeRow(tbl, tbl.rows.length - 1);
        }

        tbl = $get(inningsId(ino, "bowling"));

        for (var b = 0; b < inn.BowlerCard.length; b++) { //skip TH row
            var bowler = inn.BowlerCard[b];
            if (tbl.rows.length <= b + 1) {
                addRow(tbl, 7);
            }
            var cells = tbl.rows[b + 1].cells;

            var anchor = cells[0].getElementsByTagName('A');
            var span = cells[0].getElementsByTagName('SPAN');
         
            if (anchor != null && anchor.length > 0) {
                if (bowler.ProfileLink == null || bowler.ProfileLink == "") {
                    anchor[0].style.display = 'none';
                    span[0].style.display = 'inline';
                    span[0].innerHTML = bowler.BowlerName;
                }
                else {
                    span[0].style.display = 'none';
                    anchor[0].style.display = 'inline';
                    anchor[0].innerHTML = bowler.BowlerName;
                }
            }

            cells[0].className = "name";
            elemText(cells[1], bowler.Overs);
            elemText(cells[2], "" + bowler.Maidens); // Safe cast to string
            elemText(cells[3], "" + bowler.Runs);
            elemText(cells[4], "" + bowler.Wickets);
            elemText(cells[5], "" + bowler.Wides);
            elemText(cells[6], "" + bowler.NoBalls);

        }

        while (tbl.rows.length > inn.BowlerCard.length + 1) {
            removeRow(tbl, tbl.rows.length - 1);
        }

        visible(inningsId(ino, "bowlingBox"), inn.BowlerCard.length > 0)

        visible(inningsId(ino, "notes"), inn.Notes.length > 0);
        var list = $get(inningsId(ino, "notelist"))
        for (var n = 0; n < inn.Notes.length; n++) {
            var note = inn.Notes[n];
            var items = list.getElementsByTagName("LI");
            if (items.length <= n) {
                var li = document.createElement("LI");
                list.appendChild(li);
            }
            items[n].innerHTML = note;
        }

        while (list.getElementsByTagName("LI").length > inn.Notes.length) {
            var items = list.getElementsByTagName("LI");
            list.removeChild(items[items.length - 1]);
        }

        text(inningsId(ino, "fow"), inn.FallOfWickets);
        visible(inningsId(ino, "fowBox"), inn.FallOfWickets != null && inn.FallOfWickets != "")
      /*  text(inningsId(ino, "runrate"), inn.RunRate);
        text(inningsId(ino, "lastOver"), inn.LastOver);
        text(inningsId(ino, "bestOver"), inn.BestOver);
        text(inningsId(ino, "lastBoundary"), inn.LastBoundary);
        text(inningsId(ino, "currentPartnership"), inn.CurrentPartnership); */

    }

    visible("inningsJumpTags", showInningsJumpTags);
    window.__scorecardVersion = result.ScorecardVersion;

    window.status = 'Update complete';

}

function getBatterPrefix(batter) {
    var prefix = "";
    if (batter.Captain) {
        prefix = "<strong>*</strong>";
    }
    if (batter.Keeper) {
        prefix = prefix + "<sup>&#8224;</sup>";
    }
    return prefix;

}

function addRow(tbl, cols) {
    var row = document.createElement("TR");
    for (var c = 0; c < cols; c++) {
        var cell = document.createElement("TD");

        if (c == 0) {
            var span = document.createElement("SPAN");
            var anchor = document.createElement("A");

            cell.appendChild(span);
            cell.appendChild(anchor);
        }

        row.appendChild(cell);
    }
    tbl.getElementsByTagName("tbody")[0].appendChild(row);
}

function addBattingTableRow(tbl, cols) {
    var row = document.createElement("TR");
    for (var c = 0; c < cols; c++) {
        var cell = document.createElement("TD");

        switch (c) {
            case 0:
                var span = document.createElement("SPAN");
                var anchor = document.createElement("A");
                var captain = document.createElement("STRONG");
                var wicketkeeper = document.createElement("SUP");

                captain.setAttribute("id", "Strong1");
                captain.innerHTML = "*";
                wicketkeeper.setAttribute("id", "Sup1");
                wicketkeeper.innerHTML = "&#8224;";

                cell.appendChild(captain);
                cell.appendChild(wicketkeeper);
                cell.appendChild(span);
                cell.appendChild(anchor);

                cell.setAttribute("class", "name");
                break;
            case 2:
                cell.setAttribute("class", "runs");
                break;
            case 3:
                cell.setAttribute("class", "balls");
                break;
            case 4:
                cell.setAttribute("class", "mins");
                break;
            case 5:
                cell.setAttribute("class", "fours");
                break;
            case 6:
                cell.setAttribute("class", "sixes");
                break;
        }

        row.appendChild(cell);
    }
    tbl.getElementsByTagName("tbody")[0].appendChild(row);
}

function removeRow(tbl, row) {
    tbl.getElementsByTagName("tbody")[0].removeChild(tbl.rows[row]);
}

function onGetDataError(error) {
    window.status = "Error: " + error.message;
}

function inningsId(no, ctl) {
    return 'innings' + no + '_' + ctl;
}

function text(id, val) {
    var element = $get(id);
    if (!element) return;
    if (element.innerHTML == (val + '')) return;
    if (val == null) val = "";
    element.innerHTML = val;
}

function href(id, val) {
    var element = $get(id);
    if (!element) return;
    if (element.href == (val + '')) return;
    if (val == null) val = "";
    element.href = val;
}

function elemText(element, val) {
    if (!element) return;
    if (element.innerHTML == (val + '')) return;
    if (val == null || val == "") val = "&nbsp;";
    element.innerHTML = val;
}

function visible(id, show) {
    var element = $get(id);
    if (!element) return;
    element.style.display = show ? "block" : "none";
}

function visibleInline(id, show) {
    var element = $get(id);
    if (!element) return;
    element.style.display = show ? "inline" : "none";
}
