var serviceUrl = 'http://data.ninemsn.com.au/Services/Service.axd?ServiceName=Cricket&ServiceFormat=JSON&callback=?&ServiceAction=';
var contentcol;

function setHeight() {
  //try { $('#contentcol').css('height', 'auto').find('#cricket_page').css('min-height', ($('#lftcol').attr('scrollHeight') - $('#breadcrumb').attr('scrollHeight') + 'px')); } catch (ex) { }
  if (contentcol&&contentcol.css('height') != 'auto') contentcol.css('height', 'auto');
}

$(function() {contentcol=$('#contentcol');setHeight();});

function refresh(interval) {
  if (interval == 0) location.reload();
  else {
    $('#countdownNumber').text(interval / 1000);
    interval -= 1000;
    setTimeout('refresh(' + interval + ')', 1000);
  }
}

function setTertiaryLinks() {
  var tertiary = $('#cricket_tertiary > div');
  tertiary.find('#livescores_commentary').attr('href', 'live_comment.aspx' + location.search);
  tertiary.find('#livescores_scorecard').attr('href', 'scorecard.aspx' + location.search);
  tertiary.find('#livescores_matchlet').attr('href', 'matchlet.aspx' + location.search);
  tertiary.find('#livescores_crystalball').attr('href', 'crystal-ball.aspx' + location.search);
  tertiary.find('#livescores_lookingglass').attr('href', 'looking-glass.aspx' + location.search);
  tertiary.find('#livescores_flashscoreboard').attr('href', 'flash-scoreboard.aspx' + location.search);
  tertiary.find('#livescores_seriesstats').attr('href', 'seriesstats.aspx' + location.search);

  try {
    tertiary.find('#' + JS_SUB_SECTION)
    .removeAttr('href')
    .css('font-weight', 'normal')
    .css('color', '#999999')
    .css('text-decoration', 'none');
  }
  catch (ex) { }

  tertiary.css('visibility', 'visible');
}

function getQueryStringValue(key) {
  if (location.search) {
    var queryStrings = location.search.substring(1).split('&')
    for (var i in queryStrings) {
      var queryString = queryStrings[i].split('=');
      if (queryString[0].toLowerCase() == key.toLowerCase()) return queryString[1];
    }
  }
}

jQuery.fn.removeLink = function() {
  var next = $(this).next();
  if (next.attr('class').toLowerCase() == 'cricket_divider') next.remove();
  $(this).remove();
}

function genRow(nme, val) { return '<tr><td>' + nme + '</td><td>' + getVal(val) + '</td></tr>'; }

function generatePersonal(players, playerId, jQryObj) {
  for (var i in players) {
    var p = players[i];
    if (p.playerId == playerId) {
      jQryObj.empty().append(
        genRow('Class', getVal(p.Class)) +
        genRow('Country of birth', getVal(p.BirthCountry)) +
        genRow('DOB', getVal(p.DOB)) +
        genRow('Batting Style', getVal(p.BattingStyle)) +
        genRow('Bowling Style', getVal(p.BowlingStyle)))
        .find('tr:even').attr('class', 'cricket_altRow').end()
        .find('tr > td:even').attr('class', 'cricket_textIdent').end()
        .find('tr > td:odd').attr('class', 'cricket_textIdentRightBold');
      return p;
    }
  }
}

