// JavaScript Document
//bam.loadSync(bam.homePath + "bam.datagrid.js");
bam.loadSync("/shared/scripts/bam/bam.datagrid2.js");
var bts = {
	settings: {
		pickTeamImagePath: 	"http://mlb.mlb.com/mlb/fantasy/wsfb/images/mugshots/24x29/",
		pickPlayerImagePath:"http://mlb.mlb.com/mlb/images/fantasy/wsfb/24x29/",
		pickPlayerDefaultPath: "http://mlb.mlb.com/mlb/fantasy/wsfb/images/mugshots/default/default_24x29.jpg",
		pickPlayerLargeDefaultPath: "http://mlb.mlb.com/mlb/fantasy/bts/images/player/90x135_generic_icon.jpg"
	},
	//Public init for Pick Players
	init: function() {
		bts.picks.Load();
		bts.ui.resetSlides();
	},
	initResults: function() {
		$("#resultsScrollUp").click(bts.results.MoveUp);
		$("#resultsScrollDown").click(bts.results.MoveDown);
		if($.browser.msie) {
			$("#resultsScrollUp").hover(
				function(){ $(this).css("background-color", "#FFCC33"); },
				function(){ $(this).css("background-color", "#F39D16"); } );
			$("#resultsScrollDown").hover(
				function(){ $(this).css("background-color", "#FFCC33"); },
				function(){ $(this).css("background-color", "#F39D16"); } );
		}
		bts.results.Load();
	}
};
bam.extend(bts, {
	//All UI Properties/Methods
	ui: 	(function() {
				var _pannels = ["framePicks", "frameSlides", "frameListings"];
				var _fields = ["fldAtmStreaks", "fldAtmLeader", "fldCurLeader", "fldYlStreak", "fldYcStreak", "frameLockTime", "frameWeather"];
				var _wConsole; //Variable for ie console
				var _self = {
					//Console manipulation methods
					pannels: function(idx){return (typeof(idx) === "number" && (idx>=0 && idx < _pannels.length))?_pannels[idx]:_pannels;},
					fields: function(idx) {return (typeof(idx) === "number" && (idx>=0 && idx < _fields.length))?_fields[idx]:_fields;},
					getPannel: function(idx) {
						var _cPannel = _self.pannels(idx);
						if(!!_cPannel){ return document.getElementById(_cPannel); }						
					},
					clearPannel: function(idx) {
						var _cPannel = _self.getPannel(idx);
						if(!!_cPannel){ _cPannel.innerHTML = ""; }
						return _self;
					},
					fillPannel: function(idx, value) {
						var _cPannel = _self.getPannel(idx);
						if(!!_cPannel){ _cPannel.innerHTML = value; }
						return _self;
					},
					setField: function(idx, value) {
						var _cField = _self.fields(idx);
						if(!!_cField){ $("#"+_cField).html(value); }
						return _self;
					},
					showShader: function() {
						var _picks = $(_self.getPannel(0));
						var _po = _picks.offset();
						var _scss = {
								top: _po.top,
								left: 6,//_po.left,
								width: _picks.width(),
								height: _picks.height()
							};
						var _mcss = {
							"margin-top": (_picks.height()/2)-10
						};
						$("#shader .message").css(_mcss).html("Please wait ...");
						var _shader = $("#shader");
							_shader.css(_scss).fadeIn("normal");
						return _self;
					},
					hideShader: function() {
						$("#shader").fadeOut("slow");
						return _self;
					},
					//App variables
					picksDataGrid: {}, //Picks data grid (contains cached data)
					resultsDataGrid: {}, //Results data grid (contains cached data)					
					currentPick: {},
					currentPickIdx: 0,
					currentPickDate: "",
					currentTeamId: 0,
					currentPlayerId: 0,
					flgChangeTeam: false,
					isDoubleheader: false,
					isPickLocked: false,
					debug: false,
					//Helper UI functions
					playerImage: function(pId) {
						var _out = "<img border=\"0\" src=\"http://mlb.mlb.com/images/players/mugshot/ph_" + pId + ".jpg\"/>";
						return _out;
					},
					teamImage: function(tId) {
						var _out = "<img class=\"png\" border=\"0\" src=\"http://mlb.mlb.com/mlb/fantasy/bts/images/team/160x135/" 
						+ String(tId).toLowerCase() + ".png\"/>";
						return _out;
					},
					blankImage: function() {
						var _out = "<img border=\"0\" src=\"http://mlb.mlb.com/mlb/fantasy/bts/images/player/90x135_generic_icon.jpg\"/>";
						return _out;	
					},
					delay: function(cb, timeout) {
						var _tOut = timeout	|| 500;
						setTimeout(cb, _tOut);
						return _self;
					},
					log: function(msg) {
						if(!!_self.debug) {
							var _console = typeof(console) !== "undefined"?console:null;
							if(!!_console) {
								_console.log((msg||""));
							} else {
								if(!_wConsole || _wConsole.closed) {
									_wConsole = window.open("/mlb/components/fantasy/bts/y2009/debugger.html", "_console", "width=400, height=180");	
								} else {
									_wConsole.focus();
								}
								if(!!_wConsole) { 
									bts.ui.delay(function() {
										$(_wConsole.document).find("#console").append((msg || "") + "</br>");								 
									}, 10);
								}
							}
						}
						return _self;
					},
					timeIt: function(fn, msg) {
						if(typeof(fn) === "function") {
							if(!!_self.debug) {
								if(!!PerfTimer)	{
									PerfTimer.Start();
									fn();
									PerfTimer.Stop();
									_self.log((msg||"")+PerfTimer.Duration());								
								}
							} else {
								fn();
							}
						}
						return _self;
					},
					//Opponents dislpay
					renderLeftSlide: function(_obj) {
						var _out = new bam.string.StringBuffer();
						$("#leftTitle").html("Your Pick: " + (_obj.title||"TBD"));
						_out.append("<div>");
							if(!!_obj.team) {
								_out.append("<div class=\"image\" style=\"float:none; width:160px;\">").append(bts.ui.teamImage(_obj.team.code)).append("</div>");
							} else if(!!_obj.player) {
								_out.append("<div class=\"image\">").append(bts.ui.playerImage(_obj.player.id)).append("</div>")
										.append("<div class=\"stats\">")
											.append("<div class=\"line\">Season Stats:</div>")
											.append("<div class=\"line\">Games: "+_obj.player.games+"</div>")
											.append("<div class=\"line\">Hits: "+_obj.player.hits+"</div>")
											.append("<div class=\"line\">AVG: "+_obj.player.avg+"</div>");
								if(_obj.player.bats == "L")
									_out.append("<div class=\"line\">Bats: Left</div>");
								else if (_obj.player.bats == "R")
									_out.append("<div class=\"line\">Bats: Right</div>");
								else if (_obj.player.bats == "S")
									_out.append("<div class=\"line\">Bats: Switch</div>");
									
								_out.append("</div>").append("</div>");
							} else {
								_out.append("<div class=\"image\" style=\"float:none\">").append(bts.ui.blankImage()).append("</div>");
							}						
						$("#leftInfo").html(_out.toString());
						$("#leftInfo img").error(function(){ this.src = bts.settings.pickPlayerLargeDefaultPath; });
						return _self;
					},
					renderRightSlide: function(_obj) {
						var _out = new bam.string.StringBuffer();
						$("#rightTitle").html("Opponent: " + (_obj.title||"TBD"));
						_out.append("<div>");
							if(!!_obj.pitcher) {
								_out.append("<div class=\"image\">").append(bts.ui.playerImage(_obj.pitcher.id)).append("</div>")
									.append("<div class=\"stats\">")
										.append("<div class=\"line\">Season Stats:</div>")
										.append("<div class=\"line\">Innings: "+_obj.pitcher.innings+"</div>")
										.append("<div class=\"line\">Hits: "+_obj.pitcher.hits+"</div>")
										.append("<div class=\"line\">Opp AVG: "+_obj.pitcher.oppAvg+"</div>");
								
								if(_obj.pitcher.throwingHand == "R")
									_out.append("<div class=\"line\">Throws: Right</div>");
								else if (_obj.pitcher.throwingHand == "L")
									_out.append("<div class=\"line\">Throws: Left</div>");
									
								var _len = parseInt(_obj.pLength,10)-1;
								if(_len >= 1) {											
									var l = 0, _links = [];
									do {
										_links.push("<a href=\"javascript:bts.players.showPitcher("+l+");\">"+(l+1)+"</a>");
									} while(l++ < _len);												
									_out.append("<div class=\"line\">")
										.append(_links.join(" | "))
										.append("</div>");
									}
								_out.append("</div>")
									.append("</div>");
							} else if(!!_obj.team) {
								_out.append("<div class=\"image\" style=\"float:none; width:160px;\">").append(bts.ui.teamImage(_obj.team)).append("</div>");					
							} else {
								_out.append("<div class=\"image\" style=\"float:none;\">").append(bts.ui.blankImage()).append("</div>");
							}						
						$("#rightInfo").html(_out.toString());
						//If image fails, load default
						$("#rightInfo img").error(function(){ this.src = bts.settings.pickPlayerLargeDefaultPath; });
						return _self;
					},
					resetSlides: function() {
						_self.renderLeftSlide({});
						_self.renderRightSlide({});
						return _self;
					},
					unlockTeamChange: function() {							
						$("#changeTeamButton").removeAttr("disabled").removeClass("disabled").unbind("click").click(function() {
							_self.log("Loading teams on change team ...");
							bts.ui.setField(6, "");
							bts.ui.clearPannel(2);
							_self.resetSlides();
							bts.teams.Load(_self.currentPickDate);
							bts.ui.flgChangeTeam = true;
						});
						return _self;
					},
					lockTeamChange: function() {
						$("#changeTeamButton").attr("disabled","disabled").addClass("disabled").unbind("click");
						return _self;
					},
					unlockSubmitPick: function() {
						$("#submitButton").removeAttr("disabled").removeClass("disabled").unbind("click").click(function() {
							_self.log("Submitting pick ...");
							bts.picks.Save();								
						});
						return _self;
					},
					lockSubmitPick: function() {
						$("#submitButton").attr("disabled","disabled").addClass("disabled").unbind("click");
						return _self;
					}
				};
				return _self;
			})(),
	//Picks Functionality
	picks: 		(function() {
					var _setLockTime = function(_lTime) {
						if(typeof(_lTime) !== "undefined") {
							bts.ui.setField(5, bts.utils.cMil2AmPm(_lTime));
						}
					};
					var _renderDate = function(dt, isLocked) {
						var _out = new bam.string.StringBuffer();
						_out.append("<div");
						if(isLocked) {
							_out.append(" id=\"pickDate\" class=\"locked\">");
						} else {
							_out.append(" id=\"pickDate\">");
						}
						_out.append(dt.replace(/^0/,"")).append("</div>");
						return _out.toString();						
					};
					var _renderPick = function(_pick) {
						var _out = new bam.string.StringBuffer("<div id=\"pickBody\"");
						var _isLocked = (_pick.lock === "true")?true:false;
						if(_isLocked) { _out.append(" class=\"locked\""); } _out.append(">");
						if(!!_pick.opp) {
							//Player Image
							_out.append("<div class=\"playerImage\">")
									.append("<img width=\"24\" height=\"29\" src=\"")
									.append(bts.settings.pickPlayerImagePath + String(_pick.player[0].id) + ".jpg")
								.append("\"/></div>")
							//Player Name
								.append("<div class=\"playerName\">")
								.append(_pick.player[0].name)
								.append("</div>")
							//VS. Spacer
								.append("<div class=\"vsSpacer\">")
								.append("vs.")
								.append("</div>")
							//Opponent Image
								.append("<div class=\"oppImage\">")
								.append("<img width=\"24\" height=\"29\" src=\"")
								.append(bts.settings.pickTeamImagePath + String(_pick.opp[0].code) + "_staff_24x29.jpg")
								.append("\"/></div>")
							//Opponent Name
								.append("<div class=\"oppName\">")
								.append(_pick.opp[0].name)
								.append("</div>");
						} else {
							_out.append((_isLocked)?"No more picks for today":"Click here to make your selection");
						}
						_out.append("</div>");
						return _out.toString();
					};
					var _renderPicks = function(_picks) {
						var _isLocked = false, _cPick, _cDate;
						bts.ui.picksDataGrid = new bam.datagrid.DataGrid({
							tableClass: "picksTable",
							columns: [
								{title:"Date", sortable:false, width:"95px"},
								//{title:"Your Picks", sortable:false}
								{title:"Make Your Selection and <img src=\"/mlb/images/fantasy/bts/y2009/bk_hiyw_header.jpg\" alt=\"Have It Your Way\" width=\"184\" height=\"21\" style=\"vertical-align:middle;\">", sortable:false}
							],
							//Mouse over row
							onRowEnter: function() {
								var _idx = parseInt($(this).attr("index"), 10);
								var _pick = bts.ui.picksDataGrid.rows(_idx);
								if(!_pick.selected) {
									$(this).addClass("hover");
								}
							},
							onRowLeave: function() {
								$(this).removeClass("hover");							
							},
							//What happens when pick is just clicked
							onRowClick: function() {
								//Remove highlight as soon as clicked
								$(this).removeClass("hover");
								//-------------------------------------------------//
								var _idx = parseInt($(this).attr("index"), 10);
								var _cPick = dao.PicksData.GetPick(_idx);
								var _isLocked = (_cPick.lock === "true")?true:false;
									bts.ui.isPickLocked = _isLocked;
								var _isSelected = $(this).attr("selected") === "1"?true:false;
								if(!_isSelected) { //If row clicked is diffeent then already selected one
									bts.ui.lockTeamChange() //Lock controls									
										  .clearPannel(2); //Clear listing prior data change
									//Reset all selected rows before selecting the one we need
									$.each(bts.ui.picksDataGrid.rows(), function() {
										if(this.selected) {
											bts.ui.picksDataGrid.selectRow(this.index); //This will unselect rows already selected
											this.selected = false;
										}
									});
									bts.ui.picksDataGrid.selectRow(_idx);  // --> this would trigger onRowSelect event below
									if(_isLocked) {
										$(this).removeClass("selected");
									}
								}								
							},
							//What happens when pick is selected (not just clicked)
							onRowSelect: function(_idx) {
								bts.ui.resetSlides();
								var _cPick = dao.PicksData.GetPick(_idx);
								var _isLocked = bts.ui.isPickLocked;								
								bts.ui.currentPickIdx = _idx; //Set the pick index that is curently selected
								bts.ui.currentPick = _cPick;								
								bts.ui.currentPickDate = _cPick.gameDate || _cPick.gamedate;
								//Set lock time
								bts.ui.setField(5, "Picks for this day lock at " + dao.PicksData.GetLockTime(bts.ui.currentPickDate) + " ET");
								//Weather
								bts.ui.setField(6, "");
								bts.weather.getWeather((bts.ui.currentPickDate), _cPick.w_loc);
								//
								var _pitcher, _player, _pchName, _plrName, _pitchers, _pchId, _tCode, _tName, _team, _opponent;
								
									_player = !!_cPick.player && _cPick.player[0];
									_team = !!_cPick.team && _cPick.team[0];
									_pitcher = !!_cPick.pitcher && _cPick.pitcher;
									_opponent = !!_cPick.opp && _cPick.opp[0];
									
								if(!!_player && !!_team) {
									//Set Global values
									bts.ui.currentPlayerId = _player.id;
									bts.ui.currentTeamId = String(_team.id);
								}
								//Handle Picks
								if(!!_pitcher) {		//Pitcher is known							
									_pchName = _pitcher[0].name; //pick.opp.name;
									_plrName = !!_player && _player.name;
									_pitchers = _pitcher; //It's an array
									_pchId = String(_pitcher[0].id);									
									//Manage button display
									if(!_isLocked){bts.ui.unlockTeamChange();}else{bts.ui.lockTeamChange();}									
									bts.ui.lockSubmitPick()
									//Show player
									.renderLeftSlide({player: _cPick.player[0], title: _plrName});
									dao.TeamsData.Load(bts.ui.currentPickDate, function() {										
										//Show pitcher for the team
										bts.players.showPitcher(0);
									});
								} else if(!!_opponent) { //Pitcher is unknown
									_tName = _opponent.name;
									_plrName = !!_player && _player.name;
									_tCode = _opponent.code;
									_pchId = String(_opponent.id);
									
									//Manage button display
									if(!_isLocked){bts.ui.unlockTeamChange();}else{bts.ui.lockTeamChange();}
									bts.ui.lockSubmitPick()
									//Draw Team instead of pitcher
									.renderRightSlide({title: _tName, team: _tCode})
									//Render Player
									.renderLeftSlide({player: _cPick.player[0], title: _plrName});
									dao.TeamsData.Load(bts.ui.currentPickDate, function() {										
										//Load players										
										bts.players.Load(bts.ui.currentTeamId, _pchId, _isLocked);
									});
								} else {
									if(!_isLocked) {
										bts.ui.log("Loading teams ...");									
										bts.teams.Load(bts.ui.currentPickDate);
									} else {
										bts.ui.fillPannel(2, "Pick is locked");
									}
								}
							}
						});
						//Populate picks table with data values
						$.each(_picks, function() {
							_cPick = this;
							_isLocked = (_cPick.lock === "true")?true:false;
							_cDate = _cPick.gameDate || _cPick.gamedate;
							_cDate = bam.datetime.parseShortDate(_cDate).formatDate("MM/dd");
							bts.ui.picksDataGrid.insertRow([	//Three columns (formatted date, formatted pick)
								_renderDate(_cDate, _isLocked), 
								_renderPick(_cPick)
							]);
						});
						//output Picks grid to the display
						bts.ui.picksDataGrid.render(bts.ui.pannels(0));	
						//If image fails, load default
						$("#framePicks img").error(function(){ this.src = bts.settings.pickPlayerDefaultPath; });
					};					
					var _self = {
						Load: function(cb) { //Should occur only once per session
							dao.PicksData.Load(function() {
								_renderPicks(dao.PicksData.GetPicks());
								bts.stats.setPlayerStats(dao.PicksData.GetStats());
								//Set lock time
								bts.ui.picksDataGrid.clickRow(bts.ui.currentPickIdx);	//Select first pick by default (unless locked)						
								if(typeof(cb) === "function") {
									cb();	
								}
							});
							return _self;
						},
						Save: function() {
							dao.PicksProcessor.PlayerID = bts.ui.currentPlayerId;
							if(bts.ui.isDoubleheader) {
								var _msg = 	"You are about to select a player who is playing in a doubleheader. " +
											"Your streak will only continue if the player gets at least one hit in both games in which he plays on that day " +
											"(unless all the selected player's plate appearances result in a base on balls, hit batsman, defensive interference or a sacrifice bunt). " +
											"In the event that the player gets at least one hit in both games, your streak will only increase by one (1) game";
								alert(_msg);	
							}
							bts.ui.timeIt(function() {
								bts.ui.resetSlides();
								bts.ui.lockSubmitPick();
								bts.ui.lockTeamChange();
								bts.ui.fillPannel(2, "Saving your pick ...");
								bts.ui.showShader();
								
								dao.PicksProcessor.Save(bts.ui.currentPickDate, function() {									
									//Reload picks to reflect changes
									_self.Load(function() {
										bts.ui.hideShader();
									});
								});
							}, "Saving data ...");
							return _self;
						}						
					};
					return _self;
				})(),
	//Players Functionality
	players: 	(function() {
					var _renderPlayers = function(_isLocked) {
						var _players = dao.PlayersData.GetPlayers();
						var _header = dao.PlayersData.GetHeader();
						if(!!_players && _players.length > 0) {
							var _teamName = dao.TeamsData.GetTeam(bts.ui.currentTeamId).name || 
											dao.PicksData.GetPick(dao.PicksData.SelectedPickID).team[0].name;
							var _playersGrid = new bam.datagrid.DataGrid({
								tableClass: "playersGrid",
								columns: [
									{title:"&nbsp;", type:bam.datagrid.DataType.Number, width:"22px", 
									decorator: 
										function(obj) {
											//Handling for displaying BK icon
											var _out = new bam.string.StringBuffer();											
											if(obj.value === 1) {
												_out.append("<div class=\"expertPick\">");
												_out.append("<img class=\"png\" src=\"/mlb/components/fantasy/bts/y2009/images/king.png\"/>");
												_out.append("</div>");
											} else {
												_out.append("&nbsp;");	
											}
											return _out.toString();
										}
									},
									{title:_teamName},
									{title:"AB", width:"30px", type:bam.datagrid.DataType.Number},
									{title:"Hits", width:"30px", type:bam.datagrid.DataType.Number},
									{title:"AVG", width:"100px", type:bam.datagrid.DataType.Number},
									{title:"AB", width:"30px", type:bam.datagrid.DataType.Number},
									{title:"Hits", width:"30px", type:bam.datagrid.DataType.Number},
									{title:"AVG", type:bam.datagrid.DataType.Number},
									{title:"id", visible:false}
								],
								onColumnSort: function(_idx) {
									_playersGrid.refreshView();	
								},
								onRowSelect: function(_idx) {
									var _pidIdx = _playersGrid.columns().length-1;
									var _playerId = _playersGrid.rows(_idx).cell(_pidIdx).value;
									var _player = dao.PlayersData.GetPlayer(String(_playerId));
									//Remember player
									bts.ui.currentPlayerId = String(_playerId);
									bts.ui.renderLeftSlide({player: _player, title: _player.name})									
									.unlockSubmitPick(); //Unlock Pick submit button
								}
								/*
								,
								onBeforeCellWrite: function(obj) {
									//Handling for displaying BK icon
									if(obj.column === 0) {
										var _out = new bam.string.StringBuffer();
										_out.append("<div class=\"expertPick\">");
										if(obj.value === 1) {
											_out.append("<img class=\"png\" src=\"/mlb/components/fantasy/bts/y2009/images/king.png\"/>");
										}
										_out.append("</div>");
										return _out.toString();
									}
								} */
							});
							if(!_isLocked) {
								_playersGrid.onRowClick = function() {
									var _idx = parseInt($(this).attr("index"), 10);
									var _isSelected = false;
									//Unselect all previous
									$.each(_playersGrid.rows(), function() {										
											this.selected = false;							
									});
									$(".playersGrid tr").each(function() {
										_isSelected = !!$(this).attr("selected");
										if(_isSelected) {
											$(this).removeAttr("selected").removeClass("selected");											
										}
									});
									//Select just the one we clicked
									_playersGrid.selectRow(_idx);  // --> this would trigger onRowSelect event below
								};
							}
							//Divs
							var _headers = new bam.string.StringBuffer("<div class=\"playerHeaders\">");									
									_headers.append("<div class=\"right\">" + ((!!_header && _header.total[0].Text) || "") + "</div>")
											.append("<div class=\"left\">" + ((!!_header && _header.historical[0].Text) || "") + "</div>");
								_headers.append("</div>");
							//Render list
							var _p = 0, _pLen = _players.length - 1, _cPlayer;
							do {
								_cPlayer = _players[_p];
								_playersGrid.insertRow([
									parseInt(_cPlayer.is_expert_pick, 10),
									_cPlayer.name,
									_cPlayer.h_ab,
									_cPlayer.h_hits,
									_cPlayer.h_avg,
									_cPlayer.ab,
									_cPlayer.hits,
									_cPlayer.avg,
									_cPlayer.id
								]);								
							} while(_pLen > _p++);
							
							var _out = _headers.toString() + _playersGrid.toString();														
							bts.ui.getPannel(2).innerHTML = _out;
							_playersGrid.registerEvents();
						}
					};
					var _self = {
						Load: function(_teamId, _playerId, _isLocked, cb) {
							bts.ui.clearPannel(2).fillPannel(2, "Loading players ...");
							dao.PlayersData.Load(_teamId, _playerId, function(){
								_renderPlayers(	_isLocked );
								if(typeof(cb) === "function"){cb();}
							});
							return _self;
						},
						showPitcher: function(_idx) {
							var _team = dao.TeamsData.GetTeam(bts.ui.currentTeamId);
							var _pitchers = _team.pitcher;
							var _pitcher = _pitchers[_idx];
							var _obj = {
								pitcher: 	_pitcher,
								title: 		_pitcher.name,
								pLength: 	_pitchers.length
							};
							bts.ui.renderRightSlide(_obj);
							_self.Load(bts.ui.currentTeamId, _pitcher.id, bts.ui.isPickLocked);
						}
					};
					return _self;
				})(),
	//Teams Functionality
	teams: 		(function() {
					var _renderTeams = function() {
						bts.ui.lockTeamChange();						
						bts.ui.lockSubmitPick();						
						var _columns = [ {title: "team", sortable:false}, {title: "opponent", sortable:false}, {title:"team id", visible:false} ];
						//Triggers this event when row is selected
						var _onRowSelect = function(_teamId) {							
							bts.ui.currentTeamId = String(_teamId);
							bts.ui.flgChangeTeam = false;							
							var _team = dao.TeamsData.GetTeam(bts.ui.currentTeamId);
								//Weather
								bts.ui.setField(6, "");
								bts.weather.getWeather((bts.ui.currentPickDate), _team.wloc);
								//
								bts.ui.isDoubleheader = (_team.isDH === "y")?true:false;
							var _pchrId = !!_team.pitcher && _team.pitcher[0].id;
								bts.ui.renderLeftSlide({team: _team});
								if(!!_pchrId) { //Sometimes pitcher is unavailable (TBD)
									bts.players.showPitcher(0);							
								} else {									
									if(!!_team.opp) {										
										var _tName = _team.opp[0].name;
										var _tCode = _team.opp[0].code;
										var _oppId = _team.opp[0].id;
										bts.ui.renderRightSlide({title: _tName, team: _tCode});
										bts.players.Load(bts.ui.currentTeamId, _oppId, null, bts.ui.isPickLocked);
									}									
								}
								bts.ui.unlockTeamChange(); //Unlock button to change a team
						};						
						var _grdLeft = new bam.datagrid.DataGrid({
							tableClass: "teamsGrid",
							noResultsMessage: "&nbsp;",
							columns: _columns,
							onRowClick: function(){ 
								var _idx = parseInt($(this).attr("index"), 10);
								_grdLeft.selectRow(_idx);								
							},
							onRowSelect: function(_idx) {
								var _teamId = _grdLeft.rows(_idx).cell(2).value;								
								_onRowSelect(_teamId);
							}
					 	});
						var _grdRight = new bam.datagrid.DataGrid({
							tableClass: "teamsGrid",
							noResultsMessage: "&nbsp;",
							columns: _columns,
							onRowClick: function(){ 
								var _idx = parseInt($(this).attr("index"), 10);								
									_grdRight.selectRow(_idx);								
							},
							onRowSelect: function(_idx) {
								var _teamId = _grdRight.rows(_idx).cell(2).value;
								_onRowSelect(_teamId);								
							}
					 	});
						var _sideLimit = 14, _cursor = 0, _current = {};
						var _atHome = false, _gameIndicator = "", _era, _shortName, _hTeam, _oTeam;
						var _teamsData = dao.TeamsData.GetTeams();
						var _tLen = _teamsData.length-1;
						//Populate 2 tables
						do {
							_current = _teamsData[_cursor];
							_hTeam = _current.abbrev;
							_oTeam = _current.opp[0].abbrev;
							_atHome = _current.isHome === "y"?true:false;
							_gameIndicator = _atHome?"vs":"@";
							if (_current.isDH == "y") {
								_era = "Doubleheader";
							} else if (!!_current.pitcher) {						
								_shortName = _current.pitcher[0].nameShort || _current.pitcher[0].nameshort;
								_era = _shortName + ", " + _current.pitcher[0].era;
							} else {
								_era = "TBD";	
							}
							if(_cursor <= _sideLimit) {
								_grdLeft.insertRow([_hTeam, _gameIndicator + " " + _oTeam + " (" + _era + ")", _current.id]);
							} else {
								_grdRight.insertRow([_hTeam, _gameIndicator + " " + _oTeam + " (" + _era + ")", _current.id]);
							}														
						} while(_tLen > _cursor++);
						//Render output
						var _pannel = bts.ui.getPannel(2);
							_pannel.innerHTML = "";
							bts.ui.timeIt(function() {
								_pannel.appendChild(_grdLeft.toDOM());
							}, "Left Table rendering: ");
							bts.ui.timeIt(function() {
								_pannel.appendChild(_grdRight.toDOM());
							}, "Right Table rendering: ");
							
							_grdLeft.registerEvents();
							_grdRight.registerEvents();
					};
					var _self = {
						Load: function(_date, cb) {
							bts.ui.clearPannel(2).fillPannel(2, "Loading teams ...");
							dao.TeamsData.Load(_date, function() {								
								bts.ui.timeIt(_renderTeams, "Render Teams: ");								
							});
							return _self;
						}
					};
					return _self;
				})(),
	//Results Functionality
	results: 	(function() {
					var _isLocked = false, _cPick, _cDate;
					var _renderPickStats = function() {
						//Code to display most picked
						var _stats = dao.StatsData.GetStats();
						if(!!_stats && _stats.length > 0) {
							var _statsGrid = new bam.datagrid.DataGrid({
								tableClass: "pickStatsGrid",
								columns: [
									{title:"Most selected players", sortable:false},
									{title:"Team", sortable:false},
									{title:"Pct", sortable:false},
									{title:"Results", sortable:false}
								]
							});
							var _pickStat = null;
							$(_stats).each(function() {
								_pickStat = this;
								_statsGrid.insertRow([
									(_pickStat.playerName || _pickStat.playername),
									_pickStat.team,
									_pickStat.pct,
									_pickStat.results
							   ]);
							});
							_statsGrid.render(bts.ui.pannels(2));
						} else {
							bts.ui.fillPannel(2, "<div class=\"mspMessage\">Most selected players not available at this time.</div>");
						}
					};
					var _renderPlayerInfo = function(_dt, _pick) {
						$("#resultsStats").hide();
						if(!!_pick.player) {
							$("#pickTitle").html("Pick for "+ _dt +": "+_pick.player[0].name+" "+_pick.score[0].Text);
							$("#resultsImage").html(bts.ui.playerImage(_pick.player[0].id)).css({"float":"left"});
							if(_pick.notScored == '1') {
								$("#resultsStats").html("Not yet scored");
								
							} else if(!!_pick.games) {
								var _out = new bam.string.StringBuffer();
								var _gamesGrid = new bam.datagrid.DataGrid({
									tableClass: "resultsGamesGrid",
									columns: [
										{title:"Inning", sortable:false},
										{title:"Pitcher", sortable:false},
										{title:"Result", sortable:false}
									],
									noResultsMessage: "Did not play",
									oddClass: "odd"
								});								
								var _games = _pick.games[0].game;
								var _actions, _cAction, _cGame, _g = 1;
								if(_games.length > 1) {
									$(_games).each(function() {
										_gamesGrid.insertRow(["&nbsp;", "<span class=\"gameTitle\">Game " + _g + "</span>", "&nbsp;"]);
										_cGame = this;
										_actions = _cGame.action;
										$(_actions).each(function(){
											_cAction = this;
											_gamesGrid.insertRow([_cAction.inning, _cAction.name, _cAction.result]);
										});
										_g++;
									});
									_out.append(_gamesGrid.toString());
								} else {
									_actions = _pick.games[0].game[0].action;
									$(_actions).each(function(){
										_cAction = this;
										_gamesGrid.insertRow([_cAction.inning, _cAction.name, _cAction.result]);
									});
									_out.append(_gamesGrid.toString());
								}								
								$("#resultsStats").html(_out.toString());
							} else {
								$("#resultsStats").html("Did not play");	
							}
							$("#resultsStats").fadeIn("normal");
							dao.StatsData.Load(_dt, _renderPickStats);
						} else {
							$("#pickTitle").html("You haven't made your selection for this day");
							$("#resultsImage").html(bts.ui.blankImage()).css({"float":"none"});
						}
					};
					var _renderDate = function(dt) {
						var _out = new bam.string.StringBuffer();
						_out.append("<div")
							.append(" id=\"pickDate\">").append(dt.replace(/^0/,""))
						.append("</div>");
						return _out.toString();						
					};
					var _renderPick = function(_pick) {
						var _out = new bam.string.StringBuffer("<div id=\"pickBody\">");
						if(!!_pick.opp) {
							//Player Image
							_out.append("<div class=\"playerImage\">")
									.append("<img width=\"24\" height=\"29\" src=\"")
									.append(bts.settings.pickPlayerImagePath + String(_pick.player[0].id) + ".jpg")
								.append("\"/></div>")
							//Player Name
								.append("<div class=\"playerName\">")
								.append(_pick.player[0].name)
								.append("</div>")
							//VS. Spacer
								.append("<div class=\"vsSpacer\">")
								.append("vs.")
								.append("</div>")
							//Opponent Image
								.append("<div class=\"oppImage\">")
								.append("<img width=\"24\" height=\"29\" src=\"")
								.append(bts.settings.pickTeamImagePath + String(_pick.opp[0].code) + "_staff_24x29.jpg")
								.append("\"/></div>")
							//Opponent Name
								.append("<div class=\"oppName\">")
								.append(_pick.score[0].Text)
								.append("</div>");
						} else {
							_out.append("You haven't made your selection for this day");
						}
						_out.append("</div>");
						return _out.toString();
					};
					var _renderResults = function(_picks) {
						bts.ui.resultsDataGrid = new bam.datagrid.DataGrid({
							tableClass: "picksTable",
							noResultsMessage: "Results will be available after the first night of scoring.",
							columns: [
								{title:"Date", sortable:false},
								{title:"Your Picks", sortable:false}
							],
							//Pre-processing
							onBeforeCellWrite: function(_row) {
								var _out = _row.value;
								switch(_row.column) {
									case 0:
										_out = _renderDate(_row.value);
										break;
									case 1: 
										_out = _renderPick(_row.value);
										break;
								}
								return _out;
							},
							//Mouse over row
							onRowEnter: function() {
								var _idx = parseInt($(this).attr("index"), 10);
								var _pick = bts.ui.resultsDataGrid.rows(_idx);								
								if(!!_pick && !_pick.selected) {
									$(this).addClass("hover");
								}
							},
							//Mouse out row
							onRowLeave: function() {
								$(this).removeClass("hover");							
							},
							//What happens when pick is just clicked
							onRowClick: function() {
								//Remove highlight as soon as clicked
								$(this).removeClass("hover");
								//-------------------------------------------------//
								var _idx = parseInt($(this).attr("index"), 10);
								var _cPick = dao.ResultsData.GetPick(_idx);
								if(!!_cPick) {
									var _isLocked = (!_cPick.opp)?true:false;
									var _isSelected = $(this).attr("selected") === "1"?true:false;
									if(!_isSelected) { //If row clicked is diffeent then already selected one
										bts.ui.clearPannel(2); //Clear listing prior data change
										//Reset all selected rows before selecting the one we need
										$.each(bts.ui.resultsDataGrid.rows(), function() {
											if(this.selected) {
												bts.ui.resultsDataGrid.selectRow(this.index); //This will unselect rows already selected
												this.selected = false;
											}
										});
										bts.ui.resultsDataGrid.selectRow(_idx);  // --> this would trigger onRowSelect event below
										if(_isLocked) {
											$(this).removeClass("selected");
										}
									}
								}
							},
							//On row select
							onRowSelect: function(_idx) {
								_cPick = bts.ui.resultsDataGrid.rows(_idx);
								var _pickDate = String(_cPick.cell(0).value);
								var _pickData = dao.ResultsData.GetPickByDate(_pickDate);
								_renderPlayerInfo(_pickDate, _pickData);
							}							
						});
						//Insert picks						
						if(!!_picks && !!_picks.length) {
							$.each(_picks, function(){
								_cPick = this;							
								_cDate = _cPick.gameDate || _cPick.gamedate;
								bts.ui.resultsDataGrid.insertRow([	//Two columns (formatted date, formatted pick)
									_cDate, _cPick
								]);					
							});
						}
						//output Picks grid to the display
						bts.ui.resultsDataGrid.render(bts.ui.pannels(0));
						//If there are picks - select the first one
						if(!!_picks && !!_picks.length) {
							bts.ui.resultsDataGrid.selectRow(0);
						}
					};
					var _pick, endDate = null;
					var _self = {
						Load: function(_endDate) {
							endDate = _endDate || bam.datetime.toShortDate(new Date());
							bts.ui.clearPannel(0).fillPannel(0, "Loading picks ...");							
							dao.ResultsData.Load(endDate, function() {
								bts.stats.setPlayerStats(dao.ResultsData.GetStats());
								_renderResults(dao.ResultsData.GetPicks());
							});
						},
						MoveUp: function() {
							_pick = dao.ResultsData.GetFirstPick();
							if(!!_pick) {
								endDate =  _pick.gameDate;
								dao.ResultsData.ScrollDown(endDate, function() {
									_renderResults(dao.ResultsData.GetPicks());
								});
							}
						},						
						MoveDown: function() {
							_pick = dao.ResultsData.GetLastPick();
							if(!!_pick) {
								endDate =  _pick.gameDate;
								dao.ResultsData.ScrollUp(endDate, function() {
									_renderResults(dao.ResultsData.GetPicks());
								});
							}
						}
					};
					return _self;
				})(),
	//Stats Display
	stats: 		(function() {
					var _self = {
						setPlayerStats: function(_pStats) {
							if(!!_pStats) {
								bts.ui.setField(0, _pStats.highPro || _pStats.highpro).setField(1, _pStats.highBts || _pStats.highbts).setField(2, _pStats.curHigh || _pStats.curhigh).setField(3, _pStats.yourLongest || _pStats.yourlongest).setField(4, _pStats.yourCurrent || _pStats.yourcurrent);
							}
						}
					};
					return _self;
				})(),
	//Weather Display
	weather: 	(function() {
					var _self = {
						getWeather: function(_gameDate, wloc) {
							// weather.com stuff							
							var gameDate  = bam.datetime.parseShortDate(_gameDate);
							var todayDate = getBTSDate(); 
							//var todayDate = new Date(2008,03,30); // for testing
							var dayoffset = bam.datetime.DateDiff(gameDate,todayDate).TotalDays();
							//wloc = "USNY0172"; // for testing
							if (wloc !== "0" && wloc !== undefined && dayoffset >= 0 && dayoffset <=4) {
								$.get("/mlb/components/fantasy/bts/y2009/weather.jsp",{wloc:wloc,dayoffset:dayoffset},function(weatherHTML){
									bts.ui.setField(6, $.trim(weatherHTML));
									$("#"+bts.ui.fields(6)+" .weather").show();
								});
							}
						}
					};
					return _self;
				})(),
	//Misc. utilities
	utils: 		(function() {
					var _self = {
						//Converts 24h(military) time to am/pm
						cMil2AmPm: function (thisTime) {
							var res = "";
							var time = String(thisTime);
							if(time.indexOf(":") != -1) {
								var tAr = time.split(":");
								var hh, mm;
								if(tAr.length == 2) {
									var leadZero = /^0/;
									hh = parseInt(tAr[0],10);
									mm = String(tAr[1]);
									switch(true) {
										case hh === 0:
											res = "12:" + mm + "am";
											break;
										case (hh >= 1 && hh <= 11):
											res = hh + ":" + mm + "am";
											break;
										case (hh === 12):
											res = "12:" + mm + "pm";
											break;
										case (hh > 12 && hh <= 24):
											res = (hh-12) + ":" + mm + "pm";
											break;
									}
								}
							}
							return res;
						}
					};		  
					return _self;
				})()
});
