
bam.loadSync("/shared/scripts/bam/packed/bam.url.js");

$.ajaxSetup({
	timeout:5000,
	error:function(xhr){	
		//try to resubmit the request 3 times		
		wbcStatsPage.numDataRequests++;
		if(!!wbcStatsPage.gridID && wbcStatsPage.numDataRequests<4) {
			wbcStatsPage.writeGrid(wbcStatsPage.gridID,wbcStatsPage.sortStat,wbcStatsPage.sortOrder);			
		}
		if(wbcStatsPage.numDataRequests>3){
			$("body").removeClass("waitCursor");
			$("#wbcStats"+(wbcStatsPage.gridCount+1)).html("<b>No results found.</b>");
			wbcStatsPage.numDataRequests=0;
		}		
	}
});

var wbcStatsPage = {

	gridCount: 0,
	gridID:null,
	numDataRequests:0,	
	sortStat: "",
	sortOrder: "",
	isStillWriting: false,
	teamID: bam.url.Location(window.location).getParam("team") || "",
	season: bam.url.Location(window.location).getParam("season") || "2009",   // sets default year
	
	goStats: function(s) {
		if(s!=""){		
			$(".wbcStatsHeaderLabel, #hittingQualifier, #pitchingQualifier").hide();
			if(!!wbcStatsPage.wbcStatsGrid)wbcStatsPage.wbcStatsGrid.clearData();	
			wbcStatsPage.gridCount=0;
			$(".wbcStatsContainer").empty();
			if(s.length>5) {				
				$("#wbcStatsNav select:eq(1)").find("option[index='0']").attr("selected","selected");
				wbcStatsPage.writeGrid(s,((s.indexOf("pitching")!=-1)?"era":"avg"),"desc");
			}else{
				wbcStatsPage.teamID = wbcStatsPage.convertTeamID(s);
				$("#wbcStatsNav select:eq(0)").find("option[index='0']").attr("selected","selected");
				$("#wbcStatsNav select:eq(1)").find("option[value='"+wbcStatsPage.teamID+"']").attr("selected","selected");
				wbcStatsPage.writeGrid("wbc_team_player_hitting","avg","desc");
				wbcStatsPage.loadTeamPitching();
			}			
		}		
	},
	
	loadTeamPitching: function(){
		if(!wbcStatsPage.isStillWriting)wbcStatsPage.writeGrid("wbc_team_player_pitching","era","desc");
		else setTimeout('wbcStatsPage.loadTeamPitching()',100);
	},	
	
	convertTeamID: function(team){
		if(team*0==0){return team}else{
			var allTeams=new Array("760", "AUS", "784", "CAN", "790", "CHN", "791", "TPE", "798", "CUB", "805", "DOM", "841", "ITA", "843", "JPN", "1171", "KOR", "867", "MEX", "878", "NED", "890", "PAN", "897", "PUR", "918", "RSA", "940", "USA", "944", "VEN");
			return allTeams[$.inArray(team.toUpperCase(),allTeams)-1];	
		}			
	},
	
	convertTeamAbbrev: function(team_abbrev) {
		if(wbcStatsPage.gridID=="wbc_leader_hitting" || wbcStatsPage.gridID=="wbc_leader_pitching"){return "&nbsp;" +team_abbrev}
		else{
		var allTeams=new Array("Australia", "AUS", "Canada", "CAN", "China", "CHN", "Chinese Taipei", "TPE", "Cuba", "CUB", "Dominican Republic", "DOM", "Italy", "ITA", "Japan", "JPN", "Korea", "KOR", "Mexico", "MEX", "Netherlands", "NED", "Panama", "PAN", "Puerto Rico", "PUR", "South Africa", "RSA", "United States", "USA", "Venezuela", "VEN");
		return allTeams[$.inArray(team_abbrev.toUpperCase(),allTeams)-1];	
		}		
	},
	
	getDataSource: function() {			
		var grid=wbcStatsPage.gridID,dataPath="";		
		dataPath="/lookup/json/named." + grid + ".bam?stat=" + wbcStatsPage.sortStat + "&season=" + wbcStatsPage.season + "&results=50&sort_order='" + wbcStatsPage.sortOrder +"'";	
		if(grid.indexOf("wbc_team_player")!=-1)dataPath+="&team_id=" + wbcStatsPage.teamID;		
		return dataPath;
	},	
		
	setDefaultSorting: function(col) {		
		if(col*0==0){
			$.each(wbcStatsPage.wbcStatsGrid.columns(),function(i,val){
				if(col!=i) {
					if(this.type=="string") {
						this.sortState="desc";
					}else{
						if(wbcStatsPage.gridID.indexOf("hitting")!=-1)this.sortState="asc"
						else this.sortState=wbcStatsPage.getSortOrder(this.title,true);									
					}				
				}				
			});
		}else{			
			$.each(wbcStatsPage.wbcStatsGrid.columns(),function(i,val){			
				if(this.type=="string") {
					this.sortState="desc";
				}else{
					if(wbcStatsPage.gridID.indexOf("hitting")!=-1) {
						this.sortState="asc";
						if(this.title.toLowerCase()==wbcStatsPage.sortStat.toLowerCase())this.sortState="desc";				
					}else{
						this.sortState=wbcStatsPage.getSortOrder(this.title,(this.title.toLowerCase()!=wbcStatsPage.sortStat.toLowerCase()));		
					}		
				}		
			});
		}		
	},
	

	getSortOrder: function(stat,invert) {
		stat=stat.toUpperCase();
		var order="desc";
		if(stat=="ERA" || stat=="WHIP")order="asc";			
		if(!!invert&&order=="desc")order="asc"
		else if(!!invert&&order=="asc")order="desc";
		return order;	
	},
	
	fixColDisplay: function(){
		$(".wbc_team_hitting td[index=0], .wbc_team_hitting th[index=0], .wbc_team_hitting td[index=2], .wbc_team_hitting th[index=2]").hide();			
		$(".wbc_team_pitching td[index=0], .wbc_team_pitching th[index=0]").hide();			
		$(".wbc_team_player_hitting td[index=1], .wbc_team_player_hitting th[index=1]").hide();		 
		$(".wbc_team_player_pitching td[index=1], .wbc_team_player_pitching th[index=1]").hide();	
	},
	
	
	getColumns: function(){
		var grid=wbcStatsPage.gridID;					
		if(grid=="wbc_leader_hitting" || grid=="wbc_team_hitting" || grid=="wbc_team_player_hitting") {
			return [
				{dataField: "name_display_first_last", title: "Player"},
				{dataField: "team_abbrev", title: "Team"},
				{dataField: "pos", title: "Pos"},
				{dataField: "g", title: "G", type: bam.datagrid.DataType.Number},				
				{dataField: "ab", title: "AB", type: bam.datagrid.DataType.Number},	
				{dataField: "r", title: "R", type: bam.datagrid.DataType.Number},	
				{dataField: "h", title: "H", type: bam.datagrid.DataType.Number},	
				{dataField: "d", title: "D", type: bam.datagrid.DataType.Number},	
				{dataField: "t", title: "T", type: bam.datagrid.DataType.Number},	
				{dataField: "hr", title: "HR", type: bam.datagrid.DataType.Number},	
				{dataField: "rbi", title: "RBI", type: bam.datagrid.DataType.Number},	
				{dataField: "tb", title: "TB", type: bam.datagrid.DataType.Number},	
				{dataField: "bb", title: "BB", type: bam.datagrid.DataType.Number},	
				{dataField: "so", title: "SO", type: bam.datagrid.DataType.Number},	
				{dataField: "sb", title: "SB", type: bam.datagrid.DataType.Number},	
				{dataField: "cs", title: "CS", type: bam.datagrid.DataType.Number},	
				{dataField: "obp", title: "OBP", type: bam.datagrid.DataType.Number},
				{dataField: "slg", title: "SLG", type: bam.datagrid.DataType.Number},
				{dataField: "avg", title: "AVG", type: bam.datagrid.DataType.Number},
				{dataField: "ops", title: "OPS", type: bam.datagrid.DataType.Number}
			]
		} else if(grid=="wbc_leader_pitching" || grid=="wbc_team_pitching" || grid=="wbc_team_player_pitching") {
			return [
				{dataField: "name_display_first_last", title: "Player"},
				{dataField: "team_abbrev", title: "Team"},
				{dataField: "w", title: "W", type: bam.datagrid.DataType.Number},	
				{dataField: "l", title: "L", type: bam.datagrid.DataType.Number},	
				{dataField: "era", title: "ERA", type: bam.datagrid.DataType.Number},	
				{dataField: "g", title: "G", type: bam.datagrid.DataType.Number},	
				{dataField: "gs", title: "GS", type: bam.datagrid.DataType.Number},	
				{dataField: "cg", title: "CG", type: bam.datagrid.DataType.Number},	
				{dataField: "sho", title: "SHO", type: bam.datagrid.DataType.Number},	
				{dataField: "sv", title: "SV", type: bam.datagrid.DataType.Number},	
				{dataField: "ip", title: "IP", type: bam.datagrid.DataType.Number},	
				{dataField: "h", title: "H", type: bam.datagrid.DataType.Number},	
				{dataField: "r", title: "R", type: bam.datagrid.DataType.Number},	
				{dataField: "er", title: "ER", type: bam.datagrid.DataType.Number},	
				{dataField: "hr", title: "HR", type: bam.datagrid.DataType.Number},
				{dataField: "hb", title: "HB", type: bam.datagrid.DataType.Number},
				{dataField: "bb", title: "BB", type: bam.datagrid.DataType.Number},
				{dataField: "so", title: "SO", type: bam.datagrid.DataType.Number},
				{dataField: "whip", title: "WHIP", type: bam.datagrid.DataType.Number},
				{dataField: "hld", title: "HLD", type: bam.datagrid.DataType.Number},
				{dataField: "gf", title: "GF", type: bam.datagrid.DataType.Number}
			] 
		} 
	},
	
	writeGrid: function(grid,stat,order,customSort) {		
		wbcStatsPage.isStillWriting=true;
		wbcStatsPage.gridID=grid;
		wbcStatsPage.sortStat=(!!stat)?stat.toLowerCase():"avg";		
		wbcStatsPage.sortOrder=(wbcStatsPage.gridID.indexOf("hitting")!=-1)?"desc":wbcStatsPage.getSortOrder(wbcStatsPage.sortStat,false);
		$("body").addClass("waitCursor");
		bam.loadSync("/shared/scripts/bam/packed/bam.datagrid.js");		
		wbcStatsPage.wbcStatsGrid = new bam.datagrid.DataGrid({
			showHeader: true,
			tableClass:"wbcStatsTable " + grid,
			dataSource: wbcStatsPage.getDataSource(),
			dataType: "json",		
			RowCount: 50,
			columns: wbcStatsPage.getColumns(),				
			onColumnSort: function(c) {				
				var clickedStat=this.columns(c).title.toLowerCase();							
				if( grid=="wbc_team_hitting"||
					grid=="wbc_team_pitching"||
					grid=="wbc_team_player_hitting"||
					grid=="wbc_team_player_pitching"||					
					clickedStat==wbcStatsPage.sortStat||
					clickedStat=="player"||
					clickedStat=="team"||
					clickedStat=="pos"					
				  ) {
					wbcStatsPage.setDefaultSorting(c);
					try { this.refreshView(); }
					catch(e) { this.render("wbcStats"+wbcStatsPage.gridCount); }
					$("." + grid + " td").removeClass("highlightedCell").filter("[index="+c+"]").addClass("highlightedCell");		
					$("tr.highlightedCell").removeClass("highlightedCell");
				}else{					
					$("body").addClass("waitCursor");
					wbcStatsPage.wbcStatsGrid.clearData();	
					wbcStatsPage.gridCount=0;
					wbcStatsPage.writeGrid(wbcStatsPage.gridID,clickedStat,wbcStatsPage.getSortOrder(clickedStat),true);		
				}				
				//fixes a weird IE thing
				wbcStatsPage.fixColDisplay();			
			},
			onBeforeCellWrite: function(that) {				
				if(that.value.length==3 && that.type=="string") { 
				return "<a href=\"javascript:void(wbcStatsPage.goStats('" + that.value + "'))\">" + wbcStatsPage.convertTeamAbbrev(that.value) + "</a>";
				}							
			},
			onRowClick: function(that){
				if(this.className!="highlightedCell")$(this).addClass("highlightedCell")
				else $(this).removeClass("highlightedCell");
			}
		});				
		wbcStatsPage.wbcStatsGrid.loadData({
			dataset: grid, 
			async: true,
			callback: function() {	
			
				//set header text
				$(".wbcStatsHeaderLabel:eq("+wbcStatsPage.gridCount+")").remove();			
				wbcStatsPage.gridCount++;				
				var label=(grid=="wbc_leader_hitting")?"WBC Batting Leaders":
						(grid=="wbc_leader_pitching")?"WBC Pitching Leaders":
						(grid=="wbc_team_hitting")?"Team Batting":
						(grid=="wbc_team_pitching")?"Team Pitching":
						(grid=="wbc_team_player_hitting")?"Individual Stats (Batting)":
						(grid=="wbc_team_player_pitching")?"Individual Stats (Pitching)":"";				
				$("<div class='wbcStatsHeaderLabel'>").text(label).insertBefore("#wbcStats"+wbcStatsPage.gridCount);	
				
				//render the grid, hide irrelevant columns			
				wbcStatsPage.wbcStatsGrid.render("wbcStats"+wbcStatsPage.gridCount);
				if(grid=="wbc_team_hitting") {
					// for some reason this is breaking in IE
					//	wbcStatsPage.wbcStatsGrid.hideColumn(0); //hide the name_display_first_last column			
					//	wbcStatsPage.wbcStatsGrid.hideColumn(2); //hide the pos column		
				} else if(grid=="wbc_team_pitching") {
					//wbcStatsPage.wbcStatsGrid.hideColumn(0); //hide the name_display_first_last column
				} else if(grid=="wbc_team_player_hitting" || grid=="wbc_team_player_pitching") {
					//wbcStatsPage.wbcStatsGrid.hideColumn(1); //hide the team column
				} 

				// set qualifier text				
				if(grid=="wbc_leader_hitting"||grid=="wbc_leader_pitching"){				
					if(wbcStatsPage.sortStat=="obp" || wbcStatsPage.sortStat=="slg" || wbcStatsPage.sortStat=="avg" || wbcStatsPage.sortStat=="ops") {
						$("#hittingQualifier").show();
					} else if (wbcStatsPage.sortStat=="era" || wbcStatsPage.sortStat=="whip") {
						$("#pitchingQualifier").show();				
					} else {
						$("#hittingQualifier, #pitchingQualifier").hide();
					}
				} else {
					$("#hittingQualifier, #pitchingQualifier").hide();
				}			
					
				// set some styles		 			
				$(".wbcStatsTable td[index=0], .wbcStatsTable th[index=0], .wbcStatsTable td[index=1], .wbcStatsTable th[index=1]").addClass("firstCell");		
				
				//fixes a weird IE thing
				wbcStatsPage.fixColDisplay();					
				$("#wbcStatsSeason").text(wbcStatsPage.season);
							
				var idx=$("." + grid + " th").index($("." + grid + " th").filter(
					function(){
						return $(this).text().split(/\s/g)[0].toUpperCase() == wbcStatsPage.sortStat.toUpperCase();
					}
				));				
				$("." + grid + " td[index="+idx+"]").addClass("highlightedCell");		
				$("body").removeClass("waitCursor");
				
				// reset tracking vars and set sorting			
				wbcStatsPage.isStillWriting=false;
				wbcStatsPage.numDataRequests=0;					
				wbcStatsPage.setDefaultSorting();	
			}
		});
	}
};


