Created
April 15, 2016 15:06
-
-
Save halfmanhalfdonut/3e0cc904f8f11c42d055c9e29efd8297 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** GENERATED: Fri Apr 15 07:59:53 PDT 2016 **/ | |
(function($, settings) { | |
if (!String.prototype.trim) { | |
String.prototype.trim = function() { | |
return this.replace(/^\s+|\s+$/g, ""); | |
}; | |
} | |
if (!Array.prototype.indexOf) { | |
Array.prototype.indexOf = function(searchElement, fromIndex) { | |
var i, pivot = (fromIndex) ? fromIndex : 0, | |
length; | |
if (!this) { | |
throw new TypeError(); | |
} | |
length = this.length; | |
if (length === 0 || pivot >= length) { | |
return -1; | |
} | |
if (pivot < 0) { | |
pivot = length - Math.abs(pivot); | |
} | |
for (i = pivot; i < length; i++) { | |
if (this[i] === searchElement) { | |
return i; | |
} | |
} | |
return -1; | |
}; | |
} | |
var getCookieValue = function(key) { | |
var match, exp = new RegExp("(^|;) ?" + key + "=([^;]+)(;|$)", "g"); | |
return (match = exp.exec(document.cookie)) ? match[2] : ""; | |
}; | |
var getParameterByName = function(name) { | |
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); | |
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), | |
results = regex.exec(location.search); | |
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); | |
}; | |
var appsrcValue = getParameterByName("appsrc"); | |
if (appsrcValue == "sc") { | |
$("body").addClass("no-header scorecenter"); | |
} | |
var h = location.hostname, | |
isDev = (h.indexOf("test") >= 0 || h.indexOf("dev") >= 0 || h.indexOf("mast") >= 0), | |
isDebug = isDev && window && typeof window.console !== "undefined"; | |
window.espn = window.espn || {}; | |
window.espn.gamecast = { | |
subscribe: function(topic, handler) { | |
return jQuery.sub(topic, handler); | |
}, | |
unsubscribe: function(handler) { | |
return jQuery.unsub(handler); | |
}, | |
unsubscribeAll: function(topic) { | |
return jQuery.unsub(topic); | |
}, | |
publish: function(topic, args) { | |
return jQuery.pub(topic, args); | |
}, | |
track: function(type, values) { | |
if (type !== undefined && values !== undefined && typeof(values) === "object") { | |
if (type == "link") { | |
setTimeout(function() { | |
try { | |
anTrackLink(window.location, "espn", "mlbgamecast", values.info); | |
} catch (e) {} | |
}, 100); | |
} else { | |
if (type == "page" && typeof(anClearVars) === "function") { | |
var gameId = values.gameId; | |
anClearVars(); | |
try { | |
s_omni.pageName = "espn:mlb:game:gamecast"; | |
if (pn[gameId]) { | |
s_omni.pageName += ":" + pn[gameId]; | |
} | |
s_omni.server = window.location.host; | |
s_omni.channel = "mlb"; | |
s_omni.prop1 = "espn"; | |
s_omni.prop4 = "game"; | |
s_omni.prop5 = "espn:mlb:game:gamecast"; | |
s_omni.prop17 = "en"; | |
s_omni.prop25 = "baseball"; | |
s_omni.prop26 = "mlb"; | |
s_omni.prop30 = "n"; | |
s_omni.hier1 = "espn:mlb:game:gamecast"; | |
s_omni.eVar9 = "en"; | |
s_omni.eVar13 = s_omni.pageName; | |
s_omni.eVar19 = "baseball"; | |
s_omni.eVar21 = "mlb"; | |
s_omni.events = "event21"; | |
var s_code = s_omni.t(); | |
} catch (e) {} | |
try { | |
pSUPERFLY.virtualPage("/mlb/gamecast?gameId=" + gameId, "MLB Gamecast | " + pn[gameId]); | |
} catch (e) {} | |
} | |
} | |
} | |
}, | |
debug: function(msg) { | |
if (isDebug) { | |
try { | |
console.log(msg); | |
} catch (e) {} | |
} | |
}, | |
findIndex: function(searchArray, searchId, searchAttr) { | |
var arrayLength = searchArray.length; | |
var index = -1; | |
for (var x = 0; x < arrayLength; x++) { | |
if (searchArray[x][searchAttr] + "" == searchId + "") { | |
index = x; | |
break; | |
} | |
} | |
return index; | |
}, | |
checkHTML5Player: function() { | |
return (!(window.location.search.indexOf("version=mobile") >= 0) || $("body").hasClass("iPad") || (window.location.search.indexOf("appsrc=ocho") >= 0 && settings.lang != "es")); | |
}, | |
isVideoViewable: function(video) { | |
var viewable = true, | |
platforms = video.includePlatforms ? video.includePlatforms.join().toLowerCase() : undefined, | |
isHandset = espn.gamecast.version.isHandset(); | |
if (espn.gamecast.isMobile && platforms && platforms.length > 0) { | |
viewable = (isHandset && (platforms.indexOf("iphone") >= 0 || platforms.indexOf("handset") >= 0 || platforms.indexOf("mobile") >= 0)) || (!isHandset && (platforms.indexOf("ipad") >= 0 || platforms.indexOf("tablet") >= 0)); | |
} | |
return viewable; | |
}, | |
getVideoUrl: function(id) { | |
var appsrcObj = appMap !== undefined ? appMap[getParameterByName("appsrc")] : undefined, | |
suite = appsrcObj !== undefined && appsrcObj[0] ? appsrcObj[0] : "wdgespcom", | |
viAppId = getCookieValue("viAppId"), | |
vIdParam = viAppId !== "" ? "&vid=" + viAppId : ""; | |
return "http://m.espn.go.com/general/video.mp4?videoprofile=external&id=" + id + "&suite=" + suite + vIdParam + "&player=" + encodeURIComponent("Off Deck : GameCast"); | |
}, | |
appsrc: appsrcValue, | |
master: settings.data.gamecast, | |
contains: function(arr, val) { | |
var found = false; | |
for (var i = 0, l = arr.length; i < l; i += 1) { | |
if (arr[i] == val) { | |
found = true; | |
break; | |
} | |
} | |
return found; | |
}, | |
inningText: { | |
1: "1st", | |
2: "2nd", | |
3: "3rd", | |
4: "4th", | |
5: "5th", | |
6: "6th", | |
7: "7th", | |
8: "8th", | |
9: "9th", | |
10: "10th", | |
11: "11th", | |
12: "12th", | |
13: "13th", | |
14: "14th", | |
15: "15th" | |
}, | |
getGameState: function(statusId) { | |
return espn.gamecast.gameStates[statusId] !== undefined ? espn.gamecast.gameStates[statusId] : "live"; | |
}, | |
gameStates: { | |
"2": "live", | |
"22": "live", | |
"1": "pregame", | |
"7": "live", | |
"8": "final", | |
"6": "pregame", | |
"5": "pregame", | |
"3": "final", | |
"4": "final" | |
}, | |
isEmptyObject: function(o) { | |
var isEmpty = true; | |
for (var p in o) { | |
if (o.hasOwnProperty(p)) { | |
isEmpty = false; | |
break; | |
} | |
} | |
return isEmpty; | |
}, | |
toOrdinal: function(n, gender) { | |
if (settings.lang == "es") { | |
var sfx = gender == "m" ? ["mo", "er", "do", "er", "to", "to", "to", "mo", "vo", "no"] : ["ma", "ra", "da", "ra", "ta", "ta", "ta", "ma", "va", "na"]; | |
var val = n % 10; | |
return n + sfx[val]; | |
} else { | |
var sfx = ["th", "st", "nd", "rd"]; | |
var val = n % 100; | |
return n + (sfx[(val - 20) % 10] || sfx[val] || sfx[0]); | |
} | |
}, | |
deportesMap: { | |
"game feed": "Info del Partido", | |
"live feed": "En Vivo", | |
plays: "Jugadas", | |
"scoring plays": "Puntaje", | |
"box score": "Numeritos", | |
notes: "Notas", | |
social: "Social", | |
media: "Media", | |
photos: "fotos", | |
video: "Vídeo", | |
hitters: "Bateadores", | |
ab: "AB", | |
r: "C", | |
h: "H", | |
rbi: "CE", | |
bb: "BB", | |
so: "K", | |
avg: "AVG", | |
pitchers: "Lanzadores", | |
ip: "EL", | |
er: "CL", | |
era: "EFE", | |
"expanded batting stats currently unavailable": "Estadísticas expandidas de bateo no están disponibles", | |
"expanded batting": "Bateo expandido", | |
"2b": "2B", | |
"3b": "3B", | |
hr: "HR", | |
sb: "SF", | |
"expanded pitching stats currently unavailable": "Estadísticas expandidas de pitcheo no están disponibles", | |
"expanded pitching": "Pitcheo expandido", | |
"ground balls-fly balls": "Roletas-Elevados", | |
"batters faced": "Bateadores Enfrentados", | |
balk: "Balk", | |
hbp: "Pelotazo", | |
ibb: "BBI", | |
wp: "LG", | |
e: "E", | |
"team totals": "Totales por Equipo", | |
today: "Hoy", | |
season: "Temporada", | |
"last season": "Últimos Temporada", | |
lh: "LZ", | |
rh: "LD", | |
rhp: "LD", | |
lhp: "LZ", | |
vs: "vs", | |
"vs lh": "vs. Zurdos", | |
"vs rh": "vs. Derechos", | |
"vs lhp": "vs LZ", | |
"vs rhp": "vs LD", | |
opponent: "Oponente", | |
"no stats available": "No hay registro de anotaciones disponibles", | |
sv: "SALV", | |
hld: "HLD", | |
tbf: "AB", | |
ba: "PROM OP", | |
"pitch count": "Conteo de pitcheos", | |
"hit zone on": "Encender zona de bateo", | |
"hit zone off": "Apagar zona de bateo", | |
"batting left": "Bate zurdo", | |
"batting right": "Bate derecho", | |
pitch: "Lanzamiento", | |
"first at bat": "Primer turno al bate", | |
"baserunners on": "Encender corredores en base", | |
"baserunners off": "Apagar corredores en base", | |
"defense on": "Encender defensa", | |
"defense off": "Apagar defensa", | |
"spray chart on": "Encender batazos", | |
"spray chart off": "Apagar batazos", | |
"view full box score": "Ver Ficha completa", | |
"view full play-by-play": "Ver todas las Jugadas", | |
"last play": "U. JUGADA", | |
"on deck": "Próximo en turno", | |
replay: "Repetir", | |
"photos received": "Fotos recibidas", | |
of: "de", | |
and: "y", | |
"pitching to": "Le lanza a", | |
"comment from": "Comentario de", | |
"currently unavailable": "no disponibles", | |
"game starts at": "Juego comienza a las", | |
preview: "Previa", | |
recap: "Crónica", | |
"switch to this game": "Cambiar partido", | |
outs: "Outs", | |
out: "Out", | |
thumbnails: "Miniaturas", | |
"photos currently unavailable": "Fotos no disponibles", | |
"scoring plays currently unavailable": "No hay registro de anotaciones disponibles", | |
"play-by-play currently unavailable": "No hay registro de anotaciones disponibles", | |
"tweets currently unavailable": "Tweets no disponibles", | |
"videos currently unavailable": "Videos no disponibles", | |
seconds: "segundos", | |
second: "segundo", | |
"projected winner": "Ganador proyectado", | |
"hit distribution": "Distribución de hits", | |
at: "en", | |
"due up for the": "Esperando turno por los", | |
"chance of scoring": "Probabilidad de anotar", | |
"runs this inning": "carreras en este inning", | |
"expected runs": "Carreras Proyectadas", | |
run: "carrera", | |
runs: "carreras", | |
"bases loaded": "Bases Llenas", | |
"bases empty": "Bases Limpias", | |
"runners on": "Hombres en", | |
"runner on": "Hombres en", | |
"career vs.": "de por vida en contra", | |
"for": "por", | |
"w/risp": "c/PA", | |
"after count": "después de conteo", | |
"this year": "este año" | |
}, | |
translate: function(str) { | |
var tempStr = str.toLowerCase(); | |
if (settings.lang == "es") { | |
return espn.gamecast.deportesMap[tempStr] != undefined ? espn.gamecast.deportesMap[tempStr] : str; | |
} else { | |
return str; | |
} | |
}, | |
getFullTeamName: function(team) { | |
var midText = "", | |
teamName = ""; | |
if (settings.lang == "es") { | |
if (team.loc.toLowerCase() == "florida") { | |
midText = "de la"; | |
} else { | |
if (team.loc.toLowerCase() == "chicago") { | |
midText = ""; | |
} else { | |
midText = "de"; | |
} | |
} | |
teamName = team.name + " " + midText + " " + team.loc; | |
} else { | |
teamName = team.loc + " " + team.name; | |
} | |
return teamName; | |
}, | |
getPlayerLink: function(id, name) { | |
var m = "http://m.espn.go.com/mlb/playercard?playerId=", | |
link = ""; | |
if (espn.gamecast.isMobile) { | |
link = '<a href="http://m.espn.go.com/mlb/playercard?playerId=' + id + '" class="poppable" data-playerId="' + id + '" target="_blank">' + name + "</a>"; | |
} else { | |
var slug = name.replace(/[^a-zA-Z 0-9]+/g, "").split(" ").join("-").toLowerCase(); | |
if (settings.lang.toLowerCase() == "es") { | |
link = '<a href="http://espndeportes.espn.go.com/beisbol/mlb/jugador/_/id/' + id + "/" + slug + '" class="poppable" data-playerId="' + id + '" target="_blank">' + name + "</a>"; | |
} else { | |
link = '<a href="http://espn.go.com/mlb/player/_/id/' + id + "/" + slug + '" class="poppable" data-playerId="' + id + '" target="_blank">' + name + "</a>"; | |
} | |
} | |
return link; | |
}, | |
getPlayerLinkHREF: function(id) { | |
var m = "http://m.espn.go.com/nba/playercard?playerId=", | |
link = ""; | |
if (espn.gamecast.isMobile) { | |
link = "http://m.espn.go.com/mlb/playercard?playerId=" + id; | |
} else { | |
var slug = name.replace(/[^a-zA-Z 0-9]+/g, "").split(" ").join("-").toLowerCase(); | |
if (settings.lang.toLowerCase() == "es") { | |
link = "http://espndeportes.espn.go.com/beisbol/mlb/jugador/_/id/" + id + "/" + slug; | |
} else { | |
link = "http://espn.go.com/mlb/player/_/id/" + id + "/" + slug; | |
} | |
} | |
return link; | |
}, | |
getCommentURL: function() { | |
if (settings.lang.toLowerCase() == "es") { | |
return "http://espndeportes.espn.go.com/mlb/deportes/conversacion?gameId=" + espn.gamecast.master.current.id; | |
} else { | |
return "http://scores.espn.go.com/mlb/conversation?gameId=" + espn.gamecast.master.current.id; | |
} | |
}, | |
gotEcho: false, | |
gotAudio: false | |
}; | |
(function(d) { | |
var cache = {}; | |
d.pub = function(topic, args) { | |
if (cache[topic]) { | |
var cachedCallbacks = d.extend([], cache[topic]); | |
for (var i = 0, n = cachedCallbacks.length; i < n; i++) { | |
cachedCallbacks[i].apply(d, args || []); | |
} | |
cachedCallbacks = null; | |
} | |
}; | |
d.sub = function(topic, callback) { | |
if (!cache[topic]) { | |
cache[topic] = []; | |
} | |
cache[topic].push(callback); | |
return [topic, callback]; | |
}; | |
d.unsub = function(handle) { | |
if (handle instanceof Array && handle.length > 1) { | |
var t = handle[0]; | |
cache[t] && d.each(cache[t], function(idx) { | |
if (this == handle[1]) { | |
cache[t].splice(idx, 1); | |
} | |
}); | |
} else { | |
if (String(handle.constructor).indexOf("String") >= 0) { | |
espn.gamecast.debug("unsubscribing all callbacks from " + handle); | |
cache[handle] = []; | |
} | |
} | |
}; | |
})(jQuery); | |
})(jQuery, settings); | |
espn.gamecast.caster = {}; | |
(function($, settings) { | |
var CAST = espn.gamecast.caster, | |
flashVersion = swfobject.getFlashPlayerVersion(), | |
currentSnapshotId = 0, | |
sessionId = "", | |
isDev = (window.location.host.indexOf("test") >= 0 || window.location.host.indexOf("dev") >= 0 || window.location.host.indexOf("mast") >= 0), | |
baseURL = isDev ? window.location.host + "/" + settings.sport + "/caster/snapshot" : "scores.espn.go.com/" + settings.sport + "/caster/snapshot", | |
casterHost = isDev ? "vldchadoop02.corp.espn3.com" : "site.caster.espn.go.com", | |
casterPort = isDev ? 2223 : 80, | |
pollDuration = 15000, | |
casterInterval; | |
CAST.switchCasterSession = function() { | |
currentSnapshotId = espn.gamecast.master.snapshotId; | |
sessionId = espn.gamecast.master.sessionId; | |
if (flashVersion !== undefined && flashVersion.major !== undefined && flashVersion.major >= 8) { | |
CAST.embedFlashConnector(); | |
} else { | |
CAST.startFauxCast(); | |
} | |
}; | |
CAST.embedFlashConnector = function() { | |
$("#caster").empty(); | |
var casterObj = new flashObj(); | |
casterObj.flashFile = "http://assets.espn.go.com/swf/caster/snapshotCasterClientv2.swf"; | |
casterObj.flashVars = "sessionName=" + sessionId + "&duration=15000&pollMode=absolute&baseURL=" + baseURL + "&host=" + casterHost + "&port=" + casterPort + "¤tSnapshotId=" + currentSnapshotId; | |
casterObj.wmode = "window"; | |
casterObj.width = "1"; | |
casterObj.height = "1"; | |
casterObj.quality = "best"; | |
casterObj.FlashVer = 8; | |
casterObj.DenyIEdl = "TRUE"; | |
casterObj.cabVersion = "8,0,0,0"; | |
casterObj.useDOM = true; | |
casterObj.bgcolor = "#000000"; | |
casterObj.targetElement = "caster"; | |
casterObj.render(true); | |
}; | |
function fauxCast(callback) { | |
clearInterval(casterInterval); | |
var snapshotURL = "/" + settings.sport + (settings.lang.toLowerCase() == "es" ? "/deportes" : "") + "/caster/json?sessionId=" + sessionId + "&masterSnap=" + currentSnapshotId + "&rand=" + new Date().getTime(); | |
$.ajax({ | |
type: "GET", | |
url: snapshotURL, | |
dataType: "json", | |
success: function(data) { | |
if (data !== undefined && data.snapshotId !== undefined) { | |
handleCasterMessage(data.snapshotId, data.snapshots); | |
currentSnapshotId = data.snapshotId; | |
} | |
if (typeof callback === "function") { | |
callback(); | |
} | |
espn.gamecast.publish("updateReceived", [new Date()]); | |
casterInterval = setTimeout(fauxCast, pollDuration); | |
}, | |
error: function() { | |
casterInterval = setTimeout(fauxCast, pollDuration); | |
} | |
}); | |
} | |
CAST.startFauxCast = function() { | |
fauxCast(); | |
}; | |
window.handleCasterMessage = function(snapshotId, snapshots) { | |
if (typeof(snapshots) == "object") { | |
espn.gamecast.update.processSnapshots(snapshots); | |
} | |
}; | |
CAST.handleUpdateRequest = function(callback) { | |
if (espn.gamecast.master.current.gameState === "live") { | |
fauxCast(callback); | |
} else { | |
callback(); | |
} | |
}; | |
espn.gamecast.subscribe("ready", CAST.switchCasterSession); | |
espn.gamecast.subscribe("requestUpdate", CAST.handleUpdateRequest); | |
})(jQuery, settings); | |
espn.gamecast.update = {}; | |
(function($, settings) { | |
var UP = espn.gamecast.update, | |
currentGameId = 0, | |
ketchupPlayQueue = [], | |
isKetchupPlay = false, | |
ketchupPlayInterval, waitedForPlay = true, | |
PLAYDELAY = 2000; | |
UP.updateCurrentGameId = function() { | |
currentGameId = espn.gamecast.master.current.id; | |
}; | |
espn.gamecast.subscribe("ready", UP.updateCurrentGameId); | |
UP.processSnapshots = function(snapshots, message) { | |
espn.gamecast.debug({ | |
"Caster Snapshots!": snapshots | |
}); | |
for (var i = 0, n = snapshots.length; i < n; i++) { | |
var snapshot = snapshots[i]; | |
var snapshotKey = snapshot.objId; | |
if (snapshot.objId !== undefined) { | |
var parts = snapshot.objId.split("-"), | |
updateType = parts[0], | |
gameId = "", | |
playerId = ""; | |
if (parts.length == 2) { | |
gameId = parts[1]; | |
} else { | |
if (parts.length == 3) { | |
gameId = parts[2]; | |
} else { | |
if (parts.length == 4) { | |
playerId = parts[2]; | |
gameId = parts[3]; | |
} | |
} | |
} | |
if (updateType == "oot") { | |
try { | |
UP.updateOOT(snapshot, gameId); | |
} catch (e) { | |
espn.gamecast.debug("updateOOT error: " + e); | |
} | |
} | |
if (updateType == "video") { | |
try { | |
UP.updateVideo(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateVideo error: " + e); | |
} | |
} | |
if (gameId != currentGameId) { | |
continue; | |
} | |
if (updateType == "play") { | |
try { | |
var playId = parts[1]; | |
if (message == "ketchup") { | |
UP.updatePlay(snapshot, playId); | |
} else { | |
ketchupPlayQueue.push({ | |
snapshot: snapshot, | |
playId: playId | |
}); | |
} | |
} catch (e) { | |
espn.gamecast.debug("updatePlay error" + e); | |
} | |
} else { | |
if (updateType == "game") { | |
try { | |
UP.updateGame(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateGame error: " + e); | |
} | |
} else { | |
if (updateType == "photo") { | |
try { | |
UP.updatePhoto(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updatePhoto error: " + e); | |
} | |
} else { | |
if (updateType == "tweet" && (settings.lang.toLowerCase() == snapshot.objId.split("-")[1].toLowerCase())) { | |
try { | |
UP.updateTweet(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateTweet error: " + e); | |
} | |
} else { | |
if (updateType == "nst") { | |
try { | |
UP.updateNST(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateNST error: " + e); | |
} | |
} else { | |
if (updateType == "pitcher") { | |
try { | |
UP.updatePitcher(snapshot, playerId); | |
} catch (e) { | |
espn.gamecast.debug("updatePitcher error: " + e); | |
} | |
} else { | |
if (updateType == "batter") { | |
try { | |
UP.updateBatter(snapshot, playerId); | |
} catch (e) { | |
espn.gamecast.debug("updateBatter error: " + e); | |
} | |
} else { | |
if (updateType == "scoringPlay") { | |
try { | |
UP.updateScoringPlays(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateScoringPlays error" + e); | |
} | |
} else { | |
if ((updateType == "c_en" && settings.lang == "en") || (updateType == "c_es" && settings.lang == "es")) { | |
try { | |
UP.updateCommentary(snapshot); | |
} catch (e) { | |
espn.gamecast.debug("updateCommentary error: " + e); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if (ketchupPlayQueue.length > 0) { | |
if (waitedForPlay) { | |
if (ketchupPlayInterval === undefined) { | |
ketchupPlayInterval = setInterval(UP.processPlayQueue, PLAYDELAY); | |
} | |
waitedForPlay = false; | |
setTimeout(function() { | |
waitedForPlay = true; | |
}, PLAYDELAY); | |
} | |
} | |
}; | |
UP.processPlayQueue = function() { | |
var currentPlayObj; | |
if (ketchupPlayQueue.length > 0) { | |
espn.gamecast.debug("shiftin' length:" + ketchupPlayQueue.length); | |
currentPlayObj = ketchupPlayQueue.shift(); | |
if (currentPlayObj !== undefined) { | |
UP.updatePlay(currentPlayObj.snapshot, currentPlayObj.playId); | |
} | |
} | |
espn.gamecast.debug("after length: " + ketchupPlayQueue.length); | |
if (ketchupPlayQueue.length == 0) { | |
ketchupPlayInterval = clearInterval(ketchupPlayInterval); | |
} | |
}; | |
UP.updateGame = function(snapshot) { | |
var game = espn.gamecast.master.current, | |
en_gameIndex = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], | |
es_gameIndex = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], | |
gameIndex = settings.lang == "es" ? es_gameIndex : en_gameIndex, | |
gameAttr = ["statusId", "away-score", "away-hits", "away-errors", "away-record", "home-score", "home-hits", "home-errors", "home-record", "scores-away", "scores-home", "inning", "halfInning", "status1", "status2", "strikes", "balls", "outs", "bases", "seriesText", "pvb-hits", "pvb-atBats", "pvb-homeRuns", "pvb-strikeouts", "pvb-avg", "countStats-hits", "countStats-atBats", "countStats-homeRuns", "countStats-strikeouts", "countStats-avg", "rispStats-hits", "rispStats-atBats", "rispStats-homeRuns", "rispStats-strikeouts", "rispStats-avg", "expectedRunsOne", "expectedRunsTwo", "winPercentage", "gameState"], | |
currData, parts; | |
for (var i = 0, n = gameIndex.length; i < n; i++) { | |
currData = snapshot[gameIndex[i + ""]]; | |
currData = currData != "null" ? currData : ""; | |
if (currData !== undefined && currData != null) { | |
parts = gameAttr[i].split("-"); | |
if (parts.length > 1) { | |
if (parts[0] == "scores") { | |
game[parts[0]][parts[1]] = currData.split("|"); | |
} else { | |
game[parts[0]][parts[1]] = currData; | |
} | |
} else { | |
if (parts[0] == "bases") { | |
var bases = currData.split("|"), | |
playerArray; | |
if (bases.length == 3) { | |
game.onBase = []; | |
for (var i = 0, n = bases.length; i < n; i++) { | |
playerArray = bases[i].split("!@"); | |
if (playerArray.length > 2) { | |
game.onBase.push({ | |
id: playerArray[0], | |
firstName: playerArray[1], | |
lastName: playerArray[2] | |
}); | |
} | |
} | |
} | |
} else { | |
if (parts[0] == "winPercentage") { | |
if (currData != -1) { | |
game[parts[0]] = currData; | |
} | |
} else { | |
game[parts[0]] = currData; | |
} | |
} | |
} | |
} | |
} | |
espn.gamecast.publish("gameUpdate", [game, false, true]); | |
}; | |
UP.updateOOT = function(snapshot, gameId) { | |
var ootIndex = espn.gamecast.findIndex(espn.gamecast.master.games, gameId, "id"); | |
if (ootIndex > -1) { | |
var thisGame = espn.gamecast.master.games[ootIndex], | |
en_oGameIndex = [0, 1, 2, 3, 4, 7, 8, 9, 10, 11], | |
es_oGameIndex = [0, 1, 2, 5, 6, 7, 8, 9, 10, 11], | |
oGameIndex = settings.lang == "es" ? es_oGameIndex : en_oGameIndex, | |
oGameAttr = ["gameStatus", "away-score", "home-score", "status1", "status2", "strikes", "balls", "outs", "bases", "pbpSourceId"], | |
currData, parts; | |
for (var i = 0, n = oGameIndex.length; i < n; i++) { | |
currData = snapshot[oGameIndex[i + ""]]; | |
currData = currData != "null" ? currData : ""; | |
if (currData !== undefined && currData != null) { | |
parts = oGameAttr[i].split("-"); | |
if (parts.length > 1) { | |
thisGame[parts[0]][parts[1]] = currData; | |
} else { | |
thisGame[parts[0]] = currData; | |
} | |
} | |
} | |
var queue = thisGame.id == currentGameId ? true : false; | |
espn.gamecast.publish("ootUpdate", [thisGame, false, queue]); | |
} | |
}; | |
UP.updatePlay = function(snapshot, playId) { | |
var newPlay = {}, | |
playArray = snapshot["0"].split("|"); | |
newPlay.batter = {}; | |
newPlay.pitcher = {}; | |
if (playArray.length > 10) { | |
newPlay.id = playId; | |
newPlay.atbatId = playArray[0]; | |
newPlay.batter.firstName = playArray[1]; | |
newPlay.batter.lastName = playArray[2]; | |
newPlay.batter.id = playArray[3]; | |
newPlay.pitcher.firstName = playArray[4]; | |
newPlay.pitcher.lastName = playArray[5]; | |
newPlay.pitcher.id = playArray[6]; | |
newPlay.balls = playArray[7]; | |
newPlay.strikes = playArray[8]; | |
newPlay.isScore = playArray[9]; | |
newPlay.summaryType = playArray[10]; | |
newPlay.eventType = playArray[11]; | |
newPlay.isResult = eval(playArray[12]); | |
newPlay.playType = playArray[13]; | |
newPlay.pitchXCoord = playArray[16]; | |
newPlay.pitchYCoord = playArray[17]; | |
newPlay.hitXCoord = playArray[18]; | |
newPlay.hitYCoord = playArray[19]; | |
newPlay.trajectory = playArray[20]; | |
newPlay.outs = playArray[21]; | |
newPlay.pitcher.hand = playArray[22]; | |
newPlay.batter.hand = playArray[23]; | |
newPlay.awayScore = playArray[24]; | |
newPlay.homeScore = playArray[25]; | |
newPlay.winPercentage = playArray[26]; | |
newPlay.halfInning = playArray[27]; | |
newPlay.expectedRunsOne = playArray[30]; | |
newPlay.expectedRunsTwo = playArray[31]; | |
newPlay.timeStamp = playArray[32]; | |
newPlay.velocity = playArray[33]; | |
var playIndex = espn.gamecast.findIndex(espn.gamecast.master.plays, playId, "id"), | |
spliceIndex = 0, | |
spliceNumber = 0, | |
newNote = true; | |
if (playIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = playIndex; | |
newNote = false; | |
} | |
if (settings.lang == "es") { | |
newPlay.playResult = playArray[15]; | |
newPlay.inningText = playArray[29]; | |
} else { | |
newPlay.playResult = playArray[14]; | |
newPlay.inningText = playArray[28]; | |
} | |
espn.gamecast.master.plays.splice(spliceIndex, spliceNumber, newPlay); | |
espn.gamecast.publish("playUpdate", [newPlay, newNote, true]); | |
} | |
}; | |
UP.createPitcherSplits = function(innings, oppAvg, strikeouts, era, wins, losses, saves, holds, battersFaced) { | |
this.innings = innings; | |
this.oppAvg = oppAvg; | |
this.strikeouts = strikeouts; | |
this.era = era; | |
this.wins = wins; | |
this.losses = losses; | |
this.saves = saves; | |
this.holds = holds; | |
this.battersFaced = battersFaced; | |
}; | |
UP.createPitcher = function(id, firstName, lastName, country, state, position, isStarter, hand, number, replacedBy, forPlayerId) { | |
this.id = id; | |
this.firstName = firstName; | |
this.lastName = lastName; | |
this.position = position; | |
this.country = country; | |
this.state = state; | |
this.isStarter = isStarter; | |
this.hand = hand; | |
this.replacedBy = replacedBy; | |
this.forPlayerId = forPlayerId; | |
this.today = { | |
inningsPitched: "-", | |
hits: "-", | |
runs: "-", | |
er: "-", | |
walks: "-", | |
strikeouts: "-", | |
homeruns: "-", | |
pitches: "-", | |
strikes: "-", | |
era: "-", | |
wildPitches: "-", | |
intentionalWalks: "-", | |
battersHit: "-", | |
balks: "-", | |
battersFaced: "-", | |
groundBallFlyBall: "-" | |
}; | |
this.season = new UP.createPitcherSplits("-", "-", "-", "-", "-", "-", "-", "-", "-"); | |
this.lastSeason = new UP.createPitcherSplits("-", "-", "-", "-", "-", "-", "-", "-", "-"); | |
this.vsLH = new UP.createPitcherSplits("-", "-", "-", "-", "-", "-", "-", "-", "-"); | |
this.vsRH = new UP.createPitcherSplits("-", "-", "-", "-", "-", "-", "-", "-", "-"); | |
this.awayHomeStats = new UP.createPitcherSplits("-", "-", "-", "-", "-", "-", "-", "-", "-"); | |
this.number = number; | |
}; | |
UP.updatePitcher = function(snapshot, playerId) { | |
var team = snapshot.objId.split("-")[1], | |
playerIndex = espn.gamecast.findIndex(espn.gamecast.master.pitching[team], playerId, "id"), | |
attr = ["firstName", "lastName", "position", "isStarter", "hand", "number", "forPlayerId", "replacedBy", "today-inningsPitched", "today-hits", "today-runs", "today-er", "today-walks", "today-strikeouts", "today-homeruns", "today-pitches", "today-strikes", "today-era", "today-wildPitches", "today-intentionalWalks", "today-battersHit", "today-balks", "today-battersFaced", "today-groundBallFlyBall"], | |
attrLength = attr.length, | |
newPitcher = false, | |
player, parts, currData; | |
if (playerIndex == -1) { | |
playerIndex = espn.gamecast.master.pitching[team].push(new UP.createPitcher(playerId, "", "", "", "", "", "", "", "", "", "")) - 1; | |
newPitcher = true; | |
} | |
player = espn.gamecast.master.pitching[team][playerIndex]; | |
for (var i = 0, n = attr.length; i < n; i++) { | |
currData = snapshot[i + ""]; | |
if (currData !== undefined && currData != "null" && currData != null) { | |
parts = attr[i].split("-"); | |
if (parts.length > 1) { | |
player[parts[0]][parts[1]] = currData; | |
} else { | |
player[parts[0]] = currData; | |
} | |
} | |
} | |
var splitCats = ["season", "lastSeason", "vsLH", "vsRH", "awayHomeStats"], | |
splitAttr = ["innings", "oppAvg", "strikeouts", "era", "wins", "losses", "saves", "holds", "battersFaced"]; | |
var snapIndex; | |
for (var i = 0, n = splitCats.length; i < n; i++) { | |
for (var x = 0, y = splitAttr.length; x < y; x++) { | |
snapIndex = (y * i) + attrLength + x; | |
if (snapshot[snapIndex + ""] !== undefined && snapshot[snapIndex + ""] != "null" && snapshot[snapIndex + ""] != null) { | |
player[splitCats[i]][splitAttr[x]] = snapshot[snapIndex + ""]; | |
} | |
} | |
} | |
espn.gamecast.publish("pitcherUpdate", [player, newPitcher, true]); | |
}; | |
UP.createBatterSplits = function(atBats, runs, hits, doubles, triples, homeRuns, RBIs, walks, stolenBases, strikeouts, avg, onBasePct, slugAvg) { | |
this.atBats = atBats; | |
this.runs = runs; | |
this.hits = hits; | |
this.doubles = doubles; | |
this.triples = triples; | |
this.homeRuns = homeRuns; | |
this.RBIs = RBIs; | |
this.walks = walks; | |
this.stolenBases = stolenBases; | |
this.strikeouts = strikeouts; | |
this.avg = avg; | |
this.onBasePct = onBasePct; | |
this.slugAvg = slugAvg; | |
}; | |
UP.createBatter = function(id, firstName, lastName, bats, country, state, batOrder, position, isStarter, forPlayerId, replacedBy, isPinchHitter, isPinchRunner, number) { | |
this.id = id; | |
this.firstName = firstName; | |
this.lastName = lastName; | |
this.bats = bats; | |
this.country = country; | |
this.state = state; | |
this.batOrder = batOrder; | |
this.position = position; | |
this.isStarter = isStarter; | |
this.forPlayerId = forPlayerId; | |
this.replacedBy = replacedBy; | |
this.isPinchHitter = isPinchHitter; | |
this.isPinchRunner = isPinchRunner; | |
this.today = { | |
atBats: "", | |
runs: "", | |
hits: "", | |
doubles: "", | |
triples: "", | |
homeRuns: "", | |
RBIs: "", | |
walks: "", | |
stolenBases: "", | |
strikeouts: "", | |
avg: "" | |
}; | |
this.season = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.lastSeason = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.vsLH = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.vsRH = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.awayHomeStats = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.vsOpp = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.monthStats = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.playoffStats = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.careerStats = new UP.createBatterSplits("", "", "", "", "", "", "", "", "", "", "", "", ""); | |
this.hitzone = ["", "", "", "", "", "", "", "", ""]; | |
this.sprayZone = { | |
infLeftPct: "", | |
infMidPct: "", | |
infRightPct: "", | |
outLeftPct: "", | |
outMidPct: "", | |
outRightPct: "" | |
}; | |
this.number = number; | |
}; | |
UP.updateBatter = function(snapshot, playerId) { | |
var team = snapshot.objId.split("-")[1], | |
playerIndex = espn.gamecast.findIndex(espn.gamecast.master.batting[team], playerId, "id"), | |
attr = ["firstName", "lastName", "position", "jersey", "bats", "isStarter", "batOrder", "forPlayerId", "replacedBy", "isPinchHitter", "isPinchRunner", "today-atBats", "today-runs", "today-hits", "today-doubles", "today-triples", "today-homeRuns", "today-RBIs", "today-walks", "today-stolenBases", "today-strikeouts", "today-avg", "hitzone-0", "hitzone-1", "hitzone-2", "hitzone-3", "hitzone-4", "hitzone-5", "hitzone-6", "hitzone-7", "hitzone-8", "sprayZone-infLeftPct", "sprayZone-infMidPct", "sprayZone-infRightPct", "sprayZone-outLeftPct", "sprayZone-outMidPct", "sprayZone-outRightPct"], | |
attrLength = attr.length, | |
newBatter = false, | |
needToSort = false, | |
player, currData; | |
if (playerIndex == -1) { | |
playerIndex = espn.gamecast.master.batting[team].push(new UP.createBatter(playerId, "", "", "", "", "", "", "", "", "", "", "", "", "")) - 1; | |
newBatter = true; | |
needToSort = true; | |
} | |
player = espn.gamecast.master.batting[team][playerIndex]; | |
for (var i = 0, n = attr.length; i < n; i++) { | |
currData = snapshot[i + ""]; | |
if (currData !== undefined && currData != "null" && currData != null) { | |
parts = attr[i].split("-"); | |
if (parts.length > 1) { | |
player[parts[0]][parts[1]] = currData; | |
} else { | |
if (parts[0] == "batOrder") { | |
needToSort = true; | |
} | |
player[parts[0]] = currData; | |
} | |
} | |
} | |
var splitCats = ["season", "lastSeason", "vsLH", "vsRH", "awayHomeStats", "vsOpp", "monthStats", "playoffStats", "careerStats"], | |
splitAttr = ["atBats", "runs", "hits", "doubles", "triples", "homeRuns", "RBIs", "walks", "stolenBases", "strikeouts", "avg", "onBasePct", "slugAvg"]; | |
var snapIndex; | |
for (var i = 0, n = splitCats.length; i < n; i++) { | |
for (var x = 0, y = splitAttr.length; x < y; x++) { | |
snapIndex = (y * i) + attrLength + x; | |
if (snapshot[snapIndex + ""] !== undefined && snapshot[snapIndex + ""] != "null" && snapshot[snapIndex + ""] != null) { | |
player[splitCats[i]][splitAttr[x]] = snapshot[snapIndex + ""]; | |
} | |
} | |
} | |
if (needToSort) { | |
espn.gamecast.master.batting[team].sort(function(a, b) { | |
if (a.batOrder === undefined || a.batOrder == "") { | |
return 1; | |
} else { | |
return parseInt(a.batOrder, 10) - parseInt(b.batOrder, 10); | |
} | |
}); | |
} | |
espn.gamecast.publish("batterUpdate", [player, newBatter, true]); | |
}; | |
UP.nst = function(id, note) { | |
this.id = id; | |
this.note = note; | |
}; | |
UP.updateNST = function(snapshot) { | |
var noteId = snapshot.objId.split("-")[1], | |
note = snapshot["0"], | |
noteIndex = espn.gamecast.findIndex(espn.gamecast.master.nst, noteId, "id"), | |
spliceIndex = 0, | |
spliceNumber = 0, | |
newNote = true; | |
noteObj = new UP.nst(noteId, note); | |
if (noteIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = noteIndex; | |
newNote = false; | |
} | |
espn.gamecast.master.nst.splice(spliceIndex, spliceNumber, noteObj); | |
espn.gamecast.publish("nstUpdate", [noteObj, newNote, false]); | |
}; | |
UP.photo = function(photoId, timeStamp, text, img, largeImg) { | |
this.photoId = photoId; | |
this.timeStamp = timeStamp; | |
this.text = text; | |
this.img = img; | |
this.largeImg = largeImg; | |
}; | |
UP.updatePhoto = function(snapshot) { | |
var photoId = snapshot.objId.split("-")[1], | |
img = snapshot["0"].split("|")[0], | |
text = snapshot["0"].split("|")[1], | |
timeStamp = snapshot["0"].split("|")[2], | |
largeImg = snapshot["0"].split("|")[3], | |
photoIndex = espn.gamecast.findIndex(espn.gamecast.master.photos, photoId, "photoId"), | |
photoObj = new UP.photo(photoId, timeStamp, text, img, largeImg), | |
newPhoto = true; | |
if (photoIndex >= 0) { | |
newPhoto = false; | |
espn.gamecast.master.photos.splice(photoIndex, 1, photoObj); | |
} else { | |
espn.gamecast.master.photos.push(photoObj); | |
} | |
espn.gamecast.publish("photoUpdate", [photoObj, newPhoto, false]); | |
}; | |
UP.tweet = function(tweetId, timeStamp, userName, text, img, isESPNTalent, displayName, isRetweet, origUserName, origDisplayName, origProfileImage) { | |
this.tweetId = tweetId; | |
this.timeStamp = timeStamp; | |
this.userName = userName; | |
this.text = text.indexOf("<") >= 0 ? $("<p>" + text + "</p>").text() : text; | |
this.img = img; | |
this.isESPNTalent = eval(isESPNTalent); | |
this.displayName = displayName; | |
this.isRetweet = isRetweet; | |
this.original = { | |
userName: origUserName, | |
displayName: origDisplayName, | |
img: origProfileImage | |
}; | |
}; | |
UP.updateTweet = function(snapshot) { | |
var tweetId = snapshot.objId.split("-")[2], | |
img = snapshot["0"].split("|")[0], | |
text = snapshot["0"].split("|")[1], | |
userName = snapshot["0"].split("|")[2], | |
timeStamp = snapshot["0"].split("|")[3], | |
isESPNTalent = snapshot["0"].split("|")[4], | |
displayName = snapshot["0"].split("|")[5], | |
isRetweet = snapshot["0"].split("|")[6] || false, | |
origUserName = snapshot["0"].split("|")[7] || "", | |
origDisplayName = snapshot["0"].split("|")[8] || "", | |
origProfileImage = snapshot["0"].split("|")[9] || "", | |
tweetIndex = espn.gamecast.findIndex(espn.gamecast.master.tweets, tweetId, "tweetId"), | |
spliceIndex = 0, | |
spliceNumber = 0, | |
tweetObj = new UP.tweet(tweetId, timeStamp, userName, text, img, isESPNTalent, displayName, isRetweet, origUserName, origDisplayName, origProfileImage), | |
newTweet = true; | |
if (tweetIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = tweetIndex; | |
newTweet = false; | |
} | |
espn.gamecast.master.tweets.splice(spliceIndex, spliceNumber, tweetObj); | |
espn.gamecast.publish("tweetUpdate", [tweetObj, newTweet, true]); | |
}; | |
UP.scoringPlay = function(atbatId, playId, playResult, inningText, homeScore, awayScore) { | |
this.atbatId = atbatId; | |
this.playId = playId; | |
this.playResult = playResult; | |
this.inningText = inningText; | |
this.homeScore = homeScore; | |
this.awayScore = awayScore; | |
this.pitches = []; | |
}; | |
UP.scoringPlayPitch = function(playId, pitchResult) { | |
this.playId = playId; | |
this.pitchResult = pitchResult; | |
}; | |
UP.updateScoringPlays = function(snapshot) { | |
var atbatId = snapshot.objId.split("-")[1], | |
playId = snapshot.objId.split("-")[2], | |
abArray = snapshot["0"].split("|"), | |
inningText = settings.lang == "es" ? abArray[1] : abArray[0], | |
awayScore = abArray[2], | |
homeScore = abArray[3], | |
playResult = settings.lang == "es" ? abArray[5] : abArray[4], | |
playArray = abArray[6].split("!@"), | |
spIndex = espn.gamecast.findIndex(espn.gamecast.master.scoringPlays, playId, "playId"), | |
spliceNumber = 0, | |
spliceIndex = 0, | |
newScoringPlay = new UP.scoringPlay(atbatId, playId, playResult, inningText, homeScore, awayScore), | |
newSP = true, | |
pitchId, pitchResult, pitches; | |
for (var i = 0, n = playArray.length; i < n; i++) { | |
pitches = playArray[i].split("$!"); | |
if (pitches.length > 1) { | |
pitchId = pitches[0]; | |
pitchResult = pitches[1]; | |
newScoringPlay.pitches.push(new UP.scoringPlayPitch(pitchId, pitchResult)); | |
} | |
} | |
if (spIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = spIndex; | |
newSP = false; | |
} | |
espn.gamecast.master.scoringPlays.splice(spliceIndex, spliceNumber, newScoringPlay); | |
espn.gamecast.publish("spUpdate", [newScoringPlay, newSP, true]); | |
}; | |
UP.commentaryMsg = function(id, isHost, author, message, minute, avatar) { | |
this.id = id; | |
this.isHost = isHost; | |
this.author = author; | |
this.message = message; | |
this.minute = minute; | |
this.avatar = avatar; | |
}; | |
UP.updateCommentary = function(snapshot) { | |
var cilMessageInfoString = snapshot["0"], | |
cilMessageArray = cilMessageInfoString.split("|"); | |
if (cilMessageArray.length == 6) { | |
var id = cilMessageArray[0], | |
isHost = cilMessageArray[1], | |
author = cilMessageArray[2], | |
message = cilMessageArray[3], | |
minute = cilMessageArray[4], | |
avatar = cilMessageArray[5], | |
cilIndex = espn.gamecast.findIndex(espn.gamecast.master.commentary.comments, id, "id"), | |
newCIL = true, | |
spliceIndex = 0, | |
spliceNumber = 0, | |
cilObj = new UP.commentaryMsg(id, isHost, author, message, minute, avatar); | |
if (cilIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = cilIndex; | |
newCIL = false; | |
} | |
espn.gamecast.master.commentary.comments.splice(spliceIndex, spliceNumber, cilObj); | |
espn.gamecast.publish("comUpdate", [cilObj, newCIL, false]); | |
} | |
}; | |
UP.video = function(id, title, description, length, thumbnail, includePlatforms, photo, gameId, isStoryVideo) { | |
this.id = id; | |
this.title = title; | |
this.description = description; | |
this.length = length; | |
this.thumbnail = thumbnail; | |
this.includePlatforms = includePlatforms; | |
this.photo = photo; | |
this.gameId = gameId; | |
}; | |
UP.updateVideo = function(snapshot) { | |
var vidArray = snapshot[0].split("|"); | |
if (vidArray.length >= 5) { | |
var id = vidArray[0], | |
title = vidArray[1], | |
description = vidArray[2], | |
length = vidArray[3], | |
thumbnail = vidArray[4], | |
includePlatforms = vidArray.length >= 6 ? vidArray[5].split(",") : [], | |
photo = vidArray.length >= 7 ? vidArray[6] : "", | |
isStoryVideo = vidArray.length >= 8 ? vidArray[7] : false, | |
gameId = snapshot.objId.split("-").length >= 3 ? snapshot.objId.split("-")[2] : 0, | |
vidIndex = espn.gamecast.findIndex(espn.gamecast.master.videos, id, "id"), | |
newVideo = true, | |
spliceIndex = 0, | |
spliceNumber = 0, | |
newVidObj = new UP.video(id, title, description, length, thumbnail, includePlatforms, photo, gameId, isStoryVideo); | |
if (vidIndex >= 0) { | |
spliceNumber = 1; | |
spliceIndex = vidIndex; | |
newVideo = false; | |
} | |
espn.gamecast.master.videos.splice(spliceIndex, spliceNumber, newVidObj); | |
espn.gamecast.publish("videoUpdate", [newVidObj, newVideo, false]); | |
} | |
}; | |
})(jQuery, settings); | |
espn.gamecast.header = {}; | |
(function($) { | |
var HEAD = espn.gamecast.header; | |
HEAD.update = function() { | |
HEAD.builders.matchup(); | |
HEAD.builders.linescore(); | |
HEAD.builders.awayBox(); | |
HEAD.builders.homeBox(); | |
$("body").removeClass("live final pregame").addClass(espn.gamecast.getGameState(espn.gamecast.master.current.statusId)); | |
}; | |
HEAD.builders = { | |
matchup: function() { | |
var awayTeam = espn.gamecast.master.current.away, | |
homeTeam = espn.gamecast.master.current.home, | |
atText = settings.lang == "es" ? "visita a" : "at"; | |
outputHTML = '<h1 class="matchup">' + espn.gamecast.getFullTeamName(awayTeam) + " " + (awayTeam.record != " " ? awayTeam.record : "") + " " + atText + " " + espn.gamecast.getFullTeamName(homeTeam) + " " + (homeTeam.record != " " ? homeTeam.record : "") + '</h1><h2 class="tv">'; | |
if (espn.gamecast.master.current.seriesText && espn.gamecast.master.current.seriesText != "") { | |
outputHTML += espn.gamecast.master.current.seriesText + " "; | |
} | |
if (espn.gamecast.master.current.tvText != "") { | |
outputHTML += "TV: " + espn.gamecast.master.current.tvText; | |
} | |
outputHTML += "</h2>"; | |
$("#game-overview").html(outputHTML); | |
}, | |
linescore: function() { | |
var endInning = espn.gamecast.master.current.inning > 9 ? espn.gamecast.master.current.inning : 9, | |
startInning = espn.gamecast.master.current.inning > 10 ? espn.gamecast.master.current.inning - 10 : 1, | |
currInning = espn.gamecast.master.current.inning, | |
team, scores, teamString; | |
var outputHTML = '<table cellspacing="0"><thead><tr><td class="team"> </td>'; | |
for (var i = startInning; i <= endInning; i++) { | |
outputHTML += "<td>" + i + "</td>"; | |
} | |
outputHTML += '<td> </td><td class="rhe">' + espn.gamecast.translate("R") + '</td><td class="rhe">' + espn.gamecast.translate("H") + '</td><td class="rhe">' + espn.gamecast.translate("E") + "</td></tr></thead><tbody>"; | |
for (var i = 0; i < 2; i++) { | |
if (i == 0) { | |
team = espn.gamecast.master.current.away; | |
scores = espn.gamecast.master.current.scores.away; | |
teamString = "away"; | |
} else { | |
team = espn.gamecast.master.current.home; | |
scores = espn.gamecast.master.current.scores.home; | |
teamString = "home"; | |
} | |
outputHTML += '<tr class="' + teamString + '-line"><td class="team">' + team.abbrev.toUpperCase() + "</td>"; | |
for (var x = startInning; x <= endInning; x++) { | |
var inningClass = x == currInning && espn.gamecast.master.current.statusId != 3 ? "currInn" : ""; | |
outputHTML += '<td class="' + inningClass + '">' + scores[x - 1] + "</td>"; | |
} | |
outputHTML += '<td class="spacer"> </td><td class="rhe">' + team.score + '</td><td class="rhe">' + team.hits + '</td><td class="rhe">' + team.errors + "</td>"; | |
} | |
outputHTML += "</tbody>"; | |
"</table>"; | |
$("#linescore").html(outputHTML); | |
}, | |
awayBox: function() { | |
var awayTeam = espn.gamecast.master.current.away, | |
scoreClass = espn.gamecast.master.current.gameState === "pregame" && espn.gamecast.isMobile ? "rotatingScore record" : "rotatingScore", | |
scoreText = espn.gamecast.master.current.gameState === "pregame" && espn.gamecast.isMobile ? awayTeam.record : awayTeam.score, | |
outputHTML = '<div class="team-name vteamname" style="background-color:' + awayTeam.color + ';">' + (espn.gamecast.master.current.isAllStarGame ? awayTeam.loc.toUpperCase() : awayTeam.name.toUpperCase() ? awayTeam.name.toUpperCase() : espn.gamecast.getFullTeamName(awayTeam).toUpperCase()) + '</div><div class="score-info"><div class="logo-medium vlogo"><img src="' + awayTeam.logo + '" /></div><div class="score"><div class="' + scoreClass + '">' + scoreText + "</div></div></div>"; | |
$("#awayScoreBox").html(outputHTML); | |
}, | |
homeBox: function() { | |
var homeTeam = espn.gamecast.master.current.home, | |
scoreClass = (espn.gamecast.master.current.gameState === "pregame" && espn.gamecast.isMobile) ? "rotatingScore record" : "rotatingScore", | |
scoreText = (espn.gamecast.master.current.gameState === "pregame" && espn.gamecast.isMobile) ? homeTeam.record : homeTeam.score, | |
outputHTML = '<div class="team-name hteamname" style="background-color:' + homeTeam.color + ';">' + (espn.gamecast.master.current.isAllStarGame ? homeTeam.loc.toUpperCase() : homeTeam.name.toUpperCase() ? homeTeam.name.toUpperCase() : espn.gamecast.getFullTeamName(homeTeam).toUpperCase()) + '</div><div class="score-info"><div class="score"><div class="' + scoreClass + '">' + scoreText + '</div></div><div class="logo-medium hlogo"><img src="' + homeTeam.logo + '" /></div></div>'; | |
$("#homeScoreBox").html(outputHTML); | |
}, | |
projWinner: function() { | |
var winPercentage = espn.gamecast.master.current.winPercentage < 0 || espn.gamecast.master.current.winPercentage == "" ? 50 : parseFloat(espn.gamecast.master.current.winPercentage) * 100, | |
homeTeam = espn.gamecast.master.current.home, | |
awayTeam = espn.gamecast.master.current.away, | |
homePct = parseInt(winPercentage, 10), | |
awayPct = parseInt(100 - winPercentage), | |
winningTeamClass = winPercentage < 50 ? "visitor-team" : "home-team", | |
winningTeamClass = homePct === 50 ? "even" : winningTeamClass, | |
outputHTML = '<div class="proj-winner ' + winningTeamClass + '"><div class="winner-arrows"><div class="winner-arrow away"></div><div class="label">' + espn.gamecast.translate("Projected Winner") + '</div><div class="winner-arrow home"></div></div><div class="winner-shade home" style="background-color:' + homeTeam.color + ';"></div><div class="winner-shade visitor" style="background-color:' + awayTeam.color + ';"></div><p class="winner-team visitor">' + awayTeam.name.toUpperCase() + " <span>" + awayPct + '%</span></p><p class="winner-team home">' + homeTeam.name.toUpperCase() + " <span>" + homePct + "%</span></p></div>"; | |
$("#projWinner").html(outputHTML); | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.activityFeed = {}; | |
(function($) { | |
var AF = espn.gamecast.activityFeed, | |
incrementPhotos = false, | |
isPhotoDelayed = false, | |
numCurrPhotos = 0; | |
AF.update = function(data, type) { | |
if (type == "play") { | |
var play = data; | |
if (play.playResult != "null" && (play.summaryType == "P" || play.summaryType == "N" || play.summaryType == "S" || play.summaryType == "C" || play.summaryType == "A" || play.eventType == 58)) { | |
if (play.playType == "play" || (!play.isResult && play.outs == 3 && play.playType == "atbat")) { | |
var playIndex = espn.gamecast.findIndex(AF.feed, play.id, "playId"), | |
newPlay = new AF.builders.json.play(play.id, play.playResult + " " + play.velocity, "", play.eventType, play.inningText, play.timeStamp); | |
if (playIndex > -1) { | |
AF.feed.splice(playIndex, 1, newPlay); | |
$("#af_play-" + play.id).replaceWith(AF.builders.html.play(newPlay)); | |
} else { | |
AF.feed.splice(0, 0, newPlay); | |
$("#activityFeed").children("ul").prepend(AF.builders.html.play(newPlay)); | |
} | |
} else { | |
var atbatIndex = espn.gamecast.findIndex(AF.feed, play.atbatId, "atbatId"), | |
result = ""; | |
if (atbatIndex > -1) { | |
result = eval(play.isResult) ? play.playResult : AF.feed[atbatIndex].result; | |
var isScore = eval(play.isScore) ? play.isScore : AF.feed[atbatIndex].isScore; | |
var newAtBat = new AF.builders.json.atbat(play.atbatId, play.batter.firstName, play.batter.lastName, play.batter.id, play.pitcher.firstName, play.pitcher.lastName, play.pitcher.id, result, AF.feed[atbatIndex].pitches, isScore, play.inningText, play.timeStamp), | |
pitchIndex = espn.gamecast.findIndex(AF.feed[atbatIndex].pitches, play.id, "playId"), | |
newPitch = new AF.builders.json.pitch(play.id, eval(play.isScore), play.summaryType, play.playResult + " " + play.velocity, play.isResult); | |
if (pitchIndex > -1) { | |
AF.feed[atbatIndex].pitches.splice(pitchIndex, 1, newPitch); | |
} else { | |
AF.feed[atbatIndex].pitches.push(newPitch); | |
} | |
AF.feed.splice(atbatIndex, 1, newAtBat); | |
$("#af_atbat-" + play.atbatId).replaceWith(AF.builders.html.atbat(newAtBat, true)); | |
} else { | |
result = eval(play.isResult) ? play.playResult : ""; | |
var newPitch = new AF.builders.json.pitch(play.id, eval(play.isScore), play.summaryType, play.playResult + " " + play.velocity, play.isResult), | |
newAtBat = new AF.builders.json.atbat(play.atbatId, play.batter.firstName, play.batter.lastName, play.batter.id, play.pitcher.firstName, play.pitcher.lastName, play.pitcher.id, result, [newPitch], eval(play.isScore), play.inningText, play.timeStamp); | |
AF.feed.splice(0, 0, newAtBat); | |
$("#activityFeed ul li.atBat").removeClass("expanded"); | |
$("#activityFeed").children("ul").prepend(AF.builders.html.atbat(newAtBat, true)); | |
} | |
} | |
} | |
} else { | |
if (type == "tweet") { | |
var tweet = data, | |
tweetIndex = espn.gamecast.findIndex(AF.feed, tweet.tweetId, "tweetId"), | |
newTweet = new AF.builders.json.tweet(tweet.tweetId, tweet.text, tweet.img, tweet.userName, tweet.timeStamp, tweet.displayName); | |
if (tweetIndex > -1) { | |
AF.feed.splice(tweetIndex, 1, newTweet); | |
$("#af_tweet-" + tweet.tweetId).replaceWith(AF.builders.html.tweet(newTweet)); | |
} else { | |
AF.feed.splice(0, 0, newTweet); | |
$("#activityFeed").children("ul").prepend(AF.builders.html.tweet(newTweet)); | |
} | |
} else { | |
if (type == "photo") { | |
var photo = data, | |
photoIndex = espn.gamecast.findIndex(AF.feed, photo.photoId, "photoId"), | |
newPhoto = new AF.builders.json.photo(photo.photoId, photo.img, photo.text, photo.timeStamp); | |
if (photoIndex > -1) { | |
AF.feed.splice(photoIndex, 1, newPhoto); | |
$("#af_photo-" + photo.photoId).replaceWith(AF.builders.html.photo(newPhoto)); | |
} else { | |
AF.feed.splice(0, 0, newPhoto); | |
if (!incrementPhotos) { | |
isPhotoDelayed = true; | |
setTimeout(function() { | |
$("#activityFeed").children("ul").prepend(AF.builders.html.photo(newPhoto)); | |
isPhotoDelayed = false; | |
}, 10000); | |
numCurrPhotos++; | |
incrementPhotos = true; | |
setTimeout(function() { | |
incrementPhotos = false; | |
numCurrPhotos = 0; | |
}, 300000); | |
} else { | |
numCurrPhotos++; | |
AF.incrementPhotoCount(); | |
} | |
} | |
} | |
} | |
} | |
}; | |
AF.build = function() { | |
AF.feed = []; | |
var plays = espn.gamecast.master.plays, | |
tweets = espn.gamecast.master.tweets, | |
photos = espn.gamecast.master.photos, | |
photoIndex = 0, | |
tweetIndex = 0, | |
outputHTML = "", | |
numTweets = tweets != undefined ? tweets.length : 0, | |
numPhotos = photos != undefined ? photos.length : 0, | |
feedItems = AF.feed, | |
currentPitches = [], | |
result = "", | |
isScore = false, | |
isResult = false, | |
feedItem; | |
for (var i = plays.length - 1; i >= 0; i--) { | |
if (plays[i].summaryType == "A") { | |
currentPitches = []; | |
result = ""; | |
isScore = false; | |
isResult = false; | |
atbatTimestamp = plays[i].timeStamp; | |
for (var x = i - 1; x >= 0; x--) { | |
if (plays[x].eventType == 57 && (plays[x].summaryType == "N" || plays[x].summaryType == "S") && (plays[x + 1].strikes == 3 || plays[x + 1].balls == 4 || plays[x + 1].playResult.indexOf("in play") >= 0 || plays[x + 1].playResult.toLowerCase().indexOf("en juego") >= 0)) { | |
isResult = true; | |
result = plays[x].playResult; | |
isScore = plays[x].isScore; | |
atbatTimestamp = plays[x].timeStamp; | |
currentPitches.push(new AF.builders.json.pitch(plays[x].id, isScore, plays[x].summaryType, plays[x].playResult + " " + plays[x].velocity, isResult)); | |
i--; | |
} else { | |
if (plays[x].eventType == 57 && plays[x].outs == 3) { | |
break; | |
} else { | |
currentPitches.push(new AF.builders.json.pitch(plays[x].id, isScore, plays[x].summaryType, plays[x].playResult + " " + plays[x].velocity, isResult)); | |
i--; | |
} | |
} | |
if (isResult) { | |
break; | |
} | |
} | |
feedItems.push(new AF.builders.json.atbat(plays[i].atbatId, plays[i].batter.firstName, plays[i].batter.lastName, plays[i].batter.id, plays[i].pitcher.firstName, plays[i].pitcher.lastName, plays[i].pitcher.id, result, currentPitches, isScore, plays[i].inningText, atbatTimestamp)); | |
} else { | |
feedItems.push(new AF.builders.json.play(plays[i].id, plays[i].playResult + " " + plays[i].velocity, "", plays[i].eventType, plays[i].inningText, plays[i].timeStamp)); | |
} | |
} | |
feedItems.reverse(); | |
var numItems = feedItems.length + numPhotos + numTweets; | |
for (var i = 0; i < numItems; i = i + 2) { | |
if (i % 4 == 0 && tweetIndex < numTweets) { | |
if (tweets[tweetIndex] !== undefined) { | |
feedItems.splice(i, 0, new AF.builders.json.tweet(tweets[tweetIndex].tweetId, tweets[tweetIndex].text, tweets[tweetIndex].img, tweets[tweetIndex].userName, tweets[tweetIndex].timeStamp, tweets[tweetIndex].displayName)); | |
tweetIndex++; | |
} | |
} else { | |
if (i % 4 == 2 && photoIndex < numPhotos) { | |
feedItems.splice(i, 0, new AF.builders.json.photo(photos[photoIndex].photoId, photos[photoIndex].img, photos[photoIndex].text, photos[photoIndex].timeStamp)); | |
photoIndex++; | |
} | |
} | |
} | |
feedItems = feedItems.sort(AF.sortFeed); | |
var countingPhotos = false, | |
displayItemIndex; | |
for (var i = 0, n = feedItems.length; i < n; i++) { | |
feedItem = feedItems[i]; | |
if (countingPhotos) { | |
if (feedItem.type !== "photo") { | |
outputHTML += AF.builders.html.photo(feedItems[i - 1], false); | |
countingPhotos = false; | |
outputHTML += AF.builders.html[feedItem.type](feedItem, false); | |
numCurrPhotos = 0; | |
} else { | |
numCurrPhotos++; | |
} | |
} else { | |
if (feedItem.type === "photo") { | |
countingPhotos = true; | |
displayItemIndex = i; | |
numCurrPhotos++; | |
} else { | |
outputHTML += AF.builders.html[feedItem.type](feedItem, false); | |
} | |
} | |
} | |
if (numCurrPhotos !== 0 && displayItemIndex !== undefined) { | |
outputHTML += AF.builders.html.photo(feedItems[(displayItemIndex + numCurrPhotos) - 1], false); | |
} | |
numCurrPhotos = 0; | |
$("#activityFeed").html("<ul>" + outputHTML + "</ul>"); | |
$("#activityFeed").children("ul").children("li.atBat:first").addClass("expanded"); | |
var $title = $("#activityFeed ul li.atBat .expander"); | |
$title.die(); | |
$title.live("click", function(e) { | |
e.preventDefault(); | |
var $this = $(this); | |
$this.siblings("ul.pitches").slideToggle("fast", function() { | |
if ($(this).is(":hidden")) { | |
$this.parent().removeClass("expanded"); | |
} else { | |
$this.parent().addClass("expanded"); | |
} | |
}); | |
}); | |
}; | |
AF.builders = { | |
html: { | |
atbat: function(feedItem, isExpanded) { | |
var title = feedItem.result != "" ? "<span class='inning'>" + feedItem.inningText + ":</span> " + feedItem.result : "<span class='inning'>" + feedItem.inningText + ":</span> " + feedItem.pitcher.firstName + " " + feedItem.pitcher.lastName + " " + espn.gamecast.translate("pitching to") + " " + feedItem.batter.firstName + " " + feedItem.batter.lastName, | |
outputHTML = "", | |
scoringClass = feedItem.isScore ? "scoring-play" : "", | |
expandedClass = isExpanded ? "expanded" : ""; | |
outputHTML += '<li id="af_atbat-' + feedItem.atbatId + '" class="feed-mod play atBat ' + scoringClass + " " + expandedClass + '"><a href="#" class="expand-arrow expander"></a><p class="play-text expander"><a href="#">' + title + '</a></p><ul class="pitches">'; | |
for (var n = 0, i = feedItem.pitches.length - 1; i >= n; i--) { | |
outputHTML += this.pitch(feedItem.pitches[i]); | |
} | |
outputHTML += "</ul></li>"; | |
return outputHTML; | |
}, | |
play: function(feedItem) { | |
if (feedItem.text == "null") { | |
return ""; | |
} else { | |
if (feedItem.eventType == "58") { | |
return '<li id="af_play-' + feedItem.playId + '"><h2 class="inning-header">' + feedItem.text + "</h2></li>"; | |
} else { | |
if (feedItem.eventType != "59" && feedItem.text.trim() != "null") { | |
return '<li id="af_play-' + feedItem.playId + '" class="feed-mod play"><p class="play-text"><span class="inning">' + feedItem.inningText + ":</span> " + feedItem.text + "</p></li>"; | |
} else { | |
return ""; | |
} | |
} | |
} | |
}, | |
tweet: function(feedItem) { | |
if (feedItem !== undefined) { | |
return '<li id="af_tweet-' + feedItem.tweetId + '" class="feed-mod tweet"><div class="twit-pic"><a href="https://twitter.com/' + feedItem.userName + '" target="_blank"><img src="' + feedItem.img + '" width="48" height="48" border="0" title="' + feedItem.userName + '" alt="' + feedItem.userName + '" class="post-img" /></a></div><div class="twit-content"><div class="twit-header"><span class="twit-time"><a href="https://twitter.com/' + feedItem.userName + "/status/" + feedItem.tweetId + '" target="_blank">' + AF.getTimeSince(feedItem.timeStamp) + '</a></span><a href="https://twitter.com/" target="_blank"><img src="http://a.espncdn.com/i/gamecast/twitter/twitter-logo.png" class="twitter-logo" /></a><span class="twit-name"><a href="https://twitter.com/' + feedItem.userName + '" target="_blank">' + feedItem.displayName + '</a></span><span class="twit-handle">@<a href="https://twitter.com/' + feedItem.userName + '" target="_blank">' + feedItem.userName + '</a></span></div><p class="twit-text">' + AF.linkitup(feedItem.text.replace(/&#|&#/g, "&#")) + '</p><div class="twit-footer">' + AF.getTwitterLinks(feedItem) + '</div></div><div class="clear"></div></li>'; | |
} else { | |
return ""; | |
} | |
}, | |
photo: function(feedItem) { | |
var displayText = feedItem.text.length > 250 ? feedItem.text.substring(0, feedItem.text.indexOf(" ", 230)) + "..." : feedItem.text, | |
photoCount = numCurrPhotos > 1 ? '<span class="photoCount">1 ' + espn.gamecast.translate("of") + " " + numCurrPhotos + " " + espn.gamecast.translate("Photos Received") + "<br/></span>" : '<span class="photoCount"></span>'; | |
return '<li id="af_photo-' + feedItem.photoId + '" class="feed-mod photo video"><a href="#" class="launchGallery"><img width="110" src="' + feedItem.img + '" title="' + feedItem.text + '" onerror="this.src=\'http://a.espncdn.com/combiner/i?img=broadband/video/images/thumb_default_576.gif&w=110\'" /></a><p class="vid-date">' + photoCount + displayText + "</p></li>"; | |
}, | |
pitch: function(pitch) { | |
var outputHTML = ""; | |
if (pitch.text.trim() != "null" && !eval(pitch.isResult) && pitch.summaryType != "A") { | |
outputHTML += '<li id="af_play-' + pitch.playId + '"><p>' + pitch.text + "</p></li>"; | |
} | |
return outputHTML; | |
} | |
}, | |
json: { | |
atbat: function(atbatId, batterFirstName, batterLastName, batterId, pitcherFirstName, pitcherLastName, pitcherId, result, pitches, isScore, inningText, timeStamp) { | |
this.atbatId = atbatId; | |
this.batter = {}; | |
this.batter.firstName = batterFirstName; | |
this.batter.lastName = batterLastName; | |
this.batter.id = batterId; | |
this.pitcher = {}; | |
this.pitcher.firstName = pitcherFirstName; | |
this.pitcher.lastName = pitcherLastName; | |
this.pitcher.id = pitcherId; | |
this.result = result; | |
this.pitches = pitches; | |
this.type = "atbat"; | |
this.isScore = isScore; | |
this.inningText = inningText; | |
this.timeStamp = timeStamp; | |
return this; | |
}, | |
play: function(playId, text, img, eventType, inningText, timeStamp) { | |
this.playId = playId; | |
this.text = text; | |
this.img = img; | |
this.eventType = eventType; | |
this.inningText = inningText; | |
this.type = "play"; | |
this.timeStamp = timeStamp; | |
return this; | |
}, | |
tweet: function(tweetId, text, img, userName, timeStamp, displayName) { | |
this.tweetId = tweetId; | |
this.img = img; | |
this.text = text; | |
this.userName = userName; | |
this.displayName = displayName; | |
this.timeStamp = timeStamp; | |
this.type = "tweet"; | |
return this; | |
}, | |
photo: function(photoId, img, text, timeStamp) { | |
this.photoId = photoId; | |
this.img = img; | |
this.text = text; | |
this.timeStamp = timeStamp; | |
this.type = "photo"; | |
return this; | |
}, | |
pitch: function(playId, isScore, summaryType, text, isResult) { | |
this.playId = playId; | |
this.isScore = isScore; | |
this.summaryType = summaryType; | |
this.text = text; | |
this.isResult = isResult; | |
return this; | |
} | |
} | |
}; | |
AF.feed = []; | |
AF.sortFeed = function(a, b) { | |
return parseInt(b.timeStamp, 10) - parseInt(a.timeStamp, 10); | |
}; | |
AF.replay = function(playId) { | |
if (playId !== undefined) { | |
var rePlayIndex = espn.gamecast.findIndex(espn.gamecast.master.plays, playId, "id"), | |
rePlay = rePlayIndex >= 0 ? espn.gamecast.master.plays[rePlayIndex] : undefined; | |
if (rePlay !== undefined) { | |
var resultIndex = espn.gamecast.findIndex(espn.gamecast.activityFeed.feed, rePlay.atbatId, "atbatId"); | |
espn.gamecast.activityFeed.replayResult = resultIndex >= 0 ? espn.gamecast.activityFeed.feed[resultIndex].result : ""; | |
try { | |
espn.gamecast.publish("replay", [{ | |
type: rePlay.trajectory, | |
x: rePlay.hitXCoord, | |
y: rePlay.hitYCoord, | |
eventType: rePlay.eventType, | |
result: AF.replayResult | |
}]); | |
} catch (e) { | |
espn.gamecast.debug("error: " + e); | |
} | |
} | |
} | |
}; | |
AF.replayResult = ""; | |
AF.handleReplayComplete = function() { | |
AF.replayResult = ""; | |
}; | |
AF.incrementPhotoCount = function() { | |
if (numCurrPhotos > 1 && !isPhotoDelayed) { | |
$("#activityFeed li.photo:first").find(".photoCount").replaceWith('<span class="photoCount">1 ' + espn.gamecast.translate("of") + " " + numCurrPhotos + " " + espn.gamecast.translate("Photos Received") + "<br/></span>"); | |
} | |
}; | |
AF.getTwitterLinks = function(tweet) { | |
var linkHTML = '<ul class="twit-actions">', | |
actions = [{ | |
link: "https://twitter.com/intent/tweet?in_reply_to=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/reply.png", | |
text: "Reply", | |
imgClass: "" | |
}, { | |
link: "https://twitter.com/intent/retweet?tweet_id=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/retweet.png", | |
text: "Retweet", | |
imgClass: "retweet" | |
}, { | |
link: "https://twitter.com/intent/favorite?tweet_id=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/fav.png", | |
text: "Favorite", | |
imgClass: "" | |
}]; | |
for (var i = 0, n = actions.length; i < n; i++) { | |
linkHTML += '<li class="twit-action">'; | |
linkHTML += '<a href="' + actions[i].link + '" target="_blank"><img src="' + actions[i].img + '" class="' + actions[i].imgClass + '"/> ' + actions[i].text + "</a>"; | |
linkHTML += "</li>"; | |
} | |
linkHTML += "</ul>"; | |
return linkHTML; | |
}; | |
AF.linkitup = function(text) { | |
var returnText = text; | |
returnText = returnText.replace(/@(\w*(?!<))/g, function(m1, m2) { | |
return ' @<a href="https://twitter.com/' + $.trim(m2) + '" target="_blank">' + $.trim(m2) + "</a> "; | |
}); | |
returnText = returnText.replace(/((^|\s)\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, function(m1) { | |
return ' <a href="' + $.trim(m1) + '" target="_blank">' + $.trim(m1) + "</a> "; | |
}); | |
returnText = returnText.replace(/(^|\s)#(\w*(?!<))/g, function(m1, m2, m3) { | |
return ' #<a href="https://twitter.com/search?q=%23' + $.trim(m3) + '&src=hash" target="_blank">' + $.trim(m3) + "</a> "; | |
}); | |
return returnText; | |
}; | |
AF.bindTweetLinks = function() { | |
if (espn.gamecast.isMobile) { | |
$("#activityFeed ul").off().on("click", ".tweet a", function(e) { | |
var $this = $(this); | |
e.preventDefault(); | |
window.open($this.attr("href"), "twittersharer", "scrollbars=0"); | |
}); | |
} | |
}; | |
AF.getTimeSince = function(timeStr) { | |
var date = new Date((parseInt(timeStr, 10) || "")), | |
diff = (((new Date()).getTime() - date.getTime()) / 1000), | |
day_diff = Math.floor(diff / 86400); | |
if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) { | |
return ""; | |
} | |
return day_diff == 0 && (diff < 3600 && Math.floor(diff / 60) + "m" || diff < 86400 && Math.floor(diff / 3600) + " h") || day_diff < 7 && day_diff + "d" || day_diff < 31 && Math.ceil(day_diff / 7) + "w"; | |
}; | |
espn.gamecast.subscribe("replayComplete", AF.handleReplayComplete); | |
})(jQuery); | |
espn.gamecast.battingSplits = {}; | |
(function($) { | |
var SPLITS = espn.gamecast.battingSplits, | |
currentIndex = 0, | |
splitInterval; | |
SPLITS.build = function(splits, init) { | |
if (splits != undefined && splits.length > 0) { | |
SPLITS.splits = splits; | |
if (init) { | |
currentIndex = 0; | |
clearInterval(splitInterval); | |
} else { | |
currentIndex = currentIndex >= SPLITS.splits.length ? 0 : currentIndex; | |
} | |
$("#rotating-splits").html("<p>" + SPLITS.splits[currentIndex] + "</p>"); | |
if (init) { | |
splitInterval = setInterval("espn.gamecast.battingSplits.animate()", 8000); | |
} | |
} else { | |
$("#rotating-splits").html(""); | |
} | |
}; | |
SPLITS.splits = []; | |
SPLITS.animate = function() { | |
var nextIndex = currentIndex + 1 == SPLITS.splits.length ? 0 : currentIndex + 1; | |
if (SPLITS.splits.length > 0) { | |
$("#rotating-splits").children("p").fadeOut(250, function() { | |
var $this = $(this); | |
$this.html(SPLITS.splits[nextIndex]); | |
$this.fadeIn(250); | |
currentIndex = nextIndex; | |
}); | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.pbp = {}; | |
(function($) { | |
var PBP = espn.gamecast.pbp; | |
PBP.update = function(data) { | |
var play = data; | |
espn.gamecast.debug("recieved play:" + play.playResult); | |
if (play.playResult != "null" && (play.summaryType == "P" || play.summaryType == "N" || play.summaryType == "S" || play.summaryType == "A" || play.eventType == 58)) { | |
if (play.playType == "play" || (!play.isResult && play.outs == 3 && play.playType == "atbat")) { | |
var playIndex = espn.gamecast.findIndex(PBP.feed, play.id, "playId"), | |
newPlay = new PBP.builders.json.play(play.id, play.playResult + " " + play.velocity, "", play.eventType, play.inningText); | |
if (playIndex > -1) { | |
PBP.feed.splice(playIndex, 1, newPlay); | |
$("#pbp_play-" + play.id).replaceWith(PBP.builders.html.play(newPlay)); | |
} else { | |
PBP.feed.splice(0, 0, newPlay); | |
$("#playbyplay").children("ul").prepend(PBP.builders.html.play(newPlay)); | |
} | |
} else { | |
var atbatIndex = espn.gamecast.findIndex(PBP.feed, play.atbatId, "atbatId"), | |
result = ""; | |
if (atbatIndex > -1) { | |
result = eval(play.isResult) ? play.playResult : PBP.feed[atbatIndex].result; | |
var isScore = eval(play.isScore) ? play.isScore : PBP.feed[atbatIndex].isScore, | |
newAtBat = new PBP.builders.json.atbat(play.atbatId, play.batter.firstName, play.batter.lastName, play.batter.id, play.pitcher.firstName, play.pitcher.lastName, play.pitcher.id, result, PBP.feed[atbatIndex].pitches, isScore, play.inningText), | |
pitchIndex = espn.gamecast.findIndex(PBP.feed[atbatIndex].pitches, play.id, "playId"), | |
newPitch = new PBP.builders.json.pitch(play.id, eval(play.isScore), play.summaryType, play.playResult + " " + play.velocity, play.isResult); | |
if (pitchIndex > -1) { | |
PBP.feed[atbatIndex].pitches.splice(pitchIndex, 1, newPitch); | |
} else { | |
PBP.feed[atbatIndex].pitches.push(newPitch); | |
} | |
$("#pbp_atbat-" + play.atbatId).replaceWith(PBP.builders.html.atbat(newAtBat, true)); | |
} else { | |
result = eval(play.isResult) ? play.playResult : ""; | |
var newPitch = new PBP.builders.json.pitch(play.id, eval(play.isScore), play.summaryType, play.playResult + " " + play.velocity, play.isResult), | |
newAtBat = new PBP.builders.json.atbat(play.atbatId, play.batter.firstName, play.batter.lastName, play.batter.id, play.pitcher.firstName, play.pitcher.lastName, play.pitcher.id, result, [newPitch], eval(play.isScore), play.inningText); | |
$("#playbyplay ul li.atBat").removeClass("expanded lastAtBat"); | |
PBP.feed.splice(0, 0, newAtBat); | |
$("#playbyplay").children("ul").prepend(PBP.builders.html.atbat(newAtBat, true)); | |
} | |
} | |
} | |
$("#pbp_play-0").remove(); | |
}; | |
PBP.build = function() { | |
PBP.feed = []; | |
var plays = espn.gamecast.master.plays, | |
outputHTML = "", | |
feedItems = PBP.feed, | |
currentPitches = [], | |
result = "", | |
isScore = false, | |
isResult = false, | |
feedItem; | |
for (var i = plays.length - 1; i >= 0; i--) { | |
if (plays[i].summaryType == "A") { | |
currentPitches = []; | |
result = ""; | |
isScore = false; | |
isResult = false; | |
for (var x = i - 1; x >= 0; x--) { | |
if (plays[x].eventType == 57 && (plays[x].summaryType == "N" || plays[x].summaryType == "S") && (plays[x + 1].strikes == 3 || plays[x + 1].balls == 4 || plays[x + 1].playResult.indexOf("in play") >= 0 || plays[x + 1].playResult.toLowerCase().indexOf("en juego") >= 0)) { | |
isResult = true; | |
result = plays[x].playResult; | |
isScore = plays[x].isScore; | |
currentPitches.push(new PBP.builders.json.pitch(plays[x].id, isScore, plays[x].summaryType, plays[x].playResult + " " + plays[x].velocity, isResult)); | |
i--; | |
} else { | |
if (plays[x].eventType == 57 && plays[x].outs == 3) { | |
break; | |
} else { | |
currentPitches.push(new PBP.builders.json.pitch(plays[x].id, isScore, plays[x].summaryType, plays[x].playResult + " " + plays[x].velocity, isResult)); | |
i--; | |
} | |
} | |
if (isResult) { | |
break; | |
} | |
} | |
feedItems.push(new PBP.builders.json.atbat(plays[i].atbatId, plays[i].batter.firstName, plays[i].batter.lastName, plays[i].batter.id, plays[i].pitcher.firstName, plays[i].pitcher.lastName, plays[i].pitcher.id, result, currentPitches, isScore, plays[i].inningText)); | |
} else { | |
feedItems.push(new PBP.builders.json.play(plays[i].id, plays[i].playResult + " " + plays[i].velocity, "", plays[i].eventType, plays[i].inningText)); | |
} | |
} | |
var getMoreBtn = ""; | |
if (plays.length > 0 && (plays[plays.length - 1].halfInning | 0) > 0) { | |
getMoreBtn = '<div id="getMore" class="getMoreBtn round-btn"><img class="more-loader" src="http://a.espncdn.com/i/gamecast/refresh/ajax-loader.gif" height="16" alt=""><span class="more-text">' + espn.gamecast.translate("Load All Plays") + "</span></div>"; | |
} | |
feedItems.reverse(); | |
for (var i = 0, n = feedItems.length; i < n; i++) { | |
feedItem = feedItems[i]; | |
outputHTML += PBP.builders.html[feedItem.type](feedItem, false); | |
} | |
if (feedItems.length == 0) { | |
outputHTML += '<li id="pbp_play-0" class="feed-mod play"><p class="play-text">' + espn.gamecast.translate("Play-by-Play Currently Unavailable") + "</p></li>"; | |
} | |
$("#playbyplay").html("<ul>" + outputHTML + "</ul>" + getMoreBtn); | |
$("#playbyplay").children("ul").children("li.atBat:first").addClass("expanded lastAtBat"); | |
$title = $("#playbyplay ul li.atBat .expander"); | |
$title.die(); | |
$title.live("click", function(e) { | |
e.preventDefault(); | |
var $this = $(this); | |
$this.siblings("ul.pitches").slideToggle("fast", function() { | |
if ($(this).is(":hidden")) { | |
$this.parent().removeClass("expanded"); | |
} else { | |
$this.parent().addClass("expanded"); | |
} | |
}); | |
}); | |
$("#getMore").on("click", PBP.getMore); | |
}; | |
var gettingMore = false; | |
PBP.getMore = function() { | |
if (!gettingMore) { | |
$("#getMore").addClass("loading"); | |
gettingMore = true; | |
$.ajax({ | |
url: "/mlb/gamecast12/master?gameId=" + espn.gamecast.master.current.id + "&plays=true", | |
type: "GET", | |
dataType: "json", | |
success: function(data) { | |
espn.gamecast.master.plays = data.gamecast.plays; | |
PBP.build(); | |
$("#getMore").hide(); | |
gettingMore = false; | |
} | |
}); | |
} | |
}; | |
PBP.builders = { | |
html: { | |
atbat: function(feedItem, isExpanded) { | |
var title = feedItem.result != "" ? "<span class='inning'>" + feedItem.inningText + ":</span> " + feedItem.result : "<span class='inning'>" + feedItem.inningText + ":</span> " + feedItem.pitcher.firstName + " " + feedItem.pitcher.lastName + " " + espn.gamecast.translate("pitching to") + " " + feedItem.batter.firstName + " " + feedItem.batter.lastName, | |
outputHTML = "", | |
scoringClass = feedItem.isScore ? "scoring-play" : "", | |
expandedClass = isExpanded ? "expanded lastAtBat" : ""; | |
outputHTML += '<li id="pbp_atbat-' + feedItem.atbatId + '" class="feed-mod play atBat ' + scoringClass + " " + expandedClass + '"><a href="#" class="expand-arrow expander"></a><p class="play-text expander"><a href="#">' + title + '</a></p><ul class="pitches">'; | |
for (var n = 0, i = feedItem.pitches.length - 1; i >= n; i--) { | |
outputHTML += this.pitch(feedItem.pitches[i]); | |
} | |
outputHTML += "</ul></li>"; | |
return outputHTML; | |
}, | |
play: function(feedItem) { | |
if (feedItem.text != "null") { | |
if (feedItem.eventType == "58") { | |
return '<li id="pbp_play-' + feedItem.playId + '"><h2 class="inning-header">' + feedItem.text + "</h2></li>"; | |
} else { | |
if (feedItem.eventType != "59" && feedItem.text.trim() != "null") { | |
return '<li id="pbp_play-' + feedItem.playId + '" class="feed-mod play"><p class="play-text"><span class="inning">' + feedItem.inningText + ":</span> " + feedItem.text + "</p></li>"; | |
} else { | |
return ""; | |
} | |
} | |
} else { | |
return ""; | |
} | |
}, | |
pitch: function(pitch) { | |
var outputHTML = ""; | |
if (pitch.text.trim() != "null" && !eval(pitch.isResult) && pitch.summaryType != "A") { | |
outputHTML += '<li id="pbp_play-' + pitch.playId + '"><p>' + pitch.text + "</p></li>"; | |
} | |
return outputHTML; | |
} | |
}, | |
json: { | |
atbat: function(atbatId, batterFirstName, batterLastName, batterId, pitcherFirstName, pitcherLastName, pitcherId, result, pitches, isScore, inningText) { | |
this.atbatId = atbatId; | |
this.batter = {}; | |
this.batter.firstName = batterFirstName; | |
this.batter.lastName = batterLastName; | |
this.batter.id = batterId; | |
this.pitcher = {}; | |
this.pitcher.firstName = pitcherFirstName; | |
this.pitcher.lastName = pitcherLastName; | |
this.pitcher.id = pitcherId; | |
this.result = result; | |
this.pitches = pitches; | |
this.type = "atbat"; | |
this.isScore = isScore; | |
this.inningText = inningText; | |
return this; | |
}, | |
play: function(playId, text, img, eventType, inningText) { | |
this.playId = playId; | |
this.text = text; | |
this.img = img; | |
this.eventType = eventType; | |
this.inningText = inningText; | |
this.type = "play"; | |
return this; | |
}, | |
pitch: function(playId, isScore, summaryType, text, isResult) { | |
this.playId = playId; | |
this.isScore = isScore; | |
this.summaryType = summaryType; | |
this.text = text; | |
this.isResult = isResult; | |
return this; | |
} | |
} | |
}; | |
PBP.feed = []; | |
PBP.replay = function(playId) { | |
if (playId !== undefined) { | |
var rePlayIndex = espn.gamecast.findIndex(espn.gamecast.master.plays, playId, "id"), | |
rePlay = rePlayIndex >= 0 ? espn.gamecast.master.plays[rePlayIndex] : undefined; | |
if (rePlay !== undefined) { | |
var resultIndex = espn.gamecast.findIndex(espn.gamecast.pbp.feed, rePlay.atbatId, "atbatId"); | |
espn.gamecast.pbp.replayResult = resultIndex >= 0 ? espn.gamecast.pbp.feed[resultIndex].result : ""; | |
try { | |
espn.gamecast.publish("replay", [{ | |
type: rePlay.trajectory, | |
x: rePlay.hitXCoord, | |
y: rePlay.hitYCoord, | |
eventType: rePlay.eventType, | |
result: PBP.replayResult | |
}]); | |
} catch (e) { | |
espn.gamecast.debug("error: " + e); | |
} | |
} | |
} | |
}; | |
PBP.handleReplayComplete = function() { | |
PBP.replayResult = ""; | |
}; | |
PBP.replayResult = ""; | |
espn.gamecast.subscribe("replayComplete", PBP.handleReplayComplete); | |
})(jQuery); | |
espn.gamecast.scoringPlays = {}; | |
(function($) { | |
var SP = espn.gamecast.scoringPlays; | |
SP.update = function(scoringPlay, newSP) { | |
if (!newSP) { | |
$sp = $("#sp_atbat-" + scoringPlay.playId); | |
$sp.replaceWith(SP.builders.html.atbat(scoringPlay, $sp.children("ul.pitches").is(":visible"))); | |
} else { | |
$("#scoringPlays ul li.atBat").removeClass("expanded"); | |
$("#scoringPlays").children("ul").prepend(SP.builders.html.atbat(scoringPlay, true)); | |
} | |
$("#sp_atbat-0").remove(); | |
}; | |
SP.build = function() { | |
var sp = espn.gamecast.master.scoringPlays, | |
outputHTML = ""; | |
for (var i = 0, n = sp.length; i < n; i++) { | |
outputHTML += SP.builders.html.atbat(sp[i], i == 0); | |
} | |
if (sp.length == 0) { | |
outputHTML += '<li id="sp_atbat-0" class="feed-mod play"><p>' + espn.gamecast.translate("Scoring Plays Currently Unavailable") + "</p></li>"; | |
} | |
$("#scoringPlays").html("<ul>" + outputHTML + "</ul>"); | |
$title = jQuery("#scoringPlays ul li.atBat .expander"); | |
$title.die(); | |
$title.live("click", function(e) { | |
e.preventDefault(); | |
$this = jQuery(this); | |
$this.siblings("ul.pitches").slideToggle("fast", function() { | |
if (jQuery(this).is(":hidden")) { | |
$this.parent().removeClass("expanded"); | |
} else { | |
$this.parent().addClass("expanded"); | |
} | |
}); | |
}); | |
}; | |
SP.builders = { | |
html: { | |
atbat: function(abatItem, isExpanded) { | |
var outputHTML = "", | |
expandedClass = isExpanded ? "expanded" : "", | |
homeTeam = espn.gamecast.master.current.home, | |
awayTeam = espn.gamecast.master.current.away, | |
homeText = abatItem.inningText.indexOf("Bot") >= 0 || abatItem.inningText.indexOf("Baja") >= 0 ? "<span>" + homeTeam.abbrev.toUpperCase() + " " + abatItem.homeScore + "</span>" : homeTeam.abbrev.toUpperCase() + " " + abatItem.homeScore, | |
awayText = abatItem.inningText.indexOf("Top") >= 0 || abatItem.inningText.indexOf("Alta") >= 0 ? "<span>" + awayTeam.abbrev.toUpperCase() + " " + abatItem.awayScore + "</span>" : awayTeam.abbrev.toUpperCase() + " " + abatItem.awayScore; | |
outputHTML += '<li id="sp_atbat-' + abatItem.playId + '" class="feed-mod play atBat scoring-play ' + expandedClass + '"><div class="score-line"><h2 class="inning">' + abatItem.inningText + '</h2><h2 class="score">' + awayText + " - " + homeText + '</h2></div><a href="#" class="expand-arrow expander"></a><p class="play-text expander"><a href="#">' + abatItem.playResult + '</a></p><ul class="pitches">'; | |
for (var i = 0, n = abatItem.pitches.length; i < n; i++) { | |
outputHTML += this.pitch(abatItem.pitches[i]); | |
} | |
outputHTML += "</ul></li>"; | |
return outputHTML; | |
}, | |
pitch: function(pitch) { | |
var outputHTML = '<li id="sp_play-' + pitch.playId + '"><p>' + pitch.pitchResult + "</p></li>"; | |
return outputHTML; | |
} | |
} | |
}; | |
SP.replay = function(playId) { | |
if (playId !== undefined) { | |
var rePlayIndex = espn.gamecast.findIndex(espn.gamecast.master.plays, playId, "id"), | |
rePlay = rePlayIndex >= 0 ? espn.gamecast.master.plays[rePlayIndex] : undefined; | |
if (rePlay !== undefined) { | |
var resultIndex = espn.gamecast.findIndex(espn.gamecast.activityFeed.feed, rePlay.atbatId, "atbatId"); | |
espn.gamecast.scoringPlays.replayResult = resultIndex >= 0 ? espn.gamecast.activityFeed.feed[resultIndex].result : ""; | |
try { | |
espn.gamecast.publish("replay", [{ | |
type: rePlay.trajectory, | |
x: rePlay.hitXCoord, | |
y: rePlay.hitYCoord, | |
eventType: rePlay.eventType, | |
result: SP.replayResult | |
}]); | |
} catch (e) { | |
espn.gamecast.debug("error: " + e); | |
} | |
} | |
} | |
}; | |
SP.handleReplayComplete = function() { | |
SP.replayResult = ""; | |
}; | |
SP.replayResult = ""; | |
espn.gamecast.subscribe("replayComplete", SP.handleReplayComplete); | |
})(jQuery); | |
espn.gamecast.socialLinks = {}; | |
(function($) { | |
var SOC = espn.gamecast.socialLinks, | |
bitlyURL = "nZqH26"; | |
SOC.build = function(current) { | |
var outputHTML = '<div class="buttons">' + SOC.buildFacebook(current) + SOC.buildTwitter(current) + "</div>" + SOC.buildBugReport(); | |
$("#socialLinks-wrap").html(outputHTML); | |
SOC.activateTwitterLink(); | |
SOC.activateFacebookLink(current.id); | |
}; | |
SOC.buildMobile = function(current) { | |
$("#mobile-share-container").html(SOC.buildFacebook(current) + SOC.buildTwitter(current)); | |
SOC.activateFacebookLink(current.id); | |
SOC.activateTwitterLink(); | |
}; | |
SOC.buildTwitter = function(current) { | |
var scoreText = current.home.score > current.away.score ? "#" + current.home.abbrev.toUpperCase() + " " + current.home.score + " vs #" + current.away.abbrev.toUpperCase() + " " + current.away.score : "#" + current.away.abbrev.toUpperCase() + " " + current.away.score + " at #" + current.home.abbrev.toUpperCase() + " " + current.home.score, | |
midInn = settings.lang == "es" ? current.status1.indexOf("Mitad") : current.status1.indexOf("Mid"), | |
gameStatus = ""; | |
if (current.statusId == 3) { | |
gameStatus = "F"; | |
} else { | |
if (midInn) { | |
gameStatus = "Mid " + current.inning; | |
} else { | |
gameStatus = (parseInt(current.halfInning, 10) % 2 === 0 ? "Top " : "Bot ") + current.inning; | |
} | |
} | |
return '<div style="float: right;"><a id="twitter_link" class="twitter_link" href="http://twitter.com/share" data-url="http://espn.go.com/mlb/gamecast?gameId=' + current.id + '" display-url="http://espn.go.com/mlb/gamecast?gameId=' + current.id + '" data-text="Follow live on ESPN MLB Gamecast ' + scoreText + " " + gameStatus + ' #espn #mlb #gamecast"><span class="birdy"></span><span class="text">Tweet</span></a></div>'; | |
}; | |
SOC.buildFacebook = function(current) { | |
return '<div style="float: left; padding-right: 10px; padding-top: 1px;"><a id="facebook_link" name="fb_share" type="button" target="_blank" share_url="http://scores.espn.go.com/mlb/gamecast?gameId=' + current.id + '" href="http://www.facebook.com/sharer.php"><img src="http://a.espncdn.com/i/gamecast/fb-share.png" width="60" height="18" /></a></div>'; | |
}; | |
SOC.buildOptOut = function() { | |
if (settings.lang == "en") { | |
return '<div class="bug-container" style="text-align:center"><a id="opt-out" href="#exit-beta">' + espn.gamecast.translate("Exit BETA Version") + "</a></div>"; | |
} else { | |
return ""; | |
} | |
}; | |
SOC.activateTwitterLink = function() { | |
$("#twitter_link").off().on("click", function(e) { | |
var $this = $(this); | |
e.preventDefault(); | |
window.open("https://twitter.com/intent/tweet?text=" + encodeURIComponent($this.attr("data-text")) + "&url=" + encodeURIComponent($this.attr("data-url")), "twittersharer", "width=550,height=275,scrollbars=0"); | |
}); | |
}; | |
SOC.activateFacebookLink = function(currentId) { | |
$("#facebook_link").off().on("click", function(e) { | |
e.preventDefault(); | |
window.open("http://www.facebook.com/sharer.php?u=http://scores.espn.go.com/" + settings.sport.toLowerCase() + "/gamecast?gameId=" + currentId, "facebooksharer", "width=550,height=275,scrollbars=0"); | |
}); | |
}; | |
SOC.popFeedBack = function() { | |
var gameInfoStr = ""; | |
var d = new Date(); | |
gameInfoStr = "&Original: " + settings.gameId + " Current: " + espn.gamecast.master.current.id; | |
gameInfoStr += "+<br /><b>Resolution:</b>+" + screen.width + "x" + screen.height + "+(" + screen.availWidth + "x" + screen.availHeight + ")"; | |
window.open("http://dynamic.espn.go.com/espn/bugs?url=http://scores.espn.go.com/" + settings.sport + "/gamecast (" + (d.getMonth() + 1) + "-" + d.getDate() + "-" + d.getFullYear() + ")" + gameInfoStr, "Bugs", "nonresizable,noscrollbars,height=400,width=400"); | |
}; | |
SOC.buildBugReport = function() { | |
if (settings.lang != "es") { | |
return '<div class="bug-container"><a href="#" onclick="espn.gamecast.socialLinks.popFeedBack(); return false;">Send us your Feedback</a></div>'; | |
} else { | |
return ""; | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.video = {}; | |
(function($) { | |
var VID = espn.gamecast.video, | |
log = espn.gamecast.debug, | |
flashVersion = swfobject.getFlashPlayerVersion(), | |
showVideoAd = true, | |
playingVideoAd = false, | |
waitedForAd = true, | |
playingHighlight = false, | |
isIpad = /iPad/i.test(navigator.userAgent), | |
hasFlash = false, | |
hasVideoPlayer = false, | |
lastMediaId = 0, | |
adsViewable = true, | |
adTimer, countdownInterval, videoAdURL = "Pre-Roll", | |
isPreroll = true, | |
isMobile = window.location.search.indexOf("version=mobile") >= 0, | |
allowNativePlayer = espn.gamecast.checkHTML5Player(); | |
VID.embedPlayer = function() { | |
if (allowNativePlayer) { | |
hasVideoPlayer = true; | |
var playerType = settings.lang == "es" ? "deportes" : "espn"; | |
if (lastMediaId == 0) { | |
espn.video.embed({ | |
player: "gameCast09", | |
width: 576, | |
height: 324, | |
cms: playerType | |
}); | |
} else { | |
espn.video.embed({ | |
player: "gameCast09", | |
width: 576, | |
height: 324, | |
id: lastMediaId, | |
cms: playerType | |
}); | |
} | |
espn.gamecast.debug("playerType = " + playerType); | |
} | |
}; | |
VID.getDebugInfo = function() { | |
espn.gamecast.debug("Show Video Ad: " + showVideoAd + ", Playing Video Ad: " + playingVideoAd + ", Waited for Ad: " + waitedForAd); | |
}; | |
VID.totallyWaited = function() { | |
waitedForAd = true; | |
}; | |
VID.bringItAroundTown = function(val) { | |
waitedForAd = val === true; | |
showVideoAd = val === true; | |
}; | |
VID.playAd = function() { | |
if (!isMobile && !playingVideoAd && adsViewable && showVideoAd && waitedForAd) { | |
espn.gamecast.debug("Play ad"); | |
espn.gamecast.publish("comPlayer", [true, false, false]); | |
var adVars = { | |
adUnit: videoAdURL, | |
midSequence: 0, | |
siteSection: "espn:gamecast:" + settings.sport.toLowerCase(), | |
videoID: "espn:gamecast:" + settings.sport.toLowerCase() | |
}; | |
espn.video.insertAd(adVars); | |
playingVideoAd = true; | |
waitedForAd = false; | |
VID.setAdTimer(); | |
} else { | |
espn.gamecast.debug("Not playing ad"); | |
} | |
}; | |
VID.preventAds = function() { | |
adsViewable = false; | |
}; | |
VID.allowAds = function() { | |
adsViewable = true; | |
}; | |
VID.clearAdTimer = function() { | |
clearTimeout(adTimer); | |
adTimer = undefined; | |
waitedForAd = false; | |
showVideoAd = false; | |
log("Ad Timer: " + adTimer); | |
}; | |
VID.setAdTimer = function() { | |
adTimer = setTimeout(function() { | |
waitedForAd = true; | |
showVideoAd = true; | |
}, 300000); | |
}; | |
VID.getAdTimer = function() { | |
return adTimer; | |
}; | |
VID.skipAd = function(skip) { | |
if (playingVideoAd) { | |
if (!isPreroll) { | |
espn.gamecast.publish("bannerAdRefresh"); | |
} | |
if (skip !== undefined && skip == "yes") { | |
espn.gamecast.track("link", { | |
info: "videoadskip" | |
}); | |
espn.video.skipAd(); | |
} | |
playingVideoAd = false; | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
} else { | |
if (skip == "yes") { | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
} | |
} | |
}; | |
function onAdStart(duration) { | |
if (!isNaN(duration)) { | |
countdown(parseInt(duration, 10)); | |
} else { | |
document.getElementById("note").innerHTML = "Advertisement: Content will continue after ad is complete"; | |
} | |
isPreroll = false; | |
} | |
function countdown(duration) { | |
clearInterval(countdownInterval); | |
var start = duration; | |
var secondString = settings.lang == "es" ? " segundos" : " seconds"; | |
if (start == 1) { | |
secondString = settings.lang == "es" ? " segundo" : " second"; | |
} | |
document.getElementById("countdown").innerHTML = start + secondString; | |
countdownInterval = setInterval(function() { | |
start--; | |
secondString = settings.lang == "es" ? " segundos" : " seconds"; | |
if (start == 1) { | |
secondString = settings.lang == "es" ? " segundo" : " second"; | |
} | |
document.getElementById("countdown").innerHTML = start + secondString; | |
if (start <= 0) { | |
setTimeout(function() { | |
jQuery.pub("espn.video.ad.end"); | |
}, 5000); | |
clearInterval(countdownInterval); | |
} | |
}, 1000); | |
} | |
VID.cancelCountdown = function() { | |
clearInterval(countdownInterval); | |
}; | |
VID.update = function(video, newVideo) { | |
var videoHTML = VID.builders.html(video); | |
if (!newVideo) { | |
$vid = $("#vid-" + video.id); | |
$vid.replaceWith(videoHTML); | |
} else { | |
$("#videoFeed").children("ul").prepend(videoHTML); | |
} | |
$("#vid-0").remove(); | |
}; | |
VID.build = function(videos) { | |
var outputHTML = ""; | |
if (videos !== undefined) { | |
for (var i = 0, n = videos.length; i < n; i++) { | |
if (espn.gamecast.isVideoViewable(videos[i])) { | |
outputHTML += VID.builders.html(videos[i]); | |
} | |
} | |
if (videos.length == 0 || outputHTML == "") { | |
outputHTML = "<li id='vid-0' class='feed-mod photo video'><p>" + espn.gamecast.translate("Videos Currently Unavailable") + "</p></li>"; | |
} | |
} | |
$("#videoFeed").html("<ul>" + outputHTML + "</ul>"); | |
}; | |
VID.builders = { | |
html: function(video) { | |
var vidInfo = ""; | |
if (video.playId == undefined || video.playId <= 0) { | |
vidInfo = '<p class="vid-descrip"><a href="#" class="video-highlight" data-videoId="' + video.id + '">' + video.title + '</a></p><p class="vid-date">' + video.description + " (" + video.length.substring(3) + ")</p>"; | |
} else { | |
vidInfo = '<p class="playText"><a href="#" class="video-highlight" data-videoId="' + video.id + '"><span>' + video.downDistance + "</span>" + video.playText + "</a> (" + video.length.substring(3) + ")</p>"; | |
} | |
return '<li id="vid-' + video.id + '" class="feed-mod video" abbr="' + video.playId + '"><div class="video-container"><div class="vid-icon"></div><a href="#" class="video-highlight" data-videoId="' + video.id + '"><img class="thumb" src="' + video.thumbnail + '" onerror="this.src=\'http://a.espncdn.com/i/gamecast/football/vid_thumb_default.png\'; return false;"></a></div>' + vidInfo + '<div class="clear"></div></li>'; | |
} | |
}; | |
VID.playHighlight = function(mediaId) { | |
lastMediaId = mediaId; | |
allowNativePlayer = espn.gamecast.checkHTML5Player(); | |
if (!playingVideoAd) { | |
if (hasFlash || allowNativePlayer) { | |
espn.gamecast.publish("comPlayer", [true, true, false]); | |
document.getElementById("note").style.display = "none"; | |
document.getElementById("closeButton").style.display = "block"; | |
if (hasVideoPlayer) { | |
espn.video.play(mediaId); | |
playingHighlight = true; | |
} else { | |
VID.embedPlayer(); | |
} | |
} | |
} | |
}; | |
VID.stopHighlight = function() { | |
if (playingHighlight) { | |
espn.video.pause(); | |
} | |
playingHighlight = false; | |
playingVideoAd = false; | |
$("#note").show(); | |
$("#closeButton").hide(); | |
espn.gamecast.publish("comPlayer", [false, true, false]); | |
return false; | |
}; | |
if (flashVersion !== undefined && flashVersion.major !== undefined && flashVersion.major >= 10 && !isMobile) { | |
$("#video-frame").removeClass("vidHide"); | |
hasFlash = true; | |
VID.embedPlayer(); | |
} else { | |
if (!isMobile) { | |
setTimeout(function() { | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
}, 1000); | |
} | |
} | |
$("#video-frame").on("click", "#closeButton", function(e) { | |
e.preventDefault(); | |
VID.stopHighlight(); | |
}); | |
espn.video.subscribe("espn.video.init", VID.playAd); | |
espn.video.subscribe("espn.video.ad.end", VID.skipAd); | |
espn.video.subscribe("espn.video.ad.start", onAdStart); | |
espn.video.subscribe("espn.video.playlist.ended", VID.stopHighlight); | |
})(jQuery); | |
espn.gamecast.audio = {}; | |
(function($) { | |
var AUD = espn.gamecast.audio; | |
AUD.startVolume = 1; | |
AUD.startMute = false; | |
AUD.preLoaded = false; | |
AUD.initFlashApi = function(playerId) { | |
espn.gamecast.audio.radioPlayer = document.getElementById(playerId); | |
}; | |
AUD.loadLive = function(streamUrl, autoPlay) { | |
if (streamUrl) { | |
streamUrl = streamUrl.replace("token=", "primaryToken="); | |
var parameters = { | |
streamProtocol: "akamai", | |
src: streamUrl, | |
plugin_OSMFHLS: "http://a.espncdn.com/i/espnradio/11/player/swf/plugins/OSMFHLSPlugin.swf", | |
plugin_MediaAnalytics: "http://79423.analytics.edgesuite.net/csma/plugin/csma.swf", | |
streamType: "live", | |
autoPlay: autoPlay, | |
bufferTime: "10", | |
width: "1", | |
height: "1", | |
volume: espn.gamecast.audio.startVolume, | |
muted: espn.gamecast.audio.startMute, | |
verbose: false, | |
controlBarAutoHide: true, | |
javascriptCallbackFunction: "espn.gamecast.audio.initFlashApi", | |
csmaPluginPath: "http://79423.analytics.edgesuite.net/csma/plugin/csma.swf", | |
csmaBeaconPath: "http://ma123-c.analytics.edgesuite.net/config/beacon-1355.xml" | |
}; | |
swfobject.embedSWF(espn.core.cdnHTTPPath + "i/espnradio/11/player/swf/stable/EspnRadioPlayer.Live.swf", "audio-player-container", 1, 1, "10.1.0", {}, parameters, { | |
allowFullScreen: "false", | |
wmode: "transparent", | |
allowscriptaccess: "always" | |
}, { | |
name: "audio-player-container" | |
}); | |
} | |
}; | |
AUD.buildStations = function(stations) { | |
if (stations) { | |
if (stations.length > 0) { | |
$("#live-audio").empty(); | |
for (var i = 0; i < stations.length; i++) { | |
nowPlaying = stations[i].nowPlaying; | |
streamInfo = stations[i].streamInfo; | |
if ((typeof nowPlaying !== "undefined") && (typeof streamInfo !== "undefined")) { | |
stationName = nowPlaying.stationName; | |
showName = nowPlaying.showName; | |
thumb = nowPlaying.showImage_300; | |
streamUrl = streamInfo.streamUrl; | |
$("#live-audio").append("<div class=\"feed-mod video audio-item {type:'live',streamUrl:'" + streamUrl + "',thumb:'" + thumb + '\'}"><p class="vid-descrip"><a href="#" class="audio-play">' + stationName + '</a></p><p class="vid-date">' + showName + ' <img src="' + espn.core.cdnHTTPPath + 'icons/live.gif"></p></div>'); | |
if (i == 0 && !espn.gamecast.audio.preLoaded) { | |
espn.gamecast.audio.updateNowPlaying(stationName, showName, thumb); | |
espn.gamecast.audio.loadLive(streamUrl, false); | |
espn.gamecast.audio.preLoaded = true; | |
$("#live-audio .audio-item:first").addClass("active"); | |
} | |
} | |
} | |
} | |
} | |
}; | |
AUD.buildPodcasts = function(podcasts) { | |
if (podcasts) { | |
if (podcasts.length > 0) { | |
$("#ondemand-audio").empty(); | |
for (var i = 0; i < podcasts.length; i++) { | |
name = podcasts[i].name; | |
shortDescription = podcasts[i].shortDescription; | |
enclosureUrl = podcasts[i].enclosureUrl; | |
if (podcasts[i].images) { | |
thumb = podcasts[i].images.image134; | |
} | |
$("#ondemand-audio").append("<div class=\"feed-mod video audio-item {type:'ondemand',url:'" + enclosureUrl + "',thumb:'" + thumb + '\'}"><p class="vid-descrip"><a href="#" class="audio-play">' + name + '</a></p><p class="vid-date">' + shortDescription + "</p></div>"); | |
if (i == 0 && !espn.gamecast.audio.preLoaded) { | |
espn.gamecast.audio.updateNowPlaying(name, shortDescription, thumb); | |
espn.gamecast.audio.loadOnDemand(enclosureUrl, false); | |
espn.gamecast.audio.preLoaded = true; | |
$("#ondemand-audio .audio-item:first").addClass("active"); | |
} | |
} | |
} | |
} | |
}; | |
AUD.loadOnDemand = function(fileUrl, autoPlay) { | |
var parameters = { | |
src: fileUrl, | |
plugin_AkamaiAdvancedStreamingPlugin: "http://players.edgesuite.net/flash/plugins/osmf/advanced-streaming-plugin/fp10.1/v1.2/AkamaiAdvancedStreamingPlugin.swf", | |
plugin_MediaAnalytics: "http://79423.analytics.edgesuite.net/csma/plugin/csma.swf", | |
streamType: "recorded", | |
autoPlay: autoPlay, | |
bufferTime: 10, | |
volume: espn.gamecast.audio.startVolume, | |
muted: espn.gamecast.audio.startMute, | |
width: "1", | |
height: "1", | |
verbose: false, | |
controlBarAutoHide: true, | |
javascriptCallbackFunction: "espn.gamecast.audio.initFlashApi", | |
csmaPluginPath: "http://79423.analytics.edgesuite.net/csma/plugin/csma.swf", | |
csmaBeaconPath: "http://ma123-c.analytics.edgesuite.net/config/beacon-1355.xml" | |
}; | |
swfobject.embedSWF(espn.core.cdnHTTPPath + "i/espnradio/11/player/swf/stable/EspnRadioPlayer.OnDemand.swf", "audio-player-container", 1, 1, "10.1.0", {}, parameters, { | |
allowFullScreen: "false", | |
wmode: "transparent", | |
allowscriptaccess: "always" | |
}, { | |
name: "audio-player-container" | |
}); | |
}; | |
AUD.updateNowPlaying = function(title, description, thumb) { | |
$("#audio-title").html(title); | |
$("#audio-description").html(description); | |
$("#audio-thumb").attr("src", thumb).show(); | |
}; | |
AUD.build = function() { | |
var flashVersion = swfobject.getFlashPlayerVersion(); | |
if ((flashVersion.major == 10 && flashVersion.minor >= 1) || flashVersion.major > 10) { | |
$.ajax({ | |
url: "/espnradio/feeds/gamecast.json", | |
data: { | |
sport: settings.sport | |
}, | |
dataType: "json", | |
success: function(json) { | |
if (json) { | |
$("#audio-loading").hide(); | |
$("#now-playing").show().siblings("h2.period-header").show(); | |
$("div.audio-item").live("click", function(e) { | |
var $this = $(this); | |
var metadata = $this.metadata(); | |
var description = $this.find("p.vid-date").text(); | |
var title = $this.find("a.audio-play").text(); | |
if (metadata.type == "live" || metadata.type == "ondemand") { | |
if (metadata.type == "live") { | |
espn.gamecast.audio.loadLive(metadata.streamUrl, true); | |
} else { | |
espn.gamecast.audio.loadOnDemand(metadata.url, true); | |
} | |
$("#radioTab .audio-item").removeClass("active"); | |
$this.addClass("active"); | |
$("#play-pause-btn").attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/pause.png"); | |
espn.gamecast.audio.updateNowPlaying(title, description, metadata.thumb); | |
} | |
e.preventDefault(); | |
}); | |
$("#play-pause-btn").live("click mouseover mouseout", function(event) { | |
if (espn.gamecast.audio.radioPlayer) { | |
if (event.type == "click") { | |
espn.gamecast.audio.togglePlayPause(); | |
} else { | |
if (event.type == "mouseover") { | |
if (espn.gamecast.audio.isPlaying()) { | |
$(this).attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/pause_hover.png"); | |
} else { | |
$(this).attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/play_hover.png"); | |
} | |
} else { | |
if (event.type == "mouseout") { | |
if (espn.gamecast.audio.isPlaying()) { | |
$(this).attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/pause.png"); | |
} else { | |
$(this).attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/play.png"); | |
} | |
} | |
} | |
} | |
} | |
}); | |
$("#mute-btn").live("click", function(event) { | |
espn.gamecast.audio.toggleMute(); | |
}); | |
$("#vol-slider").slider({ | |
range: "min", | |
min: 0, | |
max: 100, | |
value: 100, | |
change: function(event, ui) { | |
var newVolume = ui.value / 100; | |
espn.gamecast.audio.setVolume(newVolume); | |
} | |
}); | |
if ((typeof(json.stations) == "object" && json.stations.length > 0) || (typeof(json.podcasts) == "object" && json.podcasts.length > 0)) { | |
if (typeof(json.stations) == "object" && json.stations.length > 0) { | |
espn.gamecast.audio.buildStations(json.stations); | |
} | |
if (typeof(json.podcasts) == "object" && json.podcasts.length > 0) { | |
espn.gamecast.audio.buildPodcasts(json.podcasts); | |
} | |
} else { | |
$("#radioTab").html("<p>Sorry, no audio available at this time.</p>"); | |
} | |
} | |
}, | |
error: function() { | |
$("#radioTab").html("<p>Sorry, no audio available at this time.</p>"); | |
} | |
}); | |
} else { | |
$("#radioTab").html('<p>Sorry, you do not have the correct version of Flash installed. Flash version 10.1 or later is required. <a href="http://get.adobe.com/flashplayer/">Get Flash Now.</a></p>'); | |
} | |
espn.gamecast.gotAudio = true; | |
}; | |
AUD.isPlaying = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
return espn.gamecast.audio.radioPlayer.getPlaying(); | |
} else { | |
return false; | |
} | |
}; | |
AUD.playAudio = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
espn.gamecast.audio.radioPlayer.play2(); | |
$("#play-pause-btn").attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/pause.png"); | |
} | |
}; | |
AUD.pauseAudio = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
espn.gamecast.audio.radioPlayer.pause(); | |
$("#play-pause-btn").attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/player/skin/images/play.png"); | |
} | |
}; | |
AUD.togglePlayPause = function() { | |
if (espn.gamecast.audio.isPlaying()) { | |
espn.gamecast.audio.pauseAudio(); | |
} else { | |
espn.gamecast.audio.playAudio(); | |
} | |
}; | |
AUD.isMuted = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
return espn.gamecast.audio.radioPlayer.getMuted(); | |
} else { | |
return espn.gamecast.audio.startMute; | |
} | |
}; | |
AUD.muteAudio = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
espn.gamecast.audio.radioPlayer.setMuted(true); | |
} | |
espn.gamecast.audio.startMute = true; | |
$("#mute-btn").attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/gamecast/nfl/icon_sound_mute.png"); | |
}; | |
AUD.unMuteAudio = function() { | |
if (espn.gamecast.audio.radioPlayer) { | |
espn.gamecast.audio.radioPlayer.setMuted(false); | |
} | |
espn.gamecast.audio.startMute = false; | |
$("#mute-btn").attr("src", espn.core.cdnHTTPPath + "i/espnradio/11/gamecast/nfl/icon_sound.png"); | |
}; | |
AUD.toggleMute = function() { | |
if (espn.gamecast.audio.isMuted() || espn.gamecast.audio.startMute) { | |
espn.gamecast.audio.unMuteAudio(); | |
} else { | |
espn.gamecast.audio.muteAudio(); | |
} | |
}; | |
AUD.setVolume = function(volume) { | |
if (espn.gamecast.audio.radioPlayer) { | |
espn.gamecast.audio.radioPlayer.setVolume(volume); | |
} | |
espn.gamecast.audio.startVolume = volume; | |
}; | |
})(jQuery); | |
espn.gamecast.twitterFeed = {}; | |
(function($) { | |
TWIT = espn.gamecast.twitterFeed; | |
var timeUpdaterInterval = 30000, | |
timeUpdater; | |
TWIT.update = function(tweet, isNew) { | |
if (tweet !== undefined) { | |
if (isNew) { | |
$("#twitterFeed").children("ul").prepend(TWIT.builders.html(tweet)); | |
} else { | |
$("#tweet-" + tweet.tweetId).replaceWith(TWIT.builders.html(tweet)); | |
} | |
} | |
$("#tweet-0").hide(); | |
}; | |
TWIT.build = function(tweets) { | |
var outputHTML = ""; | |
tweets.sort(function(a, b) { | |
return b.timeStamp - a.timeStamp; | |
}); | |
if (tweets != undefined && tweets.length > 0) { | |
for (var i = 0, n = tweets.length; i < n; i++) { | |
outputHTML += TWIT.builders.html(tweets[i]); | |
} | |
$("#tweet-0").hide(); | |
} else { | |
outputHTML = '<li id="tweet-0"><p>' + espn.gamecast.translate("Tweets Currently Unavailable") + "</p></li>"; | |
} | |
var filterHTML = ""; | |
if (settings.lang == "en") { | |
filterHTML = TWIT.getFilterHTML(); | |
} | |
$("#twitterFeed").html(filterHTML + "<ul>" + outputHTML + "</ul>"); | |
TWIT.bindFilter(); | |
timeUpdater = setTimeout(TWIT.timestampUpdate, timeUpdaterInterval); | |
}; | |
TWIT.timestampUpdate = function() { | |
timeUpdater = clearTimeout(timeUpdater); | |
$(".timestamp-updater").each(function(i) { | |
var $this = $(this), | |
ts = $this.attr("data-timestamp"); | |
$this.html(TWIT.getTimeSince(parseInt(ts, 10))); | |
}); | |
timeUpdater = setTimeout(TWIT.timestampUpdate, timeUpdaterInterval); | |
}; | |
TWIT.builders = { | |
html: function(tweet) { | |
if (tweet !== undefined) { | |
var userName = eval(tweet.isRetweet) ? tweet.original.userName : tweet.userName, | |
displayName = eval(tweet.isRetweet) ? tweet.original.displayName : tweet.displayName, | |
img = eval(tweet.isRetweet) ? tweet.original.img : tweet.img; | |
return '<li id="tweet-' + tweet.tweetId + '" class="feed-mod tweet ' + (tweet.isESPNTalent ? "espner" : "") + '">' + (eval(tweet.isRetweet) ? '<div class="retweet-note"><img src="http://a.espncdn.com/i/gamecast/twitter/retweet.png" /><a href="https://twitter.com/' + tweet.userName + '" target="_blank">' + tweet.displayName + "</a> retweeted</div>" : "") + '<div class="twit-pic"><a href="https://twitter.com/' + userName + '" target="_blank"><img src="' + img + '" width="48" height="48" border="0" title="' + userName + '" alt="' + userName + '" class="post-img" /></a></div><div class="twit-content"><div class="twit-header"><span class="twit-time"><a href="https://twitter.com/' + userName + "/status/" + tweet.tweetId + '" class="timestamp-updater" data-timestamp="' + tweet.timeStamp + '" target="_blank">' + TWIT.getTimeSince(tweet.timeStamp) + '</a></span><a href="https://twitter.com/" target="_blank"><img src="http://a.espncdn.com/i/gamecast/twitter/twitter-logo.png" class="twitter-logo" /></a><span class="twit-name"><a href="https://twitter.com/' + userName + '" target="_blank">' + displayName + '</a></span><span class="twit-handle">@<a href="https://twitter.com/' + userName + '" target="_blank">' + userName + '</a></span></div><p class="twit-text">' + TWIT.linkitup(tweet.text.replace(/&#|&#/g, "&#")) + '</p><div class="twit-footer">' + TWIT.getTwitterLinks(tweet) + '</div></div><div class="clear"></div></li>'; | |
} else { | |
return ""; | |
} | |
} | |
}; | |
TWIT.getTwitterLinks = function(tweet) { | |
var linkHTML = '<ul class="twit-actions">', | |
actions = [{ | |
link: "https://twitter.com/intent/tweet?in_reply_to=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/reply.png", | |
text: "Reply", | |
imgClass: "" | |
}, { | |
link: "https://twitter.com/intent/retweet?tweet_id=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/retweet.png", | |
text: "Retweet", | |
imgClass: "retweet" | |
}, { | |
link: "https://twitter.com/intent/favorite?tweet_id=" + tweet.tweetId, | |
img: "http://a.espncdn.com/i/gamecast/twitter/fav.png", | |
text: "Favorite", | |
imgClass: "" | |
}]; | |
for (var i = 0, n = actions.length; i < n; i++) { | |
linkHTML += '<li class="twit-action">'; | |
linkHTML += '<a href="' + actions[i].link + '" target="_blank"><img src="' + actions[i].img + '" class="' + actions[i].imgClass + '"/> ' + actions[i].text + "</a>"; | |
linkHTML += "</li>"; | |
} | |
linkHTML += "</ul>"; | |
return linkHTML; | |
}; | |
TWIT.linkitup = function(text) { | |
var returnText = text; | |
returnText = returnText.replace(/@(\w*(?!<))/g, function(m1, m2) { | |
return ' @<a href="https://twitter.com/' + m2.trim() + '" target="_blank">' + m2.trim() + "</a> "; | |
}); | |
returnText = returnText.replace(/((^|\s)\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, function(m1) { | |
return ' <a href="' + m1.trim() + '" target="_blank">' + m1.trim() + "</a> "; | |
}); | |
returnText = returnText.replace(/(^|\s)#(\w*(?!<))/g, function(m1, m2, m3) { | |
return ' #<a href="https://twitter.com/search?q=%23' + m3.trim() + '&src=hash" target="_blank">' + m3.trim() + "</a> "; | |
}); | |
return returnText; | |
}; | |
TWIT.getFilterHTML = function() { | |
var out = '<div class="twitter-filter"><a id="toggle-espn-tweets" class="round-btn round-btn-small">ONLY ESPN TWEETS - OFF</a></div>'; | |
return out; | |
}; | |
TWIT.bindFilter = function() { | |
$("#toggle-espn-tweets").on("click", function(e) { | |
var $this = $(this); | |
if (!$this.hasClass("on")) { | |
$("#twitterFeed").children("ul").addClass("espn-only"); | |
$this.addClass("on").text("ONLY ESPN TWEETS - ON"); | |
} else { | |
$("#twitterFeed").children("ul").removeClass("espn-only"); | |
$this.removeClass("on").text("ONLY ESPN TWEETS - OFF"); | |
} | |
}); | |
}; | |
TWIT.bindTweetLinks = function() { | |
if (espn.gamecast.isMobile) { | |
$("#twitterFeed ul").off().on("click", "a", function(e) { | |
var $this = $(this); | |
e.preventDefault(); | |
window.open($this.attr("href"), "twittersharer", "scrollbars=0"); | |
}); | |
} | |
}; | |
TWIT.getTimeSince = function(timeStr) { | |
var date = new Date((parseInt(timeStr, 10) || "")), | |
diff = (((new Date()).getTime() - date.getTime()) / 1000), | |
day_diff = Math.floor(diff / 86400); | |
if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) { | |
return ""; | |
} | |
return day_diff == 0 && (diff < 3600 && Math.floor(diff / 60) + "m" || diff < 86400 && Math.floor(diff / 3600) + " h") || day_diff < 7 && day_diff + "d" || day_diff < 31 && Math.ceil(day_diff / 7) + "w"; | |
}; | |
})(jQuery); | |
espn.gamecast.photos = {}; | |
(function($) { | |
PHOTO = espn.gamecast.photos; | |
PHOTO.update = function(photo, isNewPhoto) { | |
if (!isNewPhoto) { | |
$photo = $("#photo-" + photo.photoId); | |
$photo.replaceWith(PHOTO.builders.html(photo)); | |
} else { | |
setTimeout(function() { | |
$("#photoFeed").children("ul").prepend(PHOTO.builders.html(photo)); | |
}, 10000); | |
} | |
if (photo.photoId != 0) { | |
$("#photo-0").hide(); | |
} | |
}; | |
PHOTO.build = function(photos) { | |
var params = {}, | |
setParams = location.search.replace(/([^?=&]+)(=([^&#]*))?/g, function($0, $1, $2, $3) { | |
params[$1] = $3; | |
}), | |
outputHTML = ""; | |
if (photos != undefined && photos.length > 0) { | |
var photoLimit = photos.length > 50 && params.appsrc && params.appsrc === "sc" ? 50 : photos.length; | |
for (var i = 0; i < photoLimit; i++) { | |
outputHTML += PHOTO.builders.html(photos[i]); | |
} | |
$("#photo-0").hide(); | |
} else { | |
outputHTML = '<li id="photo-0" class="feed-mod photo video"><p>' + espn.gamecast.translate("Photos Currently Unavailable") + "</p></li>"; | |
} | |
$("#photoFeed").html("<ul>" + outputHTML + "</ul>"); | |
}; | |
PHOTO.builders = { | |
html: function(photo) { | |
var displayText = photo.text.length > 250 ? photo.text.substring(0, photo.text.indexOf(" ", 230)) + "..." : photo.text; | |
return '<li id="photo-' + photo.photoId + '" class="feed-mod photo video"><a href="#" class="launchGallery"><img width="110" src="' + photo.img + '" title="' + photo.text + '" onerror="this.src=\'http://a.espncdn.com/combiner/i?img=broadband/video/images/thumb_default_576.gif&w=110\'" /></a><p class="vid-date">' + displayText + "</p></li>"; | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.photoGallery = {}; | |
(function($) { | |
var PG = espn.gamecast.photoGallery, | |
photos = espn.gamecast.master.photos, | |
current = espn.gamecast.master.current, | |
currentPhotoIndex = 0, | |
isMobile; | |
PG.update = function(photo, newPhoto) { | |
if ($("#photoContainer").length > 0 && newPhoto) { | |
$("#thumbnail-wrap").children().children("ul").append(PG.buildThumbHTML(photo, "")); | |
} | |
}; | |
PG.init = function() { | |
isMobile = espn.gamecast.isMobile; | |
var $activityGalleryLinks = $("#activityFeed").find("a.launchGallery"); | |
$activityGalleryLinks.die(); | |
$activityGalleryLinks.live("click", espn.gamecast.photoGallery.loadGallery); | |
var $photoFeedGalleryLinks = $("#photoFeed").find("a.launchGallery"); | |
$photoFeedGalleryLinks.die(); | |
$photoFeedGalleryLinks.live("click", espn.gamecast.photoGallery.loadGallery); | |
}; | |
PG.loadGallery = function(e) { | |
var $this = $(this); | |
firstPhotoId = $this.parent()[0].id.split("-")[1]; | |
e.preventDefault(); | |
if (firstPhotoId != undefined) { | |
if (isMobile) { | |
window.location = PG.getGalleryUrl(firstPhotoId); | |
} else { | |
espn.gamecast.publish("hideWatch"); | |
$("body").prepend(PG.getGalleryHTML(firstPhotoId)); | |
espn.gamecast.track("link", { | |
info: "galleryLoaded" | |
}); | |
$("#photo-close").bind("click", espn.gamecast.photoGallery.closeGallery); | |
$("#photo-prevArrow").bind("click", espn.gamecast.photoGallery.loadPrev); | |
$("#photo-nextArrow").bind("click", espn.gamecast.photoGallery.loadNext); | |
$("#thumbnail-wrap").children().children("ul").children(".thumbnail").bind("click", espn.gamecast.photoGallery.loadThumb); | |
$("#thumbnail-header").bind("click", espn.gamecast.photoGallery.toggleThumbs); | |
} | |
} else { | |
alert("Please try a different Photo"); | |
} | |
}; | |
PG.getGalleryUrl = function(photoId) { | |
return "http://m.espn.go.com/" + settings.sport + "/slideshow?gameId=" + current.id + (photoId ? "&photoItemId=" + photoId : ""); | |
}; | |
PG.toggleThumbs = function() { | |
var $header = $(this), | |
$wrap = $("#thumbnail-wrap"); | |
if ($wrap.css("height") == "0px") { | |
$wrap.animate({ | |
height: "200px" | |
}, 750, function() { | |
$header.children(".button").removeClass("open").addClass("close"); | |
}); | |
} else { | |
$wrap.animate({ | |
height: "0px" | |
}, 750, function() { | |
$header.children(".button").removeClass("close").addClass("open"); | |
}); | |
} | |
}; | |
PG.closeGallery = function(e) { | |
e.preventDefault(); | |
$("#photoContainer").fadeOut(500, function() { | |
$(this).remove(); | |
espn.gamecast.publish("showWatch"); | |
}); | |
}; | |
PG.loadPrev = function() { | |
var nextIndex = currentPhotoIndex == 0 ? espn.gamecast.master.photos.length - 1 : currentPhotoIndex - 1; | |
PG.loadPhoto(nextIndex); | |
}; | |
PG.loadNext = function() { | |
var nextIndex = currentPhotoIndex == espn.gamecast.master.photos.length - 1 ? 0 : currentPhotoIndex + 1; | |
PG.loadPhoto(nextIndex); | |
}; | |
PG.loadThumb = function() { | |
PG.loadPhoto(espn.gamecast.findIndex(espn.gamecast.master.photos, this.id.split("-")[1], "photoId")); | |
}; | |
PG.loadPhoto = function(newIndex) { | |
var thisPhoto = espn.gamecast.master.photos[newIndex], | |
photoCaption = thisPhoto.text.indexOf("(Photo") > 0 ? thisPhoto.text.substring(0, thisPhoto.text.indexOf("(Photo")) : thisPhoto.text.substring(0, thisPhoto.text.indexOf("(AP")), | |
photoCredit = thisPhoto.text.indexOf("(Photo") > 0 ? thisPhoto.text.substring(thisPhoto.text.indexOf("(Photo")) : thisPhoto.text.substring(thisPhoto.text.indexOf("(AP")), | |
numPhotos = espn.gamecast.master.photos.length; | |
$("#photoWindow").fadeOut(500, function() { | |
var $this = $(this); | |
$this.html('<img src="' + thisPhoto.largeImg + '" oncontextmenu="return false;" />'); | |
$this.children("img").load(function() { | |
$this.fadeIn(); | |
}); | |
$("#thumbnail-wrap").find("li.thumbnail").removeClass("current"); | |
$("#thumbnail-" + thisPhoto.photoId).addClass("current"); | |
$("#photo-caption").html(photoCaption); | |
$("#photo-credit").html(photoCredit); | |
$("#photo-counter").html((newIndex + 1) + " of " + numPhotos); | |
currentPhotoIndex = newIndex; | |
}); | |
espn.gamecast.track("link", { | |
info: "photoLoaded" | |
}); | |
}; | |
PG.getGalleryHTML = function(photoId) { | |
currentPhotoIndex = espn.gamecast.findIndex(espn.gamecast.master.photos, photoId, "photoId"); | |
var photos = espn.gamecast.master.photos, | |
thumbnailClass, numPhotos = photos.length, | |
thisPhoto = photos[currentPhotoIndex], | |
photoCaption = thisPhoto.text.indexOf("(Photo") > 0 ? thisPhoto.text.substring(0, thisPhoto.text.indexOf("(Photo")) : thisPhoto.text.substring(0, thisPhoto.text.indexOf("(AP")), | |
photoCredit = thisPhoto.text.indexOf("(Photo") > 0 ? thisPhoto.text.substring(thisPhoto.text.indexOf("(Photo")) : thisPhoto.text.substring(thisPhoto.text.indexOf("(AP")), | |
outputHTML = '<div id="photoContainer"><div class="header-wrap"><div class="header"><a id="photo-close" href="#"></a><h1></h1><h2>' + current.away.loc + " " + current.away.name + " at " + current.home.loc + " " + current.home.name + '</h2></div></div><div class="photo-viewport"><div class="photo-viewCol"><div id="photoloader"><img src="http://a.espncdn.com/i/gamecast/ajax-loader_trans.gif" alt="Loading..."></div><div id="photoWindow"><img src="' + thisPhoto.largeImg + '" oncontextmenu="return false;" /></div></div><div class="photo-infoCol"><div class="photo-controls"><div id="photo-prevArrow"></div><div id="photo-counter">' + (currentPhotoIndex + 1) + " of " + numPhotos + '</div><div id="photo-nextArrow"></div><div class="clear"></div></div><div class="photo-captionWrap"><p id="photo-caption">' + photoCaption + '</p><p id="photo-credit">' + photoCredit + '</p></div></div><div class="clear"></div><div class="thumbnails"><div id="thumbnail-header"><div class="button"></div><h2>' + espn.gamecast.translate("Thumbnails") + '</h2></div><div id="thumbnail-wrap" class="scroll-pane"><div><ul>'; | |
for (var i = 0, n = photos.length; i < n; i++) { | |
thumbnailClass = photos[i].photoId == thisPhoto.photoId ? "current" : ""; | |
outputHTML += PG.buildThumbHTML(photos[i], thumbnailClass); | |
} | |
outputHTML += '</ul><div class="clear"></div></div></div></div></div></div>'; | |
return outputHTML; | |
}; | |
PG.buildThumbHTML = function(photo, thumbnailClass) { | |
return '<li id="thumbnail-' + photo.photoId + '" class="thumbnail ' + thumbnailClass + '"><div class="thumbnail-crop"><img src="' + photo.img + '" oncontextmenu="return false;" /></div></li>'; | |
}; | |
})(jQuery); | |
espn.gamecast.nst = {}; | |
(function($) { | |
NST = espn.gamecast.nst; | |
NST.update = function(note, newNote) { | |
if (note !== undefined) { | |
if (newNote) { | |
$("#nst").prepend(NST.builders.html(note, $("#nst").children(".nstNote:first-child").hasClass("even") ? "odd" : "even")); | |
} else { | |
var $note = $("#nst-" + note.id); | |
$note.replaceWith(NST.builders.html(note, $note.hasClass("even") ? "even" : "odd")); | |
} | |
if (note.id != 0) { | |
$("#nst-0").hide(); | |
} | |
} | |
}; | |
NST.build = function(notes) { | |
var outputHTML = ""; | |
if (notes != undefined && notes.length > 0) { | |
for (var i = 0, n = notes.length; i < n; i++) { | |
outputHTML += NST.builders.html(notes[i], i % 2 == 0 ? "even" : "odd"); | |
} | |
$("#nst-0").hide(); | |
} | |
$("#nst").html(outputHTML); | |
}; | |
NST.builders = { | |
html: function(note, noteClass) { | |
return '<div id="nst-' + note.id + '" class="nstNote ' + noteClass + '">' + note.note + "</div>"; | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.oots = {}; | |
(function($) { | |
var OOTS = espn.gamecast.oots; | |
OOTS.update = function(game) { | |
if (game !== undefined) { | |
var ootIndex = espn.gamecast.findIndex(OOTS.oots, game.id, "id"); | |
if (ootIndex >= 0) { | |
var flashHome = game.home.score != OOTS.oots[ootIndex].homeScore, | |
flashAway = game.away.score != OOTS.oots[ootIndex].awayScore; | |
OOTS.oots[ootIndex].homeScore = game.home.score; | |
OOTS.oots[ootIndex].awayScore = game.away.score; | |
} | |
var $oot = $("#oot-" + game.id); | |
$oot.replaceWith(OOTS.builders.html.game(game)); | |
if (flashHome || flashAway) { | |
var whichTeam = flashHome ? "home" : "away"; | |
OOTS.highlightScore(game.id, whichTeam); | |
} | |
} | |
}; | |
OOTS.shade = function(shadeIt) { | |
if (shadeIt) { | |
$("#oot-shade").show(); | |
} else { | |
$("#oot-shade").hide(); | |
} | |
}; | |
OOTS.build = function() { | |
var games = espn.gamecast.master.games, | |
outputHTML = ""; | |
OOTS.oots = []; | |
OOTS.personal.myTeams = {}; | |
$.each(games, function(i, game) { | |
outputHTML += OOTS.builders.html.game(game, i + 1); | |
OOTS.oots.push(new OOTS.builders.json.game(game.id, game.home.score, game.away.score)); | |
if (OOTS.personal.myTeams["10-" + game.home.id] === undefined) { | |
OOTS.personal.myTeams["10-" + game.home.id] = []; | |
} | |
OOTS.personal.myTeams["10-" + game.home.id].push("mlb-" + game.id); | |
if (OOTS.personal.myTeams["10-" + game.away.id] === undefined) { | |
OOTS.personal.myTeams["10-" + game.away.id] = []; | |
} | |
OOTS.personal.myTeams["10-" + game.away.id].push("mlb-" + game.id); | |
}); | |
$("#oot-games").html(outputHTML); | |
OOTS.makeMyGames(); | |
var magicScoreboardWidth = 872; | |
$("#oot-left").unbind("click"); | |
$("#oot-right").unbind("click"); | |
$("#oot-games li .oot-game-link").die(); | |
$("#oot-left").bind("click", function() { | |
if ($("#oot-games li").length == 0) { | |
return; | |
} | |
var leftValue = -1 * $("#oot-games").position().left; | |
var games = $("#oot-games li"); | |
for (var i = 0, n = games.length; i < n; i++) { | |
if (($(games[i]).position().left) > (leftValue - magicScoreboardWidth)) { | |
if ($("body").hasClass("iPadScroll")) { | |
$("#oot-wrap").find(".gc-oot-modbox").scrollLeft($(games[i]).position().left); | |
} else { | |
$("#oot-games").stop(true, true).animate({ | |
left: "-" + $(games[i]).position().left + "px" | |
}, 500, function() { | |
$(this).css("left", "-" + $(games[i]).position().left + "px"); | |
}); | |
} | |
break; | |
} | |
} | |
}); | |
$("#oot-right").bind("click", function() { | |
if ($("#oot-games li").length == 0) { | |
return; | |
} | |
var leftValue = -1 * $("#oot-games").position().left; | |
var games = $("#oot-games li"); | |
for (var i = 0, n = games.length; i < n; i++) { | |
if (($(games[i]).position().left + $(games[i]).outerWidth()) > (leftValue + magicScoreboardWidth)) { | |
if ($("body").hasClass("iPadScroll")) { | |
$("#oot-wrap").find(".gc-oot-modbox").scrollLeft($(games[i]).position().left); | |
} else { | |
$("#oot-games").stop(true, true).animate({ | |
left: "-" + $(games[i]).position().left + "px" | |
}, 500, function() { | |
$(this).css("left", "-" + $(games[i]).position().left + "px"); | |
}); | |
} | |
break; | |
} | |
} | |
}); | |
$("#oot-games li .oot-game-link").live("click", function() { | |
try { | |
var $this = $(this), | |
id = $this.parent().get(0).id.split("-")[1]; | |
espn.gamecast.debug("change game..."); | |
if (id != espn.gamecast.master.current.id) { | |
espn.gamecast.debug("gameId = " + id); | |
espn.gamecast.publish("switchGame", [id]); | |
} | |
} catch (e) { | |
espn.gamecast.debug("change game error: " + e); | |
} | |
}); | |
}; | |
OOTS.updateTouchScrollWidth = function() { | |
if (espn.gamecast.isMobile) { | |
var ootsWidth = 0, | |
$oots = $("#oot-games"); | |
$.each($oots.children("li"), function(i, val) { | |
ootsWidth += $(this).outerWidth() + 10; | |
}); | |
$oots.css("width", ootsWidth + "px"); | |
} | |
}; | |
OOTS.builders = { | |
html: { | |
game: function(game, count) { | |
var isMobile = !!espn.gamecast.version, | |
status = espn.gamecast.getGameState(game.gameStatus), | |
winnerClass = "", | |
basesClass = "", | |
linkClass = (status != "pregame" || isMobile) && (game.pbpSourceId > 0) ? "oot-game-link" : "oot-game-wrap", | |
myClass = $("#oot-" + game.id).hasClass("my") ? "my" : ""; | |
if (game.gameStatus != 8) { | |
if (status == "final" && game.away.score > game.home.score) { | |
winnerClass = "away"; | |
} else { | |
if (status == "final" && game.away.score < game.home.score) { | |
winnerClass = "home"; | |
} | |
} | |
} | |
var onBaseArray = game.bases.split("|"); | |
for (var i = 0; i < 3; i++) { | |
if (parseInt(onBaseArray[i], 10) != 0) { | |
basesClass += "-1"; | |
} else { | |
basesClass += "-0"; | |
} | |
} | |
var previewLinkClass = !isMobile && game.previewLink != "" ? "showLink" : "", | |
recapLinkClass = !isMobile && game.recapLink != "" ? "showLink" : "", | |
previewLink = game.previewLink, | |
recapLink = game.recapLink; | |
statusText = game.gameStatus == 1 ? espn.gamecast.translate("Game Starts at") + " " + game.status1 + " " + game.status2.substring(0, 2) : game.status1, outText = game.outs == 1 ? espn.gamecast.translate("Out") : espn.gamecast.translate("Outs"), status1 = game.status1.replace("Alta", "A.").replace("Baja", "B.").replace("Mitad", "M."), pbpClass = game.pbpSourceId > 0 ? "" : "no-gamecast"; | |
var outputHTML = '<li class="game ' + status + " " + myClass + " " + pbpClass + '" id="oot-' + game.id + '"><div class="gc-oot-status">'; | |
if (!isMobile) { | |
outputHTML += '<div class="recapLink"><a href="' + recapLink + '" class="' + recapLinkClass + '" target="_blank">' + espn.gamecast.translate("Recap") + ' »</a></div><div class="previewLink"><a href="' + previewLink + '" class="' + previewLinkClass + '" target="_blank">' + espn.gamecast.translate("Preview") + " »</a></div>"; | |
} | |
outputHTML += '</div><div class="' + linkClass + '"><div class="game-flag"><div class="flag-pregame">' + statusText + '</div><div class="flag-switch">' + espn.gamecast.translate("Switch to this Game") + '</div><div class="flag-nogc">' + espn.gamecast.translate("Gamecast Unavailable") + '</div></div><div class="status"><div class="clock">' + status1 + " " + game.status2 + '</div><div class="situation">' + game.balls + "-" + game.strikes + ", " + game.outs + " " + outText + '</div></div><div class="winner ' + winnerClass + '"></div><div class="rank"></div><div class="teams">' + game.away.abbrev.toUpperCase() + "<br/>" + game.home.abbrev.toUpperCase() + '</div><div class="score"><span class="away">' + game.away.score + '</span><br/><span class="home">' + game.home.score + '</span></div><div class="bases bases' + basesClass + '"></div></div><span class="sort">' + count + "</span></li>"; | |
return outputHTML; | |
} | |
}, | |
json: { | |
game: function(id, homeScore, awayScore) { | |
this.id = id; | |
this.homeScore = homeScore; | |
this.awayScore = awayScore; | |
} | |
} | |
}; | |
OOTS.oots = []; | |
OOTS.highlightScore = function(gameId, which) { | |
var $oot = $("#oot-" + gameId); | |
$oot.addClass("highlight " + which); | |
setTimeout(function() { | |
$oot.removeClass("highlight home away"); | |
}, 5000); | |
}; | |
OOTS.personal = { | |
activeSport: "mlb", | |
myTeams: {} | |
}; | |
OOTS.makeMyGames = function() { | |
var myTeams = OOTS.personal.myTeams; | |
var needToSort = false; | |
if ($.myespn) { | |
$.myespn.init({ | |
success: function(data) { | |
var games = []; | |
var keys = []; | |
var $scoreboard = $("#oot-games"); | |
if (data.myTeams !== undefined) { | |
var i = data.myTeams.length; | |
var sortOrder = 0; | |
while (i--) { | |
sortOrder--; | |
var key = data.myTeams[i].sport + "-" + data.myTeams[i].id; | |
var teamGames = myTeams[key]; | |
if (teamGames != undefined) { | |
for (var g = 0; g < teamGames.length; g++) { | |
var nodeId = teamGames[g]; | |
nodeId = nodeId.replace(settings.sport, "oot"); | |
var $game = $("#" + nodeId); | |
if ($game.length == 0) {} else { | |
$game.addClass("my"); | |
$(".sort", $game).html(sortOrder); | |
} | |
needToSort = true; | |
} | |
} | |
} | |
} | |
keys = null; | |
if (needToSort) { | |
$scoreboard.find("li").tsort("span.sort"); | |
} | |
} | |
}); | |
} | |
}; | |
})(jQuery); | |
(function() { | |
var INTERVAL_TIME; | |
INTERVAL_TIME = 10; | |
window.Keanu = (function() { | |
function Keanu(id) { | |
if (!id || !document.getElementById(id)) { | |
return false; | |
} | |
this.canvas = document.getElementById(id); | |
this.ctx = this.canvas.getContext("2d"); | |
this.isAnimating = false; | |
this.interval = null; | |
this.lastLoop = 0; | |
this.checkTimer = null; | |
this.triggering = false; | |
this.subscribers = {}; | |
this.checkedDimensions = false; | |
this.clearX = 0; | |
this.clearY = 0; | |
this.clearW = this.canvas.width; | |
this.clearH = this.canvas.height; | |
window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; | |
this; | |
} | |
Keanu.prototype.subscribe = function(type, listener, zIndex) { | |
if (zIndex == null) { | |
zIndex = 0; | |
} | |
if (!this.subscribers[type]) { | |
this.subscribers[type] = []; | |
} | |
if (!this.subscribers[type][zIndex]) { | |
this.subscribers[type][zIndex] = []; | |
} | |
this.subscribers[type][zIndex].push(listener); | |
if (!this.interval && !this.isAnimating && type === "enterFrame") { | |
this.start(); | |
} | |
}; | |
Keanu.prototype.unsubscribe = function(type, listener, zIndex) { | |
var cutIt, i, j, s, sub, _len, _len2, _len3, _ref, _ref2, _this = this; | |
cutIt = function() { | |
if ((_this.subscribers.enterFrame && _this.subscribers.enterFrame.length === 0) || (_this.subscribers.enterFrame && _this.subscribers.enterFrame.length === 1 && _this.subscribers.enterFrame[0].length === 0)) { | |
_this.stop(); | |
} | |
}; | |
if (zIndex) { | |
if (this.subscribers[type] instanceof Array) { | |
if (this.subscribers[type][zIndex] instanceof Array) { | |
_ref = this.subscribers[type][zIndex]; | |
for (i = 0, _len = _ref.length; i < _len; i++) { | |
sub = _ref[i]; | |
if (sub === listener) { | |
this.subscribers[type][zIndex].splice(i, 1); | |
break; | |
} | |
} | |
} | |
} | |
} else { | |
if (this.subscribers[type] instanceof Array) { | |
_ref2 = this.subscribers[type]; | |
for (i = 0, _len2 = _ref2.length; i < _len2; i++) { | |
sub = _ref2[i]; | |
if (sub instanceof Array) { | |
for (j = 0, _len3 = sub.length; j < _len3; j++) { | |
s = sub[j]; | |
if (s === listener) { | |
sub.splice(j, 1); | |
break; | |
} | |
} | |
} else { | |
if (this.subscribers === listener) { | |
this.subscribers[type].splice(i, 1); | |
break; | |
} | |
} | |
} | |
} | |
} | |
clearTimeout(this.checkTimer); | |
this.checkTimer = setTimeout(cutIt, 100); | |
}; | |
Keanu.prototype.trigger = function(event) { | |
var s, sub, _i, _j, _len, _len2, _ref; | |
this.triggering = true; | |
if (typeof event === "string") { | |
event = { | |
type: event | |
}; | |
} | |
if (!event.target) { | |
event.target = this; | |
} | |
if (!event.type) { | |
return; | |
} | |
if (this.subscribers[event.type] instanceof Array) { | |
_ref = this.subscribers[event.type]; | |
for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
sub = _ref[_i]; | |
if (sub instanceof Array) { | |
for (_j = 0, _len2 = sub.length; _j < _len2; _j++) { | |
s = sub[_j]; | |
if (s) { | |
s.call(this, event); | |
} | |
} | |
} | |
} | |
} | |
this.triggering = false; | |
}; | |
Keanu.prototype.start = function() { | |
var looper, _this = this; | |
looper = function() { | |
if (_this.isAnimating || _this.interval) { | |
if (_this.lastLoop === 0) { | |
_this.lastLoop = +(new Date); | |
} | |
_this.clear(); | |
if ((+(new Date)) - _this.lastLoop > 30000) { | |
_this.reset(); | |
} else { | |
_this.lastLoop = +(new Date); | |
_this.trigger("enterFrame"); | |
} | |
if (window.requestAnimationFrame) { | |
window.requestAnimationFrame(looper, _this.canvas); | |
} | |
} | |
}; | |
if (window.requestAnimationFrame && !this.isAnimating) { | |
this.isAnimating = true; | |
window.requestAnimationFrame(looper, this.canvas); | |
this.trigger("start"); | |
} else { | |
if (!window.requestAnimationFrame && !this.interval) { | |
this.interval = setInterval(looper, INTERVAL_TIME); | |
this.trigger("start"); | |
} | |
} | |
}; | |
Keanu.prototype.stop = function() { | |
this.isAnimating = false; | |
clearInterval(this.interval); | |
this.interval = null; | |
this.clear(); | |
this.trigger("stop"); | |
}; | |
Keanu.prototype.reset = function() { | |
var doIt, _this = this; | |
doIt = function() { | |
_this.subscribers = []; | |
clearInterval(_this.checkTimer); | |
_this.checkTimer = null; | |
_this.stop(); | |
_this.lastLoop = 0; | |
return _this.trigger("reset"); | |
}; | |
if (this.triggering) { | |
setTimeout(this.reset, 5); | |
} else { | |
doIt(); | |
} | |
}; | |
Keanu.prototype.clear = function() { | |
var h, w, x, y; | |
x = 0; | |
y = 0; | |
w = this.canvas.width; | |
h = this.canvas.height; | |
this.ctx.clearRect(x, y, w, h); | |
this.checkedDimensions = false; | |
this.clearX = 0; | |
this.clearY = 0; | |
this.clearW = 0; | |
this.clearH = 0; | |
}; | |
Keanu.prototype.setDimension = function(dim, val, fn) { | |
if (!isNaN(dim)) { | |
return fn && fn(dim, val); | |
} else { | |
return val; | |
} | |
}; | |
Keanu.prototype.setDimensions = function(dims) { | |
if (this.checkedDimensions) { | |
this.clearX = this.setDimension(this.clearX, dims.x, Math.min); | |
this.clearY = this.setDimension(this.clearY, dims.y, Math.min); | |
this.clearW = this.setDimension(this.clearW, dims.w, Math.max); | |
this.clearH = this.setDimension(this.clearH, dims.h, Math.max); | |
} else { | |
this.clearX = dims.x; | |
this.clearY = dims.y; | |
this.clearW = dims.w; | |
this.clearH = dims.h; | |
this.checkedDimensions = true; | |
} | |
}; | |
Keanu.prototype.isEmpty = function(o) { | |
var i, p, _i, _j, _len, _len2, _ref; | |
for (_i = 0, _len = o.length; _i < _len; _i++) { | |
p = o[_i]; | |
if (o[p] instanceof Array && o[p].length > 0) { | |
_ref = o[p]; | |
for (_j = 0, _len2 = _ref.length; _j < _len2; _j++) { | |
i = _ref[_j]; | |
if (o[p][i] instanceof Array && o[p][i].length > 0) { | |
return false; | |
} | |
} | |
} | |
} | |
return true; | |
}; | |
Keanu.prototype.getIntervalTime = function() { | |
return INTERVAL_TIME; | |
}; | |
Keanu.prototype.tweens = { | |
linear: function(t, b, c, d) { | |
return c * t / d + b; | |
}, | |
easeIn: function(t, b, c, d) { | |
return c * (t /= d) * t + b; | |
}, | |
easeOut: function(t, b, c, d) { | |
return -c * (t /= d) * (t - 2) + b; | |
}, | |
easeInOut: function(t, b, c, d) { | |
if (t /= d / 2 < 1) { | |
return c / 2 * t * t * b; | |
} else { | |
return -c / 2 * ((--t) * (t - 2) - 1) + b; | |
} | |
}, | |
quadraticBezierCurve: function(t, p0, p1, p2) { | |
return ~~(Math.pow(1 - t, 2) * p0 + 2 * (1 - t) * t * p1 + Math.pow(t, 2) * p2); | |
} | |
}; | |
return Keanu; | |
})(); | |
window.Keanu.modules = {}; | |
}).call(this); | |
(function() { | |
var Animation, Neo; | |
Neo = { | |
defaults: { | |
fillStyle: "rgb(255, 255, 255)", | |
lineWidth: "0", | |
strokeStyle: "rgb(255, 255, 255)" | |
}, | |
shapes: { | |
line: function(data) { | |
var ctx, destination, destinationX, destinationY, origin, originX, originY, stroke, styles, width; | |
if (!data) { | |
return; | |
} | |
origin = data.origin || []; | |
destination = data.destination || []; | |
styles = data.styles || {}; | |
originX = origin[0] || 0; | |
originY = origin[1] || 0; | |
destinationX = destination[0] || 0; | |
destinationY = destination[1] || 0; | |
width = styles.lineWidth || Neo.defaults.lineWidth; | |
stroke = styles.strokeStyle || Neo.defaults.strokeStyle; | |
ctx = data.ctx || null; | |
if (ctx) { | |
ctx.beginPath(); | |
ctx.strokeStyle = stroke; | |
ctx.lineWidth = width; | |
ctx.moveTo(originX, originY); | |
ctx.lineTo(destinationX, destinationY); | |
ctx.stroke(); | |
ctx.closePath(); | |
} | |
}, | |
circle: function(data) { | |
var ctx, fill, r, stroke, styles, width, x, y; | |
if (!data) { | |
return; | |
} | |
styles = data.styles || {}; | |
x = data.x || 0; | |
y = data.y || 0; | |
r = data.r || 0; | |
fill = styles.fillStyle || Neo.defaults.fillStyle; | |
stroke = styles.strokeStyle || Neo.defaults.strokeStyle; | |
width = styles.lineWidth || Neo.defaults.lineWidth; | |
ctx = data.ctx || null; | |
if (ctx) { | |
ctx.fillStyle = fill; | |
ctx.strokeStyle = stroke; | |
ctx.width = width; | |
ctx.beginPath(); | |
ctx.arc(x, y, r, 0, Math.PI * 2, true); | |
ctx.closePath(); | |
ctx.fill(); | |
ctx.stroke(); | |
} | |
} | |
} | |
}; | |
Animation = (function() { | |
function Animation(keanu, opts, duration) { | |
var animationMiddle, callback, change, changed, control, controlRadius, controlX, controlY, currentRadius, currentX, currentY, destination, destinationRadius, destinationX, destinationY, draw, ease, easing, frame, hideTrails, instance, intervalTime, isArc, origin, originRadius, originX, originY, rChange, self, styles, tick, tickerStep, trailColor, xChange, yChange, z; | |
isArc = opts.control || false; | |
instance = opts.instance; | |
origin = opts.origin || []; | |
originX = origin[0] || 0; | |
originY = origin[1] || 0; | |
originRadius = origin[2] || 0; | |
if (isArc) { | |
control = opts.control || []; | |
controlX = control[0] || 0; | |
controlY = control[1] || 0; | |
controlRadius = control[2] || 0; | |
} | |
destination = opts.destination || []; | |
destinationX = destination[0] || 0; | |
destinationY = destination[1] || 0; | |
destinationRadius = destination[2] || 0; | |
draw = opts.draw || Neo.shapes.circle; | |
trailColor = opts.trailColor || "255, 255, 255, "; | |
ease = opts.easing || "linear"; | |
hideTrails = opts.hideTrails; | |
callback = opts.callback || function() {}; | |
styles = opts.styles || {}; | |
duration = duration || 1000; | |
z = opts.zIndex || 0; | |
if (isArc) { | |
animationMiddle = opts.animationMiddle || 2; | |
} | |
this.trailStates = []; | |
this.keepStates = opts.keepStates || 15; | |
if (isArc) { | |
originX = originX !== controlX ? originX : originX + 1; | |
originY = originY !== controlY ? originY : originY + 1; | |
} | |
currentX = originX; | |
currentY = originY; | |
currentRadius = originRadius; | |
easing = keanu.tweens[ease]; | |
intervalTime = instance.intervalTime; | |
frame = 0; | |
tick = 0; | |
tickerStep = duration / intervalTime; | |
xChange = destinationX - originX; | |
yChange = destinationY - originY; | |
if (isArc) { | |
rChange = controlRadius - originRadius; | |
} else { | |
rChange = destinationRadius - originRadius; | |
} | |
changed = false; | |
self = this; | |
change = function() { | |
var alpha, i, len, rad; | |
if (!instance.hideTrails) { | |
if (!hideTrails) { | |
len = self.trailStates.length; | |
if (len > 0) { | |
alpha = 0.1; | |
rad = 0.85; | |
i = len - 1; | |
while (i >= 0) { | |
Neo.shapes.circle({ | |
ctx: keanu.ctx, | |
x: self.trailStates[i][0] || 0, | |
y: self.trailStates[i][1] || 0, | |
r: (self.trailStates[i][2] * rad) || 0, | |
styles: { | |
fillStyle: "rgba(" + trailColor + " " + alpha + ")", | |
strokeStyle: "rgba(0, 0, 0, 0)" | |
} | |
}); | |
keanu.setDimensions({ | |
x: self.trailStates[i][0] - (self.trailStates[i][2] * rad), | |
y: self.trailStates[i][1] - (self.trailStates[i][2] * rad), | |
w: self.trailStates[i][0] + (self.trailStates[i][2] * rad), | |
h: self.trailStates[i][1] + (self.trailStates[i][2] * rad) | |
}); | |
alpha += 0.05; | |
if (rad < 0.98) { | |
rad += 0.02; | |
} | |
i--; | |
} | |
} | |
} | |
} | |
currentX = easing(frame, originX, xChange, tickerStep); | |
currentY = easing(frame, originY, yChange, tickerStep); | |
if (isArc) { | |
if (frame < duration / animationMiddle) { | |
currentRadius = easing(frame, originRadius, rChange, duration); | |
} else { | |
if (!changed) { | |
rChange = destinationRadius - currentRadius; | |
changed = true; | |
} | |
currentRadius = easing(frame, controlRadius, rChange, duration); | |
} | |
} else { | |
currentRadius = easing(frame, originRadius, rChange, tickerStep); | |
} | |
if (isArc) { | |
if (controlX !== 0) { | |
currentX = keanu.tweens.quadraticBezierCurve((originX - currentX) / (originX - destinationX), originX, controlX, destinationX); | |
} | |
if (controlY !== 0) { | |
currentY = keanu.tweens.quadraticBezierCurve((originY - currentY) / (originY - destinationY), originY, controlY, destinationY); | |
} | |
} | |
if (frame % instance.step === 0 && (!instance.hideTrails && !hideTrails)) { | |
self.handleTrailState([currentX, currentY, currentRadius]); | |
} | |
draw && draw.call(instance, { | |
ctx: keanu.ctx, | |
x: currentX, | |
y: currentY, | |
r: currentRadius, | |
styles: { | |
fillStyle: styles.fillStyle || "rgb(255, 255, 255)", | |
strokeStyle: styles.strokeStyle || "rgb(255, 255, 255)", | |
lineWidth: styles.lineWidth || "0" | |
} | |
}); | |
frame++; | |
tick += intervalTime; | |
if (tick >= duration) { | |
self.trailStates = []; | |
keanu.unsubscribe("enterFrame", change, z); | |
return callback && callback(); | |
} | |
}; | |
keanu.subscribe("enterFrame", change, z); | |
return; | |
} | |
Animation.prototype.handleTrailState = function(state) { | |
var i, loopLen, temp; | |
temp = []; | |
loopLen = this.trailStates.length >= this.keepStates ? this.keepStates : this.trailStates.length; | |
temp.push(state); | |
for (i = 0; 0 <= loopLen ? i < loopLen : i > loopLen; 0 <= loopLen ? i++ : i--) { | |
temp.push(this.trailStates[i]); | |
} | |
this.trailStates = temp; | |
}; | |
return Animation; | |
})(); | |
Neo.Animation = Animation; | |
window.Neo = Neo; | |
}).call(this); | |
(function() { | |
var __hasProp = Object.prototype.hasOwnProperty; | |
(function($) { | |
var BALL_RADIUS, BEZ, Field, GROUNDER_RADIUS, POPFLY_RADIUS, SHADOW_RADIUS, MAP_MAX, HALF_MAP, FAR_WALL, BACK_WALL; | |
BALL_RADIUS = 3; | |
GROUNDER_RADIUS = 2.5; | |
POPFLY_RADIUS = 5.5; | |
SHADOW_RADIUS = 1.5; | |
BEZ = -20; | |
MAP_MAX = 250; | |
HALF_MAP = MAP_MAX / 2; | |
FAR_WALL = 15; | |
BACK_WALL = 170; | |
Field = (function() { | |
function Field(opts) { | |
if (!opts) { | |
return; | |
} | |
this.keanu = new Keanu(opts.canvasId || "field-render"); | |
this.intervalTime = this.keanu.getIntervalTime(); | |
this.hideTrails = opts.hideTrails; | |
this.step = opts.step || 3; | |
this.showingSprayChart = false; | |
this.sprayChartOn = false; | |
this.showingBaserunners = false; | |
this.showingDefense = false; | |
this.baserunners = [0, 0, 0]; | |
this.isAnimating = false; | |
this.pitchQueue = []; | |
this.batterName = ""; | |
this.sprayChart = { | |
outLeftPct: 0, | |
outMidPct: 0, | |
outRightPct: 0, | |
infLeftPct: 0, | |
infMidPct: 0, | |
infRightPct: 0 | |
}; | |
this.fieldContainer = $(".field-container"); | |
this.sprayChartCaption = $("#spray-chart-caption"); | |
this.sprayChartPlayer = $("#spray-chart-player"); | |
this.$baserunners = [$("#br-1"), $("#br-2"), $("#br-3")]; | |
this.htsRunning = this.httRunning = this.fttRunning = this.hthRunning = this.fthRunning = this.sthRunning = this.tthRunning = this.sttRunning = this.ftsRunning = this.htfRunning = false; | |
this.firstBase = $("#first-baseman"); | |
this.secondBase = $("#second-baseman"); | |
this.thirdBase = $("#third-baseman"); | |
this.shortstop = $("#shortstop-fielder"); | |
this.pitcher = $("#pitcher-fielder"); | |
this.catcher = $("#catcher-fielder"); | |
this.leftField = $("#left-fielder"); | |
this.rightField = $("#right-fielder"); | |
this.centerField = $("#center-fielder"); | |
this.max = 470; | |
this.homeX = 235; | |
this.homeY = 147; | |
this.rubberX = 235; | |
this.rubberY = 110; | |
this.firstX = 310; | |
this.firstY = 110; | |
this.secondX = 235; | |
this.secondY = 84; | |
this.thirdX = 160; | |
this.thirdY = 110; | |
this.home = [this.homeX, this.homeY, 5]; | |
this.first = [this.firstX, this.firstY, 4]; | |
this.second = [this.secondX, this.secondY, 3]; | |
this.third = [this.thirdX, this.thirdY, 4]; | |
this.plate = [this.homeX, this.homeY, BALL_RADIUS]; | |
this.size = { | |
width: 475, | |
height: 173 | |
}; | |
this.toggleBaserunners(); | |
this.adjustDefense(); | |
} | |
Field.prototype.shadow = { | |
fillStyle: "rgb(0, 0, 0)", | |
lineWidth: 1, | |
strokeStyle: "rgb(33, 33, 33)" | |
}; | |
Field.prototype.getDiminishingPercentage = function(start, end, distance) { | |
var backDistance, foreDistance, maxPercent, minPercent, percent; | |
foreDistance = distance || start - FAR_WALL; | |
backDistance = distance || BACK_WALL - start; | |
minPercent = 0.3; | |
maxPercent = 0.1; | |
percent = 0; | |
if (end < start) { | |
percent = 0.75 - ((start - end) / foreDistance * minPercent); | |
percent = percent < maxPercent ? maxPercent : percent; | |
} else { | |
if (end > start) { | |
percent = (end - start) / backDistance * maxPercent; | |
percent = percent > maxPercent ? maxPercent : percent; | |
percent += 1; | |
} | |
} | |
return percent; | |
}; | |
Field.prototype.transformX = function(x) { | |
var diff, left, mid, newx, pc, right; | |
if (!x) { | |
return 0; | |
} | |
diff = HALF_MAP - x; | |
pc = diff / 25; | |
mid = this.homeX / 125; | |
left = this.thirdX / 100; | |
right = this.firstX / (pc > -1.5 ? 150 : 165); | |
newx = x * mid; | |
if (pc > 0 && Math.abs(diff <= 25)) { | |
newx = x * (mid - (mid - left) * pc); | |
} else { | |
if (pc < 0 && Math.abs(diff <= 25)) { | |
newx = x * (mid + (mid - right) * pc); | |
} | |
} | |
return newx; | |
}; | |
Field.prototype.transformY = function(y) { | |
var radians, newy; | |
if (!y) { | |
return 0; | |
} | |
radians = 0; | |
if (y < 150) { | |
if (this.size.width === 475) { | |
radians = 0.95 - ((0.95 - 1.1) * ((150 - y) / 115)); | |
} else { | |
if (this.size.width === 320) { | |
radians = 1.14 - ((1.14 - 1.29) * ((150 - y) / 115)); | |
} | |
} | |
} else { | |
if (y >= 150 && y <= 195) { | |
radians = this.size.width === 320 ? 1.13 : 0.89; | |
} else { | |
if (y > 195) { | |
radians = this.size.width === 320 ? 1.05 : 0.75; | |
} | |
} | |
} | |
newy = (y * Math.cos(radians)) + (1 * -Math.sin(radians)); | |
return newy; | |
}; | |
Field.prototype.isEmptyObject = function(o) { | |
var p; | |
for (p in o) { | |
if (!__hasProp.call(o, p)) { | |
continue; | |
} | |
return false; | |
} | |
return true; | |
}; | |
Field.prototype.trailColors = { | |
drive: "247, 215, 4,", | |
popup: "42, 151, 234,", | |
grounder: "61, 244, 214,", | |
pitch: "229, 51, 48," | |
}; | |
Field.prototype.updateBatter = function(name) { | |
this.batterName = name; | |
return this.sprayChartPlayer.text(name); | |
}; | |
Field.prototype.pitch = function(data) { | |
if (this.isAnimating) { | |
this.pitchQueue.push(data); | |
} else { | |
this.animatePitch(data); | |
} | |
}; | |
Field.prototype.checkPitchQueue = function() { | |
if (this.pitchQueue.length > 0) { | |
this.animatePitch(this.pitchQueue.shift()); | |
} | |
}; | |
Field.prototype.animatePitch = function(data) { | |
var duration, endCallback, endRadius, hit, hitType, pitchCallback, self, types; | |
self = this; | |
this.isAnimating = true; | |
hitType = String(data.type).toLowerCase() || "l"; | |
duration = data.duration; | |
pitchCallback = function() { | |
data.pitchCallback && data.pitchCallback(); | |
}; | |
endCallback = function() { | |
data.callback && data.callback(); | |
self.mark({ | |
x: data.x, | |
y: data.y, | |
isHit: data.isHit | |
}); | |
self.checkPitchQueue(); | |
self.isAnimating = false; | |
}; | |
endRadius = BALL_RADIUS * this.getDiminishingPercentage(this.homeY, this.rubberY); | |
types = { | |
l: this.drive, | |
p: this.popup, | |
f: this.popup, | |
g: this.grounder, | |
b: this.bunt | |
}; | |
hit = function(data) { | |
if (!data) { | |
return; | |
} | |
if (types[hitType]) { | |
setTimeout(function() { | |
types[hitType].call(self, { | |
x: data.x, | |
y: data.y, | |
duration: duration, | |
callback: endCallback | |
}); | |
}, 15); | |
} else { | |
endCallback && endCallback(); | |
} | |
}; | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: [this.rubberX, this.rubberY, endRadius], | |
destination: [this.homeX, this.homeY, BALL_RADIUS], | |
trailColor: this.trailColors.pitch, | |
easing: "easeOut", | |
zIndex: 50, | |
callback: function() { | |
pitchCallback(); | |
self.trailStates = []; | |
hit(data); | |
} | |
}, 500); | |
}; | |
Field.prototype.drive = function(data) { | |
var callback, duration, endRadius, x, xDir, y; | |
if (!data) { | |
return; | |
} | |
this.isAnimating = true; | |
duration = data.duration || 2000; | |
callback = function() { | |
data.callback && data.callback(); | |
this.isAnimating = false; | |
}; | |
xDir = this.homeX > data.x ? -1 : 1; | |
x = this.transformX(data.x); | |
y = this.transformY(data.y); | |
endRadius = BALL_RADIUS * this.getDiminishingPercentage(this.homeY, y); | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: this.plate, | |
destination: [x, y, endRadius], | |
easing: "easeOut", | |
trailColor: this.trailColors.drive, | |
callback: callback, | |
zIndex: 50 | |
}, duration); | |
}; | |
Field.prototype.popup = function(data) { | |
var callback, controlX, controlY, duration, endRadius, x, y; | |
if (!data) { | |
return; | |
} | |
this.isAnimating = true; | |
duration = data.duration || 3000; | |
x = this.transformX(data.x); | |
y = this.transformY(data.y); | |
endRadius = BALL_RADIUS * this.getDiminishingPercentage(this.homeY, y); | |
controlX = this.homeX - ((this.homeX - x) / 2); | |
controlY = BEZ - (y / 2); | |
callback = function() { | |
data.callback && data.callback(); | |
this.isAnimating = false; | |
}; | |
x = x === this.homeX ? x - 1 : x; | |
this.drawShadow({ | |
x: x, | |
y: y, | |
duration: duration | |
}); | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: this.plate, | |
control: [controlX, controlY, POPFLY_RADIUS], | |
destination: [x, y, endRadius], | |
easing: "easeOut", | |
trailColor: this.trailColors.popup, | |
callback: callback, | |
zIndex: 50 | |
}, duration); | |
}; | |
Field.prototype.grounder = function(data) { | |
var callback, controlX, controlX2, controlY, controlY2, duration, firstBounce, impact, secondBounce, x, xDiff, xDir, xImpact, xImpact2, y, yDiff, yImpact, yImpact2, _this = this; | |
if (!data) { | |
return; | |
} | |
this.isAnimating = true; | |
x = this.transformX(data.x); | |
y = this.transformY(data.y); | |
duration = data.duration || 1500; | |
callback = function() { | |
data.callback && data.callback(); | |
this.isAnimating = false; | |
}; | |
xDiff = this.homeX - x; | |
yDiff = this.homeY - y; | |
impact = 0.85; | |
xImpact = this.homeX - (impact * xDiff); | |
yImpact = this.homeY - (impact * yDiff); | |
controlX = xImpact; | |
controlY = yImpact + BEZ / 4; | |
xImpact2 = xImpact - (0.5 * (xImpact - x)); | |
yImpact2 = yImpact - (0.5 * (yImpact - y)); | |
controlX2 = xImpact2; | |
controlY2 = yImpact2 + BEZ / 7; | |
xDir = this.homeX > data.x ? -1 : 1; | |
secondBounce = function() { | |
new _this.Impact({ | |
instance: _this, | |
x: xImpact2, | |
y: yImpact2 | |
}); | |
_this.drawShadow({ | |
origin: [xImpact2, yImpact2 + 2, SHADOW_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact2)], | |
destination: [x, y, SHADOW_RADIUS * _this.getDiminishingPercentage(_this.homeY, y)], | |
duration: duration * 0.075 | |
}); | |
new Neo.Animation(_this.keanu, { | |
instance: _this, | |
origin: [xImpact2, yImpact2, GROUNDER_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact2)], | |
control: [controlX2, controlY2, GROUNDER_RADIUS * _this.getDiminishingPercentage(yImpact2, yImpact2 - 10)], | |
destination: [x, y, GROUNDER_RADIUS * _this.getDiminishingPercentage(_this.homeY, y)], | |
easing: "easeOut", | |
hideTrails: true, | |
trailColor: _this.trailColors.grounder, | |
callback: callback, | |
zIndex: 50 | |
}, duration * 0.1); | |
}; | |
firstBounce = function() { | |
new _this.Impact({ | |
instance: _this, | |
x: xImpact, | |
y: yImpact | |
}); | |
_this.drawShadow({ | |
origin: [xImpact, yImpact, SHADOW_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact)], | |
destination: [xImpact2, yImpact2 + 1, SHADOW_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact2)], | |
easing: "linear", | |
duration: duration * 0.075 | |
}); | |
new Neo.Animation(_this.keanu, { | |
instance: _this, | |
origin: [xImpact, yImpact, GROUNDER_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact)], | |
control: [controlX, controlY, GROUNDER_RADIUS * _this.getDiminishingPercentage(yImpact, yImpact - 10)], | |
destination: [xImpact2, yImpact2, GROUNDER_RADIUS * _this.getDiminishingPercentage(_this.homeY, yImpact2)], | |
easing: "linear", | |
hideTrails: true, | |
trailColor: _this.trailColors.grounder, | |
callback: secondBounce, | |
zIndex: 50 | |
}, duration * 0.1); | |
}; | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: [this.homeX, this.homeY, GROUNDER_RADIUS], | |
destination: [xImpact, yImpact, GROUNDER_RADIUS * this.getDiminishingPercentage(_this.homeY, yImpact)], | |
easing: "linear", | |
trailColor: this.trailColors.grounder, | |
callback: firstBounce, | |
zIndex: 50 | |
}, duration * 0.8); | |
}; | |
Field.prototype.bunt = function(data) { | |
if (!data) { | |
return; | |
} | |
this.grounder({ | |
x: data.x, | |
y: data.y, | |
duration: data.duration, | |
callback: data.callback | |
}); | |
}; | |
Field.prototype.drawShadow = function(data) { | |
var destination, duration, easing, origin; | |
if (!data) { | |
return; | |
} | |
origin = data.origin || [this.homeX, this.homeY, SHADOW_RADIUS]; | |
destination = data.destination || [data.x, data.y, SHADOW_RADIUS]; | |
duration = data.duration || 1000; | |
easing = data.easing || "easeOut"; | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: origin, | |
destination: destination, | |
easing: easing, | |
zIndex: 2, | |
hideTrails: true, | |
styles: this.shadow | |
}, duration); | |
}; | |
Field.prototype.run = function(data) { | |
var callback, destination, duration, origin; | |
if (!data) { | |
return; | |
} | |
origin = data.origin || this.first; | |
destination = data.destination || this.second; | |
duration = data.duration || 1000; | |
callback = data.callback || function() {}; | |
new Neo.Animation(this.keanu, { | |
instance: this, | |
origin: origin, | |
destination: destination, | |
easing: "linear", | |
hideTrails: true, | |
callback: callback, | |
zIndex: 50, | |
styles: { | |
fillStyle: "#FFFA70", | |
strokeStyle: "#FFFA70", | |
lineWidth: "0" | |
} | |
}, duration); | |
}; | |
Field.prototype.homeToFirst = function(callback) { | |
var self; | |
self = this; | |
this.htfRunning = true; | |
this.run({ | |
origin: this.home, | |
destination: this.first, | |
callback: function() { | |
self.htfRunning = false; | |
callback && callback.call(self); | |
} | |
}); | |
}; | |
Field.prototype.firstToSecond = function(callback) { | |
var self; | |
self = this; | |
this.ftsRunning = true; | |
this.run({ | |
origin: this.first, | |
destination: this.second, | |
callback: function() { | |
self.ftsRunning = false; | |
callback && callback.call(self); | |
} | |
}); | |
}; | |
Field.prototype.secondToThird = function(callback) { | |
var self; | |
self = this; | |
this.sttRunning = true; | |
this.run({ | |
origin: this.second, | |
destination: this.third, | |
callback: function() { | |
self.sttRunning = false; | |
callback && callback.call(self); | |
} | |
}); | |
}; | |
Field.prototype.thirdToHome = function(callback) { | |
var self; | |
self = this; | |
this.tthRunning = true; | |
this.run({ | |
origin: this.third, | |
destination: this.home, | |
callback: function() { | |
self.tthRunning = false; | |
callback && callback.call(self); | |
} | |
}); | |
}; | |
Field.prototype.secondToHome = function(callback) { | |
var self; | |
self = this; | |
this.sthRunning = true; | |
this.secondToThird(function() { | |
this.thirdToHome(function() { | |
self.sthRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.firstToHome = function(callback) { | |
var self; | |
self = this; | |
this.fthRunning = true; | |
this.firstToSecond(function() { | |
this.secondToHome(function() { | |
self.fthRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.homeToHome = function(callback) { | |
var self; | |
self = this; | |
this.hthRunning = false; | |
this.homeToFirst(function() { | |
this.firstToHome(function() { | |
self.hthRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.firstToThird = function(callback) { | |
var self; | |
self = this; | |
this.fttRunning = true; | |
this.firstToSecond(function() { | |
this.secondToThird(function() { | |
self.fttRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.homeToThird = function(callback) { | |
var self; | |
self = this; | |
this.httRunning = true; | |
this.homeToFirst(function() { | |
this.firstToThird(function() { | |
self.httRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.homeToSecond = function(callback) { | |
var self; | |
self = this; | |
this.htsRunning = true; | |
this.homeToFirst(function() { | |
this.firstToSecond(function() { | |
self.htsRunning = false; | |
callback && callback.call(self); | |
}); | |
}); | |
}; | |
Field.prototype.Impact = function(data) { | |
var draw, duration, instance, mark, tick, x, y; | |
if (!data) { | |
return; | |
} | |
instance = data.instance; | |
x = data.x || 0; | |
y = data.y || 0; | |
tick = 0; | |
mark = 5; | |
duration = 150; | |
draw = function() { | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x - BALL_RADIUS, y - (BALL_RADIUS / 3)], | |
destination: [x - BALL_RADIUS - mark / 2, y - (BALL_RADIUS / 2) - (mark / 2)] | |
}); | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x - BALL_RADIUS, y], | |
destination: [x - BALL_RADIUS - mark, y] | |
}); | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x - BALL_RADIUS, y + (BALL_RADIUS / 3)], | |
destination: [x - BALL_RADIUS - mark / 2, y + (BALL_RADIUS / 2) + (mark / 2)] | |
}); | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x + BALL_RADIUS, y + (BALL_RADIUS / 3)], | |
destination: [x + BALL_RADIUS + mark / 2, y - (BALL_RADIUS / 2) - (mark / 2)] | |
}); | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x + BALL_RADIUS, y], | |
destination: [x + BALL_RADIUS + mark, y] | |
}); | |
Neo.shapes.line({ | |
ctx: instance.keanu.ctx, | |
origin: [x + BALL_RADIUS, y + (BALL_RADIUS / 3)], | |
destination: [x + BALL_RADIUS + mark / 2, y + (BALL_RADIUS / 2) + (mark / 2)] | |
}); | |
tick += instance.intervalTime; | |
if (tick >= duration) { | |
instance.keanu.unsubscribe("enterFrame", draw, 60); | |
} | |
}; | |
instance.keanu.subscribe("enterFrame", draw, 60); | |
}; | |
Field.prototype.mark = function(data) { | |
var cssClass; | |
if (!data) { | |
return; | |
} | |
cssClass = data.isHit ? "hit" : "out"; | |
if (data.y > 0 && data.x > 0) { | |
$("<a href='#' class='hit-marker " + cssClass + "' style='display: none; top: " + ((this.transformY(data.y))) + "px; left: " + ((this.transformX(data.x)) - 9) + "px'></a>").appendTo(".field-container").fadeIn(500); | |
} | |
}; | |
Field.prototype.addPlayResult = function(text) { | |
var $marker; | |
if (settings.lang !== "es") { | |
$marker = this.fieldContainer.find(".hit-marker"); | |
if ($marker.length > 0) { | |
$marker.attr("title", text); | |
} | |
} | |
}; | |
Field.prototype.removeMarks = function() { | |
var $markers; | |
$markers = this.fieldContainer.find(".hit-marker"); | |
if ($markers.length > 0) { | |
$markers.remove(); | |
} | |
}; | |
Field.prototype.sprayText = function(x, y, percentage) { | |
var alpha, ctx, height, textX, textY, width; | |
ctx = this.keanu.ctx; | |
width = 35; | |
height = 15; | |
alpha = 0.6; | |
textX = x + 17; | |
textY = y + 11; | |
ctx.fillStyle = "rgba(0, 0, 0, " + alpha + ")"; | |
ctx.fillRect(x, y, width, height); | |
ctx.fillStyle = "#FFF"; | |
ctx.font = "8pt Verdana"; | |
ctx.textAlign = "center"; | |
ctx.fillText(percentage, textX, textY); | |
}; | |
Field.prototype.drawLeftField = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(93, 64); | |
ctx.bezierCurveTo(93, 64, 109, 57, 132, 53); | |
ctx.lineTo(110, 15); | |
ctx.bezierCurveTo(110, 15, 67, 19, 20, 27); | |
ctx.lineTo(93, 64); | |
} else { | |
ctx.moveTo(137, 95); | |
ctx.bezierCurveTo(137, 95, 172, 83, 197, 80); | |
ctx.lineTo(163, 23); | |
ctx.bezierCurveTo(163, 23, 91, 28, 31, 42); | |
ctx.lineTo(137, 95); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(77, 33, percentage + "%"); | |
} else { | |
this.sprayText(115, 50, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.drawCenterField = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(134, 53); | |
ctx.bezierCurveTo(134, 53, 160, 51, 187, 53); | |
ctx.lineTo(210, 15); | |
ctx.bezierCurveTo(210, 15, 160, 12, 112, 15); | |
ctx.lineTo(134, 53); | |
} else { | |
ctx.moveTo(199, 80); | |
ctx.bezierCurveTo(199, 80, 235, 75, 278, 80); | |
ctx.lineTo(314, 23); | |
ctx.bezierCurveTo(314, 23, 235, 15, 165, 23); | |
ctx.lineTo(199, 80); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(146, 25, percentage + "%"); | |
} else { | |
this.sprayText(217, 39, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.drawRightField = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(188, 54); | |
ctx.bezierCurveTo(188, 54, 208, 58, 225, 64); | |
ctx.lineTo(297, 27); | |
ctx.bezierCurveTo(297, 27, 385, 30, 212, 16); | |
ctx.lineTo(188, 54); | |
} else { | |
ctx.moveTo(280, 80); | |
ctx.bezierCurveTo(280, 80, 304, 84, 333, 95); | |
ctx.lineTo(440, 40); | |
ctx.bezierCurveTo(440, 40, 385, 30, 316, 23); | |
ctx.lineTo(280, 80); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(215, 33, percentage + "%"); | |
} else { | |
this.sprayText(320, 50, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.drawThirdBase = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(154, 98); | |
ctx.lineTo(156, 98); | |
ctx.lineTo(134, 55); | |
ctx.bezierCurveTo(134, 55, 111, 59, 92, 65); | |
ctx.lineTo(154, 98); | |
} else { | |
ctx.moveTo(232, 144); | |
ctx.lineTo(234, 144); | |
ctx.lineTo(199, 81); | |
ctx.bezierCurveTo(199, 81, 166, 85, 137, 97); | |
ctx.lineTo(232, 144); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(107, 68, percentage + "%"); | |
} else { | |
this.sprayText(161, 92, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.drawSecondBase = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(157, 98); | |
ctx.lineTo(135, 55); | |
ctx.bezierCurveTo(135, 55, 158, 52, 185, 56); | |
ctx.lineTo(157, 98); | |
} else { | |
ctx.moveTo(235, 144); | |
ctx.lineTo(200, 81); | |
ctx.bezierCurveTo(200, 81, 235, 77, 277, 82); | |
ctx.lineTo(235, 144); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(148, 62, percentage + "%"); | |
} else { | |
this.sprayText(220, 82, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.drawFirstBase = function(percentage) { | |
var ctx; | |
ctx = this.keanu.ctx; | |
ctx.beginPath(); | |
if (this.size.width === 320) { | |
ctx.moveTo(158, 98); | |
ctx.lineTo(159, 98); | |
ctx.lineTo(224, 66); | |
ctx.bezierCurveTo(224, 66, 207, 59, 186, 56); | |
ctx.lineTo(158, 98); | |
} else { | |
ctx.moveTo(236, 144); | |
ctx.lineTo(238, 144); | |
ctx.lineTo(334, 98); | |
ctx.bezierCurveTo(334, 98, 305, 86, 278, 82); | |
ctx.lineTo(236, 144); | |
} | |
ctx.fillStyle = "rgba(0, 0, 0, " + (percentage / 100) + ")"; | |
ctx.fill(); | |
ctx.closePath(); | |
try { | |
if (this.size.width === 320) { | |
this.sprayText(192, 68, percentage + "%"); | |
} else { | |
this.sprayText(279, 92, percentage + "%"); | |
} | |
} catch (e) {} | |
}; | |
Field.prototype.showSprayChart = function() { | |
var draw, _this = this; | |
this.sprayChartOn = true; | |
draw = function() { | |
_this.drawLeftField(_this.sprayChart.outLeftPct); | |
_this.drawCenterField(_this.sprayChart.outMidPct); | |
_this.drawRightField(_this.sprayChart.outRightPct); | |
_this.drawThirdBase(_this.sprayChart.infLeftPct); | |
_this.drawSecondBase(_this.sprayChart.infMidPct); | |
_this.drawFirstBase(_this.sprayChart.infRightPct); | |
if (!_this.sprayChartOn) { | |
_this.keanu.unsubscribe("enterFrame", draw, 50); | |
} | |
}; | |
this.sprayChartPlayer.text(this.batterName); | |
this.sprayChartCaption.removeClass("hideMe").addClass("showMe"); | |
this.keanu.subscribe("enterFrame", draw, 50); | |
}; | |
Field.prototype.hideSprayChart = function() { | |
this.sprayChartOn = false; | |
this.sprayChartCaption.removeClass("showMe").addClass("hideMe"); | |
this.sprayChartPlayer.text(""); | |
}; | |
Field.prototype.toggleSprayChart = function() { | |
if (this.showingSprayChart) { | |
this.hideSprayChart(); | |
$("#toggle-spray-chart").removeClass("on round-btn-small-on").addClass("round-btn-small").text(espn.gamecast.translate("SPRAY CHART OFF")); | |
} else { | |
if (this.showingBaserunners) { | |
this.toggleBaserunners(); | |
} | |
if (this.showingDefense) { | |
this.toggleDefense(); | |
} | |
this.showSprayChart(); | |
$("#toggle-spray-chart").removeClass("round-btn-small").addClass("on rount-btn-small-on").text(espn.gamecast.translate("SPRAY CHART ON")); | |
} | |
this.showingSprayChart = !this.showingSprayChart; | |
}; | |
Field.prototype.showDefense = function() { | |
$(".fielder").show(); | |
}; | |
Field.prototype.hideDefense = function() { | |
$(".fielder").hide(); | |
}; | |
Field.prototype.updateDefense = function(data) { | |
var empty, val, vals, _i, _len; | |
empty = { | |
lastName: "", | |
id: "", | |
position: "", | |
href: "" | |
}; | |
vals = [{ | |
position: "first-baseman", | |
data: data.first || empty | |
}, { | |
position: "second-baseman", | |
data: data.second || empty | |
}, { | |
position: "third-baseman", | |
data: data.third || empty | |
}, { | |
position: "shortstop-fielder", | |
data: data["short"] || empty | |
}, { | |
position: "pitcher-fielder", | |
data: data.pitcher || empty | |
}, { | |
position: "catcher-fielder", | |
data: data.catcher || empty | |
}, { | |
position: "left-fielder", | |
data: data.left || empty | |
}, { | |
position: "center-fielder", | |
data: data.center || empty | |
}, { | |
position: "right-fielder", | |
data: data.right || empty | |
}]; | |
for (_i = 0, _len = vals.length; _i < _len; _i++) { | |
val = vals[_i]; | |
$("#" + val.position).text(val.data.lastName).attr({ | |
"data-playerId": val.data.id, | |
"data-position": val.data.position, | |
href: val.data.href | |
}); | |
} | |
}; | |
Field.prototype.updatePitcher = function(pitcher) { | |
$("#pitcher-fielder").text(pitcher.lastName).attr({ | |
"data-playerId": pitcher.id, | |
"data-position": "P", | |
href: pitcher.href | |
}); | |
}; | |
Field.prototype.toggleDefense = function() { | |
if (this.showingDefense) { | |
this.hideDefense(); | |
$("#toggle-defense").removeClass("on round-btn-small-on").addClass("round-btn-small").text(espn.gamecast.translate("DEFENSE OFF")); | |
} else { | |
if (this.showingSprayChart) { | |
this.toggleSprayChart(); | |
} | |
if (this.showingBaserunners) { | |
this.toggleBaserunners(); | |
} | |
this.showDefense(); | |
this.adjustDefense(); | |
$("#toggle-defense").removeClass("round-btn-small").addClass("on round-btn-small-on").text(espn.gamecast.translate("DEFENSE ON")); | |
} | |
this.showingDefense = !this.showingDefense; | |
}; | |
Field.prototype.adjustDefense = function() { | |
var width; | |
width = this.rubberX * 2; | |
this.leftField.css("left", width * 0.2 - (this.leftField.innerWidth() / 2)); | |
this.centerField.css("left", width * 0.5 - (this.centerField.innerWidth() / 2)); | |
this.rightField.css("left", width * 0.75 - (this.rightField.innerWidth() / 2)); | |
this.firstBase.css("left", width * 0.65 - (this.firstBase.innerWidth() / 2)); | |
this.secondBase.css("left", width * 0.58 - (this.secondBase.innerWidth() / 2)); | |
this.thirdBase.css("left", width * 0.34 - (this.thirdBase.innerWidth() / 2)); | |
this.shortstop.css("left", width * 0.4 - (this.shortstop.innerWidth() / 2)); | |
this.pitcher.css("left", width * 0.5 - (this.pitcher.innerWidth() / 2)); | |
this.catcher.css("left", width * 0.5 - (this.catcher.innerWidth() / 2)); | |
}; | |
Field.prototype.isRunning = function() { | |
return this.htsRunning || this.httRunning || this.fttRunning || this.hthRunning || this.fthRunning || this.sthRunning || this.tthRunning || this.sttRunning || this.ftsRunning || this.htfRunning; | |
}; | |
Field.prototype.setBaserunners = function(runners) { | |
this.baserunners = runners; | |
}; | |
Field.prototype.showBaserunners = function() { | |
var i, runner, _len, _ref; | |
if (this.showingBaserunners) { | |
_ref = this.baserunners; | |
for (i = 0, _len = _ref.length; i < _len; i++) { | |
runner = _ref[i]; | |
if (!this.isEmptyObject(runner)) { | |
this.$baserunners[i].find("span").show(); | |
} else { | |
this.$baserunners[i].find("span").hide(); | |
} | |
} | |
} | |
}; | |
Field.prototype.hideBaserunners = function() { | |
var base, _i, _len, _ref; | |
_ref = this.$baserunners; | |
for (_i = 0, _len = _ref.length; _i < _len; _i++) { | |
base = _ref[_i]; | |
base.find("span").hide(); | |
} | |
}; | |
Field.prototype.toggleBaserunners = function() { | |
this.showingBaserunners = !this.showingBaserunners; | |
if (!this.showingBaserunners) { | |
this.hideBaserunners(); | |
$("#toggle-baserunners").removeClass("on round-btn-small-on").addClass("round-btn-small").text(espn.gamecast.translate("BASERUNNERS OFF")); | |
} else { | |
if (this.showingSprayChart) { | |
this.toggleSprayChart(); | |
} | |
if (this.showingDefense) { | |
this.toggleDefense(); | |
} | |
this.showBaserunners(); | |
$("#toggle-baserunners").removeClass("round-btn-small").addClass("on round-btn-small-on").text(espn.gamecast.translate("BASERUNNERS ON")); | |
} | |
}; | |
Field.prototype.handleResize = function(opts) { | |
if (!opts) { | |
return; | |
} | |
this.removeMarks(); | |
this.isAnimating = false; | |
if (opts.width && opts.height) { | |
$("#" + opts.canvasId).attr({ | |
width: opts.width, | |
height: opts.height | |
}); | |
this.size = { | |
width: opts.width, | |
height: opts.height | |
}; | |
} | |
this.keanu.reset(); | |
this.keanu = null; | |
this.keanu = new Keanu(opts.canvasId || "field-render"); | |
if (this.showingSprayChart) { | |
this.showingSprayChart = false; | |
this.toggleSprayChart(); | |
} else { | |
if (this.showingDefense) { | |
this.showingDefense = false; | |
this.toggleDefense(); | |
} else { | |
if (this.showingBaserunners) { | |
this.showingBaserunners = false; | |
this.toggleBaserunners(); | |
} | |
} | |
} | |
}; | |
Field.prototype.reset = function() { | |
this.keanu.reset(); | |
this.setBaserunners([0, 0, 0]); | |
this.removeMarks(); | |
this.pitchQueue = []; | |
this.showingBaserunners = true; | |
if (this.showingSprayChart) { | |
this.toggleSprayChart(); | |
} | |
if (this.showingDefense) { | |
this.toggleDefense(); | |
} | |
this.showBaserunners(); | |
this.showingSprayChart = false; | |
this.showingDefense = false; | |
this.isAnimating = false; | |
this.sprayChart = { | |
outLeftPct: 0, | |
outMidPct: 0, | |
outRightPct: 0, | |
infLeftPct: 0, | |
infMidPct: 0, | |
infRightPct: 0 | |
}; | |
$("#toggle-baserunners").removeClass("round-btn-small").addClass("on round-btn-small-on").text(espn.gamecast.translate("BASERUNNERS ON")); | |
}; | |
return Field; | |
})(); | |
espn.gamecast.field = Field; | |
})(jQuery); | |
}).call(this); | |
espn.gamecast.baserunners = {}; | |
(function($) { | |
var RUNNERS = espn.gamecast.baserunners, | |
field = null, | |
$baserunners = [$("#br-1"), $("#br-2"), $("#br-3")], | |
baserunners = [], | |
differences = [], | |
cache = {}, | |
team = "", | |
score = 0, | |
outs = 0, | |
scoringPlay = false, | |
isEmpty = espn.gamecast.isEmptyObject, | |
firstOnMap = [], | |
scoreMap = []; | |
RUNNERS.init = function(data) { | |
espn.gamecast.debug("Init runners"); | |
espn.gamecast.debug(data); | |
baserunners = data.runners; | |
field = data.field ? data.field : field; | |
team = data.team; | |
score = data.score; | |
outs = data.outs; | |
cache = {}; | |
firstOnMap = [field.homeToFirst, field.homeToSecond, field.homeToThird]; | |
scoreMap = [field.firstToHome, field.secondToHome, field.thirdToHome]; | |
RUNNERS.showBases(); | |
}; | |
RUNNERS.update = function(data) { | |
if (!data) { | |
return; | |
} | |
var dScore = parseInt(data.score, 10), | |
scoreDiff = dScore - score, | |
dOuts = parseInt(data.outs, 10), | |
outDiff = dOuts - outs, | |
i; | |
espn.gamecast.debug("Old score: " + score + ", New score: " + dScore); | |
if (outDiff > 0 || scoreDiff > 0 || RUNNERS.hasRunners(data.runners)) { | |
if (dOuts >= 3) { | |
RUNNERS.reset(); | |
} else { | |
if (data.team == team) { | |
RUNNERS.hideBases(); | |
if (data.eventType && (data.eventType == 28 || data.eventType == 30)) { | |
RUNNERS.score(); | |
field.homeToHome(); | |
} else { | |
var minBase = 0, | |
hitMap = ["First", "Second", "Third"]; | |
espn.gamecast.debug(data.runners); | |
for (i = 0; i < 3; i += 1) { | |
espn.gamecast.debug(data.runners[i]); | |
if (data.runners[i] && data.runners[i].id > 0 && RUNNERS.getBase(data.runners[i].id, baserunners, "prev") < 0) { | |
espn.gamecast.debug("First on.. " + i); | |
firstOnMap[i] && firstOnMap[i].call(field); | |
minBase = i; | |
break; | |
} | |
} | |
if (scoreDiff > 0) { | |
RUNNERS.score(2, 2 - scoreDiff); | |
} | |
for (i = 3 - scoreDiff; i > 0; i -= 1) { | |
if (data.runners[i] && RUNNERS.getBase(data.runners[i].id, baserunners, "prev") >= 0) { | |
if (RUNNERS.getBase(data.runners[i].id, data.runners, "cur") >= 0) { | |
if (RUNNERS.getBase(data.runners[i].id, baserunners, "prev") != RUNNERS.getBase(data.runners[i].id, data.runners, "cur")) { | |
field[hitMap[RUNNERS.getBase(data.runners[i].id, baserunners, "prev")].toLowerCase() + "To" + hitMap[RUNNERS.getBase(data.runners[i].id, data.runners, "cur")]](function() { | |
RUNNERS.showBase(i); | |
}); | |
} | |
} else { | |
espn.gamecast.debug("Someone is out"); | |
if (RUNNERS.getBase(data.runners[i].id, baserunners, "prev") <= minBase) { | |
field[hitMap[RUNNERS.getBase(data.runners[i].id, baserunners, "prev")].toLowerCase() + "To" + hitMap[RUNNERS.getBase(data.runners[i].id, baserunners, "prev") + (minBase + 1)]](function() { | |
RUNNERS.showBase(i); | |
}); | |
} else { | |
field[hitMap[RUNNERS.getBase(data.runners[i].id, baserunners, "prev")].toLowerCase() + "To" + hitMap[RUNNERS.getBase(data.runners[i].id, baserunners, "prev") + 1]](function() { | |
RUNNERS.showBase(i); | |
}); | |
} | |
} | |
} | |
} | |
var fn = function() { | |
if (field.isRunning()) { | |
setTimeout(fn, 50); | |
} else { | |
RUNNERS.init(data); | |
} | |
}; | |
setTimeout(fn, 250); | |
} | |
} else { | |
if (data.team != team) { | |
RUNNERS.init(data); | |
} | |
} | |
} | |
} | |
}; | |
RUNNERS.hasRunners = function(runners) { | |
espn.gamecast.debug("Has Runners?"); | |
var test = false; | |
for (var i = 0; i < 3; i += 1) { | |
if (baserunners[i] && runners[i]) { | |
if (baserunners[i].id != runners[i].id) { | |
test = true; | |
break; | |
} | |
} else { | |
if ((runners[i] && !baserunners[i]) || (baserunners[i] && !runners[i])) { | |
test = true; | |
break; | |
} | |
} | |
} | |
espn.gamecast.debug(test); | |
return test; | |
}; | |
RUNNERS.score = function(start, end) { | |
espn.gamecast.debug("Score!"); | |
start = start || 0; | |
end = end || 3; | |
if (start < end) { | |
for (; start < end; start += 1) { | |
if (baserunners[start] && baserunners[start].id > 0) { | |
scoreMap[start] && scoreMap[start].call(field); | |
} | |
} | |
} else { | |
espn.gamecast.debug(start + " " + end); | |
for (; start > end; start -= 1) { | |
if (baserunners[start] && baserunners[start].id > 0) { | |
scoreMap[start] && scoreMap[start].call(field); | |
} | |
} | |
} | |
}; | |
RUNNERS.getBase = function(id, runners, co) { | |
var base = -1; | |
if (id) { | |
if (typeof cache[co + "" + id] != "undefined") { | |
espn.gamecast.debug("Using cached value for key " + co + "" + id + " : " + cache[co + "" + id]); | |
base = cache[co + "" + id]; | |
} else { | |
for (var i = 0; i < 3; i += 1) { | |
if (runners[i] && runners[i].id == id) { | |
base = i; | |
cache[co + "" + id] = i; | |
break; | |
} | |
} | |
} | |
} | |
return base; | |
}; | |
RUNNERS.reset = function() { | |
cache = {}; | |
team = ""; | |
score = 0; | |
outs = 0; | |
baserunners = [{}, {}, {}]; | |
RUNNERS.hideBases(); | |
}; | |
RUNNERS.showBase = function(base) { | |
if (base && base < 3 && base >= 0) { | |
$baserunners[base].show(); | |
} | |
}; | |
RUNNERS.showBases = function() { | |
for (var b = 0, l = baserunners.length; b < l; b += 1) { | |
if (baserunners[b] && !isEmpty(baserunners[b]) && baserunners[b].id > 0) { | |
$baserunners[b].attr({ | |
"data-playerId": baserunners[b].id, | |
"data-position": "R", | |
href: espn.gamecast.getPlayerLinkHREF(baserunners[b].id) | |
}).find("span").text(baserunners[b].lastName).end().show(); | |
} else { | |
$baserunners[b].hide(); | |
} | |
} | |
field.showBaserunners(); | |
}; | |
RUNNERS.hideBases = function() { | |
for (var b = 0, l = $baserunners.length; b < l; b += 1) { | |
$baserunners[b].hide(); | |
} | |
}; | |
}(jQuery)); | |
espn = espn || {}; | |
espn.gamecast = espn.gamecast || {}; | |
espn.gamecast.pitchZone = {}; | |
(function($) { | |
var ZONE = espn.gamecast.pitchZone, | |
batAvg = 0, | |
pitches = [], | |
avgs = [], | |
alphas = [], | |
zones = [], | |
$grid = $("#pitch-zone-grid"), | |
$stance = $("#pitch-zone-stance"), | |
gridW = $grid.width() || 124, | |
gridH = $grid.height() || 124, | |
rgb = { | |
cold: "54, 98, 171", | |
hot: "214,33,40" | |
}, | |
hex = { | |
hot: "860000", | |
cold: "004C80" | |
}, | |
heatMapOn = false, | |
velTypeOn = false, | |
dimension = 22, | |
transformX = function(x) { | |
var newX = ((x - 43) * 1.13) - (dimension / 2); | |
if (newX < 0) { | |
newX = 0; | |
} | |
if (newX > gridW) { | |
newX = gridW; | |
} | |
return newX; | |
}, | |
transformY = function(y) { | |
var newY = ((y - 78) * 1.1) - (dimension / 2); | |
if (newY < 0) { | |
newY = 0; | |
} | |
if (newY > gridH) { | |
newY = gridH; | |
} | |
return newY; | |
}, | |
getAlpha = function(avg) { | |
alpha = Math.abs((avg - batAvg) / batAvg); | |
if (alpha < 0.8) { | |
alpha += 0.1; | |
} | |
return alpha.toFixed(2); | |
}, | |
getIEAlphaHex = function(a) { | |
var h = Math.floor(a * 255).toString(16); | |
return "00".slice(h.length) + h; | |
}; | |
ZONE.init = function(data) { | |
batAvg = 0.3; | |
avgs = data.averages || 0; | |
pitches = data.pitches || []; | |
stance = data.stance || ""; | |
ZONE.setBattingStance(stance); | |
ZONE.setAverages(avgs); | |
if (pitches.length > 0) { | |
ZONE.replayPitches(); | |
} | |
}; | |
ZONE.setBattingStance = function(stance) { | |
$stance.show().get(0).className = "batter-stance " + stance; | |
}; | |
ZONE.setBattingAverage = function(avg) { | |
batAvg = avg < 0 ? 0 : avg; | |
}; | |
ZONE.setAverages = function(data) { | |
avgs = Array.apply(null, data); | |
avgs.reverse(); | |
for (var i = 0, len = avgs.length; i < len; i += 1) { | |
if (avgs != "") { | |
alphas[i] = avgs[i] == -1 ? 0 : getAlpha(avgs[i]); | |
zones[i] = avgs[i] >= batAvg ? "hot" : "cold"; | |
} | |
} | |
ZONE.adjustHeatMap(); | |
}; | |
ZONE.adjustHeatMap = function() { | |
$grid.find(".pz-quadrant").each(function(i) { | |
try { | |
$(this).css({ | |
"background-color": "transparent", | |
"background-color": "rgba(" + rgb[zones[i]] + ", " + alphas[i] + ")" | |
}).find(".avg").text(avgs[i] == -1 ? "" : avgs[i]); | |
} catch (e) {} | |
}); | |
}; | |
ZONE.showHeatMap = function() { | |
if (!heatMapOn) { | |
$grid.addClass("heat-map-on"); | |
$grid.find(".pitch").hide(); | |
if (zones.length === 0) { | |
$grid.find(".avg").hide(); | |
} else { | |
$grid.find(".avg").css("display", "block"); | |
} | |
} | |
}; | |
ZONE.hideHeatMap = function() { | |
if (heatMapOn) { | |
$grid.removeClass("heat-map-on"); | |
$grid.find(".pitch").show(); | |
$grid.find(".avg").hide(); | |
} | |
}; | |
ZONE.showVelType = function() { | |
$(".pitch-vel-type,.pitch-zone-mobile").addClass("show"); | |
setTimeout(function() { | |
$(".pitch-zone-mobile").removeClass("show"); | |
}, 3000); | |
}; | |
ZONE.hideVelType = function() { | |
$(".pitch-vel-type").removeClass("show"); | |
}; | |
ZONE.toggleHeatMap = function() { | |
if (heatMapOn) { | |
ZONE.hideHeatMap(); | |
$("#toggle-heat-map").removeClass("on").text(espn.gamecast.translate("HIT ZONE OFF")); | |
} else { | |
ZONE.showHeatMap(); | |
$("#toggle-heat-map").addClass("on").text(espn.gamecast.translate("HIT ZONE ON")); | |
} | |
heatMapOn = !heatMapOn; | |
}; | |
ZONE.pitch = function(data, replay) { | |
var x = transformX(data.x) || 0, | |
y = transformY(data.y) || 0, | |
type = data.type || "strike", | |
pitch = data.pitch || pitches.length + 1, | |
vel = data.vel, | |
replay = replay || false; | |
if (!replay) { | |
pitches.push({ | |
x: x, | |
y: y, | |
type: type, | |
pitch: pitch, | |
vel: vel | |
}); | |
} | |
if (heatMapOn) { | |
$('<div class="pitch ' + type + '" style="display: none; left:' + x + "px; top: " + y + 'px;">' + pitch + "</div>").appendTo("#pitch-zone-grid"); | |
} else { | |
$('<div class="pitch ' + type + '" style="display: none; left:' + x + "px; top: " + y + 'px;">' + pitch + "</div>").appendTo("#pitch-zone-grid").fadeIn(); | |
} | |
}; | |
ZONE.setVelType = function(data) { | |
var vel = data.vel; | |
if (vel !== undefined && vel != "") { | |
$(".pitch-vel-type span.pitchinfo,.pitch-zone-mobile").html(vel); | |
ZONE.showVelType(); | |
} else { | |
ZONE.hideVelType(); | |
} | |
}; | |
ZONE.replayPitches = function() { | |
for (var i = 0, l = pitches.length; i < l; i += 1) { | |
ZONE.pitch(pitches[i], true); | |
ZONE.setVelType(pitches[i]); | |
} | |
}; | |
ZONE.reset = function() { | |
$grid.find(".pitch").remove(); | |
$stance.hide().get(0).className = "batting-stance"; | |
pitches = []; | |
avgs = []; | |
alphas = []; | |
zones = []; | |
ZONE.hideVelType(); | |
}; | |
ZONE.thereIsNoCryingInBaseball = function() { | |
return pitches; | |
}; | |
}(jQuery)); | |
espn.gamecast.pitchInfo = {}; | |
(function($) { | |
var INFO = espn.gamecast.pitchInfo, | |
pitches = [], | |
$list = $("#pitch-info-list"); | |
INFO.init = function(data) { | |
pitches = data; | |
if (pitches.length > 0) { | |
INFO.replayPitches(); | |
} | |
}; | |
INFO.reset = function() { | |
pitches = []; | |
$list.html(""); | |
$(".pitch-vel-type,.pitch-zone-mobile").removeClass("show"); | |
}; | |
INFO.pitch = function(data) { | |
var pitch = data.pitch || pitches.length + 1, | |
result = data.result || "", | |
lowerRes = result.toLowerCase(), | |
cssClass = ""; | |
pitches.push({ | |
pitch: pitch, | |
result: result | |
}); | |
$list.prepend('<li><div class="' + INFO.getPitchClass(result) + '">' + pitch + "</div><p>" + result + "</p></li>"); | |
}; | |
INFO.replayPitches = function() { | |
var pitchHtml = ""; | |
for (var i = pitches.length - 1; i >= 0; i -= 1) { | |
pitchHtml += '<li><div class="' + INFO.getPitchClass(pitches[i].result) + '">' + pitches[i].pitch + "</div><p>" + pitches[i].result + "</p></li>"; | |
} | |
$list.html(pitchHtml); | |
}; | |
INFO.getPitchClass = function(text) { | |
text = text.toLowerCase() || ""; | |
var cssClass = ""; | |
if (text.indexOf("strike") >= 0) { | |
cssClass = "strike"; | |
} else { | |
if (text.indexOf("foul") >= 0) { | |
cssClass = "foul"; | |
} else { | |
if (text.indexOf("ball") >= 0 || text.indexOf("bola") >= 0) { | |
cssClass = "ball"; | |
} else { | |
if (text.indexOf("in play") >= 0 || text.toLowerCase().indexOf("en juego") >= 0) { | |
cssClass = "play"; | |
} | |
} | |
} | |
} | |
return cssClass; | |
}; | |
INFO.getPitches = function() { | |
return pitches; | |
}; | |
}(jQuery)); | |
espn.gamecast.bvp = {}; | |
(function($) { | |
var BVP = espn.gamecast.bvp, | |
$pitcher = $("#bvp-pitcher"), | |
$batter = $("#bvp-batter"), | |
pitchingTeam = "", | |
battingTeam = "", | |
pitchingHand = "", | |
battingHand = "", | |
lastPitcher = 0, | |
lastBatter = 0, | |
pitchStatIndex = 0, | |
batStatIndex = 0, | |
pitcherInterval = null, | |
batterInterval = null, | |
dataCount = 0, | |
pitcherPos = "", | |
isHandset = !!(espn.gamecast.version && espn.gamecast.version.isHandset()); | |
BVP.reset = function() { | |
espn.gamecast.debug("Resetting BVP"); | |
BVP.update({ | |
pitcher: false, | |
batter: false | |
}); | |
lastPitcher = 0; | |
lastBatter = 0; | |
pitchStatIndex = 0; | |
batStatIndex = 0; | |
dataCount = 0; | |
clearInterval(batterInterval); | |
batterInterval = null; | |
}; | |
BVP.update = function(data) { | |
var pitcher = data.pitcher, | |
batter = data.batter; | |
BVP.updatePitcher(pitcher); | |
BVP.updateBatter(batter); | |
BVP.autoScroll(); | |
}; | |
BVP.updatePitcher = function(data) { | |
if (data && !espn.gamecast.isEmptyObject(data)) { | |
var html = "", | |
fade = true, | |
isStarter = data.isStarter == "true", | |
showSeason = false; | |
if (lastPitcher == 0) { | |
lastPitcher = data.id; | |
} else { | |
if (lastPitcher != data.id) { | |
pitchStatIndex = 0; | |
lastPitcher = data.id; | |
} else { | |
if (lastPitcher == data.id) { | |
fade = false; | |
} | |
} | |
} | |
dataCount = 0; | |
extra = ""; | |
pitchingTeam = data.team || ""; | |
html = '<div class="stat-scroller"> > </div>'; | |
html += '<div style="z-index:5" class="bvp-player-photo">'; | |
html += '<img src="http://a.espncdn.com/combiner/i?img=/i/headshots/mlb/players/full/' + data.id + '.png&w=120&h=90&scale=crop&background=0XCCCCCC&transparent=true" />'; | |
html += "</div>"; | |
if (!espn.gamecast.master.current.isAllStarGame) { | |
html += '<img class="team-logo" src="http://a2.espncdn.com/prod/assets/clubhouses/2010/mlb/logos/' + data.team + '.png">'; | |
} | |
html += '<div class="bvp-player-info">'; | |
html += '<h2><a href="' + espn.gamecast.getPlayerLinkHREF(data.id) + '" class="poppable" data-playerId="' + data.id + '" data-position="P">' + (isHandset ? data.firstName.substring(0, 1) + "." : data.firstName) + " <span>" + data.lastName + "</span></a></h2>"; | |
html += '<p class="pos-number">'; | |
if (typeof data.hand != "undefined") { | |
pitchingHand = data.hand || ""; | |
pitcherPos = data.hand + "H"; | |
} | |
pitcherPos += data.position; | |
html += espn.gamecast.translate(pitcherPos); | |
if (typeof data.number != "undefined") { | |
html += " #" + data.number; | |
} | |
html += "</p>"; | |
html += '<div id="pitcher-stat-swap">'; | |
if (data.today) { | |
if (dataCount == pitchStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("TODAY") + "</p>"; | |
html += '<p class="stat-line">' + (BVP.getValue(data.today.inningsPitched) || 0) + " " + espn.gamecast.translate("IP") + ", " + BVP.getValue(data.today.er) + " " + espn.gamecast.translate("ER"); | |
if (BVP.hasValue(data.today.strikeouts)) { | |
html += ", " + BVP.getValue(data.today.strikeouts) + " " + espn.gamecast.translate("SO"); | |
} | |
if (BVP.hasValue(data.today.walks)) { | |
html += ", " + BVP.getValue(data.today.walks) + " " + espn.gamecast.translate("BB"); | |
} | |
html += "</p></div>"; | |
dataCount++; | |
} | |
if (data.season && BVP.hasValue(data.season.innings)) { | |
showSeason = true; | |
if (dataCount == pitchStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("SEASON") + "</p>"; | |
html += '<p class="stat-line">'; | |
if (isStarter) { | |
html += (data.season.wins || 0) + "-" + (data.season.losses || 0) + ", "; | |
} else { | |
html += (data.season.saves || 0) + " " + espn.gamecast.translate("SV") + ", " + (data.season.holds || 0) + " " + espn.gamecast.translate("HLD") + ", "; | |
} | |
html += (data.season.era || 0) + " " + espn.gamecast.translate("ERA") + ", " + BVP.getValue(data.season.strikeouts) + " " + espn.gamecast.translate("SO"); | |
html += "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.lastSeason && BVP.hasValue(data.lastSeason.innings) && (!showSeason || (showSeason && data.season.innings < 10))) { | |
if (dataCount == pitchStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("LAST SEASON") + "</p>"; | |
html += '<p class="stat-line">'; | |
if (isStarter) { | |
html += (data.lastSeason.wins || 0) + "-" + (data.lastSeason.losses || 0) + ", "; | |
} else { | |
html += (data.lastSeason.saves || 0) + " " + espn.gamecast.translate("SV") + ", " + (data.lastSeason.holds || 0) + " " + espn.gamecast.translate("HLD") + ", "; | |
} | |
html += (data.lastSeason.era || 0) + " " + espn.gamecast.translate("ERA") + ", " + BVP.getValue(data.lastSeason.strikeouts) + " " + espn.gamecast.translate("SO"); | |
html += "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.vsLH && battingHand != "R") { | |
if (dataCount == pitchStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("vs LH") + "</p>"; | |
html += '<p class="stat-line">' + (BVP.getValue(data.vsLH.battersFaced) || 0) + " " + espn.gamecast.translate("TBF") + ", " + (BVP.getValue(data.vsLH.oppAvg) || 0) + " " + espn.gamecast.translate("BA") + ", " + BVP.getValue(data.vsLH.strikeouts) + " " + espn.gamecast.translate("SO") + "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.vsRH && battingHand != "L") { | |
if (dataCount == pitchStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("vs RH") + "</p>"; | |
html += '<p class="stat-line">' + (BVP.getValue(data.vsRH.battersFaced) || 0) + " " + espn.gamecast.translate("TBF") + ", " + (BVP.getValue(data.vsRH.oppAvg) || 0) + " " + espn.gamecast.translate("BA") + ", " + BVP.getValue(data.vsRH.strikeouts) + " " + espn.gamecast.translate("SO") + "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
html += "</div>"; | |
html += '<p class="misc">' + espn.gamecast.translate("PITCH COUNT") + ": " + data.today.pitches + "</p>"; | |
html += "</div>"; | |
if (fade) { | |
$pitcher.fadeOut(250, function() { | |
$(this).css("border-color", (data.teamColor || "")).html(html).fadeIn(250); | |
}); | |
} else { | |
$pitcher.css("border-color", (data.teamColor || "")).html(html); | |
} | |
BVP.autoScroll(); | |
} else { | |
$pitcher.html(""); | |
} | |
}; | |
BVP.updateBatter = function(data) { | |
if (data && !espn.gamecast.isEmptyObject(data)) { | |
if (data.id > 0) { | |
var html = "", | |
fade = true, | |
showSeason = false; | |
if (lastBatter == 0) { | |
lastBatter = data.id; | |
} else { | |
if (lastBatter != data.id) { | |
batStatIndex = 0; | |
lastBatter = data.id; | |
} else { | |
if (lastBatter == data.id) { | |
fade = false; | |
} | |
} | |
} | |
battingHand = data.bats || ""; | |
battingTeam = data.team || ""; | |
dataCount = 0; | |
html = '<div class="stat-scroller"> > </div>'; | |
html += '<div class="bvp-player-photo">'; | |
html += '<img src="http://a.espncdn.com/combiner/i?img=/i/headshots/mlb/players/full/' + data.id + '.png&w=120&h=90&scale=crop&background=0XCCCCCC&transparent=true" />'; | |
html += "</div>"; | |
if (!espn.gamecast.master.current.isAllStarGame) { | |
html += '<img class="team-logo" src="http://a2.espncdn.com/prod/assets/clubhouses/2010/mlb/logos/' + data.team + '.png">'; | |
} | |
html += '<div class="bvp-player-info">'; | |
html += '<h2><a href="' + espn.gamecast.getPlayerLinkHREF(data.id) + '" class="poppable" data-playerId="' + data.id + '" data-position="R">' + (isHandset ? data.firstName.substring(0, 1) + "." : data.firstName) + " <span>" + data.lastName + "</span></a></h2>"; | |
html += '<p class="pos-number">' + espn.gamecast.translate(data.position); | |
if (data.number != undefined) { | |
html += " #" + data.number; | |
} | |
html += "</p>"; | |
html += '<div id="batter-stat-swap">'; | |
if (data.today) { | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("TODAY") + "</p>"; | |
if (BVP.hasValue(data.today.atBats) || BVP.hasValue(data.today.walks) || BVP.hasValue(data.today.RBIs)) { | |
html += '<p class="stat-line">' + data.today.hits + "-" + data.today.atBats; | |
if (BVP.hasValue(data.today.runs)) { | |
html += ", " + BVP.getValue(data.today.runs) + " " + espn.gamecast.translate("R"); | |
} | |
if (BVP.hasValue(data.today.RBIs)) { | |
html += ", " + BVP.getValue(data.today.RBIs) + " " + espn.gamecast.translate("RBI"); | |
} | |
if (BVP.hasValue(data.today.walks)) { | |
html += ", " + BVP.getValue(data.today.walks) + " " + espn.gamecast.translate("BB"); | |
} | |
if (BVP.hasValue(data.today.strikeouts)) { | |
html += ", " + BVP.getValue(data.today.strikeouts) + " " + espn.gamecast.translate("SO"); | |
} | |
html += "</p>"; | |
} else { | |
html += '<p class="stat-line">' + espn.gamecast.translate("First At Bat") + "</p>"; | |
} | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.season && BVP.hasValue(data.season.atBats)) { | |
showSeason = true; | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + (espn.gamecast.master.current.seasonType == 3 ? espn.gamecast.translate("SERIES") : espn.gamecast.translate("SEASON")) + "</p>"; | |
html += '<p class="stat-line">' + (data.season.avg) + ", " + BVP.getValue(data.season.RBIs) + " " + espn.gamecast.translate("RBI") + ", " + BVP.getValue(data.season.homeRuns) + " " + espn.gamecast.translate("HR") + "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.lastSeason && BVP.hasValue(data.lastSeason.atBats) && (!showSeason || (showSeason && data.season.atBats < 10))) { | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("LAST SEASON") + "</p>"; | |
html += '<p class="stat-line">' + (data.lastSeason.avg) + ", " + BVP.getValue(data.lastSeason.RBIs) + " " + espn.gamecast.translate("RBI") + ", " + BVP.getValue(data.lastSeason.homeRuns) + " " + espn.gamecast.translate("HR") + "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.vsOpp && BVP.hasValue(data.vsOpp.atBats)) { | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
var teamName = pitchingTeam == "" ? espn.gamecast.translate("Opponent") : pitchingTeam.toUpperCase(); | |
html += '<p class="heading">' + espn.gamecast.translate("vs") + " " + teamName + "</p>"; | |
html += '<p class="stat-line">' + (data.vsOpp.avg || 0) + ", " + BVP.getValue(data.vsOpp.RBIs) + " " + espn.gamecast.translate("RBI") + ", " + BVP.getValue(data.vsOpp.homeRuns) + " " + espn.gamecast.translate("HR") + "</p>"; | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.vsLH && pitchingHand == "L") { | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("vs LHP") + "</p>"; | |
if (BVP.hasValue(data.vsLH.atBats)) { | |
html += '<p class="stat-line">' + (BVP.getValue(data.vsLH.avg) || 0) + ", " + BVP.getValue(data.vsLH.RBIs) + " " + espn.gamecast.translate("RBI") + ", " + BVP.getValue(data.vsLH.homeRuns) + " " + espn.gamecast.translate("HR") + "</p>"; | |
} else { | |
html += '<p class="stat-line">' + espn.gamecast.translate("No stats available") + "</p>"; | |
} | |
html += "</div>"; | |
dataCount++; | |
} | |
if (data.vsRH && pitchingHand == "R") { | |
if (dataCount == batStatIndex) { | |
html += '<div class="swappable-stat-line shown">'; | |
} else { | |
html += '<div class="swappable-stat-line" style="display: none">'; | |
} | |
html += '<p class="heading">' + espn.gamecast.translate("vs RHP") + "</p>"; | |
if (BVP.hasValue(data.vsRH.atBats)) { | |
html += '<p class="stat-line">' + (BVP.getValue(data.vsRH.avg) || 0) + ", " + BVP.getValue(data.vsRH.RBIs) + " " + espn.gamecast.translate("RBI") + ", " + BVP.getValue(data.vsRH.homeRuns) + " " + espn.gamecast.translate("HR") + "</p>"; | |
} else { | |
html += '<p class="stat-line">' + espn.gamecast.translate("No stats available") + "</p>"; | |
} | |
html += "</div>"; | |
dataCount++; | |
} | |
html += "</div>"; | |
html += "</div>"; | |
if (fade) { | |
$batter.fadeOut(250, function() { | |
$(this).css("border-color", (data.teamColor || "")).html(html).fadeIn(250); | |
}); | |
} else { | |
$batter.css("border-color", (data.teamColor || "")).html(html); | |
} | |
} | |
BVP.autoScroll(); | |
} else { | |
$batter.html(""); | |
} | |
}; | |
BVP.hasValue = function(stat) { | |
return (stat != "-" && stat > 0); | |
}; | |
BVP.getValue = function(stat) { | |
return stat == "-" ? 0 : (stat === "1" ? "" : stat); | |
}; | |
BVP.autoScroll = function() { | |
var scroll = function() { | |
if ($("#inning-view").css("display") == "block") { | |
BVP.scroll("#bvp-pitcher .stat-scroller"); | |
BVP.scroll("#bvp-batter .stat-scroller"); | |
} | |
}; | |
if (!batterInterval) { | |
batterInterval = setInterval(scroll, 10000); | |
} | |
}; | |
BVP.scroll = function(das) { | |
var isEvent = das.currentTarget || false, | |
$siblings = $(das).siblings(".bvp-player-info"), | |
$stats = $siblings.length > 0 ? $siblings.find(".swappable-stat-line") : [], | |
len = $stats.length, | |
$this, html = "", | |
index = -1; | |
if (len > 0) { | |
$stats.each(function(i) { | |
$this = $(this); | |
if ($this.hasClass("shown")) { | |
$this.fadeOut(250, function() { | |
$this.removeClass("shown").hide(); | |
if ($this.is(".swappable-stat-line:last-child")) { | |
try { | |
$this.siblings(".swappable-stat-line:first-child").addClass("shown").fadeIn(250); | |
} catch (e) {} | |
if ($this.parents("#bvp-pitcher").length > 0) { | |
pitchStatIndex = 0; | |
} else { | |
batStatIndex = 0; | |
} | |
} else { | |
$this.next(".swappable-stat-line").addClass("shown").fadeIn(250); | |
if ($this.parents("#bvp-pitcher").length > 0) { | |
pitchStatIndex = i + 1; | |
} else { | |
batStatIndex = i + 1; | |
} | |
} | |
}); | |
return false; | |
} | |
}); | |
} | |
}; | |
}(jQuery)); | |
espn.gamecast.playerCard = {}; | |
(function($) { | |
var CARD = espn.gamecast.playerCard, | |
debug = espn.gamecast.debug, | |
$card = $("#player-pop-card"), | |
$arrow = $("#player-pop-arrow"), | |
cache = {}, | |
useCache = false, | |
gameId = -1, | |
lang = settings.lang; | |
$card.prependTo("body"); | |
$arrow.prependTo("body"); | |
$card.delegate("#player-pop-close", "click", function(e) { | |
e.preventDefault(); | |
CARD.hide(); | |
}); | |
CARD.init = function(data) { | |
cache = data.cache || {}; | |
useCache = data.useCache || false; | |
if (!useCache) { | |
CARD.clearCache(); | |
} | |
}; | |
CARD.show = function(e) { | |
if ($card.length > 0) { | |
e.preventDefault(); | |
var html = "", | |
$this = $(this), | |
offset = $this.offset(), | |
playerId = $this.attr("data-playerId"), | |
position = $this.attr("data-position"), | |
deportes = settings.lang == "es" ? "/deportes" : "", | |
url = position.toLowerCase() == "p" ? "/mlb" + deportes + "/gamecast12/util/getPitcherCard" : "/mlb" + deportes + "/gamecast12/util/getBatterCard", | |
gameId = espn.gamecast.master.current.id, | |
loadCard = function() { | |
$card.html(html).css("display", "block"); | |
$arrow.css("display", "block"); | |
var top = offset.top - $arrow.height() - ($card.outerHeight() / 1.5) < 0 ? false : true, | |
left = offset.left + $arrow.width() + $card.outerWidth() + $this.outerWidth() > $(window).width() ? true : false, | |
arrowClass, arrowX, arrowY, cardClass, cardX, cardY; | |
if (left) { | |
arrowClass = top ? "br" : "tr"; | |
cardClass = "left"; | |
} else { | |
arrowClass = top ? "bl" : "tl"; | |
cardClass = "right"; | |
} | |
arrowX = left ? offset.left - $arrow.width() : offset.left + $this.outerWidth(); | |
arrowY = top ? offset.top - $arrow.height() : offset.top + $this.outerHeight(); | |
cardX = left ? arrowX - $card.outerWidth() : arrowX + $arrow.width(); | |
cardY = top ? arrowY - ($card.outerHeight() / 1.5) : arrowY - ($card.outerHeight() / 5); | |
var cardCSS = {}, | |
arrowCSS = {}; | |
if ($(window).width() <= 926) { | |
cardCSS.top = Math.max(cardY, 0); + "px"; | |
cardCSS.left = "50%"; | |
cardCSS.marginLeft = "-149px"; | |
arrowCSS.display = "none"; | |
} else { | |
cardCSS.top = cardY + "px"; | |
cardCSS.left = cardX + "px"; | |
cardCSS.marginLeft = "auto"; | |
arrowCSS.display = "block"; | |
arrowCSS.top = arrowY + "px"; | |
arrowCSS.left = arrowX + "px"; | |
} | |
$arrow.css(arrowCSS).removeClass().addClass("pop-arrow " + arrowClass); | |
$card.css(cardCSS).removeClass().addClass("player-card-pop " + cardClass); | |
}; | |
if (useCache) { | |
if (cache[playerId]) { | |
html = cache[playerId]; | |
loadCard(); | |
} else { | |
$.ajax({ | |
url: url, | |
data: { | |
playerId: playerId, | |
gameId: gameId, | |
lang: lang | |
}, | |
success: function(d) { | |
cache[playerId] = d; | |
html = d; | |
loadCard(); | |
} | |
}); | |
} | |
} else { | |
$.ajax({ | |
url: url, | |
data: { | |
playerId: playerId, | |
gameId: gameId, | |
lang: lang | |
}, | |
success: function(d) { | |
html = d; | |
loadCard(); | |
} | |
}); | |
} | |
} else { | |
return true; | |
} | |
}; | |
CARD.hide = function() { | |
$arrow.hide(); | |
$card.hide(); | |
$card.html(""); | |
}; | |
CARD.clearCache = function() { | |
cache = {}; | |
}; | |
CARD.getCache = function() { | |
return cache; | |
}; | |
}(jQuery)); | |
espn.gamecast.boxScore = {}; | |
(function($) { | |
var BOX = espn.gamecast.boxScore, | |
$teams = { | |
away: $("#box-score-away"), | |
home: $("#box-score-home") | |
}; | |
BOX.updateHome = function(data) { | |
BOX.update("home", { | |
home: data | |
}); | |
}; | |
BOX.updateAway = function(data) { | |
BOX.update("away", { | |
away: data | |
}); | |
}; | |
BOX.updateAll = function(data) { | |
BOX.update("home", data); | |
BOX.update("away", data); | |
}; | |
BOX.update = function(team, data) { | |
var stats = data[team], | |
hitters = stats.hitters, | |
pitchers = stats.pitchers, | |
expandedBatting = stats.expandedBatting, | |
expandedPitching = stats.expandedPitching, | |
$team = $teams[team], | |
hitterHTML = "", | |
pitcherHTML = "", | |
expandedHTML = "", | |
expitchHTML = "", | |
current = "", | |
extra = "", | |
cssClass = "oddrow"; | |
$team.find(".box-header").css("border-bottom", "2px solid " + stats.color).text(stats.team); | |
$(hitters).each(function() { | |
extra = (current == this.batOrder) ? " - " : ""; | |
current = this.batOrder; | |
hitterHTML += '<tr class="' + cssClass + '">'; | |
hitterHTML += '<td class="hc left">' + extra + '<a href="' + espn.gamecast.getPlayerLinkHREF(this.id) + '" class="poppable" data-playerid="' + this.id + '" data-position="B">' + this.firstName.substr(0, 1) + ". " + this.lastName + ' <span class="pos">' + this.position + "</span></a></td>"; | |
hitterHTML += "<td>" + this.today.atBats + "</td>"; | |
hitterHTML += "<td>" + this.today.runs + "</td>"; | |
hitterHTML += "<td>" + this.today.hits + "</td>"; | |
hitterHTML += "<td>" + this.today.RBIs + "</td>"; | |
hitterHTML += "<td>" + this.today.walks + "</td>"; | |
hitterHTML += "<td>" + this.today.strikeouts + "</td>"; | |
hitterHTML += "<td>" + this.today.avg + "</td>"; | |
hitterHTML += "</tr>"; | |
cssClass = cssClass == "oddrow" ? "evenrow" : "oddrow"; | |
}); | |
var dlen = expandedBatting["2B"].length, | |
tlen = expandedBatting["3B"].length, | |
hrlen = expandedBatting.HR.length, | |
sblen = expandedBatting.SB.length; | |
if (dlen > 0 || tlen > 0 || hrlen > 0 || sblen > 0) { | |
expandedHTML = "<ul>"; | |
if (dlen > 0) { | |
expandedHTML += "<li>"; | |
expandedHTML += "<b>" + espn.gamecast.translate("2B") + ":</b> "; | |
$(expandedBatting["2B"]).each(function(i) { | |
if (i > 0) { | |
expandedHTML += ", " + this.name + " "; | |
} else { | |
expandedHTML += this.name + " "; | |
} | |
if (this.today > 1) { | |
expandedHTML += this.today + " "; | |
} | |
if (this.season != "-" && !espn.gamecast.master.current.isAllStarGame) { | |
expandedHTML += "(" + this.season + ")"; | |
} | |
}); | |
expandedHTML += "</li>"; | |
} | |
if (tlen > 0) { | |
expandedHTML += "<li>"; | |
expandedHTML += "<b>" + espn.gamecast.translate("3B") + ":</b> "; | |
$(expandedBatting["3B"]).each(function(i) { | |
if (i > 0) { | |
expandedHTML += ", " + this.name + " "; | |
} else { | |
expandedHTML += this.name + " "; | |
} | |
if (this.today > 1) { | |
expandedHTML += this.today + " "; | |
} | |
if (this.season != "-" && !espn.gamecast.master.current.isAllStarGame) { | |
expandedHTML += "(" + this.season + ")"; | |
} | |
}); | |
expandedHTML += "</li>"; | |
} | |
if (hrlen > 0) { | |
expandedHTML += "<li>"; | |
expandedHTML += "<b>" + espn.gamecast.translate("HR") + ":</b> "; | |
$(expandedBatting.HR).each(function(i) { | |
if (i > 0) { | |
expandedHTML += ", " + this.name + " "; | |
} else { | |
expandedHTML += this.name + " "; | |
} | |
if (this.today > 1) { | |
expandedHTML += this.today + " "; | |
} | |
if (this.season != "-" && !espn.gamecast.master.current.isAllStarGame) { | |
expandedHTML += "(" + this.season + ")"; | |
} | |
}); | |
expandedHTML += "</li>"; | |
} | |
if (sblen > 0) { | |
expandedHTML += "<li>"; | |
expandedHTML += "<b>" + espn.gamecast.translate("SB") + ":</b> "; | |
$(expandedBatting.SB).each(function(i) { | |
if (i > 0) { | |
expandedHTML += ", " + this.name + " "; | |
} else { | |
expandedHTML += this.name + " "; | |
} | |
if (this.today > 1) { | |
expandedHTML += this.today + " "; | |
} | |
if (this.season != "-" && !espn.gamecast.master.current.isAllStarGame) { | |
expandedHTML += "(" + this.season + ")"; | |
} | |
}); | |
expandedHTML += "</li>"; | |
} | |
expandedHTML += "</ul>"; | |
} else {} | |
cssClass = "oddrow"; | |
extra = ""; | |
$(pitchers).each(function(i) { | |
if (i > 0) { | |
extra = " - "; | |
} | |
pitcherHTML += '<tr class="' + cssClass + '">'; | |
pitcherHTML += '<td class="hc left">' + extra + '<a href="' + espn.gamecast.getPlayerLinkHREF(this.id) + '" class="poppable" data-playerid="' + this.id + '" data-position="P">' + this.firstName.substr(0, 1) + ". " + this.lastName + "</a>" + (this.note ? '<span class="note">' + this.note + "</span>" : "") + "</td>"; | |
pitcherHTML += "<td>" + this.today.inningsPitched + "</td>"; | |
pitcherHTML += "<td>" + this.today.hits + "</td>"; | |
pitcherHTML += "<td>" + this.today.runs + "</td>"; | |
pitcherHTML += "<td>" + this.today.er + "</td>"; | |
pitcherHTML += "<td>" + this.today.walks + "</td>"; | |
pitcherHTML += "<td>" + this.today.strikeouts + "</td>"; | |
pitcherHTML += "<td>" + this.today.era + "</td>"; | |
pitcherHTML += "</tr>"; | |
cssClass = cssClass == "oddrow" ? "evenrow" : "oddrow"; | |
}); | |
var wplen = expandedPitching.WP.length, | |
ibblen = expandedPitching.IBB.length, | |
hbplen = expandedPitching.HBP.length, | |
blen = expandedPitching.B.length, | |
bflen = expandedPitching.BF.length, | |
gbfblen = expandedPitching.GBFB.length; | |
if (wplen > 0 || ibblen > 0 || hbplen > 0 || blen > 0 || bflen > 0 || gbfblen > 0) { | |
expitchHTML = "<ul>"; | |
if (wplen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("WP") + ":</b> "; | |
$(expandedPitching.WP).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
if (ibblen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("IBB") + ":</b> "; | |
$(expandedPitching.IBB).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
if (hbplen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("HBP") + ":</b> "; | |
$(expandedPitching.HBP).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
if (blen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("Balk") + ":</b> "; | |
$(expandedPitching.B).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
if (bflen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("Batters Faced") + ":</b> "; | |
$(expandedPitching.BF).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
if (gbfblen > 0) { | |
expitchHTML += "<li>"; | |
expitchHTML += "<b>" + espn.gamecast.translate("Ground Balls-Fly Balls") + ":</b> "; | |
$(expandedPitching.GBFB).each(function(i) { | |
if (i > 0) { | |
expitchHTML += ", " + this.name + " "; | |
} else { | |
expitchHTML += this.name + " "; | |
} | |
expitchHTML += this.today + " "; | |
}); | |
expitchHTML += "</li>"; | |
} | |
expitchHTML += "</ul>"; | |
} else {} | |
$team.find(".box-score-hitter").html(hitterHTML).end().find(".expanded-batting").html(expandedHTML).end().find(".box-score-pitcher").html(pitcherHTML).end().find(".expanded-pitching").html(expitchHTML).end(); | |
}; | |
BOX.toggleExpandedStats = function(e) { | |
e.preventDefault(); | |
$parent = $(this).parents(".box-footer"); | |
$parent.children("div").slideToggle(250, function(e) { | |
$parent.toggleClass("expanded"); | |
}); | |
}; | |
BOX.reset = function() { | |
$teams.away.find(".box-score-hitter").html("").end().find(".box-score-pitcher").html("").end(); | |
$teams.home.find(".box-score-hitter").html("").end().find(".box-score-pitcher").html("").end(); | |
}; | |
}(jQuery)); | |
espn.gamecast.gameStatus = {}; | |
(function($) { | |
var STATUS = espn.gamecast.gameStatus, | |
isMobile = !!espn.gamecast.version, | |
isHandset = espn.gamecast.version && espn.gamecast.version.isHandset(), | |
$status = $("#game-status"), | |
$balls = $("#game-status-balls"), | |
$strikes = $("#game-status-strikes"), | |
$outs = $("#game-status-outs"); | |
STATUS.update = function(data) { | |
var i, bHtml = "", | |
sHtml = "", | |
oHtml = ""; | |
if (isHandset && data.gameState === "pregame") { | |
$status.find(".inning").html(STATUS.getPregameText(data)); | |
} else { | |
$status.find(".inning").text(data.text.replace("de la", "") + " " + data.inning); | |
} | |
for (i = 1; i <= 4; i += 1) { | |
if (i <= data.balls) { | |
bHtml += '<div class="light ball"></div>'; | |
} else { | |
bHtml += '<div class="light off"></div>'; | |
} | |
} | |
for (i = 1; i <= 3; i += 1) { | |
if (i <= data.strikes) { | |
sHtml += '<div class="light strike"></div>'; | |
} else { | |
sHtml += '<div class="light off"></div>'; | |
} | |
} | |
for (i = 1; i <= 3; i += 1) { | |
if (i <= data.outs) { | |
oHtml += '<div class="light out"></div>'; | |
} else { | |
oHtml += '<div class="light off"></div>'; | |
} | |
} | |
$balls.html(bHtml); | |
$strikes.html(sHtml); | |
$outs.html(oHtml); | |
if (data.text.indexOf("Mid") >= 0 || data.text.indexOf("End") >= 0 || data.text.indexOf("Final") >= 0 || data.inning.indexOf("ET") >= 0 || data.text.indexOf("Fin ") >= 0 || data.text.indexOf("Mitad") >= 0) { | |
$status.addClass("downtime"); | |
} else { | |
$status.removeClass("downtime"); | |
} | |
}; | |
STATUS.getPregameText = function(data) { | |
var outputHTML = STATUS.createDateText(data.gameDate) + "<br/>" + data.text.replace("de la", "") + " " + data.inning + '<div class="extra">' + data.seriesText + '<span class="tv">' + (data.tvText != "" && data.tvText != " " ? espn.gamecast.translate("TV") + ": " : "") + data.tvText + "</span></div>"; | |
return outputHTML; | |
}; | |
STATUS.createDateText = function(dateStr) { | |
var date = dateStr, | |
months = [espn.gamecast.translate("Jan"), espn.gamecast.translate("Feb"), espn.gamecast.translate("Mar"), espn.gamecast.translate("Apr"), espn.gamecast.translate("May"), espn.gamecast.translate("Jun"), espn.gamecast.translate("Jul"), espn.gamecast.translate("Aug"), espn.gamecast.translate("Sept"), espn.gamecast.translate("Oct"), espn.gamecast.translate("Nov"), espn.gamecast.translate("Dec")], | |
days = [espn.gamecast.translate("Sun"), espn.gamecast.translate("Mon"), espn.gamecast.translate("Tues"), espn.gamecast.translate("Wed"), espn.gamecast.translate("Thur"), espn.gamecast.translate("Fri"), espn.gamecast.translate("Sat")], | |
year, month, day; | |
if (dateStr && dateStr.length >= 8) { | |
year = parseInt(dateStr.substring(0, 4), 10); | |
month = parseInt(dateStr.substring(4, 6), 10) - 1; | |
day = parseInt(dateStr.substring(6), 10); | |
date = new Date(year, month, day); | |
return days[date.getDay()] + ", " + months[date.getMonth()] + " " + date.getDate(); | |
} else { | |
return undefined; | |
} | |
}; | |
STATUS.reset = function() { | |
STATUS.update({ | |
text: "", | |
inning: "", | |
balls: 0, | |
strikes: 0, | |
outs: 0 | |
}); | |
}; | |
}(jQuery)); | |
espn.gamecast.dueUp = {}; | |
(function($) { | |
var DUE = espn.gamecast.dueUp, | |
$dueUp = $("#due-up"), | |
$players = $dueUp.find(".bvp-player"), | |
emptyPlayer = { | |
id: "", | |
firstName: "", | |
lastName: "", | |
today: {}, | |
season: {} | |
}, | |
emptyTeam = { | |
name: "", | |
abbrev: "", | |
color: "" | |
}; | |
DUE.reset = function() { | |
var data = { | |
players: [emptyPlayer, emptyPlayer, emptyPlayer], | |
inning: "", | |
team: emptyTeam, | |
dyk: "" | |
}; | |
DUE.update(data); | |
}; | |
DUE.getStat = function(stat) { | |
return stat == "-" ? 0 : (stat == 1 ? "" : stat); | |
}; | |
DUE.update = function(data) { | |
var players = data.players && typeof data.players[0] !== "undefined" ? data.players : false, | |
inning = data.inning || "", | |
team = data.team || emptyTeam, | |
dyk = data.dyk || "", | |
stat = espn.gamecast.translate("TODAY"); | |
if (players) { | |
$("#due-up > .heading").text(espn.gamecast.translate("Due up for the") + " " + team.name); | |
$players.each(function(i, v) { | |
stat = players[i].today.atBats == "-" || players[i].today.atBats == "0" ? "season" : "today"; | |
var stats = "", | |
statCount = 0; | |
if (stat == "today") { | |
stats += (players[i][stat].hits || 0) + "-" + (players[i][stat].atBats || 0); | |
if (statCount < 3 && players[i][stat].homeRuns > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].homeRuns) + " " + espn.gamecast.translate("HR"); | |
} | |
if (statCount < 3 && players[i][stat].RBIs > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].RBIs) + " " + espn.gamecast.translate("RBI"); | |
} | |
if (statCount < 3 && players[i][stat].runs > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].runs) + " " + espn.gamecast.translate("R"); | |
} | |
if (statCount < 3 && players[i][stat].walks > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].walks) + " " + espn.gamecast.translate("BB"); | |
} | |
if (statCount < 3 && players[i][stat].stolenBases > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].stolenBases) + " " + espn.gamecast.translate("SB"); | |
} | |
if (statCount < 3 && players[i][stat].strikeouts > 0) { | |
statCount++; | |
stats += ", " + DUE.getStat(players[i][stat].strikeouts) + " " + espn.gamecast.translate("SO"); | |
} | |
} else { | |
stats += players[i][stat].avg != "-" ? players[i][stat].avg : espn.gamecast.translate("No stats available"); | |
if (players[i][stat].avg != "-" && players[i][stat].RBIs > 0) { | |
stats += ", " + DUE.getStat(players[i][stat].RBIs) + " " + espn.gamecast.translate("RBI"); | |
} | |
if (players[i][stat].avg != "-" && players[i][stat].homeRuns > 0) { | |
stats += ", " + DUE.getStat(players[i][stat].homeRuns) + " " + espn.gamecast.translate("HR"); | |
} | |
} | |
$(this).attr("style", "border-top-color: " + team.color + ";").find(".bvp-player-photo").html('<img src="http://a.espncdn.com/combiner/i?img=/i/headshots/mlb/players/full/' + players[i].id + '.png&w=120&h=90&scale=crop&background=0XCCCCCC&transparent=true" />').end().find(".team-logo").attr("src", "http://a2.espncdn.com/prod/assets/clubhouses/2010/mlb/logos/" + team.abbrev + ".png").end().find(".bvp-player-info").find("h2").html("<h2>" + players[i].firstName + " <br /><span>" + players[i].lastName + "</span></h2>").end().find(".heading").text(espn.gamecast.translate(stat)).end().find(".stat-line").text(stats); | |
}); | |
$("#dyk p").html(dyk); | |
} | |
}; | |
}(jQuery)); | |
espn.gamecast.lastPlay = {}; | |
(function($) { | |
var lastPlay = espn.gamecast.lastPlay; | |
lastPlay.update = function(play) { | |
if (play.eventType == 58 || (play.eventType == 57 && eval(play.isResult))) { | |
playText = play.playResult; | |
$("#lp-playText").html(playText); | |
} | |
}; | |
lastPlay.build = function() { | |
var playText = espn.gamecast.translate("Currently Unavailable"), | |
plays = espn.gamecast.master.plays; | |
if (plays.length > 0) { | |
for (var i = 0, n = plays.length - 1; i < n; i++) { | |
if (plays[i].eventType == 58 || (plays[i].eventType == 57 && eval(plays[i].isResult))) { | |
playText = plays[i].playResult; | |
break; | |
} | |
} | |
} | |
$("#lp-playText").html(playText); | |
}; | |
})(jQuery); | |
espn.gamecast.ondeck = {}; | |
(function($) { | |
var ondeck = espn.gamecast.ondeck; | |
ondeck.update = function(hitter) { | |
hitter = hitter || false; | |
if (hitter) { | |
$("#od-playerId").html(ondeck.builder.html(hitter)); | |
} | |
}; | |
ondeck.builder = { | |
html: function(hitter) { | |
return '<a href="' + espn.gamecast.getPlayerLinkHREF(hitter.id) + '" class="poppable" data-playerid="' + hitter.id + '" data-position="' + hitter.position + '">' + hitter.firstName + " " + hitter.lastName + "</a>"; | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.weather = {}; | |
(function($) { | |
var WEATHER = espn.gamecast.weather, | |
$weather = $("#weather"); | |
WEATHER.update = function(data) { | |
var temp = data.temp || "", | |
condition = data.condition || "", | |
cssClass = condition == "" ? "" : "weather-icon " + condition.toLowerCase(); | |
$weather.find(".weather").html("<span>" + temp + "</span> " + condition).end().find("div").get(0).className = cssClass; | |
}; | |
WEATHER.reset = function() { | |
WEATHER.update({ | |
temp: "", | |
condition: "" | |
}); | |
}; | |
}(jQuery)); | |
espn.gamecast.model = {}; | |
(function($) { | |
var model = espn.gamecast.model, | |
batterId = 0, | |
pitcherId = 0, | |
teamBatting = "away", | |
teamPitching = "home", | |
currentBatter = null, | |
currentPitcher = null, | |
hasRun = false, | |
baserunners = [], | |
animating = false, | |
$scrollers = null, | |
currentatbatId = espn.gamecast.master.plays.length > 0 ? espn.gamecast.master.plays[0].atbatId : 0; | |
model.isHit = function(eventType) { | |
var hit = false, | |
hitTypes = [2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 28, 30, 60]; | |
for (var i = 0, l = hitTypes.length; i < l; i += 1) { | |
if (eventType == hitTypes[i]) { | |
hit = true; | |
break; | |
} | |
} | |
return hit; | |
}; | |
model.getPlayerTeam = function(playerId) { | |
playerId = playerId || 0; | |
var team = "none", | |
loop = [espn.gamecast.master.batting.away, espn.gamecast.master.pitching.away, espn.gamecast.master.batting.home, espn.gamecast.master.pitching.home], | |
i, j, l; | |
for (i = 0; i < 4; i += 1) { | |
if (team == "none") { | |
for (j = 0, l = loop[i].length; j < l; j += 1) { | |
if (playerId == loop[i][j].id && loop[i][j].id != "0") { | |
team = i < 2 ? "away" : "home"; | |
break; | |
} | |
} | |
} else { | |
break; | |
} | |
} | |
return team; | |
}; | |
model.isBetweenInnings = function() { | |
var inningStatus = model.getInningStatus().toLowerCase(); | |
return inningStatus == "mid" || inningStatus == "end" || model.isPregame() || inningStatus == "final" || inningStatus == "fin" || inningStatus == "mitad"; | |
}; | |
model.isPregame = function() { | |
return espn.gamecast.master.current.statusId == 1; | |
}; | |
model.getPitchNumber = function(playText) { | |
var pnEnd = playText.indexOf(":"), | |
pnStart = settings.lang == "es" ? 11 : 6, | |
pitchNumber = pnEnd >= 0 ? parseInt(playText.substring(pnStart, pnEnd), 10) : null; | |
return pitchNumber; | |
}; | |
model.getPlayResult = function(playText) { | |
var pnEnd = playText.indexOf(":"), | |
playResult = pnEnd >= 0 ? playText.substring(pnEnd + 2) : playText; | |
return playResult; | |
}; | |
model.getPitchType = function(pitch) { | |
var playType = "play"; | |
if (pitch.eventType == 5 || pitch.eventType == 29) { | |
playType = "ball"; | |
} else { | |
if (pitch.eventType == 36 || pitch.eventType == 37) { | |
playType = "strike"; | |
} else { | |
if (pitch.eventType == 13 || pitch.eventType == 21) { | |
playType = model.getFoulType(pitch); | |
} | |
} | |
} | |
return playType; | |
}; | |
model.getFoulType = function(pitch) { | |
var result = pitch.playResult || ""; | |
return result.indexOf("strike") >= 0 ? "strike" : "foul"; | |
}; | |
model.getCurrentPitches = function() { | |
var i, plays = [], | |
pitches = [], | |
playText = 0, | |
length = espn.gamecast.master.plays.length; | |
for (i = 0; i < length; i += 1) { | |
if (espn.gamecast.master.plays[i].summaryType == "A") { | |
break; | |
} else { | |
plays.push(espn.gamecast.master.plays[i]); | |
} | |
} | |
length = plays.length - 1; | |
for (i = length; i >= 0; i -= 1) { | |
if (plays[i].summaryType == "P") { | |
playText = plays[i].playText || plays[i].playResult; | |
pitches.push({ | |
pitch: model.getPitchNumber(playText), | |
type: model.getPitchType(plays[i]), | |
result: model.getPlayResult(playText), | |
x: plays[i].pitchXCoord, | |
y: plays[i].pitchYCoord, | |
vel: plays[i].velocity | |
}); | |
} | |
} | |
return pitches; | |
}; | |
model.getInningStatus = function(data) { | |
data = data || {}; | |
var text = data.status1 || espn.gamecast.master.current.status1, | |
end = settings.lang == "es" ? text.indexOf(" de la") : text.indexOf(" of"); | |
text = end >= 0 ? text.substring(0, end) : ""; | |
return text; | |
}; | |
model.getGameStatus = function(data) { | |
var text, end, inningText; | |
if (data.inningText) { | |
text = data.inningText || "", end = data.inningText.indexOf(" "), inningText = end >= 0 ? text.substring(end + 1) : ""; | |
if (data.eventType == 58 || data.eventType == 59) { | |
text = data.playResult != "null" ? data.playResult : ""; | |
end = settings.lang == "es" ? text.indexOf(" de la") : text.indexOf(" of"); | |
} | |
text = end >= 0 ? text.substring(0, end) : text; | |
} else { | |
text = data.status1 || "", end = settings.lang == "es" ? text.indexOf(" de la") : text.indexOf(" of"); | |
inningText = data.status2 || ""; | |
text = end >= 0 ? text.substring(0, end) : text; | |
} | |
return { | |
gameState: data.gameState, | |
gameDate: data.gameDate, | |
tvText: data.tvText, | |
seriesText: data.seriesText, | |
inning: inningText, | |
text: text, | |
balls: data.balls, | |
strikes: data.strikes, | |
outs: data.outs | |
}; | |
}; | |
model.isNewBatter = function(id) { | |
return id != batterId; | |
}; | |
model.isNewPitcher = function(id) { | |
return id != pitcherId; | |
}; | |
model.getBatter = function(id) { | |
var i, found = false, | |
batter = {}, | |
away = espn.gamecast.master.batting.away, | |
home = espn.gamecast.master.batting.home, | |
al = espn.gamecast.master.batting.away.length, | |
hl = espn.gamecast.master.batting.home.length; | |
for (i = 0; i < al; i += 1) { | |
if (away[i].id == id) { | |
batter = away[i]; | |
batter.team = espn.gamecast.master.current.away.abbrev.toLowerCase(); | |
batter.teamColor = espn.gamecast.master.current.away.color; | |
found = true; | |
break; | |
} | |
} | |
if (!found) { | |
for (i = 0; i < hl; i += 1) { | |
if (home[i].id == id) { | |
batter = home[i]; | |
batter.team = espn.gamecast.master.current.home.abbrev.toLowerCase(); | |
batter.teamColor = espn.gamecast.master.current.home.color; | |
found = true; | |
break; | |
} | |
} | |
} | |
return batter; | |
}; | |
model.getStance = function(batter) { | |
return batter.bats == "R" ? "right" : "left"; | |
}; | |
model.getPitcherByTeam = function(team) { | |
var pitchers = espn.gamecast.master.pitching[team], | |
pitcher = undefined; | |
for (var i = pitchers.length - 1; i >= 0; i -= 1) { | |
if (pitchers[i].id != "0") { | |
pitcher = pitchers[i]; | |
break; | |
} | |
} | |
return pitcher; | |
}; | |
model.getPitcher = function(id) { | |
var i, pitcher = {}, | |
found = false, | |
away = espn.gamecast.master.pitching.away, | |
home = espn.gamecast.master.pitching.home, | |
al = espn.gamecast.master.pitching.away.length, | |
hl = espn.gamecast.master.pitching.home.length; | |
for (i = 0; i < al; i += 1) { | |
if (away[i].id == id) { | |
pitcher = away[i]; | |
pitcher.team = espn.gamecast.master.current.away.abbrev.toLowerCase(); | |
pitcher.teamColor = espn.gamecast.master.current.away.color; | |
found = true; | |
break; | |
} | |
} | |
if (!found) { | |
for (i = 0; i < hl; i += 1) { | |
if (home[i].id == id) { | |
pitcher = home[i]; | |
pitcher.team = espn.gamecast.master.current.home.abbrev.toLowerCase(); | |
pitcher.teamColor = espn.gamecast.master.current.home.color; | |
found = true; | |
break; | |
} | |
} | |
} | |
return pitcher; | |
}; | |
model.getBaserunners = function(onBase) { | |
var runners = [{}, {}, {}]; | |
for (var i = 0; i < 3; i += 1) { | |
if (onBase[i].id > 0) { | |
runners[i] = onBase[i]; | |
} | |
} | |
return runners; | |
}; | |
model.initBatterPitcher = function() { | |
var i, l; | |
for (i = 0, l = espn.gamecast.master.plays.length; i < l; i += 1) { | |
if (espn.gamecast.master.plays[i].batter.id > 0) { | |
batterId = espn.gamecast.master.plays[i].batter.id; | |
pitcherId = espn.gamecast.master.plays[i].pitcher.id; | |
break; | |
} | |
} | |
currentBatter = model.getBatter(batterId); | |
currentPitcher = model.getPitcher(pitcherId); | |
}; | |
model.initTeamsBattingPitching = function() { | |
var status = espn.gamecast.master.current.status1, | |
midInn = settings.lang == "es" ? status.indexOf("Mitad") : status.indexOf("Mid"); | |
if (midInn >= 0) { | |
teamBatting = "home"; | |
} else { | |
if (status.indexOf("End") >= 0) { | |
teamBatting = "away"; | |
} else { | |
if (espn.gamecast.master.plays.length > 0) { | |
teamBatting = parseInt(espn.gamecast.master.plays[0].halfInning, 10) % 2 == 0 ? "away" : "home"; | |
} else { | |
teamBatting = "away"; | |
} | |
} | |
} | |
teamPitching = teamBatting == "home" ? "away" : "home"; | |
}; | |
model.setModelBatterId = function(newBatterId) { | |
batterId = newBatterId; | |
}; | |
model.getCurrentBatter = function() { | |
return currentBatter; | |
}; | |
model.setModelPitcherId = function(newPitcherId) { | |
pitcherId = newPitcherId; | |
}; | |
model.getCurrentPitcher = function() { | |
return currentPitcher; | |
}; | |
model.getTeamBatting = function() { | |
return teamBatting; | |
}; | |
model.getTeamPitching = function() { | |
return teamPitching; | |
}; | |
model.getDefense = function(team) { | |
var players = espn.gamecast.master.batting[team], | |
pitcher = espn.gamecast.master.pitching[team][espn.gamecast.master.pitching[team].length - 2], | |
data = {}, | |
positions = { | |
"1B": "first", | |
"2B": "second", | |
"3B": "third", | |
SS: "short", | |
C: "catcher", | |
LF: "left", | |
CF: "center", | |
RF: "right", | |
P: "pitcher" | |
}; | |
for (var i = 0, l = players.length - 1; i < l; i += 1) { | |
if (players[i].position != "DH" && players[i].position != "PH") { | |
data[positions[players[i].position]] = { | |
position: players[i].position, | |
id: players[i].id, | |
firstName: players[i].firstName, | |
lastName: players[i].lastName, | |
href: espn.gamecast.getPlayerLinkHREF(players[i].id) | |
}; | |
} | |
} | |
if (!data.pitcher) { | |
if (pitcher) { | |
data.pitcher = { | |
position: "P", | |
id: pitcher.id, | |
firstName: pitcher.firstName, | |
lastName: pitcher.lastName, | |
href: espn.gamecast.getPlayerLinkHREF(pitcher.id) | |
}; | |
} else { | |
data.pitcher = { | |
position: "P", | |
id: "", | |
firstName: "", | |
lastName: "", | |
href: "" | |
}; | |
} | |
} | |
return data; | |
}; | |
model.getBattingStats = function(team) { | |
var mBat = espn.gamecast.master.batting[team], | |
len = mBat.length, | |
batters = [], | |
i; | |
for (i = 0; i < len; i += 1) { | |
if (mBat[i].id > 0) { | |
batters.push(mBat[i]); | |
} | |
} | |
batters.sort(function(a, b) { | |
var diff = parseInt(a.batOrder, 10) - parseInt(b.batOrder, 10); | |
if (diff == 0) { | |
if (eval(a.isStarter)) { | |
diff = -1; | |
} else { | |
if (eval(b.isStarter)) { | |
diff = 1; | |
} | |
} | |
} | |
return diff; | |
}); | |
return batters; | |
}; | |
model.getExpandedBattingStats = function(team) { | |
var batters = espn.gamecast.master.batting[team], | |
len = batters.length, | |
expanded = { | |
"2B": [], | |
"3B": [], | |
HR: [], | |
SB: [] | |
}, | |
i; | |
for (i = 0; i < len; i += 1) { | |
if (batters[i].id > 0) { | |
if (batters[i].today.doubles > 0) { | |
expanded["2B"].push({ | |
name: batters[i].firstName.substr(0, 1) + ". " + batters[i].lastName, | |
today: batters[i].today.doubles, | |
season: batters[i].season.doubles | |
}); | |
} | |
if (batters[i].today.triples > 0) { | |
expanded["3B"].push({ | |
name: batters[i].firstName.substr(0, 1) + ". " + batters[i].lastName, | |
today: batters[i].today.triples, | |
season: batters[i].season.triples | |
}); | |
} | |
if (batters[i].today.homeRuns > 0) { | |
expanded.HR.push({ | |
name: batters[i].firstName.substr(0, 1) + ". " + batters[i].lastName, | |
today: batters[i].today.homeRuns, | |
season: batters[i].season.homeRuns | |
}); | |
} | |
if (batters[i].today.stolenBases > 0) { | |
expanded.SB.push({ | |
name: batters[i].firstName.substr(0, 1) + ". " + batters[i].lastName, | |
today: batters[i].today.stolenBases, | |
season: batters[i].season.stolenBases | |
}); | |
} | |
} | |
} | |
return expanded; | |
}; | |
model.getPitchingStats = function(team) { | |
var mPitch = espn.gamecast.master.pitching[team], | |
isAllStarGame = espn.gamecast.master.current.isAllStarGame, | |
len = mPitch.length, | |
pResults = espn.gamecast.master.current.pitchResult, | |
pitchers = [], | |
i; | |
for (i = 0; i < len; i += 1) { | |
if (mPitch[i].id > 0) { | |
if (mPitch[i].id == pResults.w.playerId) { | |
mPitch[i].note = "(W" + (!isAllStarGame ? ", " + pResults.w.record : "") + ")"; | |
} else { | |
if (mPitch[i].id == pResults.l.playerId) { | |
mPitch[i].note = "(L" + (!isAllStarGame ? ", " + pResults.l.record : "") + ")"; | |
} else { | |
if (mPitch[i].id == pResults.s.playerId) { | |
mPitch[i].note = "(S" + (!isAllStarGame ? ", " + pResults.s.record : "") + ")"; | |
} | |
} | |
} | |
pitchers.push(mPitch[i]); | |
} | |
} | |
return pitchers; | |
}; | |
model.getExpandedPitchingStats = function(team) { | |
var pitchers = espn.gamecast.master.pitching[team], | |
len = pitchers.length, | |
expanded = { | |
WP: [], | |
IBB: [], | |
HBP: [], | |
B: [], | |
BF: [], | |
GBFB: [] | |
}, | |
i; | |
for (i = 0; i < len; i += 1) { | |
if (pitchers[i].id > 0) { | |
if (pitchers[i].today.wildPitches > 0) { | |
expanded.WP.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.wildPitches | |
}); | |
} | |
if (pitchers[i].today.intentionalWalks > 0) { | |
expanded.IBB.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.intentionalWalks | |
}); | |
} | |
if (pitchers[i].today.battersHit > 0) { | |
expanded.HBP.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.battersHit | |
}); | |
} | |
if (pitchers[i].today.balks > 0) { | |
expanded.B.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.balks | |
}); | |
} | |
if (pitchers[i].today.battersFaced > 0) { | |
expanded.BF.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.battersFaced | |
}); | |
} | |
if (pitchers[i].today.groundBallFlyBall != "0-0" && pitchers[i].today.groundBallFlyBall != "---") { | |
expanded.GBFB.push({ | |
name: pitchers[i].firstName.substr(0, 1) + ". " + pitchers[i].lastName, | |
today: pitchers[i].today.groundBallFlyBall | |
}); | |
} | |
} | |
} | |
return expanded; | |
}; | |
model.getBoxscore = function() { | |
var homeTeam = espn.gamecast.getFullTeamName(espn.gamecast.master.current.home), | |
awayTeam = espn.gamecast.getFullTeamName(espn.gamecast.master.current.away), | |
homeColor = espn.gamecast.master.current.home.color, | |
awayColor = espn.gamecast.master.current.away.color, | |
home = { | |
hitters: model.getBattingStats("home"), | |
expandedBatting: model.getExpandedBattingStats("home"), | |
pitchers: model.getPitchingStats("home"), | |
expandedPitching: model.getExpandedPitchingStats("home"), | |
team: homeTeam, | |
color: homeColor | |
}, | |
away = { | |
hitters: model.getBattingStats("away"), | |
expandedBatting: model.getExpandedBattingStats("away"), | |
pitchers: model.getPitchingStats("away"), | |
expandedPitching: model.getExpandedPitchingStats("away"), | |
team: awayTeam, | |
color: awayColor | |
}; | |
return { | |
home: home, | |
away: away | |
}; | |
}; | |
model.getLastBatterByTeam = function(team) { | |
var plays = espn.gamecast.master.plays, | |
players = espn.gamecast.master.batting[team], | |
plen = plays.length, | |
tlen = players.length - 1, | |
i, j, found = false, | |
index = -1; | |
for (i = 0; i < plen; i += 1) { | |
for (j = 0; j < tlen; j += 1) { | |
if (plays[i].batter.id == players[j].id) { | |
found = true; | |
index = j; | |
break; | |
} | |
} | |
if (found) { | |
break; | |
} | |
} | |
return index; | |
}; | |
model.getDueUp = function() { | |
var lastBatter = model.getLastBatterByTeam(teamBatting), | |
index = 0, | |
players = espn.gamecast.master.batting[teamBatting], | |
plen = players.length - 1, | |
due = [], | |
count = 0; | |
index = (lastBatter + 1 > plen) ? 0 : lastBatter + 1; | |
if (players.length > 1) { | |
while (count < 3) { | |
if (players[index].id != 0 && players[index].replacedBy == "0") { | |
due.push(players[index]); | |
count += 1; | |
} | |
index = (index + 1 > plen) ? 0 : index + 1; | |
} | |
} else { | |
due = undefined; | |
} | |
return due; | |
}; | |
model.getOnDeck = function() { | |
var dueUp = model.getDueUp(); | |
if (dueUp && dueUp.length >= 1) { | |
return dueUp[0]; | |
} else { | |
return undefined; | |
} | |
}; | |
model.getWeather = function() { | |
return { | |
temp: espn.gamecast.master.current.temp, | |
condition: espn.gamecast.master.current.condition | |
}; | |
}; | |
model.buildSplits = function() { | |
var splits = [], | |
currentTeamScore = parseInt(espn.gamecast.master.current.scores[teamBatting][espn.gamecast.master.current.inning - 1], 10), | |
currentTeamScore = isNaN(currentTeamScore) ? 0 : currentTeamScore, | |
plusOneRuns = parseInt(currentTeamScore, 10) + 1, | |
plusTwoRuns = parseInt(currentTeamScore, 10) + 2, | |
basesString = "", | |
outString = parseInt(espn.gamecast.master.current.outs, 10) == 1 ? espn.gamecast.translate("out") : espn.gamecast.translate("outs"), | |
numberOnBase = (espn.gamecast.master.current.onBase[0].id != 0 ? 1 : 0) + (espn.gamecast.master.current.onBase[1].id != 0 ? 1 : 0) + (espn.gamecast.master.current.onBase[2].id != 0 ? 1 : 0), | |
currentBatter = model.getBatter(batterId), | |
currentPitcher = model.getPitcher(pitcherId), | |
pvb = espn.gamecast.master.current.pvb, | |
count = espn.gamecast.master.current.countStats, | |
risp = espn.gamecast.master.current.rispStats; | |
if (numberOnBase == 0) { | |
basesString = espn.gamecast.translate("Bases Empty"); | |
} else { | |
if (numberOnBase == 3) { | |
basesString = espn.gamecast.translate("Bases Loaded"); | |
} else { | |
if (numberOnBase > 1) { | |
basesString += espn.gamecast.translate("Runners on") + " "; | |
} else { | |
basesString += espn.gamecast.translate("Runner on") + " "; | |
} | |
if (espn.gamecast.master.current.onBase[0].id != 0) { | |
basesString += espn.gamecast.toOrdinal(1, "f"); | |
} | |
if (espn.gamecast.master.current.onBase[1].id != 0) { | |
basesString += espn.gamecast.master.current.onBase[0].id != 0 ? ", " : ""; | |
basesString += espn.gamecast.toOrdinal(2, "f"); | |
} | |
if (espn.gamecast.master.current.onBase[2].id != 0) { | |
basesString += espn.gamecast.master.current.onBase[0].id != 0 || espn.gamecast.master.current.onBase[1].id != 0 ? ", " : ""; | |
basesString += espn.gamecast.toOrdinal(3, "f"); | |
} | |
} | |
} | |
if (espn.gamecast.master.current.expectedRunsOne != 0) { | |
splits.push(espn.gamecast.translate("Chance of scoring") + " " + plusOneRuns + "+ " + espn.gamecast.translate("runs this inning") + " (" + espn.gamecast.master.current.outs + " " + outString + ", " + basesString + "): " + Math.round((parseFloat(espn.gamecast.master.current.expectedRunsOne) * 100) * Math.pow(10, 2)) / Math.pow(10, 2) + "%"); | |
} | |
if (espn.gamecast.master.current.expectedRunsTwo != 0) { | |
splits.push(espn.gamecast.translate("Chance of scoring") + " " + plusTwoRuns + "+ " + espn.gamecast.translate("runs this inning") + " (" + espn.gamecast.master.current.outs + " " + outString + ", " + basesString + "): " + Math.round((parseFloat(espn.gamecast.master.current.expectedRunsTwo) * 100) * Math.pow(10, 2)) / Math.pow(10, 2) + "%"); | |
} | |
if (pvb.atBats != "" && !isNaN(pvb.avg) && !isNaN(pvb.homeRuns) && !isNaN(pvb.strikeouts) && currentPitcher != undefined && currentPitcher.lastName != undefined) { | |
splits.push(currentBatter.lastName + " " + espn.gamecast.translate("career vs.") + " " + currentPitcher.lastName + ": " + pvb.hits + " " + espn.gamecast.translate("for") + " " + pvb.atBats + " (" + pvb.avg + " " + espn.gamecast.translate("AVG") + "), " + pvb.homeRuns + " " + espn.gamecast.translate("HR") + ", " + pvb.strikeouts + " " + espn.gamecast.translate("SO")); | |
} | |
if (count.atBats != "" && espn.gamecast.master.current.balls < 4 && espn.gamecast.master.current.strikes < 3) { | |
splits.push(currentBatter.lastName + " " + espn.gamecast.translate("this year") + " " + espn.gamecast.translate("after count") + " " + espn.gamecast.master.current.balls + "-" + espn.gamecast.master.current.strikes + ": " + count.hits + " " + espn.gamecast.translate("for") + " " + count.atBats + " (" + count.avg + " " + espn.gamecast.translate("AVG") + "), " + count.homeRuns + " " + espn.gamecast.translate("HR") + ", " + count.strikeouts + " " + espn.gamecast.translate("SO")); | |
} | |
if (risp.atBats != "" && (espn.gamecast.master.current.onBase[1].id != 0 || espn.gamecast.master.current.onBase[2].id != 0)) { | |
splits.push(currentBatter.lastName + " " + espn.gamecast.translate("this year") + " " + espn.gamecast.translate("w/ RISP") + ": " + risp.hits + " " + espn.gamecast.translate("for") + " " + risp.atBats + " (" + risp.avg + " " + espn.gamecast.translate("AVG") + "), " + risp.homeRuns + " " + espn.gamecast.translate("HR") + ", " + risp.strikeouts + " " + espn.gamecast.translate("SO")); | |
} | |
return splits; | |
}; | |
model.getWLS = function() { | |
return { | |
pitchers: espn.gamecast.master.current.pitchResult | |
}; | |
}; | |
model.getStory = function() { | |
var preview = espn.gamecast.master.preview, | |
recap = espn.gamecast.master.recap, | |
storyData = { | |
storyType: "", | |
pitchers: espn.gamecast.master.current.pitchResult, | |
gameId: espn.gamecast.master.current.id, | |
headline: "", | |
byline: "", | |
story: "" | |
}; | |
if (espn.gamecast.master.hasStory) { | |
if (espn.gamecast.master.current.gameState === "pregame") { | |
storyData.storyType = "preview"; | |
storyData.headline = preview.headline; | |
storyData.byline = preview.byline; | |
storyData.story = preview.story; | |
} else { | |
if (recap.story != "<p></p>") { | |
storyData.storyType = "recap"; | |
storyData.headline = recap.headline; | |
storyData.byline = recap.byline; | |
storyData.story = recap.story; | |
} | |
} | |
} | |
return storyData; | |
}; | |
model.reset = function() { | |
batterId = 0; | |
pitcherId = 0; | |
teamBatting = "away"; | |
teamPitching = "home"; | |
currentBatter = null; | |
currentPitcher = null; | |
hasRun = false; | |
baserunners = []; | |
animating = false; | |
$scrollers = null; | |
currentatbatId = 0; | |
}; | |
}(jQuery)); | |
espn.gamecast.story = {}; | |
(function($) { | |
var ST = espn.gamecast.story, | |
$gcStory = $("#gc-story"), | |
isMobile; | |
ST.init = function(data) { | |
isMobile = espn.gamecast.isMobile; | |
$("#gc-story").html(ST.builders.story(data)); | |
if (isMobile && espn.gamecast.master.gameState != "live" && data.story && data.story.length > 50) { | |
$.getScript("http://widgets.outbrain.com/outbrain.js"); | |
} | |
}; | |
ST.builders = { | |
story: function(data) { | |
var outputHTML = ""; | |
if (data.storyType == "recap") { | |
outputHTML += ST.builders.wls(data.pitchers); | |
} | |
outputHTML += '<div class="story-wrap">'; | |
outputHTML += data.headline != "" ? '<h4 class="title"> ' + data.headline + "</h4>" : ""; | |
outputHTML += data.byline != "" ? '<h5 class="byline">' + data.byline + "</h5>" : ""; | |
if (isMobile) { | |
if (data.storyType == "recap" || data.storyType == "preview") { | |
outputHTML += ST.builders.video(data.storyType); | |
} | |
outputHTML += espn.gamecast.linker.convertDotcomLinksToMobileLinks(data.story, true, false); | |
outputHTML += ST.builders.sponsoredLinks(data.storyType); | |
} else { | |
outputHTML += data.story; | |
} | |
outputHTML += "</div>"; | |
return outputHTML; | |
}, | |
video: function(storyType) { | |
var getStoryVideo = function() { | |
var returnVideo = undefined, | |
vids = espn.gamecast.master[storyType].videos; | |
for (var i = 0, n = vids.length; i < n; i++) { | |
if (espn.gamecast.isVideoViewable(vids[i])) { | |
returnVideo = vids[i]; | |
break; | |
} | |
} | |
return returnVideo; | |
}, | |
gameVideo = getStoryVideo(), | |
outputHTML = ""; | |
if (gameVideo && settings.lang.toLowerCase() != "es") { | |
outputHTML += '<div class="story-video"><img src="' + gameVideo.photo + '" /><a href="#" data-videoId="' + gameVideo.id + '" class="play-button video-highlight"><span></span></a></div>'; | |
} | |
return outputHTML; | |
}, | |
wls: function(pitchers) { | |
var outputHTML = '<div class="wls-wrap ' + (pitchers.s.playerId == 0 ? "justtwo" : "") + '">', | |
pitchResults = ["w", "l", "s"], | |
pitcher; | |
for (var i = 0; i < 3; i++) { | |
pitcher = pitchers[pitchResults[i]]; | |
if (pitcher.playerId != 0) { | |
outputHTML += '<div class="' + pitchResults[i] + '-pitcher resultPitcher"><span class="resultType">' + pitchResults[i].toUpperCase() + ':</span> <a href="' + espn.gamecast.getPlayerLinkHREF(pitcher.playerId) + '" data-playerid="' + pitcher.playerId + '" class="poppable" data-position="P">' + pitcher.firstName.substring(0, 1) + ". " + pitcher.lastName + "</a>" + (espn.gamecast.master.current.isAllStarGame ? "" : '<span class="note">(' + pitcher.record + ")</span>") + "</div>"; | |
} | |
} | |
outputHTML += '<div class="clear"></div></div>'; | |
return outputHTML; | |
}, | |
sponsoredLinks: function(storyType) { | |
var site = "espn", | |
url = "http://scores.espn.go.com/" + settings.sport + "/gamecast?gameId=" + settings.gameId; | |
widgetId = storyType === "preview" ? "MB_2" : "MB_3"; | |
if (settings.lang.toLowerCase() == "es") { | |
url = "http://" + window.location.host + "/" + settings.sport + "/deportes/gamecast?gameId=" + settings.gameId; | |
site = "espndeportes"; | |
if (3888 != 3888) { | |
widgetId = storyType === "preview" ? "MB_2" : "MB_4"; | |
} | |
} | |
return '<div class="OUTBRAIN" data-src="' + url + '" data-widget-id="' + widgetId + '" data-ob-template="' + site + '"></div>'; | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.miniBases = {}; | |
(function($) { | |
var MB = espn.gamecast.miniBases, | |
log = espn.gamecast.debug, | |
$bases = $("#mobile-bases"); | |
MB.update = function(baseRunners) { | |
var basesClass = MB.getBasesClass(baseRunners); | |
log("mini bases updated: " + basesClass); | |
$bases.removeClass().addClass(basesClass); | |
}; | |
MB.getBasesClass = function(baseRunners) { | |
log(baseRunners); | |
var basesClass = "000"; | |
if (baseRunners.length === 3) { | |
basesClass = ""; | |
for (var i = 0; i < 3; i++) { | |
basesClass += baseRunners[i].id && baseRunners[i].id != 0 ? "1" : "0"; | |
} | |
} | |
return "bases-" + basesClass.split("").join("-"); | |
}; | |
})(jQuery); | |
espn.gamecast.mainControls = {}; | |
(function($) { | |
var MC = espn.gamecast.mainControls, | |
log = espn.gamecast.debug, | |
currentView = "live"; | |
MC.toggleView = function(el) { | |
var $el = $(el), | |
view = $el.attr("data-type"); | |
if (view != currentView) { | |
MC.setCurrentView(view); | |
MC.selectButton($el); | |
if (view == "live") { | |
MC.showField(); | |
espn.gamecast.track("link", { | |
info: "menu|main|field" | |
}); | |
} else { | |
if (view == "watch") { | |
MC.showWatch(); | |
espn.gamecast.track("link", { | |
info: "menu|main|watch" | |
}); | |
} else { | |
if (view == "story") { | |
MC.showStory(); | |
espn.gamecast.track("link", { | |
info: "menu|main|story" | |
}); | |
} | |
} | |
} | |
} | |
}; | |
MC.setCurrentView = function(view) { | |
currentView = view; | |
}; | |
MC.getCurrentView = function() { | |
return currentView; | |
}; | |
MC.selectButton = function($el) { | |
$el.addClass("on").siblings().removeClass("on"); | |
}; | |
MC.showField = function() { | |
espn.gamecast.publish("viewChange", ["live"]); | |
}; | |
MC.showWatch = function() { | |
espn.gamecast.publish("viewChange", ["watch"]); | |
}; | |
MC.showStory = function() { | |
espn.gamecast.publish("viewChange", ["story"]); | |
}; | |
})(jQuery); | |
var refresher = {}; | |
(function($) { | |
var REF = refresher, | |
touches = [], | |
$refresh = $("#refresh-wrap"), | |
$content = $("#content-wrap"), | |
$body = $("body"), | |
$timestamp = $("#last-refresh-timestamp"), | |
pulling = false, | |
allowRefresh = false, | |
performRefresh = true, | |
doHack = false, | |
lang = settings && settings.lang ? settings.lang : "en", | |
REFRESHDELAY = 10000, | |
PULLHEIGHT = 60, | |
PULLTEXT = lang === "en" ? "Pull to refresh..." : "Desliza hacia abajo para refrescar...", | |
REFRESHTEXT = lang === "en" ? "Release to refresh..." : "Suelta para refrescar...", | |
LOADINGTEXT = lang === "en" ? "Loading..." : "Cargando..."; | |
REF.refreshing = false; | |
REF.targetNotScrollable = function(target) { | |
var allow = true; | |
$.each($(target).parents(), function(i, ele) { | |
if (ele.scrollTop > 0 || ele.id == "tab-nav") { | |
allow = false; | |
return false; | |
} | |
}); | |
return allow; | |
}; | |
REF.handleTouchStart = function(e) { | |
if (!REF.refreshing) { | |
REF.resetRefresher(); | |
allowRefresh = (window.pageYOffset === 0 && REF.targetNotScrollable(e.target)); | |
touches.push({ | |
pageY: e.originalEvent.changedTouches[0].pageY | |
}); | |
doHack = true; | |
} | |
}; | |
REF.handleTouchMove = function(e) { | |
if (!REF.refreshing) { | |
touches.splice(1, 1, { | |
pageY: e.originalEvent.changedTouches[0].pageY | |
}); | |
if (touches.length === 2 && (touches[0].pageY + 5) <= touches[1].pageY) { | |
if (!pulling && allowRefresh) { | |
e.preventDefault(); | |
pulling = true; | |
} | |
if (pulling) { | |
e.preventDefault(); | |
var diff = touches[1].pageY - touches[0].pageY; | |
if ((diff - PULLHEIGHT) <= 0) { | |
$refresh.css("transform", "translate3d(0," + (diff - PULLHEIGHT) + "px,0)"); | |
} | |
if (diff <= PULLHEIGHT) { | |
$content.css("transform", "translate3d(0," + diff + "px,0)"); | |
} | |
if (diff >= PULLHEIGHT + 20) { | |
REF.refreshing = true; | |
$content.css("transform", "translate3d(0," + PULLHEIGHT + "px,0)"); | |
$refresh.addClass("flipItGood").css("transform", "translate3d(0,0,0)").find(".refresh-msg").text(REFRESHTEXT); | |
} | |
} | |
doHack = false; | |
} else { | |
allowRefresh = false; | |
} | |
} | |
}; | |
REF.handleTouchEnd = function(e) { | |
if (!REF.refreshing) { | |
REF.resetPull(false); | |
} else { | |
REF.refreshIt(); | |
$refresh.addClass("refreshing"); | |
} | |
if (doHack) { | |
REF.androidHack(); | |
doHack = false; | |
} | |
}; | |
REF.getReadableTime = function(d) { | |
var month = d.getMonth() + 1, | |
day = d.getDate(), | |
year = d.getFullYear() % 1000, | |
hours = d.getHours() % 12 === 0 ? 12 : d.getHours() % 12, | |
minutes = d.getMinutes(), | |
amPM = d.getHours() < 12 ? "AM" : "PM"; | |
minutes = minutes < 10 ? "0" + minutes : minutes; | |
return month + "/" + day + "/" + year + ", " + hours + ":" + minutes + " " + amPM; | |
}; | |
REF.refreshIt = function() { | |
$refresh.find(".refresh-msg").text(LOADINGTEXT); | |
var callback = function() { | |
espn.gamecast.publish("pullUpdateComplete"); | |
}; | |
if (performRefresh) { | |
try { | |
espn.gamecast.publish("requestUpdate", [callback]); | |
} catch (e) { | |
REF.espnMissing(); | |
} | |
performRefresh = false; | |
setTimeout(function() { | |
performRefresh = true; | |
}, REFRESHDELAY); | |
} else { | |
setTimeout(callback, 1000); | |
} | |
}; | |
REF.resetPull = function() { | |
$refresh.addClass("animate").attr("style", "").removeClass("flipItGood"); | |
$content.addClass("animate").attr("style", ""); | |
}; | |
REF.resetRefresher = function() { | |
$refresh.removeClass("animate refreshing").find(".refresh-msg").text(PULLTEXT); | |
$content.removeClass("animate"); | |
pulling = false; | |
allowRefresh = false; | |
touches = []; | |
}; | |
REF.updateTime = function(dateObj) { | |
dateObj = dateObj ? dateObj : new Date(); | |
$timestamp.text(REF.getReadableTime(dateObj)); | |
}; | |
REF.handlePullUpdate = function() { | |
REF.updateTime(); | |
REF.resetPull(); | |
REF.refreshing = false; | |
}; | |
if ("ontouchstart" in window) { | |
$body.on("touchstart", REF.handleTouchStart); | |
$body.on("touchmove", REF.handleTouchMove); | |
$body.on("touchend", REF.handleTouchEnd); | |
REF.updateTime(new Date()); | |
try { | |
espn.gamecast.subscribe("updateReceived", REF.updateTime); | |
espn.gamecast.subscribe("pullUpdateComplete", REF.handlePullUpdate); | |
} catch (e) { | |
REF.espnMissing(); | |
} | |
} else { | |
$refresh.hide(); | |
} | |
REF.espnMissing = function() { | |
if ("console" in window) { | |
console.warn("Pull to Refresh has no access to espn.gamecast object."); | |
} | |
}; | |
var hackHeight = "auto"; | |
REF.androidHack = function() { | |
if (/Android 4.0/.test(navigator.userAgent)) { | |
setTimeout(function() { | |
$content.css("height", (document.body.scrollHeight - 100) + "px"); | |
}, 1000); | |
} | |
}; | |
})(jQuery); | |
espn.gamecast.scribble = {}; | |
(function($) { | |
var SCRIB = espn.gamecast.scribble, | |
$container = $("#commentary"), | |
$tab = $("#commentary-link"), | |
gotScribbed = false, | |
currentScribbleId = 0; | |
SCRIB.initTab = function(scribbleId, isFirstRun) { | |
currentScribbleId = scribbleId; | |
if (SCRIB.hasScribbleId(scribbleId)) { | |
$tab.show(); | |
if (isFirstRun) { | |
$tab.children().addClass("active").parent().siblings("li").children("a").removeClass("active"); | |
} | |
} else { | |
$tab.hide(); | |
} | |
}; | |
SCRIB.init = function() { | |
if (!gotScribbed) { | |
$.ajax({ | |
url: "/" + settings.sport + "/gamecast/util/getScribble", | |
data: "scribbleId=" + currentScribbleId, | |
success: function(data) { | |
$container.html(data); | |
gotScribbed = true; | |
$container.off("click", ".posts a", SCRIB.handleLinks); | |
$container.on("click", ".posts a", SCRIB.handleLinks); | |
} | |
}); | |
} | |
}; | |
SCRIB.handleLinks = function(e) { | |
e.preventDefault(); | |
window.open(this.href, "_blank"); | |
}; | |
SCRIB.reset = function() { | |
$container.html(" "); | |
gotScribbed = false; | |
}; | |
SCRIB.switchEvent = function(scribbleId) { | |
if (scribbleId != currentScribbleId && gotScribbed) { | |
if (!(SCRIB.hasScribbleId(scribbleId))) { | |
try { | |
window.scribble.changeEvent("1"); | |
} catch (e) {} | |
} else { | |
try { | |
window.scribble.changeEvent(scribbleId); | |
} catch (e) {} | |
} | |
} | |
}; | |
SCRIB.hasScribbleId = function(scribbleId) { | |
return (scribbleId !== undefined && (scribbleId + "").length > 0); | |
}; | |
})(jQuery); | |
var scribble = scribble || {}; | |
scribble.callbackAnimation = function() { | |
jQuery(".new-item").css("background-color", "#888").animate({ | |
backgroundColor: "#000" | |
}, 500, function() { | |
jQuery(this).attr("style", "").removeClass("new-item"); | |
}); | |
}; | |
espn.gamecast.fbcomments = {}; | |
(function($) { | |
var gotComments = false, | |
commentDiv = '<div class="fb-comments" data-href="!!url!!" data-num-posts="5" data-width="auto" data-colorscheme="dark" data-order-by="reverse_time" style="width:100%;"></div>'; | |
espn.gamecast.fbcomments.getEm = function(commentURL, sport, lang) { | |
if (!gotComments) { | |
$.ajax({ | |
type: "GET", | |
url: "/" + sport + (lang && lang.toLowerCase() === "es" ? "/deportes" : "") + "/gamecast/util/getFBComments", | |
data: { | |
lang: lang || "en" | |
}, | |
success: function(data) { | |
$("#conversations").html('<div id="fb-root"></div>' + commentDiv.replace("!!url!!", commentURL) + data); | |
gotComments = true; | |
setTimeout(updateFBWidth, 2000); | |
} | |
}); | |
} else { | |
$("#conversations").find(".fb-comments").replaceWith(commentDiv.replace("!!url!!", commentURL)); | |
FB.XFBML.parse(); | |
setTimeout(updateFBWidth, 1000); | |
} | |
}; | |
var tries = 0; | |
function updateFBWidth() { | |
var $spanChild = $(".fb-comments").children("span"); | |
if ($spanChild.length > 0 && tries < 3) { | |
tries++; | |
$spanChild.css("width", "100%").children("iframe").css("width", "100%"); | |
} else { | |
if ($spanChild.length === 0 || tries < 3) { | |
setTimeout(updateFBWidth, 500); | |
} | |
} | |
} | |
})(jQuery); | |
espn.gamecast.ads = {}; | |
window.adMgr = {}; | |
espn.gamecast.ads.popup = espn.gamecast.ads.popup || {}; | |
espn.gamecast.ads.popup.showing = false; | |
(function($) { | |
$(function() { | |
if (!espn.gamecast.isMobile && window.admgr && typeof(window.admgr.init) === "function") { | |
var BA = espn.gamecast.ads, | |
key, _banner, allSlots = [], | |
slots = []; | |
BA.refreshAd = function() { | |
allSlots = window.admgr.getGPTSlots(); | |
key = $(".ad-slot-banner1").attr("id"); | |
_banner = allSlots[key]; | |
if (_banner) { | |
slots.push(_banner); | |
} | |
if (slots.length > 0) { | |
window.admgr.refresh(slots); | |
} | |
}; | |
espn.gamecast.subscribe("bannerAdRefresh", BA.refreshAd); | |
} | |
}); | |
})(jQuery); | |
espn.gamecast.version = {}; | |
(function($) { | |
var V = espn.gamecast.version; | |
V.isTablet = function() { | |
return !this.isHandset(); | |
}; | |
V.isHandset = function() { | |
var hook = $('<div id="mobile-css-device-hook"></div>').css({ | |
position: "absolute", | |
left: "-999px" | |
}).appendTo(document.body), | |
isHandset = hook.css("cursor") === "text", | |
memoized = function() { | |
return isHandset; | |
}; | |
hook.remove(); | |
this.isHandset = memoized; | |
return memoized.apply(this, arguments); | |
}; | |
})(jQuery); | |
espn.gamecast.linker = {}; | |
(function($) { | |
var L = espn.gamecast.linker; | |
L.getHomeBaseURL = function() { | |
return "http://m.espn.go.com/"; | |
}; | |
L.getSportBaseURL = function(sport) { | |
return L.getHomeBaseURL() + sport + "/"; | |
}; | |
L.getPlayercardURL = function(sport, playerId) { | |
return L.getSportBaseURL(sport) + "playercard?playerId=" + playerId; | |
}; | |
L.getClubhouseURL = function(sport, teamAbbrev) { | |
return L.getSportBaseURL(sport) + "clubhouse?teamAbbrev=" + teamAbbrev; | |
}; | |
L.convertDotcomLinksToMobileLinks = function(html, stripUnrecognizedLinks, makePoppable) { | |
var out = $('<div class="story-wrapper">' + html + "</div>"); | |
out.find("a").each(function(i, el) { | |
var $el = $(el), | |
query = ($.parseUri(el.href || "") || {}).queryKey || {}, | |
playerId = query.playerId || ((el.href || "").match(/\/player\/.*?_.*?\/id\/(\d+)/) || []).pop(), | |
teamAbbrev = query.team || ((el.href || "").match(/\/clubhouse\b.*?team=(\w+)/) || []).pop(), | |
mobileURL; | |
if (playerId) { | |
mobileURL = L.getPlayercardURL(settings.sport, playerId); | |
$el.attr("href", mobileURL); | |
if (makePoppable) { | |
$el.attr("data-playerId", playerId).addClass("poppable"); | |
} | |
} else { | |
if (teamAbbrev) { | |
mobileURL = L.getClubhouseURL(settings.sport, teamAbbrev); | |
$el.attr("href", mobileURL); | |
} else { | |
if (stripUnrecognizedLinks) { | |
$el.replaceWith("<span>" + $el.text() + "</span>"); | |
} | |
} | |
} | |
}); | |
return out.html(); | |
}; | |
})(jQuery); | |
espn.gamecast.tickets = {}; | |
(function($) { | |
var G = espn.gamecast, | |
T = G.tickets, | |
L = G.linker; | |
T.getTicketsLink = function(statusId, gameId) { | |
var url, keyword = espn.gamecast.appsrc === "sc" ? "scpreview" : "mobilepreview"; | |
if (!gameId || statusId === 3) { | |
url = L.getSportBaseURL(settings.sport) + "teams?action=tickets&keyword=" + keyword; | |
} else { | |
url = L.getSportBaseURL(settings.sport) + "tickets?gameId=" + gameId + "&keyword=" + keyword; | |
} | |
return url; | |
}; | |
G.subscribe("navChange", function(menu, $which) { | |
if ($which.attr("href").substring(1) === "buy-tickets" || window.location.href.indexOf("tickets") > -1) { | |
window.location = T.getTicketsLink(G.master.current.statusId, G.master.current.id); | |
} | |
}); | |
})(jQuery); | |
espn.gamecast.alerts = {}; | |
(function($) { | |
var G = espn.gamecast, | |
A = G.alerts; | |
A.getAlertsLink = function(gameId) { | |
return G.linker.getHomeBaseURL() + "alerts/mw/callout?type=game&sportAbbrev=" + settings.sport + "&id=" + gameId; | |
}; | |
espn.gamecast.subscribe("navChange", function(menu, $which) { | |
if (menu !== "top" && $which.attr("href").substring(1) === "alerts") { | |
window.location = A.getAlertsLink(G.master.current.id); | |
} | |
}); | |
})(jQuery); | |
espn.gamecast.previewMatchup = {}; | |
(function($) { | |
var MU = espn.gamecast.previewMatchup, | |
container = $("#previewMatchup-tab"); | |
MU.build = function(current) { | |
container.html(espn.gamecast.linker.convertDotcomLinksToMobileLinks(container.html(), true, false)); | |
}; | |
})(jQuery); | |
espn.gamecast.mobileAds = {}; | |
(function($) { | |
$(document).ready(function() { | |
if (window.espn && espn.gamecast) { | |
espn.gamecast.subscribe("gameBreak", function(eventType) { | |
gamebreak(); | |
}); | |
} | |
espn.gamecast.subscribe("ready", function() { | |
if (espn.gamecast.isMobile) { | |
if (espn.gamecast.version.isHandset()) { | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
} else { | |
if (!skipTimer) { | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
} | |
} | |
} | |
}); | |
}); | |
window.adMgr.simulateGamebreak = function() { | |
gamebreak(); | |
}; | |
function gamebreak() { | |
if (window.espn.gamecast.ads.popup && window.espn.gamecast.ads.popup.showing === true) { | |
return; | |
} | |
if (!/hasBannerAd/.test(document.body.className)) { | |
document.body.className = document.body.className.trim() + " hasBannerAd"; | |
} | |
if (window.admgr) { | |
var key, _banner, _popup, allSlots = {}, | |
slots = [], | |
popup = ".ad-slot-gamebreak-popup"; | |
allSlots = window.admgr.getGPTSlots(); | |
key = $(".ad-slot-banner1").attr("id"); | |
_banner = allSlots[key]; | |
if (_banner) { | |
slots.push(_banner); | |
} | |
if ($(popup).length === 0) { | |
$("#gamebreak-popup-slot").html('<div class="ad-slot ad-slot-gamebreak-popup" data-slot-type="gamebreak-popup" data-slot-kvps="pos=gamebreak-popup"></div>'); | |
window.admgr.registerSlot($(popup)[0], espn.ads.config); | |
} | |
key = $(popup).attr("id"); | |
_popup = allSlots[key]; | |
if (_popup) { | |
slots.push(_popup); | |
} | |
if (slots.length > 0) { | |
window.admgr.refresh(slots); | |
} | |
} | |
} | |
var MA = espn.gamecast.mobileAds, | |
skipTimer, $adPopup, $adWrap, log = espn.gamecast.debug, | |
firstRun = true, | |
adAutoClose = true; | |
MA.cancelCountdown = function() { | |
clearInterval(skipTimer); | |
$("#adnote-text").hide(); | |
MA.showSkip(); | |
}; | |
MA.cancelAutoClose = function() { | |
adAutoClose = false; | |
}; | |
window.adMgr.showPopupAd = function(width, height, content, options) { | |
$adPopup = $("#gamebreak-popup-slot"); | |
$adWrap = $("#gamebreak-popup-wrap"); | |
$("#adnote-text").show(); | |
adAutoClose = true; | |
if (firstRun) { | |
firstRun = false; | |
} | |
var timeout = "", | |
showCountdown = false; | |
if (!content || content === "" || isNaN(width) || isNaN(height)) { | |
MA.removePreClass(); | |
return; | |
} | |
if (options) { | |
if (options.timeout && !isNaN(options.timeout)) { | |
timeout = parseInt(options.timeout, 10); | |
} | |
if (options.onAdLoad) { | |
onPopupLoad = options.onAdLoad; | |
} | |
if (options.onAdClose) { | |
onPopupClose = options.onAdClose; | |
} | |
if (options.showCountdown) { | |
showCountdown = options.showCountdown; | |
} | |
} | |
if (!showCountdown) { | |
$("#adnote-text").hide(); | |
} | |
skipTimer = clearInterval(skipTimer); | |
$adWrap.fadeIn(200, function() { | |
if (timeout != "") { | |
MA.countdown(timeout); | |
} else { | |
MA.showSkip(); | |
} | |
$adPopup.html(content).show(); | |
espn.gamecast.ads.popup = espn.gamecast.ads.popup || {}; | |
espn.gamecast.ads.popup.showing = true; | |
$adWrap.css("display", "table"); | |
$("#gamebreak-underlay").css("height", $("body").prop("scrollHeight") + "px"); | |
}); | |
$("#mobileadskip-link").off().on("click", MA.closePopup); | |
$("#mobileadskip-button").off().on("click", MA.closePopup); | |
}; | |
MA.countdown = function(duration) { | |
skipTimer = clearInterval(skipTimer); | |
var start = duration, | |
secondString = start == 1 ? " " + espn.gamecast.translate("second") : " " + espn.gamecast.translate("seconds"); | |
count = 1; | |
$("#mobilecountdown").html(start + secondString); | |
skipTimer = setInterval(function() { | |
start--; | |
secondString = start == 1 ? " " + espn.gamecast.translate("second") : " " + espn.gamecast.translate("seconds"); | |
$("#mobilecountdown").html(start + secondString); | |
if (count >= 15 || count >= duration) { | |
MA.showSkip(); | |
} else { | |
count++; | |
} | |
if (start <= 0) { | |
skipTimer = clearInterval(skipTimer); | |
if (adAutoClose) { | |
MA.closePopup(); | |
} | |
} | |
}, 1000); | |
}; | |
MA.showSkip = function() { | |
$("#adskip").addClass("on").removeClass("off"); | |
}; | |
MA.closePopup = function() { | |
$("#adskip").addClass("off").removeClass("on"); | |
MA.removePreClass(); | |
$adPopup.html("").hide(); | |
$adWrap.hide(); | |
espn.gamecast.ads.popup.showing = false; | |
skipTimer = clearInterval(skipTimer); | |
espn.gamecast.publish("comPlayer", [false, false, true]); | |
}; | |
MA.removePreClass = function() { | |
$("#gamebreak-popup-wrap").removeClass("prestitial"); | |
}; | |
espn.gamecast.subscribe("espn.gamecast.cancelCountdown", MA.cancelCountdown); | |
espn.gamecast.subscribe("espn.gamecast.cancelAutoClose", MA.cancelAutoClose); | |
})(jQuery); | |
espn.gamecast.controller = {}; | |
(function($) { | |
var TROLL = espn.gamecast.controller, | |
model = espn.gamecast.model, | |
master = espn.gamecast.master, | |
field = new espn.gamecast.field({ | |
canvasId: "field-render" | |
}), | |
runners = espn.gamecast.baserunners, | |
chart = espn.gamecast.pitchZone, | |
list = espn.gamecast.pitchInfo, | |
bvp = espn.gamecast.bvp, | |
box = espn.gamecast.boxScore, | |
dueUp = espn.gamecast.dueUp, | |
status = espn.gamecast.gameStatus, | |
lastPlay = espn.gamecast.lastPlay, | |
activityFeed = espn.gamecast.activityFeed, | |
pbp = espn.gamecast.pbp, | |
header = espn.gamecast.header, | |
oots = espn.gamecast.oots, | |
scoringPlays = espn.gamecast.scoringPlays, | |
socialLinks = espn.gamecast.socialLinks, | |
photoGallery = espn.gamecast.photoGallery, | |
video = espn.gamecast.video, | |
ondeck = espn.gamecast.ondeck, | |
weather = espn.gamecast.weather, | |
twitter = espn.gamecast.twitterFeed, | |
photo = espn.gamecast.photos, | |
nst = espn.gamecast.nst, | |
battingSplits = espn.gamecast.battingSplits, | |
gcScribble = espn.gamecast.scribble, | |
mainControls = espn.gamecast.mainControls, | |
log = espn.gamecast.debug, | |
story = espn.gamecast.story, | |
previewMatchup = espn.gamecast.previewMatchup, | |
miniBases = espn.gamecast.miniBases, | |
gameState = espn.gamecast.master.current.gameState, | |
batterId = 0, | |
pitcherId = 0, | |
teamBatting = "away", | |
teamPitching = "home", | |
currentBatter = null, | |
currentPitcher = null, | |
hasRun = false, | |
baserunners = [], | |
$inningView = $("#inning-view"), | |
$dueUp = $("#due-up"), | |
$resultView = $("#main-play-text"), | |
$pitchView = $("#pitch-view"), | |
animating = false, | |
subFn, nSub, aSub, iSub, currentatbatId = espn.gamecast.master.plays.length > 0 ? espn.gamecast.master.plays[0].atbatId : 0, | |
$vidContainer = $("#video-frame"), | |
$watchContainer = $("#watch-frame"), | |
$fieldFrame = $("#field-frame"), | |
currentMainView = "ad", | |
afterAdView = "live", | |
isWatchInitialized = false, | |
isWatchStarted = false, | |
firstRun = true, | |
isMobile, currentCategory = "live", | |
currentTabView = "away-box", | |
currentPitchView = "hit-zone", | |
pitchViews = ["hit-zone", "hit-zone2", "pitch-list"], | |
pitchViewSwitchable = false, | |
$topMenu = $("#top-menu"), | |
$topMenuLinks = $topMenu.children("ul.menu").children("li").children("a"), | |
$subMenu = $("#sub-menu"), | |
$subMenuLinks = $subMenu.find("ul.submenu").children("li").children("a"), | |
$infoBox = $("#info-box"), | |
$ootWrap = $("#oot-wrap"), | |
$socialLinks = $("#socialLinks-wrap"), | |
$emptyTab = $("#empty-tab"), | |
$boxScoreContent = $("#box-score-content"), | |
$linescore = $("#linescore"), | |
$gcStory = $("#gc-story"), | |
$body = $("body"), | |
moduleBuilt = { | |
activityFeed: false, | |
plays: false, | |
"scoring-plays": false, | |
nst: false, | |
boxscore: false, | |
twitter: false, | |
"section-140": false, | |
cil: false, | |
photos: false, | |
videos: false, | |
radio: false | |
}, | |
moduleContainerIds = { | |
activityFeed: $("#activityFeed"), | |
plays: $("#playbyplay"), | |
"scoring-plays": $("#scoringPlays"), | |
nst: $("#nst"), | |
linescore: $("#boxScore"), | |
"away-box": $("#boxScore"), | |
"home-box": $("#boxScore"), | |
twitter: $("#twitter-wrap"), | |
commentary: $("#commentary"), | |
"section-140": $("#conversations"), | |
"mobile-share": $("#mobile-share-container"), | |
photos: $("#photoFeed"), | |
videos: $("#videoFeed"), | |
radio: $("#radioTab") | |
}, | |
getDeepHash = function() { | |
if (window.location.search.indexOf("gcSection") >= 0) { | |
return window.location.search.match(/gcSection=(.[^&#]*)/)[1]; | |
} | |
return window.location.hash.substring(1); | |
}, | |
deepHash = getDeepHash(), | |
deepLinkProps = { | |
boxscore: { | |
top: "stats", | |
sub: "away-box" | |
}, | |
plays: { | |
top: "gameInfo", | |
sub: "plays" | |
}, | |
notes: { | |
top: "gameInfo", | |
sub: "nst" | |
}, | |
conversations: { | |
top: "social", | |
sub: "section-140" | |
}, | |
photos: { | |
top: "media", | |
sub: "photos" | |
}, | |
videos: { | |
top: "media", | |
sub: "videos" | |
}, | |
social: { | |
top: "social", | |
sub: "twitter" | |
} | |
}, | |
allowHash = !!deepLinkProps[deepHash], | |
mobileOnlyTabs = "|current|scores|linescore|preview-matchup|recap-story|preview-story|mobile-share|watchLive|", | |
pageLayout, infoBoxClasses = "gameInfo stats scores social media empty live preview recap"; | |
TROLL.init = function() { | |
espn.gamecast.debug("Game Loading?..."); | |
isMobile = espn.gamecast.isMobile; | |
gameState = espn.gamecast.master.current.gameState; | |
currentatbatId = espn.gamecast.master.plays.length > 0 ? espn.gamecast.master.plays[0].atbatId : 0; | |
if ($(window).width() < 926) { | |
pageLayout = "portrait"; | |
$body.addClass("portrait"); | |
} else { | |
pageLayout = "landscape"; | |
$body.removeClass("portrait"); | |
} | |
if (isMobile) { | |
video.preventAds(); | |
} | |
TROLL.initializeGameView(); | |
box.updateAll(model.getBoxscore()); | |
status.update(model.getGameStatus(espn.gamecast.master.current)); | |
weather.update(model.getWeather()); | |
baserunners = model.getBaserunners(espn.gamecast.master.current.onBase); | |
miniBases.update(baserunners); | |
if (gameState == "live") { | |
model.initBatterPitcher(); | |
model.initTeamsBattingPitching(); | |
currentBatter = model.getCurrentBatter(); | |
batterId = currentBatter ? currentBatter.id : 0; | |
currentPitcher = model.getCurrentPitcher(); | |
pitcherId = currentPitcher ? currentPitcher.id : 0; | |
teamPitching = model.getTeamPitching(); | |
teamBatting = model.getTeamBatting(); | |
var currentPitches = model.getCurrentPitches(); | |
if (batterId != 0 && pitcherId != 0) { | |
bvp.update({ | |
pitcher: currentPitcher, | |
batter: currentBatter | |
}); | |
field.sprayChart = currentBatter.sprayZone; | |
field.updateBatter(currentBatter.firstName + " " + currentBatter.lastName); | |
chart.init({ | |
battingAverage: (currentBatter.season.avg || 0), | |
averages: currentBatter.hitzone, | |
stance: model.getStance(currentBatter), | |
pitches: currentPitches | |
}); | |
} | |
field.updateDefense(model.getDefense(teamPitching)); | |
field.setBaserunners(baserunners); | |
runners.init({ | |
runners: baserunners, | |
field: field, | |
team: teamBatting, | |
score: espn.gamecast.master.current[teamBatting].score, | |
outs: espn.gamecast.master.current.outs | |
}); | |
list.init(currentPitches); | |
var team = espn.gamecast.master.current[teamBatting]; | |
dueUp.update({ | |
players: model.getDueUp(), | |
team: { | |
abbrev: team.abbrev.toLowerCase(), | |
color: team.color, | |
name: team.name | |
}, | |
inning: espn.gamecast.master.current.inning, | |
dyk: "" | |
}); | |
TROLL.showInningView(true); | |
if (espn.gamecast.master.current.venueName != "") { | |
venueName = settings.lang == "es" ? espn.gamecast.master.current.venueName.replace("at", "en") : espn.gamecast.master.current.venueName, $("#stadium-info p").text(venueName + " - " + espn.gamecast.master.current.venueLoc); | |
} | |
if (typeof lastPlay !== "undefined") { | |
lastPlay.build(); | |
} | |
if (typeof ondeck !== "undefined") { | |
ondeck.update(model.getOnDeck()); | |
} | |
if (typeof battingSplits !== "undefined") { | |
battingSplits.build(model.buildSplits(), true); | |
} | |
$("#activityFeed-tab").parent().show(); | |
} else { | |
$("#activityFeed-tab").removeClass("active").parent().hide().siblings(":first").children("a").addClass("active"); | |
if (gameState === "pregame") { | |
$topMenu.find(".gameInfo-tab").hide(); | |
if (!TROLL.hasLineups()) { | |
$topMenu.find(".stats-tab").hide(); | |
} | |
$topMenuLinks.filter("[href=#social]").click(); | |
$subMenuLinks.filter("[href=#twitter]").click(); | |
} | |
} | |
TROLL.handleOrientationChange(); | |
$("#home-box-link").text(espn.gamecast.master.current.home.display); | |
$("#away-box-link").text(espn.gamecast.master.current.away.display); | |
if (!firstRun) { | |
TROLL.handleViewChange(currentMainView); | |
} | |
if (typeof header !== "undefined") { | |
header.update(); | |
} | |
if (typeof oots !== "undefined") { | |
oots.build(); | |
if (pageLayout == "landscape") { | |
oots.updateTouchScrollWidth(); | |
} | |
} | |
if (typeof socialLinks !== "undefined") { | |
socialLinks.build(espn.gamecast.master.current); | |
} | |
if (typeof gcScribble !== "undefined") { | |
gcScribble.initTab(espn.gamecast.master.scribbleId, firstRun); | |
} | |
if ($("#commentary-link").children("a").hasClass("active") && espn.gamecast.master.scribbleId == "") { | |
$subMenuLinks.filter("[href=#twitter]").click(); | |
} | |
if (typeof photoGallery !== "undefined") { | |
photoGallery.init(); | |
} | |
if (typeof story !== "undefined") { | |
story.init(model.getStory()); | |
} | |
if (typeof previewMatchup !== "undefined" && isMobile && gameState == "pregame") { | |
previewMatchup.build(espn.gamecast.master.current); | |
} | |
TROLL.togglePitchView(currentPitchView, true); | |
TROLL.showTabs(); | |
TROLL.updatePortraitNavWidth(); | |
espn.gamecast.publish("ready"); | |
TROLL.hideOverlay(); | |
firstRun = false; | |
}; | |
TROLL.handleSwitchGame = function(gameId) { | |
TROLL.hideWatchPlayer(); | |
TROLL.showOverlay(); | |
var masterURL = "/" + settings.sport; | |
if (settings.lang == "es") { | |
masterURL += "/deportes"; | |
} | |
masterURL += "/gamecast12/master"; | |
$.ajax({ | |
type: "GET", | |
url: masterURL, | |
data: { | |
gameId: gameId, | |
lang: settings.lang, | |
init: true, | |
setType: true, | |
basic: true, | |
plays: true, | |
notes: true, | |
stats: true, | |
oots: true, | |
photos: true, | |
tweets: true, | |
rand: (+new Date), | |
scoringPlays: true, | |
commentary: true, | |
video: true | |
}, | |
dataType: "json", | |
success: function(data) { | |
settings.gameId = gameId, master = data.gamecast, espn.gamecast.master = data.gamecast; | |
espn.gamecast.publish("ready"); | |
batterId = 0, pitcherId = 0, baserunners = []; | |
try { | |
espn.gamecast.track("page", { | |
gameId: gameId | |
}); | |
$("title").text("MLB GameCast - " + espn.gamecast.master.current.away.name + " vs " + espn.gamecast.master.current.home.name); | |
} catch (e) {} | |
try { | |
gcScribble.switchEvent(espn.gamecast.master.scribbleId); | |
} catch (e) {} | |
TROLL.reset(); | |
TROLL.init(); | |
} | |
}); | |
}; | |
var fakeWatchable = false, | |
defaultStory = true; | |
TROLL.initializeGameView = function() { | |
if (pageLayout == "landscape") { | |
if (!allowHash) { | |
var which = $topMenu.children("ul.menu").find(".active").attr("href").substring(1); | |
$infoBox.addClass(which); | |
$("#menu-" + which).find(".active").trigger("click"); | |
} | |
if (defaultStory && espn.gamecast.master.hasStory && gameState != "live") { | |
TROLL.handleStoryView(true); | |
} else { | |
TROLL.handleStoryView(false); | |
if (fakeWatchable || !isMobile && espn.gamecast.master.current.isWatchable && espn.gamecast.master.current.gameState == "live") { | |
TROLL.initializeWatchAbility(true); | |
} else { | |
TROLL.initializeWatchAbility(false); | |
} | |
} | |
} else { | |
if (defaultStory && espn.gamecast.master.hasStory && gameState != "live") { | |
TROLL.handleStoryView(true); | |
} else { | |
TROLL.handleStoryView(false); | |
if (isMobile) { | |
TROLL.initializeWatchAbility(false); | |
TROLL.handleLiveViewSwitch(); | |
} else { | |
if (fakeWatchable || espn.gamecast.master.current.isWatchable && espn.gamecast.master.current.gameState == "live") { | |
TROLL.initializeWatchAbility(true); | |
} else { | |
TROLL.initializeWatchAbility(false); | |
TROLL.handleLiveViewSwitch(); | |
} | |
} | |
} | |
} | |
}; | |
TROLL.initializeWatchAbility = function(watchable) { | |
if (watchable) { | |
$("#main-controls .watch-espn").css("display", "inline"); | |
mainControls.selectButton($("#main-controls .watch-espn")); | |
mainControls.setCurrentView("watch"); | |
$topMenuLinks.removeClass("active"); | |
$("#menu-watch-default").addClass("active"); | |
TROLL.hideSubMenu(); | |
afterAdView = "watch"; | |
if (!firstRun) { | |
currentMainView = "watch"; | |
} | |
} else { | |
$("#main-controls .watch-espn").hide(); | |
$("#menu-watch-default").parent().hide(); | |
} | |
}; | |
TROLL.handleStoryView = function(hasStory) { | |
if (hasStory) { | |
if (gameState == "pregame") { | |
$("#main-controls .recap-story").hide(); | |
$("#main-controls .preview-story").css("display", "inline"); | |
mainControls.selectButton($("#main-controls .preview-story")); | |
$("#menu-preview-story").children("a").addClass("active"); | |
if (fakeWatchable || !isMobile && espn.gamecast.master.current.isWatchable && espn.gamecast.master.current.gameState == "live") { | |
TROLL.initializeWatchAbility(true); | |
} else { | |
TROLL.initializeWatchAbility(false); | |
} | |
$topMenu.find("li.recap-tab").hide(); | |
} else { | |
$("#main-controls .preview-story").hide(); | |
$("#main-controls .recap-story").css("display", "inline"); | |
mainControls.selectButton($("#main-controls .recap-story")); | |
TROLL.initializeWatchAbility(false); | |
$topMenu.find("li.preview-tab").hide(); | |
TROLL.hideSubMenu(); | |
} | |
TROLL.hideLiveTabs(); | |
if (firstRun) { | |
mainControls.setCurrentView("story"); | |
afterAdView = "story"; | |
} else { | |
currentMainView = "story"; | |
} | |
TROLL.handleLiveViewSwitch(); | |
} else { | |
$("#main-controls .story").hide(); | |
$topMenu.find("li.recap-tab").hide(); | |
$topMenu.find("li.preview-tab").hide(); | |
if (!firstRun) { | |
currentMainView = "live"; | |
} | |
} | |
}; | |
TROLL.reset = function() { | |
espn.gamecast.debug("Reseting Games..."); | |
espn.gamecast.unsubscribeAll("pitchComplete"); | |
animating = false; | |
model.reset(); | |
list.reset(); | |
chart.reset(); | |
bvp.reset(); | |
field.reset(); | |
box.reset(); | |
status.reset(); | |
dueUp.reset(); | |
weather.reset(); | |
TROLL.showPitchView(); | |
TROLL.moduleReset(); | |
$("#view-buttons").children("a").css("display", "inline"); | |
$("#top-menu li").attr("style", ""); | |
$("#top-menu a").attr("style", ""); | |
isWatchInitialized = false; | |
TROLL.updateWatchGame(); | |
}; | |
TROLL.moduleReset = function() { | |
for (j in moduleBuilt) { | |
moduleBuilt[j] = false; | |
} | |
}; | |
TROLL.handleLiveViewSwitch = function() { | |
log("pageLayout = " + pageLayout); | |
if (pageLayout == "portrait") { | |
log("currentMainView = " + currentMainView); | |
if (currentMainView === "ad") { | |
$infoBox.removeClass(); | |
$topMenuLinks.removeClass("active"); | |
TROLL.hideSubMenu(); | |
log("after ad view = " + afterAdView); | |
if (afterAdView === "watch") { | |
$("#menu-watch-default").addClass("active"); | |
currentTabView = "watchLive"; | |
currentCategory = "watch"; | |
mainControls.setCurrentView("watch"); | |
} else { | |
if (afterAdView === "story") { | |
if (gameState == "final") { | |
$("#menu-final-default").addClass("active"); | |
currentTabView = "recap"; | |
currentCategory = "recap"; | |
} else { | |
$("#menu-pregame-default").addClass("active"); | |
currentTabView = "preview"; | |
$subMenu.children().removeClass("open"); | |
$("#menu-preview").addClass("open"); | |
currentCategory = "preview"; | |
TROLL.showSubMenu(); | |
$infoBox.removeClass(infoBoxClasses).addClass(currentCategory); | |
} | |
mainControls.setCurrentView("story"); | |
} else { | |
$("#menu-live-default").addClass("active"); | |
currentTabView = "current"; | |
currentCategory = "live"; | |
mainControls.setCurrentView("live"); | |
} | |
} | |
} else { | |
if (currentMainView == "watch") { | |
$("#menu-watch-default").trigger("click"); | |
currentTabView = "watchLive"; | |
mainControls.setCurrentView("watch"); | |
} else { | |
if (currentMainView == "story") { | |
if (gameState == "final") { | |
$("#menu-final-default").trigger("click"); | |
currentTabView = "recap"; | |
} else { | |
$("#menu-pregame-default").trigger("click"); | |
currentTabView = "preview"; | |
TROLL.showSubMenu(); | |
} | |
mainControls.setCurrentView("story"); | |
} else { | |
$("#menu-live-default").trigger("click"); | |
currentTabView = "current"; | |
mainControls.setCurrentView("live"); | |
} | |
} | |
} | |
} else { | |
if (currentMainView == "ad") {} else { | |
if (currentMainView === "watch") { | |
mainControls.selectButton($("#main-controls .watch-espn")); | |
currentTabView = "watchLive"; | |
mainControls.setCurrentView("watch"); | |
} else { | |
if (currentMainView === "story") { | |
if (gameState == "final") { | |
mainControls.selectButton($("#main-controls .recap-story")); | |
currentTabView = "recap"; | |
TROLL.showStory(); | |
} else { | |
mainControls.selectButton($("#main-controls .preview-story")); | |
currentTabView = "preview"; | |
TROLL.showStory(); | |
TROLL.showSubMenu(); | |
} | |
mainControls.setCurrentView("story"); | |
} else { | |
mainControls.selectButton($("#main-controls .game-action")); | |
currentTabView = "current"; | |
mainControls.setCurrentView("live"); | |
} | |
} | |
} | |
} | |
}; | |
TROLL.handleGameUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("Got a game update"); | |
var updateGame = function() { | |
espn.gamecast.unsubscribe(["pitchComplete", updateGame]); | |
espn.gamecast.debug("Updating game"); | |
if (model.isBetweenInnings()) { | |
model.initTeamsBattingPitching(); | |
teamBatting = model.getTeamBatting(); | |
teamPitching = model.getTeamPitching(); | |
var team = espn.gamecast.master.current[teamBatting]; | |
dueUp.update({ | |
players: model.getDueUp(), | |
team: { | |
abbrev: team.abbrev.toLowerCase(), | |
color: team.color, | |
name: team.name | |
}, | |
inning: espn.gamecast.master.current.inning, | |
dyk: "" | |
}); | |
TROLL.showInningView(); | |
} | |
header.update(); | |
battingSplits.build(model.buildSplits(), false); | |
}; | |
setTimeout(function() { | |
if (animating && TROLL.allowAnimations()) { | |
subFn = espn.gamecast.subscribe("pitchComplete", updateGame); | |
} else { | |
updateGame(); | |
} | |
weather.update(model.getWeather()); | |
}, 250); | |
if (gameState && espn.gamecast.getGameState(data.statusId) && gameState != espn.gamecast.getGameState(data.statusId)) { | |
window.location = window.location; | |
} | |
}; | |
TROLL.handlePlayUpdate = function(data, flag, queue) { | |
if (flag) { | |
espn.gamecast.debug("Handle play"); | |
espn.gamecast.debug(data); | |
var playText = data.playText || data.playResult, | |
pitchNumber = model.getPitchNumber(playText), | |
playResult = model.getPlayResult(playText), | |
playType = model.getPitchType(data), | |
traj = data.trajectory, | |
inPlay = playText.indexOf("in play") >= 0 || playText.toLowerCase().indexOf("en juego") >= 0 ? true : false, | |
i, l, p, handler; | |
if (currentatbatId == data.atbatId && (data.summaryType == "N" || data.summaryType == "S")) { | |
var nfn = function() { | |
espn.gamecast.unsubscribe(["pitchComplete", nfn]); | |
try { | |
if (currentatbatId == data.atbatId) { | |
if (data.isResult) { | |
TROLL.showPlayResult(playResult); | |
field.addPlayResult(playResult); | |
} | |
if (data.eventType == 57 && !hasRun) { | |
baserunners = model.getBaserunners(espn.gamecast.master.current.onBase); | |
field.setBaserunners(baserunners); | |
miniBases.update(baserunners); | |
if (currentMainView === "live") { | |
runners.update({ | |
runners: baserunners, | |
team: teamBatting, | |
score: espn.gamecast.master.current[teamBatting].score, | |
outs: espn.gamecast.master.current.outs, | |
eventType: data.eventType | |
}); | |
} else { | |
runners.init({ | |
runners: baserunners, | |
team: teamBatting, | |
score: espn.gamecast.master.current[teamBatting].score, | |
outs: espn.gamecast.master.current.outs, | |
eventType: data.eventType | |
}); | |
} | |
} | |
espn.gamecast.debug("Play result"); | |
TROLL.showInningView(); | |
box.updateAll(model.getBoxscore()); | |
ondeck.update(model.getOnDeck()); | |
status.update(model.getGameStatus(data)); | |
lastPlay.update(data); | |
activityFeed.update(data, "play"); | |
pbp.update(data); | |
} | |
} catch (e) { | |
espn.gamecast.debug("nfn error: " + e); | |
} | |
}; | |
if (animating && TROLL.allowAnimations()) { | |
espn.gamecast.subscribe("pitchComplete", nfn); | |
} else { | |
nfn(); | |
} | |
} | |
if (data.summaryType == "C") { | |
espn.gamecast.debug("Pitching change"); | |
var cfn = function() { | |
espn.gamecast.unsubscribe("pitchComplete", cfn); | |
try { | |
if (model.isNewPitcher(data.pitcher.id) && teamPitching == model.getPlayerTeam(data.pitcher.id)) { | |
espn.gamecast.debug("new guy coming in!"); | |
pitcherId = data.pitcher.id; | |
model.setModelPitcherId(pitcherId); | |
currentPitcher = model.getPitcher(pitcherId); | |
bvp.updatePitcher(currentPitcher); | |
box.updateAll(model.getBoxscore()); | |
field.updatePitcher({ | |
id: pitcherId, | |
firstName: currentPitcher.firstName, | |
lastName: currentPitcher.lastName, | |
href: espn.gamecast.getPlayerLinkHREF(pitcherId) | |
}); | |
} | |
} catch (e) { | |
espn.gamecast.debug("cfn error: " + e); | |
} | |
}; | |
if (animating && TROLL.allowAnimations()) { | |
espn.gamecast.subscribe("pitchComplete", cfn); | |
} else { | |
cfn(); | |
} | |
} | |
if (data.summaryType == "A") { | |
var afn = function() { | |
espn.gamecast.debug("Next at bat"); | |
espn.gamecast.unsubscribe(["pitchComplete", afn]); | |
TROLL.showInningView(); | |
TROLL.showPitchView(); | |
TROLL.updateAtBat(data); | |
field.removeMarks(); | |
status.update(model.getGameStatus(data)); | |
ondeck.update(model.getOnDeck()); | |
lastPlay.update(data); | |
hasRun = false; | |
}; | |
if (animating && TROLL.allowAnimations()) { | |
espn.gamecast.subscribe("pitchComplete", afn); | |
} else { | |
afn(); | |
} | |
} | |
if (data.eventType == "58") { | |
var ifn = function() { | |
espn.gamecast.unsubscribe(["pitchComplete", ifn]); | |
field.removeMarks(); | |
lastPlay.update(data); | |
status.update(model.getGameStatus(data)); | |
activityFeed.update(data, "play"); | |
pbp.update(data); | |
box.updateAll(model.getBoxscore()); | |
hasRun = false; | |
try { | |
if (isMobile) { | |
setTimeout(function() { | |
espn.gamecast.publish("gameBreak", [data.eventType]); | |
}, 7000); | |
} else { | |
setTimeout(espn.gamecast.video.playAd, 7000); | |
} | |
} catch (e) {} | |
}; | |
if (animating && TROLL.allowAnimations()) { | |
espn.gamecast.subscribe("pitchComplete", ifn); | |
} else { | |
ifn(); | |
} | |
} | |
if (data.summaryType == "P") { | |
var pfn = function() { | |
chart.pitch({ | |
pitch: pitchNumber, | |
type: playType, | |
x: data.pitchXCoord, | |
y: data.pitchYCoord | |
}); | |
list.pitch({ | |
pitch: pitchNumber, | |
result: playResult | |
}); | |
chart.setVelType({ | |
vel: data.velocity | |
}); | |
status.update(model.getGameStatus(data)); | |
activityFeed.update(data, "play"); | |
pbp.update(data); | |
hasRun = false; | |
}; | |
var efn = function() { | |
espn.gamecast.publish("pitchComplete", ["all set"]); | |
animating = false; | |
espn.gamecast.debug(espn.gamecast.master.current.onBase); | |
baserunners = model.getBaserunners(espn.gamecast.master.current.onBase); | |
field.setBaserunners(baserunners); | |
miniBases.update(baserunners); | |
if (TROLL.allowAnimations()) { | |
runners.update({ | |
runners: baserunners, | |
team: teamBatting, | |
score: espn.gamecast.master.current[teamBatting].score, | |
outs: espn.gamecast.master.current.outs, | |
eventType: data.eventType | |
}); | |
} else { | |
runners.init({ | |
runners: baserunners, | |
team: teamBatting, | |
score: espn.gamecast.master.current[teamBatting].score, | |
outs: espn.gamecast.master.current.outs, | |
eventType: data.eventType | |
}); | |
} | |
hasRun = true; | |
}; | |
if (TROLL.allowAnimations()) { | |
traj = inPlay && traj == "null" && data.hitYCoord > 0 ? "l" : traj; | |
animating = true; | |
field.removeMarks(); | |
field.pitch({ | |
type: traj, | |
x: data.hitXCoord, | |
y: data.hitYCoord, | |
isHit: model.isHit(data.eventType), | |
pitchCallback: pfn, | |
callback: efn | |
}); | |
} else { | |
pfn(); | |
efn(); | |
} | |
} | |
} else { | |
chart.setVelType({ | |
vel: data.velocity | |
}); | |
activityFeed.update(data, "play"); | |
pbp.update(data); | |
} | |
}; | |
TROLL.handleOotUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("OOT update"); | |
oots.update(data); | |
}; | |
TROLL.handlePitcherUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("Pitcher update"); | |
espn.gamecast.debug(data); | |
if (data.replacedBy == "0") { | |
model.initTeamsBattingPitching(); | |
teamPitching = model.getTeamPitching(); | |
teamBatting = model.getTeamBatting(); | |
espn.gamecast.debug("Player team: " + model.getPlayerTeam(data.id)); | |
if (teamBatting != "none" && teamPitching == model.getPlayerTeam(data.id)) { | |
currentPitcher = model.getPitcher(data.id); | |
field.updateDefense(model.getDefense(teamPitching)); | |
bvp.updatePitcher(currentPitcher); | |
} | |
} | |
box.updateAll(model.getBoxscore()); | |
}; | |
TROLL.handleBatterUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("Batter update"); | |
box.updateAll(model.getBoxscore()); | |
}; | |
TROLL.handleNstUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("nst update"); | |
nst.update(data, flag); | |
}; | |
TROLL.handlePhotoUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("photo update"); | |
activityFeed.update(data, "photo"); | |
photo.update(data, flag); | |
photoGallery.update(data, flag); | |
}; | |
TROLL.handleTweetUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("Tweet update"); | |
activityFeed.update(data, "tweet"); | |
twitter.update(data, flag); | |
}; | |
TROLL.handleSPUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("Scoring Play update"); | |
scoringPlays.update(data, flag); | |
}; | |
TROLL.handleVideoUpdate = function(data, flag, queue) { | |
espn.gamecast.debug("video update"); | |
video.update(data, flag); | |
}; | |
TROLL.showInningView = function(initialView) { | |
var lastBatter, show = function() { | |
model.initTeamsBattingPitching(); | |
teamBatting = model.getTeamBatting(); | |
teamPitching = model.getTeamPitching(); | |
field.updateDefense(model.getDefense(teamPitching)); | |
if (model.isBetweenInnings()) { | |
var dueUp = model.getDueUp(), | |
pitcher = model.getPitcherByTeam(teamPitching); | |
if (dueUp && dueUp.length >= 1) { | |
currentBatter = dueUp[0]; | |
} | |
if (pitcher) { | |
currentPitcher = pitcher; | |
} | |
TROLL.showPitchView(); | |
$inningView.addClass("hideMe").removeClass("showMe"); | |
list.reset(); | |
chart.reset(); | |
bvp.reset(); | |
ondeck.update(model.getOnDeck()); | |
$dueUp.addClass("showMe").removeClass("hideMe"); | |
$fieldFrame.addClass("dueUp"); | |
} else { | |
field.updateDefense(model.getDefense(teamPitching)); | |
bvp.update({ | |
pitcher: currentPitcher, | |
batter: currentBatter | |
}); | |
$dueUp.addClass("hideMe").removeClass("showMe"); | |
$inningView.addClass("showMe").removeClass("hideMe"); | |
$fieldFrame.removeClass("dueUp"); | |
} | |
}; | |
if (model.isBetweenInnings()) { | |
if (initialView) { | |
show(); | |
} else { | |
setTimeout(show, 10000); | |
} | |
} else { | |
model.initTeamsBattingPitching(); | |
teamPitching = model.getTeamPitching(); | |
teamBatting = model.getTeamBatting(); | |
field.updateDefense(model.getDefense(teamPitching)); | |
bvp.update({ | |
pitcher: currentPitcher, | |
batter: currentBatter | |
}); | |
$dueUp.addClass("hideMe").removeClass("showMe"); | |
$inningView.addClass("showMe").removeClass("hideMe"); | |
$fieldFrame.removeClass("dueUp"); | |
} | |
}; | |
TROLL.showPlayResult = function(result) { | |
$resultView.find(".main-play").html(result); | |
$pitchView.hide(); | |
$resultView.show(); | |
}; | |
TROLL.showPitchView = function() { | |
$resultView.hide(); | |
$pitchView.show(); | |
}; | |
TROLL.updateAtBat = function(data) { | |
espn.gamecast.debug("Update at bat"); | |
list.reset(); | |
chart.reset(); | |
model.initTeamsBattingPitching(); | |
teamPitching = model.getTeamPitching(); | |
teamBatting = model.getTeamBatting(); | |
currentatbatId = data.atbatId; | |
if (data.pitcher.id != "0" && model.isNewPitcher(data.pitcher.id) && teamPitching == model.getPlayerTeam(data.pitcher.id)) { | |
espn.gamecast.debug(data.pitcher.id); | |
pitcherId = data.pitcher.id; | |
model.setModelPitcherId(pitcherId); | |
var pitcher = model.getPitcher(pitcherId); | |
espn.gamecast.debug(pitcher); | |
if (!espn.gamecast.isEmptyObject(pitcher)) { | |
currentPitcher = pitcher; | |
bvp.updatePitcher(currentPitcher); | |
field.updatePitcher({ | |
id: pitcherId, | |
firstName: currentPitcher.firstName, | |
lastName: currentPitcher.lastName, | |
href: espn.gamecast.getPlayerLinkHREF(pitcherId) | |
}); | |
} | |
} | |
if (data.batter.id != "0" && model.isNewBatter(data.batter.id) && teamBatting == model.getPlayerTeam(data.batter.id)) { | |
batterId = data.batter.id; | |
model.setModelBatterId(batterId); | |
var batter = model.getBatter(batterId); | |
if (!espn.gamecast.isEmptyObject(batter)) { | |
currentBatter = batter; | |
bvp.updateBatter(currentBatter); | |
field.sprayChart = currentBatter.sprayZone; | |
field.updateBatter(currentBatter.firstName + " " + currentBatter.lastName); | |
chart.init({ | |
battingAverage: currentBatter.season.avg, | |
averages: currentBatter.hitzone, | |
stance: model.getStance(currentBatter) | |
}); | |
} | |
} | |
box.updateAll(model.getBoxscore()); | |
espn.gamecast.publish("atBatUpdated"); | |
}; | |
TROLL.handleNavChange = function(menu, $which, e) { | |
var newView = $which.attr("href").substring(1), | |
$subNavSiblings, $currentActiveSub, category, tabToBuild = ""; | |
if (currentMainView !== "ad" || pageLayout === "landscape") { | |
if (menu === "top") { | |
$topMenuLinks.removeClass("active"); | |
$which.addClass("active"); | |
$("#menu-" + newView).addClass("open").siblings().removeClass("open"); | |
$infoBox.removeClass(infoBoxClasses).addClass(newView); | |
$currentActiveSub = $("#menu-" + newView).find("a.active"); | |
if ($currentActiveSub && $currentActiveSub.length == 0) { | |
$currentActiveSub = $("#menu-" + newView).find("a:first").addClass("active"); | |
} | |
tabToBuild = $currentActiveSub.attr("href").substring(1); | |
category = newView; | |
if (!e.isTrigger) { | |
espn.gamecast.track("link", { | |
info: "menu|top|" + category | |
}); | |
} | |
} else { | |
if (menu === "sub") { | |
$which.addClass("active").parent().siblings("li").children("a").removeClass("active"); | |
tabToBuild = newView; | |
category = $which.parents("ul.submenu").parent().attr("id").substring(5); | |
if (!e.isTrigger) { | |
espn.gamecast.track("link", { | |
info: "menu|sub|" + tabToBuild | |
}); | |
} | |
} | |
} | |
if (!moduleBuilt[tabToBuild]) { | |
TROLL.buildModule(tabToBuild); | |
moduleBuilt[tabToBuild] = true; | |
} | |
currentCategory = category; | |
currentTabView = tabToBuild; | |
log("---------START-----------"); | |
log("tabToBuild = " + tabToBuild); | |
log("category = " + category); | |
log("currentMainView = " + currentMainView); | |
log("---------END-------------"); | |
if (category !== "live" && pageLayout == "portrait") { | |
$fieldFrame.addClass("hideElements"); | |
} else { | |
if (currentMainView == "live") { | |
$fieldFrame.removeClass("hideElements"); | |
} | |
} | |
if (category !== "scores") { | |
$ootWrap.removeClass("show"); | |
} else { | |
$ootWrap.addClass("show"); | |
TROLL.hideSubMenu(); | |
} | |
if (category !== "watch" && pageLayout == "portrait") {} | |
if (currentMainView == "story" && pageLayout == "portrait" && (category != "recap" || category != "preview")) { | |
TROLL.hideStory(); | |
} | |
if (category === "stats") { | |
TROLL.showSubMenu(); | |
$boxScoreContent.removeClass().addClass(tabToBuild); | |
if (tabToBuild == "linescore") { | |
$linescore.show(); | |
} | |
} else { | |
if (category == "live") { | |
TROLL.hideSubMenu(); | |
TROLL.handleViewChange("live"); | |
} else { | |
if (category == "watch") { | |
TROLL.hideSubMenu(); | |
TROLL.handleViewChange("watch"); | |
} else { | |
if (category == "preview") { | |
TROLL.showSubMenu(); | |
if (tabToBuild == "preview-matchup") { | |
TROLL.hideStory(); | |
} else { | |
if (tabToBuild == "preview-story") { | |
TROLL.handleViewChange("story"); | |
} | |
} | |
} else { | |
if (category == "recap") { | |
TROLL.hideSubMenu(); | |
TROLL.handleViewChange("story"); | |
} else { | |
if (category !== "scores") { | |
TROLL.showSubMenu(); | |
if (tabToBuild == "mobile-share") { | |
$emptyTab.show().siblings("." + category).removeClass("active"); | |
$socialLinks.show(); | |
} else { | |
moduleContainerIds[tabToBuild].addClass("active").siblings("." + category).removeClass("active"); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if (tabToBuild !== "mobile-share") { | |
$socialLinks.css("display", ""); | |
} | |
if (tabToBuild !== "linescore") { | |
$linescore.css("display", ""); | |
} | |
} | |
}; | |
TROLL.navControls = function($which) { | |
if ($which.hasClass("right")) { | |
TROLL.handleMenuNext($which); | |
} else { | |
if ($which.hasClass("left")) { | |
TROLL.handleMenuPrev($which); | |
} | |
} | |
}; | |
TROLL.handleMenuNext = function($which) { | |
var $button = $which, | |
$nav = $topMenu.children("ul.menu"), | |
navWidth = $topMenu.outerWidth() - ($topMenu.children(".button.left").outerWidth() + $topMenu.children(".button.right").outerWidth()), | |
currentPosition = $nav.offset().left * -1, | |
links = $nav.children("li:visible"), | |
listWidth = 0, | |
extraMargin = 10, | |
newPosition, numLinksLeft = 1; | |
links.each(function() { | |
listWidth += $(this).outerWidth(); | |
}); | |
for (var i = 0, n = links.length; i < n; i++) { | |
if (($(links[i]).position().left + $(links[i]).outerWidth()) > (currentPosition + navWidth)) { | |
numLinksLeft = n - i; | |
newPosition = $(links[i]).position().left * -1; | |
$nav.stop(true, true).animate({ | |
left: newPosition + "px" | |
}, 500, function() { | |
$(this).css("left", newPosition + "px"); | |
}); | |
break; | |
} | |
} | |
if (newPosition && (((newPosition - (numLinksLeft * links.last().outerWidth()) - extraMargin) * -1) >= listWidth)) { | |
$button.addClass("disabled"); | |
$button.siblings(".button").removeClass("disabled"); | |
} else { | |
if (newPosition && newPosition < 0) { | |
$button.siblings(".button").removeClass("disabled"); | |
} | |
} | |
}; | |
TROLL.handleMenuPrev = function($which) { | |
var $button = $which, | |
$nav = $topMenu.children("ul.menu"), | |
navWidth = $topMenu.outerWidth() - ($topMenu.children(".button.left").outerWidth() + $topMenu.children(".button.right").outerWidth()), | |
currentPosition = -1 * $nav.position().left, | |
links = $nav.children("li:visible"), | |
newPosition = currentPosition; | |
for (var i = 0, n = links.length; i < n; i++) { | |
if ($(links[i]).position().left > (currentPosition - navWidth)) { | |
newPosition = $(links[i]).position().left * -1; | |
$nav.stop(true, true).animate({ | |
left: newPosition + "px" | |
}, 500, function() { | |
$(this).css("left", newPosition + "px"); | |
}); | |
break; | |
} | |
} | |
if (newPosition == 0) { | |
$button.addClass("disabled"); | |
$button.siblings(".button").removeClass("disabled"); | |
} | |
}; | |
TROLL.buildModule = function(which) { | |
if (which == "activityFeed" && typeof activityFeed !== "undefined") { | |
activityFeed.build(); | |
} else { | |
if (which == "plays" && typeof pbp !== "undefined") { | |
pbp.build(); | |
} else { | |
if (which == "scoring-plays" && typeof scoringPlays !== "undefined") { | |
scoringPlays.build(); | |
} else { | |
if (which == "nst" && typeof nst !== "undefined") { | |
nst.build(espn.gamecast.master.nst); | |
} else { | |
if (which == "twitter" && typeof twitter !== "undefined") { | |
twitter.build(espn.gamecast.master.tweets); | |
} else { | |
if (which === "commentary" && typeof gcScribble !== "undefined") { | |
gcScribble.init(); | |
} else { | |
if (which == "photos" && typeof photo !== "undefined") { | |
photo.build(espn.gamecast.master.photos); | |
} else { | |
if (which == "videos" && typeof video !== "undefined") { | |
video.build(espn.gamecast.master.videos); | |
} else { | |
if (which == "radio" && typeof espn.gamecast.audio !== "undefined") { | |
espn.gamecast.audio.build(); | |
} else { | |
if (which == "section-140") { | |
var fbcommentURL = espn.gamecast.getCommentURL(); | |
espn.gamecast.fbcomments.getEm(fbcommentURL, settings.sport, settings.lang); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
}; | |
TROLL.togglePitchView = function(view, firstRun) { | |
if (pitchViewSwitchable) { | |
var curIndex = pitchViews.indexOf(currentPitchView); | |
if (view === undefined) { | |
view = curIndex + 1 === pitchViews.length ? pitchViews[0] : pitchViews[curIndex + 1]; | |
} | |
currentPitchView = view; | |
$pitchView.removeClass().addClass(view); | |
if (!firstRun && currentPitchView.indexOf("hit-zone") >= 0) { | |
chart.toggleHeatMap(); | |
} | |
} else { | |
if (firstRun) { | |
$pitchView.addClass(view); | |
} | |
} | |
}; | |
TROLL.handleReplay = function(data) { | |
if (currentMainView === "live") { | |
var callback = function() { | |
field.addPlayResult(data.result); | |
espn.gamecast.publish("replayComplete", []); | |
}; | |
field.removeMarks(); | |
field.pitch({ | |
isHit: espn.gamecast.model.isHit(data.eventType), | |
type: data.type, | |
x: data.x, | |
y: data.y, | |
callback: function() { | |
setTimeout(callback, 500); | |
log("Callback."); | |
} | |
}); | |
} | |
}; | |
TROLL.showTabs = function() { | |
$topMenu.removeClass("vidHide"); | |
}; | |
TROLL.updatePortraitNavWidth = function() { | |
if ($body.hasClass("iPadScroll") && pageLayout === "portrait") { | |
var totalMenuWidth = 0; | |
$("#top-menu").find("li").each(function() { | |
if ($(this).is(":visible")) { | |
totalMenuWidth += $(this).outerWidth(); | |
} | |
}); | |
$("#top-menu").children("ul").css("width", totalMenuWidth + "px"); | |
} | |
}; | |
var mainViews = "|live|story|watch|preview|recap|"; | |
TROLL.handleComPlayer = function(isPlaying, isHighlight, isAdSkip) { | |
log("Playing? " + isPlaying + " .. Highlight? " + isHighlight + " .. isAdSkip? " + isAdSkip); | |
if (isPlaying === true) { | |
if (currentMainView == "watch" && isHighlight) { | |
espn.watchespn.pause(); | |
TROLL.handleViewChange("ad"); | |
} else { | |
if (currentMainView != "watch") { | |
TROLL.handleViewChange("ad"); | |
} else { | |
if (currentMainView == "watch" && !isHighlight) { | |
video.skipAd(); | |
} | |
} | |
} | |
} else { | |
if (isPlaying === false) { | |
log("currentMainView == " + currentMainView); | |
if ((!firstRun && (isAdSkip || isHighlight)) || (isMobile && firstRun && isAdSkip)) { | |
currentMainView = afterAdView; | |
} | |
if (currentMainView == "watch") { | |
espn.watchespn.resume(); | |
} | |
if (pageLayout == "landscape" || mainViews.indexOf(currentCategory) >= 0) { | |
TROLL.handleViewChange(currentMainView); | |
allowHash && TROLL.handleDeepLink(); | |
} else { | |
TROLL.hideAdPlayer(); | |
} | |
} | |
} | |
}; | |
TROLL.updateWatchGame = function() { | |
if (espn.gamecast.master.current.isWatchable && espn.watchespn != undefined) { | |
espn.watchespn.changeGame(espn.gamecast.master.current.id, settings.sport); | |
} | |
}; | |
TROLL.initializeWatchESPN = function() { | |
isWatchInitialized = true; | |
}; | |
viewActions = { | |
live: function() { | |
video.setAdTimer(); | |
video.allowAds(); | |
TROLL.showFieldFrame(); | |
}, | |
watch: function() { | |
video.clearAdTimer(); | |
video.preventAds(); | |
TROLL.showWatchPlayer(); | |
}, | |
ad: function() { | |
TROLL.showAdPlayer(); | |
}, | |
story: function() { | |
TROLL.showStory(); | |
} | |
}; | |
TROLL.showFieldFrame = function() { | |
log("showing field..."); | |
TROLL.hideAdPlayer(); | |
TROLL.hideWatchPlayer(); | |
TROLL.hideStory(); | |
if (pageLayout != "portrait" || (pageLayout == "portrait" && currentTabView == "current")) { | |
$fieldFrame.removeClass("hideElements"); | |
} | |
}; | |
TROLL.showAdPlayer = function() { | |
log("Showing ad player"); | |
TROLL.hideFieldFrame(); | |
TROLL.hideWatchPlayer(); | |
TROLL.hideStory(); | |
$vidContainer.removeClass("vidHide"); | |
oots.shade(true); | |
}; | |
TROLL.showWatchPlayer = function() { | |
log("showing watch..."); | |
if (isWatchInitialized) { | |
if (isWatchStarted) { | |
espn.watchespn.play(); | |
} else { | |
try { | |
espn.watchespn.start(); | |
} catch (e) {} | |
isWatchStarted = true; | |
} | |
} else { | |
log("watch is not initialized"); | |
} | |
TROLL.hideAdPlayer(); | |
TROLL.hideFieldFrame(); | |
TROLL.hideStory(); | |
$watchContainer.removeClass("vidHide"); | |
}; | |
TROLL.showStory = function() { | |
log("showing story..."); | |
TROLL.hideFieldFrame(); | |
TROLL.hideAdPlayer(); | |
TROLL.hideWatchPlayer(); | |
$gcStory.removeClass("vidHide"); | |
}; | |
TROLL.hideAdPlayer = function() { | |
log("hiding ad player"); | |
$vidContainer.addClass("vidHide"); | |
oots.shade(false); | |
}; | |
TROLL.hideWatchPlayer = function() { | |
log("hiding watch player"); | |
if (espn.watchespn) { | |
espn.watchespn.stop(); | |
} | |
$watchContainer.addClass("vidHide"); | |
}; | |
TROLL.hideFieldFrame = function() { | |
log("hiding field frame"); | |
$fieldFrame.addClass("hideElements"); | |
}; | |
TROLL.hideStory = function() { | |
log("hiding story.."); | |
$gcStory.addClass("vidHide"); | |
}; | |
TROLL.handleViewChange = function(view) { | |
if (view != "ad") { | |
afterAdView = view; | |
} | |
currentMainView = view; | |
TROLL.toggleView(view); | |
}; | |
TROLL.toggleView = function(view) { | |
viewActions[view] && viewActions[view](view); | |
}; | |
var prevWidth = $(window).width(); | |
TROLL.handleOrientationChange = function() { | |
var currentWidth = $(window).width(), | |
largeField = currentWidth >= 480 ? true : false, | |
newWidth, newHeight; | |
if (prevWidth >= 926 && currentWidth < 926) { | |
pageLayout = "portrait"; | |
$body.addClass("portrait"); | |
TROLL.handleLiveViewSwitch(); | |
prevWidth = currentWidth; | |
$("#oot-games").css("width", ""); | |
TROLL.updatePortraitNavWidth(); | |
} else { | |
if (prevWidth < 926 && currentWidth >= 926) { | |
log("currentTabView = " + currentTabView + " and this: mobileOnlyTabs.indexOf(currentTabView) = " + mobileOnlyTabs.indexOf(currentTabView)); | |
if (mobileOnlyTabs.indexOf(currentTabView) != -1) { | |
if (gameState == "pregame") { | |
$topMenuLinks.filter("[href=#social]").click(); | |
$subMenuLinks.filter("[href=#twitter]").click(); | |
} else { | |
$topMenuLinks.filter("[href=#stats]").click(); | |
$subMenuLinks.filter("[href=#away-box]").click(); | |
} | |
} | |
$body.removeClass("portrait"); | |
pageLayout = "landscape"; | |
if (currentMainView === "live") { | |
$fieldFrame.removeClass("hideElements"); | |
} | |
TROLL.handleLiveViewSwitch(); | |
prevWidth = currentWidth; | |
if (typeof oots !== "undefined") { | |
oots.updateTouchScrollWidth(); | |
} | |
} | |
} | |
if (currentWidth <= 660) { | |
pitchViewSwitchable = true; | |
} else { | |
pitchViewSwitchable = false; | |
} | |
if (largeField) { | |
field.max = 470; | |
field.homeX = 235; | |
field.homeY = 147; | |
field.rubberX = 235; | |
field.rubberY = 110; | |
field.firstX = 310; | |
field.firstY = 110; | |
field.secondX = 235; | |
field.secondY = 84; | |
field.thirdX = 160; | |
field.thirdY = 110; | |
field.home = [field.homeX, field.homeY, 5]; | |
field.first = [field.firstX, field.firstY, 4]; | |
field.second = [field.secondX, field.secondY, 3]; | |
field.third = [field.thirdX, field.thirdY, 4]; | |
field.plate = [field.homeX, field.homeY, 3]; | |
newWidth = 475; | |
newHeight = 173; | |
} else { | |
field.max = 315; | |
field.homeX = 158; | |
field.homeY = 100; | |
field.rubberX = 158; | |
field.rubberY = 75; | |
field.firstX = 208; | |
field.firstY = 75; | |
field.secondX = 158; | |
field.secondY = 57; | |
field.thirdX = 108; | |
field.thirdY = 75; | |
field.home = [field.homeX, field.homeY, 5]; | |
field.first = [field.firstX, field.firstY, 4]; | |
field.second = [field.secondX, field.secondY, 3]; | |
field.third = [field.thirdX, field.thirdY, 4]; | |
field.plate = [field.homeX, field.homeY, 3]; | |
newWidth = 320; | |
newHeight = 117; | |
} | |
field.handleResize({ | |
canvasId: "field-render", | |
width: newWidth, | |
height: newHeight | |
}); | |
field.adjustDefense(); | |
TROLL.resetTouchScroll(); | |
}; | |
TROLL.resetTouchScroll = function() { | |
var $ss = $(".superscroller"); | |
$ss.removeClass("whatmakesmesuper"); | |
setTimeout(function() { | |
$ss.addClass("whatmakesmesuper"); | |
}, 200); | |
}; | |
TROLL.showOverlay = function() { | |
$("#overlay").show(); | |
}; | |
TROLL.hideOverlay = function() { | |
$("#overlay").fadeOut(); | |
}; | |
TROLL.hideSubMenu = function() { | |
$subMenu.addClass("hide"); | |
}; | |
TROLL.showSubMenu = function() { | |
$subMenu.removeClass("hide"); | |
}; | |
TROLL.hideLiveTabs = function() { | |
$("#main-controls .game-action").css("display", "none"); | |
$("#menu-live-default").hide(); | |
}; | |
TROLL.showLiveTabs = function() { | |
$("#main-controls .game-action").css("display", "inline"); | |
$("#menu-live-default").show(); | |
}; | |
TROLL.allowAnimations = function() { | |
var allow = false; | |
if (pageLayout == "landscape" && currentMainView == "live") { | |
allow = true; | |
} else { | |
if (pageLayout == "portrait" && currentCategory == "live") { | |
allow = true; | |
} | |
} | |
return allow; | |
}; | |
TROLL.handleDeepLink = function() { | |
var deepLink = deepLinkProps[deepHash]; | |
currentCategory = deepLink.top; | |
currentTabView = deepLink.sub; | |
$topMenuLinks.filter("[href=#" + deepLink.top + "]").click(); | |
$subMenuLinks.filter("[href=#" + deepLink.sub + "]").click(); | |
allowHash = false; | |
}; | |
TROLL.hasLineups = function() { | |
var box = model.getBoxscore(); | |
return box.home.hitters.length >= 9 && box.away.hitters.length >= 9 && box.home.pitchers.length >= 1 && box.away.pitchers.length >= 1; | |
}; | |
espn.gamecast.subscribe("switchGame", TROLL.handleSwitchGame); | |
espn.gamecast.subscribe("gameUpdate", TROLL.handleGameUpdate); | |
espn.gamecast.subscribe("ootUpdate", TROLL.handleOotUpdate); | |
espn.gamecast.subscribe("playUpdate", TROLL.handlePlayUpdate); | |
espn.gamecast.subscribe("pitcherUpdate", TROLL.handlePitcherUpdate); | |
espn.gamecast.subscribe("batterUpdate", TROLL.handleBatterUpdate); | |
espn.gamecast.subscribe("nstUpdate", TROLL.handleNstUpdate); | |
espn.gamecast.subscribe("photoUpdate", TROLL.handlePhotoUpdate); | |
espn.gamecast.subscribe("tweetUpdate", TROLL.handleTweetUpdate); | |
espn.gamecast.subscribe("spUpdate", TROLL.handleSPUpdate); | |
espn.gamecast.subscribe("comUpdate", TROLL.handleCommentaryUpdate); | |
espn.gamecast.subscribe("videoUpdate", TROLL.handleVideoUpdate); | |
espn.gamecast.subscribe("replay", TROLL.handleReplay); | |
espn.gamecast.subscribe("viewChange", TROLL.handleViewChange); | |
espn.gamecast.subscribe("comPlayer", TROLL.handleComPlayer); | |
$.subscribe("espn.watchespn.init", TROLL.initializeWatchESPN); | |
espn.gamecast.subscribe("hideWatch", TROLL.hideWatchPlayer); | |
espn.gamecast.subscribe("showWatch", function() { | |
if (currentMainView == "watch") { | |
TROLL.showWatchPlayer(); | |
} | |
}); | |
espn.gamecast.subscribe("navChange", TROLL.handleNavChange); | |
espn.gamecast.subscribe("navControl", TROLL.navControls); | |
espn.gamecast.subscribe("orientationChange", TROLL.handleOrientationChange); | |
espn.gamecast.subscribe("pitchViewChange", TROLL.togglePitchView); | |
$(document).ready(function() { | |
var toggleBaserunners = function(e) { | |
field.toggleBaserunners.call(field, e); | |
}, | |
toggleDefense = function(e) { | |
field.toggleDefense.call(field, e); | |
}, | |
toggleSprayChart = function(e) { | |
field.toggleSprayChart.call(field, e); | |
}; | |
$("#toggle-baserunners").click(toggleBaserunners); | |
$("#toggle-defense").click(toggleDefense); | |
$("#toggle-spray-chart").click(toggleSprayChart); | |
$topMenuLinks.on("click", function(e) { | |
e.preventDefault(); | |
espn.gamecast.publish("navChange", ["top", $(this), e]); | |
}); | |
$subMenuLinks.on("click", function(e) { | |
e.preventDefault(); | |
espn.gamecast.publish("navChange", ["sub", $(this), e]); | |
}); | |
if ($body.hasClass("iPadScroll")) { | |
$("#menu-next, #menu-prev").hide(); | |
} else { | |
$("#menu-next, #menu-prev").on("click", function(e) { | |
e.preventDefault(); | |
espn.gamecast.publish("navControl", [$(this)]); | |
}); | |
} | |
TROLL.init(); | |
}); | |
}(jQuery)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment