// MLB Streaks JavaScript Document
// Dependencies: jQuery, bam.js, bam.datagrid.js (v.2), bam.ajaxHelper.js
var mlbStreaks = (function(){
	//Load dependencies
	bam.loadSync(
		bam.homePath + "bam.datagrid2.js",		
		bam.homePath + "bam.ajaxHelper.js"
	);
	/*
	bam.ajaxHelper.timeout = 10000;
	bam.ajaxHelper.autoRetry = true;
	bam.ajaxHelper.retryInterval = 15000;
	*/
	//Public members
	var _today = new Date();
	var _self = {
		cutOff: 20,
		dateFormat: "M/d",
		season: _today.getFullYear(),
		init: function() {
			_activeStreaksService.load(_self.season, function(_data) {
				_dgActive.loadData({data: _data, dataset: "streak_hitting_current"}).render("activeStreaks");
		  	});
			_seasonStreaksService.load(_self.season, function(_data) {
				_dgSeason.loadData({data: _data, dataset: "streak_overall_sort_by_streak"}).render("seasonStreaks");
		  	});
		}		
	};
	//Private members
	var _activeStreaksService = bam.ajaxHelper.createInstance({
		url: "/lookup/json/named.streak_hitting_current.bam",
		dataType: "json",
		load: function(season, cb) {
			var _data, that = this;
			that.makeRequest({sort_by:"'streak_desc'",sport_code:"'mlb'","season":season, results: _self.cutOff}, function(jObj) {
			_data = jObj;
			if(typeof(cb) ==="function"){cb(_data);}
		  });
		},
		onRetry: function(a) {
			$("#activeStreaks").html("Retry# " + a + " ...");
		},
		onFail: function(r) {
			$("#activeStreaks").html("We appologize for this inconvenience, but data is currently unavailable.</br>Please try again later.");
		}
	});
	var _seasonStreaksService = bam.ajaxHelper.createInstance({
		url: "/lookup/json/named.streak_overall_sort_by_streak.bam",
		dataType: "json",
		load: function(season, cb) {
			var _data, that = this;
			that.makeRequest({sort_order:"'desc'",sport_code:"'mlb'","season":season, results: _self.cutOff}, function(jObj) {
			_data = jObj;
			if(typeof(cb) ==="function"){cb(_data);}
		  });
		},
		onRetry: function(a) {			
			$("#seasonStreaks").html("Retry# " + a + " ...");
		},
		onFail: function(r) {
			$("#seasonStreaks").html("We appologize for this inconvenience, but data is currently unavailable.</br>Please try again later.");
		}
	});
		
	var _dgActive = new bam.datagrid.DataGrid({
			tableClass: "tblStreaks",
			cellspacing: 1,
			dataType: "json",
			summary: "Active MLB hitting streaks for " + _self.season,
			caption: "Active",
			columns: [
				{title:"_playerId", dataField: "player_id", visible:false},
				{title:"Name", dataField:"name_display_first_last", sortable: false, style:"algnLeft", //name_display_last_first
					decorator: function(obj) {
						return "<a target=\"_blank\" href=\"/team/player.jsp?player_id=" + this.cell("player_id").value + "\">" + obj.value + "</a>";
					}
				},
				{title:"Team", dataField: "team_abbrev", sortable: false},
				{title:"Streak", dataField: "streak", sortable: false, type:bam.datagrid.DataType.Number},
				{title:"Started", dataField: "first_date", type:bam.datagrid.DataType.DateTime, sortable: false,
					decorator: function(obj) {
						var _out = bam.datetime.parseISODate(obj.value);
						if(bam.object.typeOf(_out) === "date") {
							return _out.formatDate(_self.dateFormat);
						} 								
					}
				}
			],
			onColumnSort: function(){ this.parent.refresh(); }
		}),
		_dgSeason = new bam.datagrid.DataGrid({
			tableClass: "tblStreaks",
			cellspacing: 1,
			dataType: "json",
			summary: "Longest MLB hitting streaks for " + _self.season,
			caption: "Season Long",
			columns: [
				{title:"_playerId", dataField: "player_id", visible:false},
				{title:"Name", dataField:"name_display_first_last", sortable: false, style:"algnLeft", //player
					decorator: function(obj) {
						return "<a target=\"_blank\" href=\"/team/player.jsp?player_id=" + this.cell("player_id").value + "\">" + obj.value + "</a>";
					}
				},
				{title:"Team", dataField: "team_abbrev", sortable: false},
				{title:"Streak", dataField: "g", sortable: false, type:bam.datagrid.DataType.Number},
				{title:"start_date", dataField: "first_date", type:bam.datagrid.DataType.DateTime, visible: false},
				{title:"end_date", dataField: "last_date", type:bam.datagrid.DataType.DateTime, visible: false},
				{title:"Dates", sortable: false,
					decorator: function(obj){
						var fDate = this.cell("first_date").value;
						var lDate = this.cell("last_date").value;					
						var _out = bam.datetime.formatDate(fDate, _self.dateFormat) + " - " 
						+ ((bam.object.typeOf(lDate) === "date")?bam.datetime.formatDate(lDate, _self.dateFormat):"present");						
						return _out;
				}}
			],
			onColumnSort: function(){ this.parent.refresh(); }									  
		});
	
					   
	return _self;
})();

//Initialize on page load
$(function() { mlbStreaks.init(); });
