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) { }

  if (getQueryStringValue('comment') != 'true') {
    tertiary.find('#livescores_commentary').removeLink();
    tertiary.find('#livescores_matchlet').removeLink();
    tertiary.find('#livescores_crystalball').removeLink();
    tertiary.find('#livescores_lookingglass').removeLink();
  }

  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.MatchTypeName == 'TEST' ? 'Test' : match.MatchTypeName) + ' debut', matchDebut ? matchDebut[2] + '/' + matchDebut[1] + '/' + matchDebut[0] : '') +
      genRow((match.MatchTypeName == 'TEST' ? 'Test' : match.MatchTypeName) + ' matches', match.Matches) +
      genRow('Total runs', batting.Runs) +
      genRow('Highest Score', batting.HighestScore.Runs) +
      genRow('Batting average', batting.Average) +
      genRow('Batting strike rate', batting.ScoringRate) +
      genRow('Number of ducks', batting.Ducks) +
      genRow('Total wickets', Number(bowling.Wickets[1].Bowled) + Number(bowling.Wickets[1].Caught) + Number(bowling.Wickets[1].CaughtAndBowled) + Number(bowling.Wickets[1].LBW) + Number(bowling.Wickets[1].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.FiveWickets) +
      (isTestMatch ? genRow('10-wicket match', bowling.TenWickets) : '') +
      genRow('Number of catches', bowling.Wickets[1].Caught) +
      genRow('Caught and bowled', bowling.Wickets[1].CaughtAndBowled) +
      genRow('Stumpings', bowling.Wickets[1].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 = '';
  for (var i = 0; i < teams.length; i++) {
    teamRows +=
        '<tr' + ((i % 2) ? ' class="cricket_altRow"' : '') + '>' +
            '<td class="cricket_boldCell">' +
                teams[i].position +
            '</td>' +
            '<td class="cricket_boldCell">' +
                getVal(teams[i].Name) +
            '</td>' +
            '<td>' +
                getVal(teams[i].Played) +
            '</td>' +
            '<td>' +
                getVal(teams[i].Won) +
            '</td>' +
            '<td>' +
                getVal(teams[i].Drawn) +
            '</td>' +
            '<td>' +
                getVal(teams[i].Lost) +
            '</td>' +
            '<td>' +
                getVal(teams[i].Points) +
            '</td>' +
            '<td>' +
                getVal(teams[i].NetRunRate) +
            '</td>' +
        '</tr>';
  }
  return teamRows;
}

function generateTable(series, teams, containerId, finished) {
  $('#' + containerId).append(
    '<div class="cricket_moduleHeader">' + series.value + (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 + 'GetStanding&Params=%3FseriesId=' + inProgressSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#domHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, 'domesticContainer');
            }
            setHeight();
          });
          break;
        case 1: case 2: case 3: case 4: case 18: case 19: case 25: case 26:
          $.getJSON(serviceUrl + 'GetStanding&Params=%3FseriesId=' + inProgressSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#intHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, 'internationalContainer');
            }
            setHeight();
          });
          break;
        default:
          $.getJSON(serviceUrl + 'GetStanding&Params=%3FseriesId=' + inProgressSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#addHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, '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 + 'GetStanding&Params=%3FseriesId=' + completedSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#domHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, 'domesticContainer', true);
            }
            setHeight();
          });
          break;
        case 3: case 4: case 12: case 18: case 19: case 25: case 26:
          $.getJSON(serviceUrl + 'GetStanding&Params=%3FseriesId=' + completedSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#intHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, 'internationalContainer', true);
            }
            setHeight();
          });
          break;
        default:
          $.getJSON(serviceUrl + 'GetStanding&Params=%3FseriesId=' + completedSeries[i].seriesId, null, function(data) {
            if (data.Standing.Teams.Team.length > 2) {
              $('#addHeader').css('display', 'block');
              generateTable(data.Standing.Series, data.Standing.Teams.Team, '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.inningName, 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.substring(innNme.indexOf('-') + 2) + ' ' +
    inn.wickets + '/' + inn.runs + ' (' +
    (highBatter ? highBatter.Name + ' ' + highBatter.Runs + '*, ' : '') +
    (lowBatter ? lowBatter.Name + ' ' + lowBatter.Runs + '*, ' : '') +
    inn.overs + ' overs) ' +
    document.title;
}

function getVal(data) { return data != null ? data : ''; }

function loadPlayerStats(data, test, odi, t20int, noDataRow) {
  var matchTypes = data.SportsFlash.CareerStats.MatchType;
  if (matchTypes.length) {
    if (matchTypes[0] && matchTypes[0].matchTypeId == '1') {
      generateMatchRows(matchTypes[0], test, true);
      if (matchTypes[1] && matchTypes[1].matchTypeId == '2') {
        generateMatchRows(matchTypes[1], odi);
        if (matchTypes[2] && matchTypes[2].matchTypeId == '11') generateMatchRows(matchTypes[2], t20int);
        else t20int.empty().append(noDataRow);
      }
      else {
        odi.empty().append(noDataRow);
        if (matchTypes[1] && matchTypes[1].matchTypeId == '11') generateMatchRows(matchTypes[2], t20int);
        else t20int.empty().append(noDataRow);
      }
    }
    else {
      test.empty().append(noDataRow);
      if (matchTypes[0] && matchTypes[0].matchTypeId == '2') {
        generateMatchRows(matchTypes[0], odi);
        if (matchTypes[1] && matchTypes[1].matchTypeId == '11') generateMatchRows(matchTypes[1], t20int);
        else t20int.empty().append(noDataRow);
      }
      else {
        odi.empty().append(noDataRow);
        if (matchTypes[0] && matchTypes[0].matchTypeId == '11') generateMatchRows(matchTypes[0], t20int);
        else t20int.empty().append(noDataRow);
      }
    }
  }
  else if (matchTypes) {
    if (matchTypes.matchTypeId == '1') {
      generateMatchRows(matchTypes, test);
      odi.empty().append(noDataRow);
      t20int.empty().append(noDataRow);
    }
    else if (matchTypes.matchTypeId == '2') {
      generateMatchRows(matchTypes, odi);
      t20int.empty().append(noDataRow);
      test.empty().append(noDataRow);
    }
    else if (matchTypes.matchTypeId == '11') {
      generateMatchRows(matchTypes, t20int);
      odi.empty().append(noDataRow);
      test.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 + 'GetTeamList&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 + 'GetPlayerList&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') + ')');
}