function generateMatchRows(match, jQryObj, isTestMatch) {
    jQryObj.empty();
    if (match) {
        var batting = match.Batting, bowling = match.Bowling, matchDebut;
        if (match.Debut) try { matchDebut = match.Debut.substring(0, match.Debut.indexOf('T')).split('-'); } catch (ex) { }
        jQryObj.empty().append(
      genRow((match.Description == 'TEST' ? 'Test' : match.Description) + ' debut', matchDebut ? matchDebut[2] + '/' + matchDebut[1] + '/' + matchDebut[0] : '') +
      genRow((match.Description == 'TEST' ? 'Test' : match.Description) + ' matches', match.Match) +
      genRow('Total runs', batting.Run) +
      genRow('Highest Score', batting.HighestScore.Run) +
      genRow('Batting average', batting.Average) +
      genRow('Batting strike rate', batting.StrikeRate) +
      genRow('Number of ducks', batting.Duck) +
      genRow('Total wickets', Number(bowling.Wickets.Bowled) + Number(bowling.Wickets.Caught) + Number(bowling.Wickets.CaughtAndBowled) + Number(bowling.Wickets.LBW) + Number(bowling.Wickets.Stumped)) +
      genRow('Best bowling', bowling.BestInning) +
      genRow('Bowling average', bowling.Average) +
      genRow('Bowling strike rate', bowling.StrikeRate) +
      genRow('Economy rate', bowling.EconomyRate) +
      genRow('5-wicket innings', bowling.FiveWicket) +
      (isTestMatch ? genRow('10-wicket match', bowling.TenWicket) : '') +
      genRow('Number of catches', bowling.Wickets.Caught) +
      genRow('Caught and bowled', bowling.Wickets.CaughtAndBowled) +
      genRow('Stumpings', bowling.Wickets.Stumped))
      .find('tr:even').attr('class', 'cricket_altRow').end()
      .find('tr > td:even').attr('class', 'cricket_textIdent').end()
      .find('tr > td:odd').attr('class', 'cricket_textIdentRightBold');
    }
    else jQryObj.append('<tr><td style="text-align: center; line-height: 40px; color: #999999">No data on this match type for this player</td></tr>');
}

function generateTeamRows(teams) {
    var teamRows = '';
    var teamsLength = teams.Team.length;

    if (teams.totalGroup == 1) {
        for (var i = 0; i < teamsLength; i++) {
            teamRows +=
        '<tr' + ((i % 2) ? ' class="cricket_altRow"' : '') + '>' +
            '<td class="cricket_boldCell">' +
                teams.Team[i].position +
            '</td>' +
            '<td class="cricket_boldCell">' +
                getVal(teams.Team[i].Name) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Played) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Won) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Drawn) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Lost) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Points) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].NetRunRate) +
            '</td>' +
        '</tr>';
        }
    }
    else {
        teamRows += '<tr><td colspan="8"><b>' + teams.Team[0].groupName + '</b></td></tr>';
        for (var i = 0; i < teamsLength; i++) {
            teamRows +=
        '<tr' + ((i % 2) ? ' class="cricket_altRow"' : '') + '>' +
            '<td class="cricket_boldCell">' +
                teams.Team[i].position +
            '</td>' +
            '<td class="cricket_boldCell">' +
                getVal(teams.Team[i].Name) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Played) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Won) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Drawn) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Lost) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].Points) +
            '</td>' +
            '<td>' +
                getVal(teams.Team[i].NetRunRate) +
            '</td>' +
        '</tr>';
            if (i < teamsLength - 1) {
                if (teams.Team[i].groupName != teams.Team[i + 1].groupName) {
                    teamRows += '<tr><td colspan="8"><b>' + teams.Team[i + 1].groupName + '</b></td></tr>';
                }
            }
        }
    }
    return teamRows;
}

function generateTable(series, teams, containerId, finished) {
  $('#' + containerId).append(
    '<div class="cricket_moduleHeader">' + series.Series + (finished ? '' : ' <div style="background-color: #4a4b45; line-height: 25px; display: inline; color: #9fa09b;">&nbsp;In Progress&nbsp;</div>') + '</div>' +
    '<table style="width: 100%; text-align: center; margin-bottom: 10px;" border="0" cellspacing="0">' +
        '<thead>' +
            '<tr>' +
                '<th class="cricket_sectionHeader" style="text-align: left; width: 60px">' +
                    'Position' +
                '</th>' +
                '<th class="cricket_sectionHeader" style="text-align: left; width: 170px">' +
                    'Name' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Played' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Won' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Drawn' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Lost' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Points' +
                '</th>' +
                '<th class="cricket_sectionHeader">' +
                    'Net Run Rate' +
                '</th>' +
            '</tr>' +
        '</thead>' +
        '<tbody>' +
        generateTeamRows(teams) +
        '</tbody>' +
    '</table>'
    );
}

