function unique(n){function t(n,t,i){return i.indexOf(n)===t}return n.filter(t)}function getStat(n){return statsObj[p.pos].filter(function(t){return t.id==n})[0]}function buildButtons(){var n=qs.varObj.split?$('.split-in[data-val="'+qs.varObj.split+'"]'):$(".split-in:first");splitIn(n);n=qs.varObj.time?$('.time-in[data-val="'+qs.varObj.time+'"]'):$(".time-in:first");timeIn(n);p.rolling&&(p.time=="daily"||p.time=="game")&&$(".tf-row").css("display","table")}function buttonActive(n){getStat(n.attr("data-value")).rolling&&p.maxYear>=2002?($('.time-in[data-val="daily"], .time-in[data-val="game"]').off(),$('.time-in[data-val="daily"], .time-in[data-val="game"]').removeClass("inactive").click(timeInter)):($('.time-in[data-val="daily"], .time-in[data-val="game"]').addClass("inactive").off(),timeButton=$('.time-in[data-val="season"]'),timeIn(timeButton),$(".tf-row").css("display","none"));statsArrayPos[n.attr("data-index")].split&&p.time!="daily"&&p.time!="game"&&p.maxYear>=2002?$('.split-in[data-val="lr"], .split-in[data-val="ha"]').removeClass("inactive").click(splitInter):($('.split-in[data-val="lr"], .split-in[data-val="ha"]').addClass("inactive").off(),splitButton=$('.split-in[data-val="base"]'),splitIn(splitButton));p.maxYear>=2002||$('.stat-block[data-value="ha"').addClass("inactive").off()}function buttonActiveType(n){[0,1,2,3,4,5,6].includes(parseInt(n))&&p.maxYear>=2002?($('.time-in[data-val="daily"], .time-in[data-val="game"]').off(),$('.time-in[data-val="daily"], .time-in[data-val="game"]').removeClass("inactive").click(timeInter)):($('.time-in[data-val="daily"], .time-in[data-val="game"]').addClass("inactive").off(),timeButton=$('.time-in[data-val="season"]'),$(".tf-row").css("display","none"));p.time!="daily"&&p.time!="game"&&p.maxYear>=2002&&p.statArray.length==1&&getStat(p.statArray[0]).split?$('.split-in[data-val="lr"], .split-in[data-val="ha"]').removeClass("inactive").click(splitInter):($('.split-in[data-val="lr"], .split-in[data-val="ha"]').addClass("inactive").off(),splitButton=$('.split-in[data-val="base"]'),splitIn(splitButton));p.maxYear>=2002||$('.stat-block[data-value="ha"').addClass("inactive").off()}function titleUpdate(){function n(n,t,r,u){for(i=0;i<n.length;i++)if(p.statArray.includes(n[i])){p.statLabel=t;p.subTitle=r;p.yLabel=[u];break}}var t="",u,f,e,o,l;if(dataPG.playerName.length>0&&(t=dataPG.playerName.substr(-1)=="s"?"' ":"'s "),p.yLabel=[],p.statArray.length>1&&p.split=="base"&&p.yAxisData.length==1){p.subTitle=getStat(p.statArray[0]).title2;var s=statsObj[p.pos].map(function(n){if(n.cat.slice(0,1)==4)return n.id}),h=statsObj[p.pos].map(function(n){if(n.cat.slice(0,1)==3)return n.id}),r=statsObj[p.pos].map(function(n){if(n.cat.slice(0,1)==1||n.cat.slice(0,1)==2)return n.id}),c=statsObj[p.pos].map(function(n){if(n.cat.slice(0,1)==5)return n.id});p.time=="game"||p.time=="daily"?(p.pos=="pitcher"?n(r,"Average","Pitching stats"):n(r,"Average","Batting stats",""),n(h,"Average","Batted ball type percentages",""),n(s,"Average","Plate discipline",""),n(c,"Average","Pitch type stats"),p.dStatArray.length>0&&(p.statLabel=titleLabel,p.subTitle="Pitch Velocity Ranges",p.yLabel=["MPH"])):(p.pos=="pitcher"?n(r,"Stats","Pitching stats",""):n(r,"Stats","Batting stats",""),n(h,"Batted Ball Stats","Batted ball type percentages",""),n(s,"Plate Discipline","Plate discipline",""),n(c,"Pitch Type Stats","Pitch type stats",""),p.dStatArray.length>0&&(p.statLabel=titleLabel,p.subTitle="Pitch Velocity Ranges",p.yLabel=["MPH"]))}else p.statArray.length==1&&p.yAxisData.length==1?((p.time=="game"||p.time=="daily")&&(p.statLabel="Average"),p.statLabel=getStat(p.statArray[0]).label,p.yLabel=[getStat(p.statArray[0]).label],p.subTitle=getStat(p.statArray[0]).title2):p.yAxisData.length>1?(p.subTitle="",(p.time=="game"||p.time=="daily")&&(p.statLabel="Average"),p.yAxisScale.forEach(function(n,t){var i="";p.yLabel[t]=[];p.yAxisData[t].forEach(function(n){i=getStat(n.statId).label;p.yLabel[t].includes(i)||p.yLabel[t].push(i)});p.yLabel[t]=p.yLabel[t].join(" / ");p.dStatArray.length>0&&p.statType[t]==6&&(p.subTitle="Pitch Velocities",p.yLabel[t]="MPH")}),p.subTitle=p.pos=="pitcher"?"Pitching stats":"Batting stats"):p.dStatArray.length==1?(p.statLabel="",p.subTitle=p.dStatArray[0]+" Velocities",p.yLabel[0]="MPH"):p.dStatArray.length>1&&(p.subTitle="Pitch Velocities",p.yLabel[0]="MPH");u=p.split!="base"?"Splits":"";p.time=="season"&&($("#title-1").text(dataPG.playerName+t+" Season "+p.statLabel+" "+u),$("#title-2").text(p.subTitle+" by MLB Season"));p.time=="age"&&($("#title-1").text(dataPG.playerName+t+" Season "+p.statLabel+" "+u),$("#title-2").text(p.subTitle+" by Age-Season"));p.gt1=$("#gt1-in").val();f=p.gt1<=1||p.dStatArray.length>0&&p.statArray.length==0?"Game Log ":p.gt1>dataRoll.fullStatArray.length&&p.time=="game"?"Cumulative ":p.gt1+"-Game Rolling ";e=p.startYear==p.endYear?p.startYear:p.startYear+"-"+p.endYear;o=p.subTitle.length>0?", ":"";p.time=="game"&&($("#title-1").text(dataPG.playerName+t+f+p.statLabel+""),$("#title-2").text(p.subTitle+o+e));p.time=="daily"&&($("#title-1").text(dataPG.playerName+t+" Daily "+f+p.statLabel+""),$("#title-2").text(p.subTitle+o+e));l=p.pos=="player"?"Batting":"Pitching";document.title=dataPG.playerName+" - Graphs - "+p.statLabel+" - "+l+" | FanGraphs Baseball"}function openSeason(){var n=d3.selectAll("circle").filter(function(n){return n.gameDate==2020});n.style("stroke-width",2).style("stroke",function(){return d3.select(this).attr("fill")}).style("fill","white")}function setParm(){p.timeLabel=timeObj[p.time].label;p.splitArray=splitObj[p.split];p.statArray.length>=1?p.rolling=getStat(p.statArray[0]).rolling:null;p.statArray.includes(58)||p.statArray.includes(59)?$("#refLine-in").attr("checked",""):null;p.refLine=$("#refLine-in").is(":checked")}function timeInter(){var n=$(this);p.time=$(this).attr("data-val");["daily","game"].includes(p.time)?($(".tf-row").css("display","flex"),timeIn(n),dataObj.getRollingData()):(timeIn(n),setParm(),$(".tf-row").css("display","none"),dataObj.getSeasonData())}function buttonSelect(n){$(".stat-block").removeClass("stat-highlight");$(n).addClass("stat-highlight");p.legendArr=p.statArray.map(function(n,t){return t+1});qs.updateURL({legend:p.legendArr});p.statType=[parseInt(n.attr("data-type"))];p.statObj=statsArrayPos[n.attr("data-index")];p.rolling=statsArrayPos[n.attr("data-index")].rolling;p.yAxisMin=statsArrayPos[n.attr("data-index")].yAxisMin;qs.updateURL({statArr:p.statArray});setParm();$("#time-in").children().remove();buttonActive(n);["daily","game"].includes(p.time)?dataObj.getRollingData():dataObj.getSeasonData()}function getQS(){p.legendArr=[].concat(qs.varObj.legend).map(Number);p.legendArr=qs.varObj.legend?p.legendArr:p.splitArray.map(function(n,t){return t+1});qs.varObj.ymin&&qs.varObj.ymax?(p.yAxisAuto=!1,d3.select(".yaxis-auto").classed("stat-highlight",!1),$("#y0-in").val(qs.varObj.ymin),$("#y1-in").val(qs.varObj.ymax)):p.yAxisAuto=!0;qs.varObj.statArr?(p.statArray=[].concat(qs.varObj.statArr).map(Number),p.statType=setStatType()):p.statType=[0]}function setStatType(){var n=[],t=0;return p.statArray.forEach(function(i){t=getStat(i).type;n.includes(t)||n.push(parseInt(t))}),p.dStatArray.length>0&&n.push(6),n=unique(n),n.slice(0,2)}function filterAvg(n){dataNew=n.filter(function(n){return!["lg","age"].includes(n.statSplit)})}function timeIn(n){$(".time-in").removeClass("stat-highlight");n.addClass("stat-highlight");p.time=n.attr("data-val");p.timeLabel=timeObj[p.time].label;qs.updateURL({time:p.time});(p.time=="season"||p.time=="age")&&(d3.select(".yaxis-auto").classed("stat-highlight",!0),p.yAxisAuto=!0);p.rolling&&p.time!="daily"&&p.time!="game"&&p.maxYear>=2002?$('.split-in[data-val="lr"], .split-in[data-val="ha"]').removeClass("inactive").click(splitInter):($('.split-in[data-val="lr"], .split-in[data-val="ha"]').addClass("inactive").off(),splitButton=$('.split-in[data-val="base"]'));p.maxYear>=2002||$('.stat-block[data-value="glf"').addClass("inactive").off();p.rolling&&(p.time=="daily"||p.time=="game")&&$(".tf-row").css("display","table")}function splitIn(n){$(".split-in").removeClass("stat-highlight");n.addClass("stat-highlight");p.split=n.attr("data-val");qs.updateURL({split:p.split});p.splitArray=splitObj[p.split]}function splitInter(){var n=$(this);splitIn(n);setParm();dataObj.getSeasonData()}function dropMenu(){function t(){r();$(".menu").menu();i()}function i(){function t(){var n=this;setTimeout(function(){var t=$(n).children(".menu");t.hide();$(n).removeClass("menu-button-active")},100)}$(".menu-button").mouseenter(function(t){if(n(),t.target.className.match(/menu-stat/g))return!1;var i=$(this).children(".menu");i.show();$(this).addClass("menu-button-active");$(".ui-menu-item").children(".button-source").removeClass("button-active");$(".ui-menu-item").each(function(){var n=$(this);p.statArray.includes(parseInt(n.attr("data-stat")))?$(this).children(".button-source").addClass("button-active"):null;p.dStatArray.includes(n.attr("data-stat").slice(2))?$(this).children(".button-source").addClass("button-active"):null})});$(".menu-button").mouseleave(t);$(".ui-menu-item").click(function(){if(!$(this).attr("class").match(/deactive/g)){var t=$(this).attr("data-stat"),i=getStat(t);if($(this).children(".button-source").attr("class").match(/button-active/g))f(t),p.statType=setStatType(),$(this).children(".button-source").toggleClass("button-active"),["daily","game"].includes(p.time)?dataObj.getRollingData():dataObj.getSeasonData();else{if(d3.select(".yaxis-auto").classed("stat-highlight",!0),$(this).children(".button-source").toggleClass("button-active"),u(t),setParm(),["daily","game"].includes(p.time)){buttonActiveType(p.statType);$(".stat-block").removeClass("stat-highlight");qs.updateURL({statArr:p.statArray,dStatArray:p.dStatArray});dataObj.getRollingData();n();return}dataObj.getSeasonData()}buttonActiveType(p.statType);$(".stat-block").removeClass("stat-highlight");qs.updateURL({statArr:p.statArray,dStatArray:p.dStatArray})}n()});$(".reset").click(function(){$(".stat-block").removeClass("stat-highlight");p.statArray=[];buttonActiveType(p.statType);o();chartObj.blankChart()})}function r(){statsObj[p.pos].sort(function(n,t){return n.cat-t.cat}).forEach(function(n){$("#menu-"+n.cat.slice(0,1)).append('<li data-stat="'+n.id+'" class="menu-stat"><div class="button-source">+<\/div>'+n.label+"<\/li>")});$("#menu-d1").append('<li data-stat="d-0" style="padding-left: 5px; text-align: center;">Pitch Graphs are only available for Daily/Game Mode.<\/li>');p.pitchTypes.forEach(function(n){$("#menu-d1").append('<li data-stat="d-'+n+'" class="menu-stat d"><div class="button-source">+<\/div>v'+n+"<\/li>")})}function u(n){n.slice(0,2)=="d-"?(p.dStatArray.push(n.slice(2)),$('.time-in[data-val="season"], .time-in[data-val="age"]').addClass("inactive").off()):p.statArray.push(parseInt(n));p.legendArr=p.statArray.concat(p.dStatArray).map(function(n,t){return t+1});qs.updateURL({legend:p.legendArr});p.statType=setStatType()}function f(n){p.statArray=p.statArray.filter(function(t){return t!=n});p.dStatArray=p.dStatArray.filter(function(t){return t!=n.slice(2)});p.dStatArray.length==0?$(".time-in.inactive").click(timeInter).removeClass("inactive"):null;p.yLabel=[]}function n(){var n=p.statType;$(".menu-stat").removeClass("deactive");$(".menu-stat:not(.d)").addClass(function(){return p.statArray.length+p.dStatArray.length>=5&&!$(this).children(".button-source").attr("class").match(/button-active/g)||!e(this)?"deactive":!n.includes(getStat($(this).attr("data-stat")).type)&&n[0]!=0&&n.length==2?"deactive":getStat($(this).attr("data-stat")).graphYear>p.maxYear?"deactive":void 0});$(".menu-stat.d").addClass(function(){if((p.time=="season"||p.time=="age"||!p.statType.includes(6)&&p.statType.length==2||p.statArray.length+p.dStatArray.length>=5)&&!$(this).children(".button-source").attr("class").match(/button-active/g))return"deactive"})}function e(n){return p.statArray.length>=1&&p.split!="base"&&!$(n).children(".button-source").attr("class").match(/button-active/g)?!1:!0}function o(){p.statArray=[];p.dStatArray=[];p.statType=[0];p.yLabel=[];$(".menu-stat").removeClass("deactive");$(".menu").hide();$(".button-source").removeClass("button-active");$(".time-in.inactive").click(timeInter).removeClass("inactive");qs.updateURL({statArr:[]});setVBVar()}t()}function buildChart(){function et(){g=f+n.top+n.bottom}function y(){d3.selectAll("svg").remove();d3.selectAll(".viz-legend-item").remove();d3.select("#d3-container").append("svg").attr("class","chart").attr("fill","#909090");p.dStatArray.length>0?$(".div-button.export-pitch-data").css("display","inline-block"):$(".div-button.export-pitch-data").css("display","none")}function ot(){y();$("#title-1").text("FanGraphs Player Graphs");$("#title-2").text("");d3.select(".chart").attr("width",t+n.left+n.right).attr("height",f+n.top+n.bottom).append("g").attr("class","plot").attr("transform","translate("+n.left+","+n.top+")");d3.select(".chart").append("text").attr("x",t/2+n.left).attr("y",f/4+n.top).attr("text-anchor","middle").style("font-size",20).style("fill","black").html("No player stats are selected.");d3.select(".chart").append("text").attr("x",t/2+n.left).attr("y",f/4+n.top+35).attr("text-anchor","middle").style("font-size",20).style("fill","black").text("Please select a tab or add stats from the dropdown menus.")}function h(n,t){return["lg","age"].includes(n.statSplit)?"#808080":p.split!="base"?["#808080"].concat(colorArr.slice(0,2))[t]:colorArr[t]}function nt(){var u=[],i={base:"vs. All",h:"Home",a:"Away",l:"vs. Left",r:"vs. Right",lgAvg:"MLB Avg"},e,r;if(statsObj[p.pos].forEach(function(n){i[n.id]=n.label}),u=p.statArray.map(function(n){return i[n]}),u=u.concat(p.dStatArray.map(function(n){return"v"+n})),$("#viz-legend").children().remove(),e=d3.select("#viz-legend").style("padding-left",p.margin.left+20+"px").style("padding-bottom",10).style("width",t+"px").selectAll("new"),p.statArray.length+p.dStatArray.length>1){e.data(u).enter().append("div").attr("class","viz-legend-item").attr("data-index",function(n,t){return t+1}).style("cursor","pointer").style("color",function(n,t){return p.legendArr.includes(t+1)?"#000000":"#C0C0C0"}).text(function(n){return p.split=="base"&&p.statArray.length>1?n||"NA":n||"vs. All"}).append("div").attr("class","viz-legend-color").style("background-color",function(n,t){return p.legendArr.includes(t+1)?colorArr[t]:"white"}).style("border",function(n,t){return p.legendArr.includes(t+1)?"3px solid "+colorArr[t]:"3px dashed "+colorArr[t]}).style("width","12px").style("height","12px");d3.selectAll(".viz-legend-item").on("click",function(){var t=d3.select(this),n=parseInt(t.attr("data-index"));p.legendArr.includes(n)?p.legendArr=p.legendArr.filter(function(t){return t!=n}):p.legendArr.push(n);qs.updateURL({legend:p.legendArr});chartObj.go()})}else["daily","game"].includes(p.time)||e.data(function(){return p.split=="base"?[0,0]:p.splitArray}).enter().append("div").attr("class","viz-legend-item").text(function(n,t){return p.split=="base"?getStat(p.statArray[0]).avg||p.split!="base"?["MLB Avg",i[p.statArray[0]]][t]:i[p.statArray[0]]:i[n]}).append("div").attr("class","viz-legend-color").style("background-color",function(n,t){return getStat(p.statArray[0]).avg||p.split!="base"?["grey","#336699","#CE2431"][t]:"#336699"});r=$("#viz-legend").innerHeight();n.top=r>0?p.margin.top+r-43:p.margin.top-25;f=r>0?425+r-18:425}function tt(){function y(){var i=[];return p.yAxisData=[],n.right=p.statType.length>1?105:55,t=a-n.left-n.right,yAxisParm=[{posx:0,orient:"left"},{posx:t,orient:"right"}],p.statType.forEach(function(n,t){var i,r;p.yAxisData[t]=dataNew.filter(function(i){return getStat(i.statId).type==n?(p.tickFormat[t]=getStat(i.statId).format,!0):!1});n==6&&p.dStatData.length>0&&(i=p.dStatData.map(function(n){return n.filter(function(n){return n.max!=-1}).length>0?n.filter(function(n){return n.max!=-1}).reduce(function(n,t,i){return i>1?Math.max(n||0,t.max):Math.max(n.max||0,t.max)},n.filter(function(n){return n.max!=-1})[0].max):null}),i=i.concat(p.dStatData.map(function(n){return n.filter(function(n){return n.max!=-1}).length>0?n.filter(function(n){return n.max!=-1}).reduce(function(n,t,i){return i>1?Math.min(n||1e3,t.min):Math.min(n.min||1e3,t.min)},n.filter(function(n){return n.max!=-1})[0].min):null})),r=p.dStatData.map(function(n){return n.reduce(function(n,t){return Math.max(n||0,t.gameNumber)})}),p.dStatRange=i,r.push(0),p.dXRange=r,p.tickFormat[t]=getStat(279).format,p.yAxisData[t].length==0&&(p.yAxisData[t]=[]))}),p.yAxisData.forEach(function(n,t){i[t]=[];n.forEach(function(n){i[t]=i[t].concat(n.statArray.filter(function(n){return n.statValue!=-99}).map(function(n){return n.statValue}))})}),i}function d(n,t){r=d3.scale.linear().domain(n).range([0,t])}function g(n,t){r=d3.time.scale().domain(n).range([0,t])}function nt(){p.yAxisRange=[];p.yAxisAuto?u.forEach(function(n,t){var r,i;p.yAxisRange[t]=p.statType[t]==6?d3.extent(n.concat(p.dStatRange)):d3.extent(n);r="";p.yAxisData[t].forEach(function(n){n.statId==61?r=61:null;n.statId==58?r=58:null;n.statId==212?r=212:null});i=p.yAxisRange[t];qs.updateURL({ymin:"",ymax:""});i[0]=i[0]-Math.abs((i[1]-i[0])*.1);i[1]=i[1]+Math.abs((i[1]-i[0])*.1);i[0]=r==61?Math.min(i[0],100):i[0];i[1]=r==61?Math.max(i[1],100):i[1];i[0]=r==58||r==212||r==59?Math.min(i[0],-.5):i[0];i[1]=r==58||r==212||r==59?Math.max(i[1],.5):i[1];p.yAxisMin&&(i[0]=Math.min(p.yAxisMin[0],i[0]),i[1]=Math.max(p.yAxisMin[1],i[1]));t==1?($("#y0-in1").val(i[0].toFixed(4)),$("#y1-in1").val(i[1].toFixed(4))):($("#y0-in").val(i[0].toFixed(4)),$("#y1-in").val(i[1].toFixed(4)));p.yAxisRange[t]=i}):u.forEach(function(n,t){var i,r,u;i=p.statType[t]==6?d3.extent(n.concat(p.dStatRange)):d3.extent(n);t==1?(r=$("#y0-in1").val(),u=$("#y1-in1").val()):(r=$("#y0-in").val(),u=$("#y1-in").val());isNaN(r)||isNaN(u)?(d3.select(".yaxis-auto").classed("stat-highlight",!0),p.yAxisAuto=!0,nt()):(r=parseFloat(r),u=parseFloat(u),u>r?(i[0]=Math.min(r,i[0]),i[1]=Math.max(u,i[1])):(i[0]=Math.min(u,i[0]),i[1]=Math.max(r,i[1])),t==0?(qs.updateURL({ymin:i[0],ymax:i[1]}),$("#y1-in").val(i[1].toFixed(4)),$("#y0-in").val(i[0].toFixed(4))):(qs.updateURL({ymin1:i[0],ymax1:i[1]}),$("#y1-in1").val(i[1].toFixed(4)),$("#y0-in1").val(i[0].toFixed(4))));p.yAxisRange[t]=i})}var u=[],i=[],h="",w,b;if(c=[],p.dStatRange=[],o=d3.svg.axis(),p.time==="daily")k=[],w=dataRoll.returnDaily(),dataNew=[],w.forEach(function(n){dataNew=dataNew.concat(n);n.forEach(function(n){i=n.statArray.map(function(n){return new Date(n.gameDate.slice(0,4),n.gameDate.slice(5,7)-1,n.gameDate.slice(8,10))})})}),u=y(),w.forEach(function(n){xRange=d3.extent(i);h=d3.time.format("%b");g([new Date(n[0].info.season,2,15),new Date(n[0].info.season,9,15)],t/w.length-s);c.push(r);o=d3.svg.axis().scale(r).tickPadding(8).orient("bottom").tickFormat(h).innerTickSize(6).outerTickSize(8).ticks(4);k.push(o)});else if(p.time==="game")dataNew=dataRoll.d.filter(function(n){return p.statArray.includes(n.statId)}),dataNew.forEach(function(){i=i.concat(dataRoll.fullStatArray.map(function(n){return(n.seasonGameNum!=-99)*n.seasonGameNum}))}),u=y(),p.dStatArray.length>0?(xRange=d3.extent(i.concat(p.dXRange)),o.ticks(7)):(xRange=d3.extent(i),o.ticks(Math.min(7,i.length))),xRange=[xRange[0],xRange[1]+1],d(xRange,t),h=d3.format(".0f");else if(p.time==="season"){b=0;dataNew.forEach(function(n){b=Math.min(Math.max(b,n.statArray.length),10);i=i.concat(n.statArray.filter(function(n){return n.statValue!=-99}).map(function(n){return new Date(n.gameDate,0)}))});h=d3.time.format("%Y");u=y();o.ticks(b);xRange=d3.extent(i);var it=xRange.slice(0),rt=xRange.slice(0),tt=7776e6;xRange=[it[0]-tt,+rt[1]+tt];g(xRange,t)}else p.time==="age"&&(dataNew.forEach(function(n){i=i.concat(n.statArray.filter(function(n){return n.statValue!=-99}).map(function(n){return n.seasonAge}))}),h=d3.format(".0f"),u=y(),xRange=d3.extent(i),o.ticks(Math.min(10,xRange[1]-xRange[0]+1)),xRange=[+xRange[0]-.25,+xRange[1]+.25],d(xRange,t));o.scale(r).tickPadding(6).orient("bottom").innerTickSize(6).outerTickSize(0);nt();p.yAxisScale=[];p.yAxisRange.forEach(function(n,t){p.yAxisScale[t]=d3.scale.linear().domain(n).range([f,0])});p.yAxis=[];p.yAxisScale.forEach(function(n,t){var i;try{i=getStat(p.yAxisData[t][0].statId).format(0)==d3.format("0f")(0)?Math.min(6,p.yAxisRange[t][1]-p.yAxisRange[t][0]):6}catch(r){i=5}p.yAxis[t]=d3.svg.axis().scale(n).innerTickSize(4).outerTickSize(0).tickPadding(9).tickFormat(p.tickFormat[t]).orient(yAxisParm[t].orient).ticks(i)});v=r;l=p.yAxisScale[0];e=l;ft=p.yAxis[0]}function it(){function b(){var i=u.append("g").attr("class","axis x").attr("transform","translate(0,"+f+")");i.append("rect").attr("width",t).attr("height","300px").style("fill","white");i.call(o);u.append("text").attr("class","axis x title").attr("text-anchor","middle").attr("x",(t-n.left-n.right)/2+n.left).attr("y",f+60).text(p.timeLabel)}var d,c,h,w,i,nt,l,e;if(yAxisParm[0].labely=-65,yAxisParm[1].labely=t+80,u=d3.select(".chart").attr("width",a).attr("height",g).append("g").attr("class","plot").attr("transform","translate("+n.left+","+n.top+")"),p.yAxis.forEach(function(n,t){u.append("g").attr("class","axis y").attr("transform","translate("+yAxisParm[t].posx+",0)").call(n);u.append("text").attr("class","axis y title").attr("text-anchor","middle").attr("x",-f/2).attr("y",yAxisParm[t].labely).attr("transform","rotate(-90)").text(p.yLabel[t])}),p.time==="daily"){var c=dataRoll.returnDaily(),v=c.length,tt=t/v,e=u.selectAll("new").data(c).enter().append("g").attr("class",function(n){return"facet "+n[0].info.season}).attr("transform",function(n,i){return"translate("+t/v*i+",0)"}).attr("data-season",function(n){return n[0].info.season});e.append("rect").attr("x",10).attr("class","shade").attr("width",t/v-20).attr("height",f).attr("fill",function(n,t){return t%2==0?"white":"#F0F0F0"});d=e.append("g").attr("class","axis x").attr("transform","translate("+s/2+","+(f+0)+")");d3.selectAll(".axis.x").each(function(n,t){d3.select(this).call(k[t])});e.append("text").attr("class","axis x title").attr("text-anchor","middle").attr("x",t/v/2).attr("y",f+55).text(function(n){return n[0].info.season})}else if(p.time=="game"){c=dataRoll.d[0];h=[];function y(n){return parseInt(n.slice(0,4))}h.push(0);p.statArray.length>0?(w=y(c.statArray[0].gameDate),i=c.statArray):(w=y(p.dStatData[0][0].gameDate),i=p.dStatData[0]);nt=0;i.forEach(function(n,t){w==y(n.gameDate)||(h.push(t),w=y(n.gameDate))});facetObjArr=[];l=h;l.slice(0,-1).forEach(function(n,t){facetObjArr.push({start:i[l[t]].seasonGameNum||i[l[t]].gameNumber-.5,end:i[l[t+1]].seasonGameNum||i[l[t+1]].gameNumber-.5,season:i[h[t]].gameDate.slice(0,4)})});facetObjArr.push({start:i[h.slice(0).pop()].seasonGameNum||i[h.slice(0).pop()].gameNumber-.5,end:i.slice(-1)[0].seasonGameNum||i.slice(-1)[0].gameNumber,season:i.slice(0).pop().gameDate.slice(0,4)});p.dGameStart=(facetObjArr.filter(function(n){return n.season<2007}).slice(-1)[0]||{end:1}).end-1||0;e=u.selectAll("new").data(facetObjArr).enter();e.append("rect").attr("x",function(n){return r(n.start)}).attr("width",function(n){return r(n.end)-r(n.start)}).attr("height",f).attr("fill",function(n,t){return t%2==0?"none":"#F0F0F0"});e.append("text").attr("x",function(n){return r(n.start)+(r(n.end)-r(n.start))/2}).attr("y",25).attr("text-anchor","middle").style("font-size","14px").attr("fill","#606060").text(function(n){if(r(n.end)-r(n.start)>35)return n.season});b()}else b()}function w(n){var t=d3.select(n).datum();$("#viz-legend").css("z-index",0);var i=d3.select(n).attr("cx"),r=d3.select(n).attr("cy"),f=p.pos=="pitcher"?["IP","TBF"]:["PA","AB"],e=p.time=="season"?t.gameDate:p.time=="age"?"Age "+t.seasonAge:"",o=(t.statSplit=="lg"||t.statSplit=="age")?"MLB Average":t.pt1+" "+f[0]+" | "+t.pt2+" "+f[1],s=t.statTip+":  "+getStat(t.statId).format(t.statValue);tool_tip=u.append("g").attr("class","tool-tip");tool_tip.append("g").attr("transform","translate("+i+","+(r-18)+")").append("path").attr("class","tool-tip-tri").attr("d",d3.svg.symbol().type("triangle-down")).attr("fill","black").attr("fill-opacity",.85).attr("stroke","black");toolTipRect=tool_tip.append("rect").attr("fill","black").attr("fill-opacity",.85).attr("stroke","black").attr("x",i-62).attr("y",r-75).attr("width",125).attr("height",55).attr("rx","1px");tool_tip.append("text").html(e+"<tspan x="+i+' dy="1.4em">'+o+"<\/tspan><tspan x="+i+' dy="1.4em">'+s+"<\/tspan>").attr("x",i).attr("y",r-60).attr("text-anchor","middle").attr("class","tool-tip-text").attr("opacity",1).attr("fill","white")}function b(){d3.selectAll(".tool-tip").remove();$("#viz-legend").css("z-index",10)}function rt(){function n(){u.append("rect").attr("x",0).attr("width",t+2).attr("y",e(0)-2).attr("height",10).attr("stroke-width",10).attr("stroke-opacity",0).attr("fill-opacity",0);u.append("line").attr("x1",0).attr("x2",t).attr("y1",e(0)).attr("y2",e(0)).attr("stroke","black").attr("stroke-dasharray","2 2");d3.selectAll("rect").on("mouseenter",function(){var n=d3.select(this).append("circle").attr("cx",t/2).attr("cy",e(0)).attr("data-tooltip1",function(){return"Replacement Level"}).attr("data-tooltip2",function(){return"0 WAR"});w(n[0][0])}).on("mouseleave",function(){b()})}function f(){u.append("rect").attr("x",0).attr("width",t+2).attr("y",e(100)-2).attr("height",10).attr("stroke-width",10).attr("stroke-opacity",0).attr("fill-opacity",0);u.append("line").attr("x1",0).attr("x2",t).attr("y1",e(100)).attr("y2",e(100)).attr("stroke","black").attr("stroke-dasharray","2 2");d3.selectAll("rect").on("mouseenter",function(){var n=d3.select(this).append("circle").attr("cx",t/2).attr("cy",e(100)).attr("data-tooltip1",function(){return"League Average"}).attr("data-tooltip2",function(){return"100 wRC+"});w(n[0][0])}).on("mouseleave",function(){b()})}p.time=="season"||p.time=="age"?(p.statArray[0]=="58"||p.statArray[0]=="212"||p.statArray[0]=="59"?n():null,p.statArray[0]=="61"?f():null,p.yAxisData.forEach(function(n,t){var o=p.yAxisScale[t],f,e;p.time=="season"?(f=d3.svg.line().x(function(n){return r(new Date(n.gameDate,0))}).y(function(n){return o(n.statValue)}).interpolate("linear"),e=function(n){return r(new Date(n.gameDate,0))}):(f=d3.svg.line().x(function(n){return r(n.seasonAge)}).y(function(n){return o(n.statValue)}).interpolate("linear"),e=function(n){return r(n.seasonAge)});n.sort(function(n,t){return t.statSplit!="base"?10:0});n.forEach(function(n,t){var l=p.statArray.indexOf(n.statId),c,r,s,a;if(t=dataOrg.indexOf(n),p.legendArr.includes(l+1)){for(n.statArray=n.statArray.filter(function(n){return n.statValue!=-99}),n.statArray.forEach(function(t){t.statTip=n.statTip;t.statId=n.statId;t.statSplit=n.statSplit}),c=0,r=[],i=0;i<n.statArray.length-1;i++)n.statArray[i].gameDate!=n.statArray[i+1].gameDate-1&&(s=n.statArray.slice(c,i+1),r.push(s),c=i+1);for(s=n.statArray.slice(c,i+2),r.push(s),r.forEach(function(i){u.append("path").attr("d",f(i)).attr("stroke",h(n,t)).attr("stroke-width",p.mark.stroke.player).attr("class","line player")}),i=0;i<r.length-1;i++)u.append("path").attr("d",f(r[i].slice(-1).concat(r[i+1].slice(0,1)))).attr("stroke",h(n,t)).attr("stroke-width",p.mark.stroke.lgAvg).attr("stroke-dasharray","2 2").attr("class","line player");a=u.selectAll("new").data(n.statArray).enter().append("circle").attr("cx",e).attr("cy",function(n){return o(n.statValue)}).attr("r","4px").attr("class","tool-tip-line").attr("fill",h(n,t)).attr("fill-opacity","1").attr("stroke","black")}})})):p.time==="daily"?d3.selectAll(".facet").each(function(n,t){var i=d3.select(this);n.forEach(function(r){var e=p.statArray.indexOf(r.statId),u,f,o,h,l;if(p.legendArr.includes(e+1)){u=p.yAxisScale[p.statType.indexOf(getStat(r.statId).type)];p.refLine&&getStat(r.statId).avg&&(f=dataRef.filter(function(n){return n.statId==r.statId&&n.statSplit=="base"}),f=f[0].statArray.filter(function(n){return n.gameDate==r.season}),o=f[0].statValue,h=c[t],i.append("line").attr("x1",h(new Date(r.info.season,2,15))+s/2).attr("x2",h(new Date(r.info.season,9,15))+s/2).attr("y1",u(o)).attr("y2",u(o)).attr("stroke",n.length>1?colorArr[e]:"#000000").attr("stroke-dasharray","2 2"));var y=d3.svg.line().x(function(n){var i=c[t];return i(new Date(n.gameDate.slice(0,4),n.gameDate.slice(5,7)-1,n.gameDate.slice(8,10)))+s/2}).y(function(n){return u(n.statValue)}).interpolate("linear"),a=0,v=[];for(z=0;z<r.statArray.length-1;z++)(r.statArray[z].statValue==-99||z==r.statArray.length-2)&&(z=z==r.statArray.length-2?z+2:z,l=r.statArray.slice(a,z),l.length>0?v.push(l):null,a=z+1);v.forEach(function(n){i.append("path").attr("d",function(){var t=r.statArray;return y(n)}).attr("stroke",colorArr[e]).attr("class","line rolling")})}})}):p.time==="game"&&p.yAxisData.forEach(function(n,f){function s(n,i){u.append("line").attr("x1",0).attr("x2",t).attr("y1",e(n)).attr("y2",e(n)).attr("stroke",i).attr("stroke-width",2).attr("stroke-dasharray","2 2")}function h(n,t){var r,e,s;for(n.color=t,r=0,e=[],i=0;i<=n.statArray.length-1;i++)(n.statArray[i].statValue==-99||i==n.statArray.length-1)&&(i=i==n.statArray.length-1?i+1:i,s=n.statArray.slice(r,i),s.length>0?e.push(s):null,r=i+1);e.forEach(function(i){u.append("path").datum(n).attr("d",o(i)).attr("stroke",t).attr("class","line rolling");u.append("path").datum(n).attr("d",o(i)).attr("stroke","rgba(0,0,0,0)").attr("fill","none").attr("class","line tooltip").attr("data-series",f).style("stroke-width","20px")})}var e=p.yAxisScale[f],o=d3.svg.line().x(function(n){return r(n.seasonGameNum)}).y(function(n){return e(n.statValue)}).interpolate("linear");n.forEach(function(n){var t=p.statArray.indexOf(parseInt(n.statId));p.refLine&&getStat(n.statId).avg&&(p.legendArr.includes(t+1)?s(n.statCum,p.legendArr.length>1?colorArr[t]:"#000000"):null)});n.forEach(function(n){var t=p.statArray.indexOf(parseInt(n.statId));p.legendArr.includes(t+1)?h(n,colorArr[t]):null});ht()});$("circle").not(".tool-tip-line").on("mouseover",function(){d3.select(this).style("r",6).style("stroke-width","3px").style("stroke","black");w(this)}).on("mouseout",function(){d3.select(this).style("r",4).style("stroke-width",1);b(this);openSeason()});$(".tool-tip-line").on("mouseover",function(){d3.select(this).style("r",6).style("stroke-width","2px").style("stroke","black");w(this)}).on("mouseout",function(){d3.select(this).style("r",4).style("stroke-width",1);b(this);openSeason()})}function ut(){var n=p.statArray.length,i=dataDRoll.returnDailyD(),f=p.statType.findIndex(function(n){return n==6}),t=p.yAxisScale[f];p.time==="daily"&&p.dStatArray.forEach(function(r,u){var f=d3.selectAll(".facet").filter(function(){return d3.select(this).attr("data-season")>2006}),e=d3.selectAll(".facet")[0].length-f[0].length;f.each(function(r,f){if(p.legendArr.includes(n+u+1)){var l=d3.select(this),o=l.selectAll("new").data(i[f][u]).enter();o.append("rect").filter(function(n){return n.min>-1}).attr("y",function(n){return t(n.max)}).attr("x",function(n){var t=c[f+e];return t(new Date(n.gameDate.slice(0,4),n.gameDate.slice(5,7)-1,n.gameDate.slice(8,10)))+s/2-1.5}).attr("height",function(n){return t(n.min)-t(n.max)}).attr("fill",function(t){return h(t,n+u)}).attr("fill-opacity",.75).attr("width","3px");o.append("circle").filter(function(n){return n.min>-1}).attr("cx",function(n){var t=c[f+e];return t(new Date(n.gameDate.slice(0,4),n.gameDate.slice(5,7)-1,n.gameDate.slice(8,10)))+s/2}).attr("cy",function(n){return t(n.avg)}).attr("fill",function(t){return h(t,n+u)}).attr("fill-opacity",.75).attr("stroke","black").style("r",2)}})});p.time==="game"&&p.dStatArray.forEach(function(t,i){if(p.legendArr.includes(n+i+1)){var o=p.statType.findIndex(function(n){return n==6}),f=p.yAxisScale[o],e=u.selectAll("new").data(p.dStatData[i]).enter();e.append("rect").filter(function(n){return n.min>-1}).attr("y",function(n){return f(n.max)}).attr("x",function(n){return r(n.gameNumber+p.dGameStart)-1.5}).attr("height",function(n){return f(n.min)-f(n.max)}).attr("width","3px").attr("fill-opacity",.75).attr("fill",function(t){return h(t,n+i)});e.append("circle").filter(function(n){return n.min>-1}).attr("cx",function(n){return r(n.gameNumber+p.dGameStart)}).attr("cy",function(n){return f(n.avg)}).attr("r",2).attr("class","tool-tip-line").attr("fill",function(t){return h(t,n+i)}).attr("fill-opacity",.75).attr("stroke","black")}})}function st(){$(".yaxis-auto, .axis-in").off();$(".yaxis-auto").click(function(){p.yAxisAuto?(d3.select(this).classed("stat-highlight",!1),p.yAxisAuto=!1):(d3.select(this).classed("stat-highlight",!0),p.yAxisAuto=!0);d()});$(".axis-in").change(function(){d3.select(".yaxis-auto").classed("stat-highlight",!1);p.yAxisAuto=!1;d()});$(".ref").change(function(){p.refLine=$(this).is(":checked");d()})}function d(){y();nt();tt();it();rt();ut()}function ht(){var n,t;d3.select(".plot").on("mousemove",function(){var i,f,u;n=d3.mouse(this);i=new lt;d3.selectAll(".line.tooltip").on("mousemove",function(){var s=d3.select(this).attr("data-series"),f=d3.select(this).datum(),c=d3.select(this).datum().statArray,u=ct(n[0],n[1],c,null,s),e=p.yAxisScale[s],l=d3.select(".plot").selectAll(".tooltip-circle").data([u]),h;d3.selectAll("circle.tooltip").empty()?(l.enter().append("circle").attr("class","tooltip").attr("r","0px").attr("cx",function(n){return r(n.seasonGameNum)}).attr("cy",function(n){return e(n.statValue)}).style("fill",f.color).style("stroke","black").style("stroke-width","2px").transition().duration(50).attr("r","5px"),t=u):(h=d3.selectAll("circle.tooltip").data([u]).attr("cx",function(n){return r(n.seasonGameNum)}).attr("cy",function(n){return e(n.statValue)}).style("fill",f.color),t!=u&&h.attr("r","0px").transition().duration(50).attr("r","5px"),t=u);var o=new Date(u.gameDate),a=o.getUTCMonth()+1+"-"+o.getUTCDate()+"-"+o.getUTCFullYear(),v=getStat(f.statId).format(9)==d3.format("0%")(9)?d3.format(".1%"):getStat(f.statId).format;i.addRow("Game "+u.seasonGameNum);i.addRow(a);i.addRow(f.statName+": "+v(u.statValue));i.setPos(r(u.seasonGameNum),e(u.statValue));i.build()});f=!0;d3.select("circle.tooltip").on("mouseover",function(){clearTimeout(u)}).on("mouseout",function(){u=setTimeout(function(){d3.selectAll("circle.tooltip").remove();i.remove()},500)});d3.selectAll(".line.tooltip").on("mouseleave",function(){u=setTimeout(function(){d3.selectAll("circle.tooltip").remove();i.remove()},500)})})}function ct(n,t,r,u,f){function o(n,t){return Math.sqrt(Math.pow(n,2)+Math.pow(t,2))}var e,s;if(l=p.yAxisScale[f],e=r[0],i=0,s=o(n-v(r[i].seasonGameNum),t-l(r[i].statValue)),r.length>1)for(i=0;i<r.length;i++)o(n-v(r[i].seasonGameNum),t-l(r[i].statValue))<s&&(s=o(n-v(r[i].seasonGameNum),t-l(r[i].statValue)),e=r[i]);return e}function lt(){var t,n,r;this.textContent=[];this.textHTMLString="";this.main;this.setRow=function(n){t=55/3*n};this.addRow=function(n){this.textContent.push(n)};this.setPos=function(t,i){n=t;r=i};this.build=function(){for($("#viz-legend").css("z-index",0),this.setRow(this.textContent.length),d3.selectAll(".tool-tip").remove(),this.textHTMLString=this.textContent[0],i=1;i<this.textContent.length;i++)this.textHTMLString+="<tspan x="+n+' dy="1.4em">'+this.textContent[i]+"<\/tspan>";this.main=tooltip=u.append("g").attr("class","tool-tip");tooltip.append("g").attr("transform","translate("+n+","+(r-13)+")").append("path").attr("class","tool-tip-tri").attr("d",d3.svg.symbol().type("triangle-down")).attr("fill","black").attr("fill-opacity",.85).attr("stroke-width","0px");tooltip.append("rect").attr("fill","black").attr("fill-opacity",.85).attr("stroke-width","0px").attr("x",n-62).attr("y",r-t-18).attr("width",125).attr("height",t).attr("rx","1px");tooltip.append("text").html(this.textHTMLString).attr("x",n).attr("y",r-t-2).attr("text-anchor","middle").attr("class","tool-tip-text").attr("opacity",1).attr("fill","white")};this.remove=function(){d3.selectAll(".tool-tip").remove();$("#viz-legend").css("z-index",10)}}var s=20,c=[],k,n,f,g,t,a,u,r,e,o,ft,v,l;n=$.extend({},p.margin);a=$("#d3-container").innerWidth();t=a-n.left-n.right;f=450;yAxisParm=[{posx:0,orient:"left"},{posx:t,orient:"right"}];this.blankChart=function(){y();$("#title-1").text("FanGraphs Player Graphs");$("#title-2").text("");d3.select(".chart").attr("width",t+n.left+n.right).attr("height",f+n.top+n.bottom).append("g").attr("class","plot").attr("transform","translate("+n.left+","+n.top+")");d3.select(".chart").append("text").attr("x",t/2+n.left).attr("y",f/4+n.top).attr("text-anchor","middle").style("font-size",20).style("fill","black").html("No player stats are selected.");d3.select(".chart").append("text").attr("x",t/2+n.left).attr("y",f/4+n.top+35).attr("text-anchor","middle").style("font-size",20).style("fill","black").text("Please select a tab or add stats from the dropdown menus.")};this.go=function(){ot();y();p.dStatArray.length>0?$(".div-button.export-pitch-data").css("display","inline-block"):$(".div-button.export-pitch-data").css("display","none");nt();et();tt();titleUpdate();it();rt();p.dStatData.length>0?ut():null;openSeason();st()}}function buildInteract(){function n(){var n=$("#title-input").val(),t=$("#title-input").attr("data-id");$("#"+t).text(n).show();$("#title-input").hide()}$(".stat-block, .time-in, .split-in").off();$(".time-in").not(".inactive").click(timeInter);$(".split-in").not(".inactive").click(splitInter);$("#season-in").change(function(){p.season=$(this).val();setParm();chartObj.go()});$(".season-in, .gt").change(function(){this.id=="start-in"||this.id=="end-in"?$('.span-type[value="multiple"]').prop("checked",!0):this.id=="season-in"&&$('.span-type[value="single"]').prop("checked",!0);dataObj.getRollingData()});$(".span-type").click(function(){$(".timeframe").attr("class","tool-controls-col-1 timeframe");$(this).parent().addClass("tf-active");p.rolling&&dataObj.getRollingData()});$("body").click(function(t){if(t.target.id=="title-input"||t.target.id=="title-1"||t.target.id=="title-2")return!1;n()});$("body").keypress(function(t){t.keyCode==13&&n()})}function setVBVar(){$(".data-playerid").val(p.id);$(".data-gt1").val(p.gt1);$(".data-spanseason").val(p.spanSeason);$(".data-startdate").val(p.startYear);$(".data-enddate").val(p.endYear);$(".data-statarray").val(JSON.stringify(p.statArray));$(".data-dStat").val(JSON.stringify(p.dStatArray));$(".data-pos").val(p.pos);$(".data-time").val(p.time);$(".data-split").val(p.split)}function Data(){this.getSeasonData=function(){var n=setTimeout(modalLoading,500);p.statArray.length>0?$.ajax({type:"POST",url:"/api/GraphData/PostPlayerStats",data:'{"playerid": "'+p.id+'", "statarr": "'+JSON.stringify(p.statArray)+'", "split":"'+p.split+'", "time":"'+p.time+'", "position": "'+playerPos+'"}',contentType:"application/json; charset=utf-8",dataType:"json",success:function(t){clearTimeout(n);dataFull=t;dataNew=t;dataOrg=t.slice(0);getStat(p.statArray[0]).avg?null:filterAvg(dataNew);setVBVar();setParm();$(".modal-loading").remove();chartObj.go()}}):chartObj.blankChart()};this.getSeasons=function(){$.ajax({type:"POST",url:"/api/graphdata/playerinfo",data:"="+p.id,dataType:"json",success:function(n){n.seasons.forEach(function(n){$(".season-in, #start-in, #end-in").append($("<option/>").val(n).text(n))});$("#start-in").val(function(){return Math.max(Math.min.apply(0,n.seasons),n.seasons.slice(2,3))});p.yearArray=n.seasons;p.maxYear=Math.max.apply(0,n.seasons);qs.varObj.start?$("#start-in").val(qs.varObj.start):null;qs.varObj.end?$("#end-in").val(qs.varObj.end):null;qs.varObj.gt1?$("#gt1-in").val(qs.varObj.gt1):null;dataPG=n;init()}})};this.getRollingData=function(){function i(){p.spanSeason=p.time=="game"?!0:!1;p.spanType=$(".span-type:checked").val();p.gt1=$("#gt1-in").val();p.gt2=$("#gt2-in").val();p.spanType=="multiple"?(p.startYear=$("#start-in").val(),p.endYear=$("#end-in").val(),p.startYear>p.endYear&&($("#start-in").val(p.endYear),$("#end-in").val(p.startYear),p.startYear=$("#start-in").val(),p.endYear=$("#end-in").val()),qs.updateURL({start:p.startYear,end:p.endYear,rtype:"mult",gt1:p.gt1})):p.spanType=="single"&&(p.endYear=p.startYear=$("#season-in").val(),qs.updateURL({start:p.startYear,end:p.endYear,rtype:"single",gt1:p.gt1}))}var n,t;p.statArray.length>0||p.dStatArray.length>0?(n=[],n=p.statArray.length==0?[6]:p.statArray,i(),t=setTimeout(modalLoading,800),$.ajax({type:"POST",url:"/api/GraphData/PostPlayerStats",data:'{"playerid": "'+p.id+'", "statarr": "'+JSON.stringify(n)+'", "split":"'+p.split+'", "time":"'+p.time+'", "position": "'+playerPos+'"}',contentType:"application/json; charset=utf-8",dataType:"json",success:function(i){dataRef=i;$.ajax({type:"POST",url:"/api/GraphData/PostMovingAvg",data:'{"playerId": "'+p.id+'", "statArr": "'+JSON.stringify(n)+'", "gt1": "'+p.gt1+'", "gt2": "'+p.gt2+'", "spanSeason": "'+p.spanSeason+'", "startYear": "'+p.startYear+'", "endYear": "'+p.endYear+'", "spanType": "'+p.spanType+'", "position": "'+playerPos+'"}',contentType:"application/json; charset=utf-8",dataType:"json",success:function(n){clearTimeout(t);dataRoll.load(n);setVBVar();p.season=$("#season-in").val();setParm();dataObj=new Data;dataObj.getPitchGraphs()},error:function(){alert("error!")}})}})):chartObj.blankChart()};this.getPitchTypes=function(n){$.ajax({type:"GET",url:"/api/graphdata/pitchtypes?playerid="+p.id,success:function(t){p.pitchTypes=t;dropMenu();typeof shortCircuitPitch!="undefined"&&p.dStatArray.length==0&&(p.statArray=[],p.dStatArray=[p.pitchTypes[0]],setParm(),setVBVar(),n())}})};this.getPitchGraphs=function(){var n=setTimeout(modalLoading,500);$.ajax({type:"POST",url:"/api/graphdata/pitchgraphs",data:'{"playerId": "'+p.id+'", "startYear": "'+p.startYear+'", "endYear": "'+p.endYear+'", "pitchType":'+JSON.stringify(p.dStatArray)+', "time": "daily"}',contentType:"application/json; charset=utf-8",dataType:"json",success:function(t){clearTimeout(n);p.dStatData=t;dataDRoll.loadD(t);setVBVar();qs.updateURL({statArr:p.statArray,dStatArray:p.dStatArray});chartObj.go();$(".modal-loading").remove()}})}}function init(){if(buildButtons(),buildInteract(),qs.varObj.pitchgraphs&&(shortCircuitPitch="here"),console.log(typeof shortCircuitPitch!="undefined"),typeof shortCircuitPitch!="undefined"&&p.dStatArray.length==0){p.time="daily";p.rolling=!0;p.statType=["6"];setVBVar();setParm();var t=$('.time-in[data-val="'+p.time+'"]');timeIn(t);p.rolling&&(p.time=="daily"||p.time=="game")&&$(".tf-row").css("display","table");function n(){dataObj.getRollingData()}dataObj.getPitchTypes(n)}else{function n(){}setVBVar();setParm();dataObj.getPitchTypes(n);p.rolling&&(p.time=="daily"||p.time=="game")?dataObj.getRollingData():dataObj.getSeasonData()}}var qs,dataPG,dataFull,dataNew,dataRef,dataRoll,dataDRoll,modalLoading,chartObj,dataObj;Array.prototype.includes||(Array.prototype.includes=function(n){"use strict";var f,i,r,t,u;if(this==null)throw new TypeError("Array.prototype.includes called on null or undefined");if(f=Object(this),i=parseInt(f.length,10)||0,i===0)return!1;for(r=parseInt(arguments[1],10)||0,r>=0?t=r:(t=i+r,t<0&&(t=0));t<i;){if(u=f[t],n===u||n!==n&&u!==u)return!0;t++}return!1});var timeObj={season:{label:"Season"},age:{label:"Age"},daily:{label:"Day"},game:{label:"Game Number"}},splitObj={base:["base"],lr:["base","l","r"],ha:["base","h","a"]},colorArr=["#336699","#CE2431","#f9c758","#74B4FA","#AF53AF","pink","steelblue","orange","blue","#7c4d85",],p={id:5209,pos:"pitcher",statType:[0],season:2015,statArray:[],dStatArray:[],dStatData:[],time:"season",timeLabel:"Season",statLabel:"",split:"base",splitArray:["base"],spanSeason:!1,subTitle:"",margin:{top:75,right:95,bottom:95,left:95},refLine:!0,extreme:!1,tickFormat:[],mark:{color:{player:"#50ae26",pitcher:"#336699",lgAvg:"#909090",r:"#CE2431",l:"#336699",base:"#909090",h:"#336699",a:"#CE2431"},stroke:{player:"5px",pitcher:"5px",lgAvg:"4px"}},axisFormat:{x:1,y:1},yAxisAuto:!0,yAxis:[],xAxis:{},yAxisData:[],yAxisScale:[],yLabel:[]};p.pos=playerPos=="P"?"pitcher":"player";qs=new QueryString;qs.getQueryVariables();p.id=qs.varObj.playerid||window.SERVER_DATA.playerId;qs.varObj.statArr||qs.varObj.dStatArray||typeof shortCircuitPitch!="undefined"||(p.pos=="pitcher"?(p.statArray=[6],p.statType=[5]):(p.statArray=[50],p.statType=[1]));p.pos=="pitcher"||$(".menu-container.pitch-graphs").hide();p.rolling=!0;p.legendArr=[1];qs.varObj.statArr&&(p.statArray=[].concat(qs.varObj.statArr.split(",")).map(Number));qs.varObj.legend&&(p.legendArr=[].concat(qs.varObj.legend.split(",")).map(Number));qs.varObj.dStatArray&&(p.dStatArray=[].concat(qs.varObj.dStatArray));p.split=qs.varObj.split?qs.varObj.split:"base";p.statType=setStatType();qs.updateURL({statArr:p.statArray,legend:p.legendArr});dataRoll={d:[],fullStatArray:[],load:function(n){this.d=n.slice(0);this.fullStatArray=n[0].statArray.slice(0);this.d[0].statArray.length>50&&this.d.forEach(function(n){n.statArray.splice(0,5)})},loadD:function(n){this.d=n.slice(0)},selectYear:function(n){return this.d.filter(function(t){return t.info.season==n})[0]},selectLastThreeYears:function(){return},selectStatId:function(){},returnDaily:function(){var t=this.d,n=[],i=unique(this.d.map(function(n){return n.season}));return i.forEach(function(i){var r=t.filter(function(n){return n.season==i});n.push(r)}),n},returnDailyD:function(){var t=this.d,n=[],i=unique(this.d.map(function(n){return n.map(function(n){return n.season})})[0]);return i.forEach(function(i){var r=t.map(function(n){return n.filter(function(n){return n.season==i})});n.push(r)}),n}};dataDRoll=$.extend({},dataRoll);$("#JsGrapher1_cmdCSV").click(function(n){p.statArray.length==0&&n.preventDefault()});modalLoading=function(){$("#d3-container").prepend($('<div class="modal-loading"><img src="//www.fangraphs.com/images/fg_logo_animated.gif" style="height: 100px;" /><div style="font-size: 18px; text-align: center; line-height: 2;">Loading...<\/div><\/div>'))};chartObj=new buildChart;dataObj=new Data;dataObj.getSeasons()