function generateTables(data) {
    if (data) {
        $('.tableLoading').remove();
        var seriesModes = data.FullSeriesList.SeriesList.SeriesMode
        var completedSeries, inProgressSeries;
        for (var i in seriesModes) {
            if (seriesModes[i].Type == 'InProgress') inProgressSeries = seriesModes[i].Series;
            else if (seriesModes[i].Type == 'Completed') completedSeries = seriesModes[i].Series;
        }

        for (var i in inProgressSeries) {
            switch (Number(inProgressSeries[i].seriesType)) {
                case 5: case 6: case 7: case 12: case 20: case 21: case 24: case 31: case 32:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + inProgressSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#domHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'domesticContainer');
                        }
                        setHeight();
                    });
                    break;
                case 1: case 2: case 3: case 4: case 18: case 19: case 25: case 26:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + inProgressSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#intHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'internationalContainer');
                        }
                        setHeight();
                    });
                    break;
                default:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + inProgressSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#addHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'additionalContainer');
                        }
                        setHeight();
                    });
            }
        }

        for (var i in completedSeries) {
            switch (Number(completedSeries[i].seriesType)) {
                case 1: case 2: case 5: case 6: case 7: case 11: case 20: case 21: case 24: case 31: case 32:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + completedSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#domHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'domesticContainer', true);
                        }
                        setHeight();
                    });
                    break;
                case 3: case 4: case 12: case 18: case 19: case 25: case 26:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + completedSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#intHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'internationalContainer', true);
                        }
                        setHeight();
                    });
                    break;
                default:
                    $.getJSON(serviceUrl + 'NewStandings&Params=%3FclientId=82%26seriesId=' + completedSeries[i].seriesId, null, function (data) {
                        if (data.Sportsflash.Teams.Team.length > 2) {
                            $('#addHeader').css('display', 'block');
                            generateTable(data.Sportsflash.Header, data.Sportsflash.Teams, 'additionalContainer', true);
                        }
                        setHeight();
                    });
            }
        }
    }
}

function lastBatter(batsmen, idx) {
  for (var i = (idx ? idx - 1 : batsmen.length - 1); i >= 0; i--) {
    if (batsmen[i].HowOut == 'not out') return i;
  }
}

function setLiveTitle(inn) {
    var batsmen = inn.Batsmen.Batsman, innNme = inn.Name, idx = lastBatter(batsmen),
  batter1 = batsmen[idx], batter2 = batsmen[lastBatter(batsmen, idx)],
  highBatter, lowBatter;
    if (batter1) {
        if (batter2)
            batter1.Runs >= batter2.Runs ? (highBatter = batter1, lowBatter = batter2) : (highBatter = batter2, lowBatter = batter1);
        else
            highBatter = batter1;
    }
    document.title =
    innNme + ' ' +
    inn.Wicket + '/' + inn.Run + ' (' +
    (highBatter ? highBatter.Name + ' ' + highBatter.Run + '*, ' : '') +
    (lowBatter ? lowBatter.Name + ' ' + lowBatter.Run + '*, ' : '') +
    inn.Over + ' overs) ' +
    document.title;
}

function getVal(data) { return data != null ? data : ''; }

function loadPlayerStats(dataTest, dataOdi, dataT20, test, odi, t20int, noDataRow) {
    var statsTest = dataTest.Sportsflash.Statistics.CareerStats;
    var statsOdi = dataOdi.Sportsflash.Statistics.CareerStats;
    var statsT20 = dataT20.Sportsflash.Statistics.CareerStats;
    if (statsTest && statsTest.Match != 0) { generateMatchRows(statsTest, test) }
    else { test.empty().append(noDataRow); }
    if (statsOdi && statsOdi.Match != 0) { generateMatchRows(statsOdi, odi) }
    else { odi.empty().append(noDataRow); }
    if (statsT20 && statsT20.Match != 0) { generateMatchRows(statsT20, t20int) }
    else { t20int.empty().append(noDataRow); }
}

jQuery.fn.loadCountries = function(matchTypeId) {
  return $(this).loadTeams(matchTypeId);
}

jQuery.fn.loadTeams = function(matchTypeId, selectedTeamId) {
  var selectText = 'Select a team', teamsList = '', obj = $(this);

  if (matchTypeId) {
    obj.empty().append('<option selected="selected">Loading teams...</option>').attr('disabled', 'disabled');
    $.getJSON(serviceUrl + 'NewTeamList&Params=%3FclientId=82%26localeId=en%26matchTypeId=' + matchTypeId, null, function(data) {
      var teams = data.Sportsflash.Teams.Team;
      obj.empty().append('<option selected="selected">' + selectText + '</option>');

      for (var i in teams) {
        if (teams[i].LongName.toLowerCase().indexOf('group') < 0)
          obj.append('<option value="' + teams[i].teamId + '">' + teams[i].LongName + '</option>');
      }

      obj.removeAttr('disabled').change(function() { obj.find('option[text="' + selectText + '"]').remove(); });

      if (selectedTeamId)
        obj.find('option[value="' + selectedTeamId + '"]').attr('selected', 'selected').end().change();
    });
  }

  return obj.empty().append(
        '<option>' + selectText + '</option>' +
        '<option value="1">Australia</option>' +
        '<option value="2">England</option>' +
        '<option value="3">India</option>' +
        '<option value="4">New Zealand</option>' +
        '<option value="5">Pakistan</option>' +
        '<option value="6">South Africa</option>' +
        '<option value="7">Sri Lanka</option>' +
        '<option value="8">West Indies</option>' +
        '<option value="9">Zimbabwe</option>' +
        '<option value="52">Bangladesh</option>')
        .removeAttr('disabled')
        .change(function() { $(this).find('option[text="' + selectText + '"]').remove(); });
}

jQuery.fn.loadMatchTypes = function(selectedMatchTypeId) {
  var selectText = 'Select match type', obj = $(this);

  obj.empty().append(
        '<option selected="selected">' + selectText + '</option>' +
        '<option value="1">Test match</option>' +
        '<option value="2">One-day International</option>' +
        '<option value="11">Twenty20 international</option>' +
        '<option value="3">First-class domestic</option>' +
        '<option value="4">One-day domestic</option>' +
        '<option value="12">Twenty20 domestic</option>')
        .removeAttr('disabled')
        .change(function() { $(this).find('option[text="' + selectText + '"]').remove(); });

  if (selectedMatchTypeId) obj.find('option[value="' + selectedMatchTypeId + '"]').attr('selected', 'selected').end().change();

  return obj;
}

jQuery.fn.loadPlayers = function(teamId, selectedPlayerId) {
  var selectText = 'Select a player', obj = $(this);

  obj.empty().append('<option selected="selected">Loading players...</option>').attr('disabled', 'disabled');

  $.getJSON(serviceUrl + 'NewPlayerList&Params=%3FclientId=82%26localeId=en%26teamId=' + teamId, null, function(data) {
    playersLoaded = true;
    var players = data.Sportsflash.Players.Player;
    obj.empty().append('<option selected="selected">' + selectText + '</option>');

    for (var i in players)
      obj.append('<option value="' + players[i].playerId + '">' + players[i].AbbrevName + '</option>');

    obj.removeAttr('disabled').change(function() { obj.find('option[text="' + selectText + '"]').remove(); });

    if (selectedPlayerId)
      obj.find('option[value="' + selectedPlayerId + '"]').attr('selected', 'selected').end().change();
  });
  return obj;
}

jQuery.fn.selectedItem = function() {
  return $(this).find('option:eq(' + $(this).attr('selectedIndex') + ')');
}



