Golden State Of Mind - Warriors at Rockets Game 4: Golden State falls in Houston, 128-115"UNSTOPPABLE BABY!" - Warriors rookie Marc Jackson to the Mavs' bench, after a lay-up during a 29-point loss (2000)https://cdn.vox-cdn.com/community_logos/50563/gsom-fav.png2015-05-26T16:32:12-07:00http://www.goldenstateofmind.com/rss/stream/84213502015-05-26T16:32:12-07:002015-05-26T16:32:12-07:00Breathing deeply and reevaluating our priorities
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/u-GUdccsmM-AMZLTgJRJgX29wVo=/0x0:5184x3456/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46400170/usa-today-8582094.0.jpg" />
<figcaption>Troy Taormina-USA TODAY Sports</figcaption>
</figure>
<p>Steph is injured but somehow, miraculously, is unhurt. Torrential rains, flooding, cripple Texas.</p> <p>Last night, in Houston, <span>Stephen Curry</span> took a spill that, in the moment, seemed career altering. Shit, perhaps even life altering.</p>
<p>He fell. So hard.</p>
<p>Fell so hard from such a height.</p>
<p>Time stopped. The arena grew hushed. Everyone loves Steph. Including Houston.</p>
<p>No one wants to see any one guy get hurt.</p>
<p>But if it's Steph, well, ...</p>
<p>Neck injuries, head injuries and spinal injuries are some of the most unpredictable and scariest in sports. In life.</p>
<p>You start messing around with the spine, with the neck, and suddenly you can't walk.</p>
<p>Everything changes.</p>
<p>Things you take for granted are gone. Basketball. Holding your daughter. Walking to the store to get grocery bags.</p>
<p>And so when Steph fell last night, and the worst seemed a horrible new reality, the world collectively held its breath and prayed for him.</p>
<p style="text-align: center;">--- = ---</p>
<p style="text-align: left;">If Curry's injury weren't enough on its own to remind us that life is fragile and fleeting and can change in an instant, the flooding of Houston and the <a target="_blank" href="http://www.nbcnews.com/news/us-news/texas-flooding-toll-7-dead-12-missing-30-unaccounted-n364876">subsequent deaths of 10 people in Texas</a> (with 16 still missing) surely drove that point home.</p>
<p style="text-align: left;">As much as we turn to basketball and to sports and to music and literature for distraction, we can also turn to them in moments of weakness. In those moments when we question ourselves. When we question the greater design. Wondering what life has in store for us.</p>
<p style="text-align: left;">Searching for meaning amidst the destruction wrought in a night time of flooding.</p>
<p style="text-align: left;">After the game, many people, <a target="_blank" href="http://www.sbnation.com/nba/2015/5/26/8659643/houston-rockets-flood-dwight-howard">including Dwight Howard</a>, were trapped for hours in the Toyota center. It took some people until 7am to get home from the game, navigating a waterworld apocalypse of sunken vehicles and impassable streets.</p>
<p style="text-align: left;">What a strange world.</p>
<p style="text-align: left;">Steph, I am so glad you are okay. And to all the people who were trapped in Houston and survived, escaped, I am so glad you are okay.</p>
<p style="text-align: left;">I want nothing but the best for everyone, always. But it's never that simple.</p>
<p style="text-align: left;">Deep breaths, moving forward. Prayers out to all.</p>
<p><iframe width="560" height="315" src="https://www.youtube.com/embed/MOEsj3MTSso" frameborder="0"></iframe></p>
https://www.goldenstateofmind.com/2015/5/26/8663095/breathing-deeply-and-reevaluating-our-prioritiesBram Kincheloe2015-05-26T08:00:04-07:002015-05-26T08:00:04-07:00The Stephen Curry Contusion Game and TAKES
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/Aavs1BXJzfPHsS4xhR8Q7DmptPk=/60x0:3937x2585/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46395938/GettyImages-474748440.0.jpg" />
<figcaption>Ronald Martinez/Getty Images</figcaption>
</figure>
<p>Stephen Curry fell over Trevor Ariza and the internet exploded into a scorching array of sentences formulated into opinions delving into medicine and finally, back to self-righteousness. My favorite. </p> <p>I am not a doctor. If I were a doctor, I would not be spending my precious free time watching basketball on a Monday night.</p>
<p>Those two sentences apply to essentially 99% of people watching the game and tweeting, or watching the game anywhere.</p>
<p>We are not doctors. And yet, midway through the game after Stephen Curry had been upended by a Trevor Ariza pump-fake sending his head crashing into the hardwood, there we were doctoring.</p>
<p>Midway through the never-ending stream of opinions about whether Curry should have stayed in the locker room, was simply off his rhythm, not worth considering the deficit, comparing it to the Harrison Barnes incident from two years ago, and everything else in between, I had to admit something: I had no idea how I felt about the entire situation. I yelped out and almost flew off my bed as if I, myself, could cushion his fall.</p>
<p>The Golden State Warriors medical staff, owners, coaches, and just about everyone in the situation that had a say were under scrutiny. And then they allowed Curry to step back into the game, from sprints in the tunnel, to airballing his first ball wide left. They knew not only how bad it would look on them, but also the risk as to how bad it would look for this team.</p>
<p>
<link rel="stylesheet" href="http://cdn3.sbnation.com/assets/3608425/mustreads.css">
</p>
<p>After the game, Steve Kerr told the media that they administered a concussion test at halftime and early in the second half. Curry passed both. So often, we want to be right, we want these occasions where the flaws in organizations we root for or admire to be incorrect. It wasn't just Warriors fans, it was even the objective observers, more interested, of course, in hoping Stephen Curry would play in Game 5, and the NBA Finals.</p>
<p>Neither are incorrect. We are obligated to feel the way we do, jumping to conclusions, bringing up the past and praying to ourselves that history won't repeat itself. Yet as the game dragged on, Curry went back to his normal habits, sinking step-back jumpers, twisting and flying through the lane before dishing to open shooters in the corner.</p>
<p>Suddenly, Curry was fine again.</p>
<p>By the time the game ended, Curry's fall wasn't forgotten but much of the concerns were alleviated because shots went in, the behind-the-back passes were back, and the imaginary cobwebs were ostensibly gone.</p>
<blockquote data-partner="tweetdeck" class="twitter-tweet">
<p dir="ltr" lang="en">Warriors GM Bob Myers is definitive that Curry did not have a concussion: "If he did, he wouldn't have played. That's pretty hard line"</p>
— Ethan Strauss (@SherwoodStrauss) <a href="https://twitter.com/SherwoodStrauss/status/603050597265190912">May 26, 2015</a>
</blockquote>
<p>And again, I don't mind reactions spanning from outrage and Twitter Doctoring to those respecting the people in position to make that call, you know, to make the call. It's a hard line for anyone to walk. I didn't feel either way. The Warriors have had their mishaps in the past with injuries, as recent as last season with Andre Iguodala. I am certainly guilty of this but many times, the wanting to bash someone or something in order to firmly align your feelings into reality shrouds reality.</p>
<p>But there is Stephen Curry, sitting at the podium, describing how blessed he is to be fine after that fall, and how his previous two concussions actually felt worse. I don't blame those that annihilated the training staff, Steve Kerr, and Bob Myers when Curry went out and airballed the shot. But I kept in mind that, no matter how much they needed that win and no matter how good Curry said he felt, there is almost zero chance doctors, Kerr, and the General Manager of the team would allow their best player, and the MVP, to play through a game with a concussion in a series they led 3-0.</p>
<p>Overreact, shout, push back against those overreactions, get Alpha and devoid yourself of the conversations in making fun of it, do whatever you need to do. I'm just glad Stephen Curry can move around and play basketball not just an hour after the fall, but at all. If you don't think that's overreacting on my part, all you have to do is watch Sonya Curry's head-in-hands, tear-stricken reaction to the scene. A scene that seemed too unfair and cruel to happen to Curry. Luckily for him, it was.</p>
<p> </p>
<p><a href="https://twitter.com/AndyKHLiu" class="twitter-follow-button" data-show-count="false">Follow @AndyKHLiu</a>
<script type="text/javascript"><!--
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
// --></script>
</p>
<p><i>For more on the game, check out <a href="http://www.goldenstateofmind.com/2015/5/25/8657309/warriors-at-rockets-game-4-preview-tv-schedule-results-nba-playoffs-2015" target="_blank">our Game 4 storystream</a>. </i></p>
https://www.goldenstateofmind.com/2015/5/26/8658671/golden-state-warriors-stephen-curry-contusion-game-4aliu272015-05-25T21:53:18-07:002015-05-25T21:53:18-07:00Game Links #R3G4: Warriors 115 @ Rockets 128
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/2Wm3xrtLTdtGPn7mpshH8ifDdao=/33x110:2868x2000/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46395364/usa-today-8581193.0.jpg" />
<figcaption>Thomas B. Shea-USA TODAY Sports</figcaption>
</figure>
<style>
h2.m-entry__title { font-size:20px; font-family:Arial,Helvetica,sans-serif; color:rgb(0,0,0); }
img.vox-lazy-load { display:none; }
div.m-entry__photo__caption { display:none; }
div.m-entry__upper-social { display:none; }
div.m-breaker-next-groups { display:none; }
div.m-breaker-next-read { display:none; }
.m-breaker-featured-poll h4 { font-size:18px; font-family:Arial,Helvetica,sans-serif; color:#000000; font-weight:bold; margin-left:0px; margin-right:0px; }
.m-poll-body li { font-size:14px; font-family:Arial,Helvetica,sans-serif; color:#000000; }
.m-poll-body__pct-count { font-size:30px; }
div.YAD { display:none; }
</style>
<script>
//////// COOKIE FUNCTIONS ////////
//cookie_key - required.
//default_value - optional.
function gsomGetCookie(cookie_key, default_value)
{
var cookiekey_start_index = document.cookie.indexOf(" " + cookie_key + "=");
if (cookiekey_start_index == -1)
//If the key could not be found, this could be the first key of the entire cookie string.
//Do a search without the preceding space.
cookiekey_start_index = document.cookie.indexOf(cookie_key + "=");
if (cookiekey_start_index == -1)
//The cookie key could not be found.
return default_value;
//Find where the key's value starts and ends. The key's value is after the = and ends at a ;
var cookievalue_start_index = document.cookie.indexOf("=", cookiekey_start_index) + 1;
var cookievalue_end_index = document.cookie.indexOf(";", cookievalue_start_index);
//If the ending ; could not be found, this could be the last key/value in the entire cookie string.
//So the end of the value is at the end of the entire cookie string.
if (cookievalue_end_index == -1)
cookievalue_end_index = document.cookie.length;
//Now extract the value for the requested key.
return unescape(document.cookie.substring(cookievalue_start_index, cookievalue_end_index));
}
//cookie_key - required
//cookie_value - required.
//expire_days_from_now - optional. If null, the cookie expires at the end of the session.
function gsomSetCookie(cookie_key, cookie_value, expire_days_from_now)
{
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + expire_days_from_now);
var cookie_value_full = escape(cookie_value)
+ ((expire_days_from_now == null) ? "" : "; expires=" + expireDate.toUTCString())
+ "; path=/";
document.cookie = cookie_key + "=" + cookie_value_full;
}
function gsomDeleteCookie(cookie_key)
{
//To delete the cookie, we set the expire date to yesterday.
gsomSetCookie(cookie_key, "", -1);
}
//////// USER SETTINGS ////////
var gsomInputMode = gsomGetCookie("gsomInputMode" , "mouse");
var gsomSoundCloudMode = gsomGetCookie("gsomSoundCloudMode" , "html5");
var gsomUseScrollButtonsMode = gsomGetCookie("gsomUseScrollButtonsMode", "off" );
var gsomFontFamilyMode = gsomGetCookie("gsomFontFamilyMode" , "Arial");
var gsomFontFamilyUserFont = gsomGetCookie("gsomFontFamilyUserFont" , "" );
var gsomFontSizeMode = gsomGetCookie("gsomFontSizeMode" , "13.5" );
var gsomFontSizeMin = 10, gsomFontSizeMax = 20;
//Ensure settings have a valid value.
if (gsomInputMode != 'mouse' && gsomInputMode != 'touch')
gsomInputMode = 'mouse';
if (gsomSoundCloudMode != 'flash' && gsomSoundCloudMode != 'html5')
gsomSoundCloudMode = 'html5';
if (gsomUseScrollButtonsMode != 'off' && gsomUseScrollButtonsMode != 'on')
gsomUseScrollButtonsMode = 'off';
if (gsomFontFamilyMode != 'Arial' && gsomFontFamilyMode != 'Gotham Narrow' && gsomFontFamilyMode != 'Verdana' && gsomFontFamilyMode != 'Lucida Grande' && gsomFontFamilyMode != '__userfont__')
gsomFontFamilyMode = 'Arial';
if (gsomFontSizeMode < gsomFontSizeMin) gsomFontSizeMode = gsomFontSizeMin;
else if (gsomFontSizeMode > gsomFontSizeMax) gsomFontSizeMode = gsomFontSizeMax;
//////// FUNCTIONS FOR DYNAMICALLY GENERATING HTML PAGE ELEMENTS ////////
var strNoDesc = '--------';
var gsomFontSizePx = gsomFontSizeMode + 'px';
var gsomFontFamilies;
if (gsomFontFamilyMode == '__userfont__') gsomFontFamilies = "'" + gsomFontFamilyUserFont + "'";
//Special case for Gotham Narrow, which comes from two fonts:
//"Gotham Narrow SSm A", "Gotham Narrow SSm B"
else if (gsomFontFamilyMode == 'Gotham Narrow') gsomFontFamilies = "'Gotham Narrow SSm A','Gotham Narrow SSm B'";
else gsomFontFamilies = "'" + gsomFontFamilyMode + "'";
//Append the fallback fonts if the above fonts aren't supported.
gsomFontFamilies = gsomFontFamilies + ",Arial,Helvetica,sans-serif";
//Each video info object contains different info depending on the source. For example, Youtube and CSN
//contains only one height, but SoundCloud contains two heights, depending on if the user has selected
//the flash or HTML5 player version.
//This function returns an object containing the info needed to fill in the video player list.
//They are: iframeID iframeURL iframeHeight descString descURL
function gsomUtilConvertVideoInfoToIframeInfo(videoInfo)
{
var videoPlayerInfo = new Object();
if (videoInfo.type == 'csn')
{
videoPlayerInfo.iframeID = videoInfo.csn_iframeID;
videoPlayerInfo.iframeURL = videoInfo.csn_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.csn_iframeHeight;
videoPlayerInfo.descString = "CSN: " + videoInfo.csn_descString;
videoPlayerInfo.descURL = videoInfo.csn_descURL;
}
else if (videoInfo.type == 'youtube')
{
videoPlayerInfo.iframeID = videoInfo.youtube_iframeID;
videoPlayerInfo.iframeURL = videoInfo.youtube_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.youtube_iframeHeight;
videoPlayerInfo.descString = "Youtube: " + videoInfo.youtube_descString;
videoPlayerInfo.descURL = videoInfo.youtube_descURL;
}
else if (videoInfo.type == 'mobli')
{
videoPlayerInfo.iframeID = videoInfo.mobli_iframeID;
videoPlayerInfo.iframeURL = videoInfo.mobli_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.mobli_iframeHeight;
videoPlayerInfo.descString = "Mobli: " + videoInfo.mobli_descString;
videoPlayerInfo.descURL = videoInfo.mobli_descURL;
}
else if (videoInfo.type == 'tout')
{
videoPlayerInfo.iframeID = videoInfo.tout_iframeID;
videoPlayerInfo.iframeURL = videoInfo.tout_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.tout_iframeHeight;
videoPlayerInfo.descString = "Tout: " + videoInfo.tout_descString;
videoPlayerInfo.descURL = videoInfo.tout_descURL;
}
else if (videoInfo.type == 'soundcloud')
{
var iframeURL = gsomSoundCloudMode == 'flash'
? 'https://player.soundcloud.com/player.swf?url=' + videoInfo.soundcloud_baseURL
: 'https://w.soundcloud.com/player/?url=' + videoInfo.soundcloud_baseURL + '&show_artwork=false';
var iframeHeight = gsomSoundCloudMode == 'flash'
? videoInfo.soundcloud_iframeHeight_flash
: videoInfo.soundcloud_iframeHeight_html5;
videoPlayerInfo.iframeID = videoInfo.soundcloud_iframeID;
videoPlayerInfo.iframeURL = iframeURL;
videoPlayerInfo.iframeHeight = iframeHeight;
videoPlayerInfo.descString = "SoundCloud: " + videoInfo.soundcloud_descString;
videoPlayerInfo.descURL = videoInfo.soundcloud_descURL;
}
return videoPlayerInfo;
}
function gsomDocWriteVideoListPlayerMouse(videosArray, iframeID, bPrintInstructions)
{
if (bPrintInstructions)
{
document.write('<p class="gsom">');
document.write('- Click on a video description to play it.<br>');
document.write('</p>');
}
var divID = iframeID + ".div";
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up/left buttons.
document.write( '<button style="width:50%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
document.write( '<button style="width:50%;" onclick="gsomDivScrollLeftRight(\''
+ divID
+ '\', 1)">◀</button>');
}
//Write the video player list.
document.write( '<div id="'
+ divID
+ '" class="" style="overflow:auto; min-height:100px; max-height:200px; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
var iRow = 0;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID != iframeID) continue;
iRow++;
document.write( '<tr class="gsom-zebra-tr" style="cursor:pointer;" ');
document.write('onmouseover="gsomVideoPlayerTrOnMouseOverOut(this, 1)" onmouseout="gsomVideoPlayerTrOnMouseOverOut(this, 0)" ');
document.write( 'onclick="gsomShowVideoAndDesc('
+ '\'' + thisVideo.iframeID + '\','
+ '\'' + thisVideo.iframeURL + '\','
+ '\'' + thisVideo.iframeHeight + '\','
+ '\'' + escape(thisVideo.descString) + '\','
+ '\'' + thisVideo.descURL + '\')">');
document.write('<td class="" style="text-align:left; padding:0px 0px 0px 2px; white-space: nowrap;">' + thisVideo.descString + '</td>');
document.write('</tr>');
}
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down/right buttons.
document.write( '<button style="width:50%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
document.write( '<button style="width:50%;" onclick="gsomDivScrollLeftRight(\''
+ divID
+ '\', 0)">▶</button>');
}
//Write the Off button/video description. The Off button is disabled until the user selects a video.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write('<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button id="' + iframeID + '.offbutton" onclick="gsomShowVideoAndDesc(\'' + iframeID + '\', \'about:blank\', \'0px\', null)" disabled>Off</button></td>');
document.write('<td class="" style="text-align:center; padding:0px 0px 0px 2px;" id="' + iframeID + '.captioncell">' + strNoDesc + '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteVideoListPlayerTouch(videosArray, iframeID, bPrintInstructions)
{
if (bPrintInstructions)
{
document.write('<p class="gsom">');
document.write('- Tap on a video description box to play it.<br>');
document.write('</p>');
}
var divID = iframeID + ".div";
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the video player list as a two column list in a table.
document.write( '<div id="'
+ divID
+ '" class="" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
//iNextColumn is a zero-based number indicating which column the next video will be placed in.
var iNextColumn = 0, iNumColumns = 2;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID != iframeID) continue;
//If iNextColumn is 0, we are about to start a new row.
if (iNextColumn == 0)
document.write('<tr class="" style="height:5em;">');
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;"');
document.write( 'onclick="gsomShowVideoAndDesc('
+ '\'' + thisVideo.iframeID + '\','
+ '\'' + thisVideo.iframeURL + '\','
+ '\'' + thisVideo.iframeHeight + '\','
+ '\'' + escape(thisVideo.descString) + '\','
+ '\'' + thisVideo.descURL + '\')">');
document.write(thisVideo.descString + '</td>');
//Increment to the next column, or drop back to column 0 if we have filled in the number of columns for this row.
iNextColumn = (iNextColumn + 1) % iNumColumns;
//If we have dropped back to column 0, we have completed this row.
if (iNextColumn == 0)
document.write('</tr>');
}
//If we didn't complete a row, and we have no more videos, the closing table row tag would not have been written above.
if (iNextColumn != 0)
document.write('</tr>');
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
//Write the Off button/video description. The Off button is disabled until the user selects a video.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write('<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button id="' + iframeID + '.offbutton" style="width:100%; margin:0px; padding:5px 0px;" onclick="gsomShowVideoAndDesc(\'' + iframeID + '\', \'about:blank\', \'0px\', null)" disabled><br>Off<br><br></button></td>');
document.write('<td class="" style="text-align:center; padding:0px 0px 0px 2px;" id="' + iframeID + '.captioncell">' + strNoDesc + '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteVideoListPlayer(videosArray, iframeID, bPrintInstructions)
{
var bAtLeastOneVideo = false;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID == iframeID)
{
bAtLeastOneVideo = true;
break;
}
}
if (!bAtLeastOneVideo)
{
document.write('<p class="gsom">');
document.write('- No videos found.<br>');
document.write('</p>');
return;
}
if (gsomInputMode == 'touch') gsomDocWriteVideoListPlayerTouch(videosArray, iframeID, bPrintInstructions);
else gsomDocWriteVideoListPlayerMouse(videosArray, iframeID, bPrintInstructions);
}
function gsomDocWriteSingleVideoPlayer(iframeID, iframeURL, iframeHeight, descString, descURL)
{
var strShow = gsomInputMode == 'touch' ? '<br>Show<br><br>' : 'Show';
//Write the Show/Off button and video description.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write( '<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button style="width:100%; margin:0px; padding:5px 0px;" id="'
+ iframeID + ".button"
+ '" onclick="gsomShowHideSingleVideo(\''
+ iframeID + ".button" + '\', \''
+ iframeID + '\', \''
+ iframeURL + '\', \''
+ iframeHeight + '\')">' + strShow + '</button></td>');
document.write( '<td class="" style="text-align:center; padding:0px 0px 0px 2px;">'
+ '<em><a class="gsom" href="' + descURL + '">' + unescape(descString) + '</a></em>'
+ '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteSingleSoundCloudPlayer(iframeID, baseURL, iframeHeightflash, iframeHeighthtml5, descString, descURL)
{
var soundCloundInfo = new Object();
soundCloundInfo.type = 'soundcloud';
soundCloundInfo.soundcloud_iframeID = iframeID;
soundCloundInfo.soundcloud_baseURL = baseURL;
soundCloundInfo.soundcloud_iframeHeight_flash = iframeHeightflash;
soundCloundInfo.soundcloud_iframeHeight_html5 = iframeHeighthtml5;
soundCloundInfo.soundcloud_descString = descString;
soundCloundInfo.soundcloud_descURL = descURL;
var thisSoundCloud = gsomUtilConvertVideoInfoToIframeInfo(soundCloundInfo);
gsomDocWriteSingleVideoPlayer(thisSoundCloud.iframeID, thisSoundCloud.iframeURL, thisSoundCloud.iframeHeight, escape(thisSoundCloud.descString), thisSoundCloud.descURL);
}
function gsomDocWriteRadioAudioMouse(radioAudioArray)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
for (var i = 0; i < radioAudioArray.length; i++)
{
var thisRadioAudio = radioAudioArray[i];
document.write( thisRadioAudio.length + ': <a class="gsom" href="'
+ thisRadioAudio.URL + '">'
+ thisRadioAudio.descString + '</a><br>');
}
document.write('</p>');
}
function gsomDocWriteRadioAudioTouch(radioAudioArray)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
document.write('</p>');
var divID = "KNBR-957-audio.div"
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the audio list as a two column list in a table.
document.write('<div id="' + divID + '" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
//iNextColumn is a zero-based number indicating which column the next video will be placed in.
var iNextColumn = 0, iNumColumns = 2;
for (var i = 0; i < radioAudioArray.length; i++)
{
var thisRadioAudio = radioAudioArray[i];
//If iNextColumn is 0, we are about to start a new row.
if (iNextColumn == 0)
document.write('<tr class="" style="height:5em;">');
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;">');
//Using 'display:inline-table' causes the anchor tag to fill the table cell, making any
//part of the cell clickable/tappable. But it doesn't center the text vertically.
//Adding a span around the text with 'display:table-cell; vertical-align:middle;' will center
//the text vertically inside the anchor tag.
document.write('<a class="gsom" style="display:inline-table;width:100%; height:100%;" href="' + thisRadioAudio.URL + '">');
document.write('<span style="display:table-cell; vertical-align:middle;">');
document.write(thisRadioAudio.length + ': ' + thisRadioAudio.descString);
document.write('</span></a></td>');
//Increment to the next column, or drop back to column 0 if we have filled in the number of columns for this row.
iNextColumn = (iNextColumn + 1) % iNumColumns;
//If we have dropped back to column 0, we have completed this row.
if (iNextColumn == 0)
document.write('</tr>');
}
//If we didn't complete a row, and we have no more videos, the closing table row tag would not have been written above.
if (iNextColumn != 0)
document.write('</tr>');
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
//Make sure there's at least one line of space after the div and before the next element.
document.write('<br>');
}
function gsomDocWriteRadioAudio(radioAudioArray)
{
if (radioAudioArray.length == 0)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
document.write('No radio links found.<br>');
document.write('</p>');
return;
}
if (gsomInputMode == 'touch') gsomDocWriteRadioAudioTouch(radioAudioArray);
else gsomDocWriteRadioAudioMouse(radioAudioArray);
}
function gsomDocWriteNBAcomVideosMouse(NBAcomVideosArray, recapURL)
{
document.write('<p class="gsom">');
document.write('- Recap and highlights from <a class="gsom" href="' + recapURL + '">nba.com\'s game page</a>:<br>');
if (NBAcomVideosArray.length == 0)
{
document.write('No links found.<br>');
document.write('</p>');
return;
}
for (var i = 0; i < NBAcomVideosArray.length; i++)
{
var thisNBAcomVideo = NBAcomVideosArray[i];
document.write( '<a class="gsom" href="'
+ thisNBAcomVideo.URL + '">'
+ thisNBAcomVideo.descString + '</a><br>');
}
document.write('</p>');
}
function gsomDocWriteNBAcomVideosTouch(NBAcomVideosArray, recapURL)
{
document.write('<p class="gsom">');
document.write('- Recap and highlights from <a class="gsom" href="' + recapURL + '">nba.com\'s game page</a>:<br>');
if (NBAcomVideosArray.length == 0)
{
document.write('No links found.<br>');
document.write('</p>');
return;
}
document.write('</p>');
var divID = "nbacom-video.div"
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the video list as a two column list in a table.
document.write('<div id="' + divID + '" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
for (var i = 0; i < NBAcomVideosArray.length; i+=2)
{
document.write('<tr class="" style="height:5em;">');
for(var j = i; j < i + 2 && j < NBAcomVideosArray.length; j++)
{
var thisNBAcomVideo = NBAcomVideosArray[j];
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;">');
//Using 'display:inline-table' causes the anchor tag to fill the table cell, making any
//part of the cell clickable/tappable. But it doesn't center the text vertically.
//Adding a span around the text with 'display:table-cell; vertical-align:middle;' will center
//the text vertically inside the anchor tag.
document.write('<a class="gsom" style="display:inline-table;width:100%; height:100%;" href="' + thisNBAcomVideo.URL + '">');
document.write('<span style="display:table-cell; vertical-align:middle;">');
document.write(thisNBAcomVideo.descString);
document.write('</span></a></td>');
}
document.write('</tr>');
}
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
}
function gsomDocWriteNBAcomVideos(NBAcomVideosArray, recapURL)
{
if (gsomInputMode == 'touch') gsomDocWriteNBAcomVideosTouch(NBAcomVideosArray, recapURL);
else gsomDocWriteNBAcomVideosMouse(NBAcomVideosArray, recapURL);
}
//////// EVENT FUNCTIONS ////////
function gsomVideoPlayerTrOnMouseOverOut(trElem, bMouseOver)
{
trElem.style.backgroundColor = bMouseOver ? '#8ce448' : '';
}
function gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight)
{
var iframeElem = document.getElementById(iframeID);
if (iframeElem == null) return;
iframeElem.src = iframeURL;
iframeElem.style.height = iframeHeight;
if (iframeURL != 'about:blank')
{
//After the user clicks on a URL to be shown in this iframe, we want to scroll the iframe into view.
//But we don't want to do any scrolling unless we're sure the iframe is NOT in view.
//First, we need to determine what part of the page is visible to the user. If the page is 9000 pixels tall,
//the user is very likely only seeing a fraction of that, say the 2001th - 3000th pixel rows, thus, a viewing
//height of 1000 pixels. This also means that there are 2000 pixel rows ABOVE the current view and 6000 pixel rows
//BELOW the current view.
//On some browsers, document.documentElement.scrollTop (which is the "html" element's scrollTop)
//tells us how many pixel rows are ABOVE the current view. On other browsers, the document.body.scrollTop
//(which is the "body" element's scrollTop) tells us this.
//We'll need to support both methods.
//In the above example, document.documentElement.scrollTop (or document.body.scrollTop) would be 2000, so
//add 1 to get the 2001th row, currently the first viewable pixel row.
var viewTopPixelRow = (document.documentElement.scrollTop > 0 ?
document.documentElement.scrollTop : document.body.scrollTop)
+ 1;
//In the above example, document.documentElement.clientHeight would be 1000, representing the viewable height.
var viewBottomPixelRow = (document.documentElement.scrollTop > 0 ?
document.documentElement.scrollTop : document.body.scrollTop)
+ document.documentElement.clientHeight;
//Next, we determine the vertical position of the iframe within the page. It seems that we can
//do this by adding all of the offsetTops of the iframe element and its parents.
var iframeTopPos = iframeElem.offsetTop;
var parentElem = iframeElem.offsetParent;
while (parentElem)
{
iframeTopPos += parentElem.offsetTop;
parentElem = parentElem.offsetParent;
}
//The bottom position of the iframe is the top position + its height.
var iframeBottomPos = iframeTopPos + iframeElem.clientHeight;
//Since the clickable list of videos is currently ABOVE the iframe, it is very unlikely that the iframe is somehow
//ABOVE the viewing area. So we only need to check if the iframe is BELOW the viewable area.
if (iframeBottomPos > viewBottomPixelRow)
{
//Add 10 pixels to the scroll, so there's a small amount of "padding" visible below the iframe.
//We don't know which element the browser uses for scrolling the entire page, so we increment both.
var iScrollAmount = iframeBottomPos - viewBottomPixelRow + 10;
document.documentElement.scrollTop += iScrollAmount;
document.body .scrollTop += iScrollAmount;
}
}
}
function gsomShowVideoAndDesc(iframeID, iframeURL, iframeHeight, descString, descURL)
{
gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight);
var videoPlayerOffButton = document.getElementById(iframeID + ".offbutton");
var videoPlayerCaptionCell = document.getElementById(iframeID + ".captioncell");
if (videoPlayerOffButton == null || videoPlayerCaptionCell == null) return;
if (iframeURL == 'about:blank')
{
videoPlayerOffButton.disabled = true;
videoPlayerCaptionCell.innerHTML = strNoDesc;
}
else
{
videoPlayerOffButton.disabled = false;
videoPlayerCaptionCell.innerHTML = '<em><a class="gsom" href="' + descURL + '">' + unescape(descString) + '</a></em>';
}
}
//The iframeURL and iframeHeight are values used when SHOWING the single video.
//If hiding, about:blank and a height of 0 is used.
function gsomShowHideSingleVideo(buttonID, iframeID, iframeURL, iframeHeight)
{
var buttonElem = document.getElementById(buttonID);
if (buttonElem == null) return;
if (buttonElem.innerHTML.indexOf("Off") >= 0)
{
gsomShowURLInIFrame(iframeID, 'about:blank', '0px');
buttonElem.innerHTML = gsomInputMode == 'touch' ? '<br>Show<br><br>' : 'Show';
}
else
{
gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight);
buttonElem.innerHTML = gsomInputMode == 'touch' ? '<br>Off<br><br>' : 'Off';
}
}
//Scroll the given div ID up or down.
//bUp - 1 scrolls up, all other values scroll down
function gsomDivScrollUpDown(divID, bUp)
{
var divElem = document.getElementById(divID);
if (divElem == null) return;
var iScrollAmount = bUp == 1 ? -50 : 50;
//Use timers and small scroll steps to produce a "smooth" scrolling effect instead
//of "jumping" to scroll.
var iScrollNumSteps = 5;
var iScollStepSize = iScrollAmount / iScrollNumSteps;
for (var i = 0; i < iScrollNumSteps; i++)
setTimeout(function() { divElem.scrollTop += iScollStepSize; }, i*40);
}
//Scroll the given div ID left or right.
//bLeft - 1 scrolls left, all other values scroll right
function gsomDivScrollLeftRight(divID, bLeft)
{
var divElem = document.getElementById(divID);
if (divElem == null) return;
var iScrollAmount = bLeft == 1 ? -100 : 100;
//Use timers and small scroll steps to produce a "smooth" scrolling effect instead
//of "jumping" to scroll.
var iScrollNumSteps = 5;
var iScollStepSize = iScrollAmount / iScrollNumSteps;
for (var i = 0; i < iScrollNumSteps; i++)
setTimeout(function() { divElem.scrollLeft += iScollStepSize; }, i*40);
}
function gsomInitSettingsSection()
{
var radioBtnElems = document.getElementsByName('radiobtn_gsomInputMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomInputMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomSoundCloudMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomSoundCloudMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i=0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomUseScrollButtonsMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomFontFamilyMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomFontFamilyMode)
{
thisRadioBtn.checked = true;
break;
}
}
//Also initialize the user entered font text box.
var textboxElem = document.getElementById('text_gsomFontFamilyUserFont');
if (textboxElem != null)
textboxElem.value = gsomFontFamilyUserFont;
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem != null)
spanFontSizeElem.innerHTML = gsomFontSizeMode;
}
function gsomSaveSettingsSection()
{
var radioBtnElems = document.getElementsByName('radiobtn_gsomInputMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomInputMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomSoundCloudMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomSoundCloudMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomUseScrollButtonsMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomUseScrollButtonsMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomFontFamilyMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomFontFamilyMode", thisRadioBtn.value, 5000);
break;
}
}
//Also save the user entered font.
var textboxElem = document.getElementById('text_gsomFontFamilyUserFont');
if (textboxElem != null)
gsomSetCookie("gsomFontFamilyUserFont", textboxElem.value, 5000);
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem != null)
gsomSetCookie("gsomFontSizeMode", spanFontSizeElem.innerHTML, 5000);
var settingsMsgElem = document.getElementById("gsomSettingsMsgSpan");
if (settingsMsgElem == null) return;
settingsMsgElem.innerHTML = 'Settings saved. Changes will take effect when the page is reloaded.';
}
//increaseBy can be a negative number to decrease the font size setting.
function IncreaseFontSizeSetting(increaseBy)
{
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem == null) return;
var newFontSize = parseFloat(spanFontSizeElem.innerHTML, 10) + increaseBy;
if (newFontSize < gsomFontSizeMin) newFontSize = gsomFontSizeMin;
else if (newFontSize > gsomFontSizeMax) newFontSize = gsomFontSizeMax;
var btnDecrease = document.getElementById('btn_gsomFontSizeMode_decrease');
var btnIncrease = document.getElementById('btn_gsomFontSizeMode_increase');
if (btnDecrease == null || btnIncrease == null) return;
btnDecrease.disabled = newFontSize <= gsomFontSizeMin;
btnIncrease.disabled = newFontSize >= gsomFontSizeMax;
spanFontSizeElem.innerHTML = newFontSize;
}
function ShowHideWarriorsQuotes()
{
var quotesLinkElem = document.getElementById("a_showhide_warriorsquotes");
if (quotesLinkElem == null) return;
var bShowQuotes;
if (quotesLinkElem.innerHTML == "Hide Quotes")
{
bShowQuotes = false;
quotesLinkElem.innerHTML = "Show Quotes";
}
else
{
bShowQuotes = true;
quotesLinkElem.innerHTML = "Hide Quotes";
}
var quotesElems = document.getElementsByClassName('gsom_warriorsquotes');
if (quotesElems == null) return;
for (var i = 0; i < quotesElems.length; i++)
{
var thisQuoteElem = quotesElems[i];
thisQuoteElem.style.display = bShowQuotes ? 'inline' : 'none';
}
}
function ShowHideSettings()
{
var settingsDivElem = document.getElementById("settings.div");
var settingsLinkElem = document.getElementById("a_showhide_settings");
if (settingsDivElem == null || settingsLinkElem == null) return;
if (settingsDivElem.style.display == 'none')
{
settingsDivElem.style.display = "inline";
settingsLinkElem.innerHTML = "Hide Settings";
}
else
{
settingsDivElem.style.display = "none";
settingsLinkElem.innerHTML = "Show Settings";
}
}
//////// CSS STYLES ////////
//Some CSS styles depend on the user's settings. So we dynamically write out the CSS styles here.
document.write('<style>');
document.write('tr.gsom-zebra-tr { }');
document.write('tr.gsom-zebra-tr:nth-child(odd) { background-color:#E4E4E4; }');
document.write('tr.gsom-zebra-tr:nth-child(even) { background-color:#F7F7F7; }');
document.write('tr.gsom-whatsnext-tr { }');
document.write('tr.gsom-whatsnext-tr:nth-child(2) { background-color:#8CE448; }');
document.write('a.gsom:visited { color: #A44B87; }');
document.write('a.gsom:visited { color: #A44B87; }');
document.write('hr.gsom { background-color:#000000; height:2px; width:100%; margin:1em 0px 1em 0px; }');
document.write('h5.gsom { font-family:' + gsomFontFamilies + '; color:#000000; }');
document.write('blockquote.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; padding:0px 0px 0px 1em; }');
document.write('p.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; }');
document.write('table.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; width:100%; table-layout:fixed; }');
document.write('table.gsom_whatsnext { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; width:100%; }');
document.write('div.m-linksets.has-logo h3 { font-size:20px; }');
document.write('div.m-linksets ul { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; font-weight:bold; }');
if (gsomInputMode == 'touch')
document.write('span.gsom_boxscoregameflow_separator { display:inline-block; width:50px; text-align:center; }');
else
document.write('span.gsom_boxscoregameflow_separator { }');
document.write('</style>');
//////// LINKS DATA ////////
/*
Youtube Example:
"type":"youtube",
"youtube_iframeID":"",
"youtube_iframeURL":"",
"youtube_iframeHeight":"xxxpx",
"youtube_descString":"",
"youtube_descURL":"",
CSN Example:
"type":"csn",
"csn_iframeID":"",
"csn_iframeURL":"",
"csn_iframeHeight":"xxxpx",
"csn_descString":"",
"csn_descURL":"",
SoundCloud Example:
"type":"soundcloud",
"soundcloud_iframeID":"",
"soundcloud_baseURL":"",
"soundcloud_iframeHeight_flash":"xxxpx",
"soundcloud_iframeHeight_html5":"xxxpx",
"soundcloud_descString":"",
"soundcloud_descURL":"",
Mobli Example:
"type":"mobli",
"mobli_iframeID":"",
"mobli_iframeURL":"",
"mobli_iframeHeight":"xxxpx",
"mobli_descString":"",
"mobli_descURL":"",
Tout Example:
"type":"tout",
"tout_iframeID":"",
"tout_iframeURL":"",
"tout_iframeHeight":"xxxpx",
"tout_descString":"",
"tout_descURL":"",
*/
var gsomVideosArray =
[
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207151189&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Warriorsvox podcast - Tom Tolbert & Doris Burke',
"soundcloud_descURL":"http://soundcloud.com/warriors/warriorsvox-podcast-tom-tolbert-doris-burke-52515",
},
{
"type":"youtube",
"youtube_iframeID":"pregame_videos",
"youtube_iframeURL":"http://www.youtube.com/embed/l0_3e70UuTk?autoplay=1",
"youtube_iframeHeight":"310px",
"youtube_descString":'Warriors TV: Shootaround: Warriors Set for Game 4 in Houston',
"youtube_descURL":"http://www.youtube.com/watch?v=l0_3e70UuTk",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207159723&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shootaround: Steve Kerr interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/steve-kerr-shootaround-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207160257&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shootaround: Draymond Green interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/draymond-green-shootaround-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207159989&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shootaround: Shaun Livingston interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/shaun-livingston-shootaround-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207159868&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shootaround: James Harden interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/james-harden-shootaround-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"pregame_videos",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207160082&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shootaround: Josh Smith interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/josh-smith-shootaround-52515",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/56QMBNG1plGw?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Steve Kerr at the podium',
"csn_descURL":"http://www.csnbayarea.com/warriors/kerr-explains-process-letting-curry-back-game-4",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/wq5nfPZsRQxr?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Shaun Livingston in the locker room',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/livingston-sigh-relief-see-curry-return-game-4",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/ZhxcsPj7yAOb?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Harrison Barnes in the locker room',
"csn_descURL":"http://www.csnbayarea.com/warriors/barnes-we-let-rockets-get-too-comfortable-game-4",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/NLckMozq_8CA?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Andrew Bogut in the locker room',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/bogut-addresses-howards-elbow-his-face-game-4",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/TtvDH5Ol4LN0?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Klay Thompson in the locker room',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/klay-motivated-not-come-back-houston",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/4BiBijwz6n6t?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'CSN highlights, recap',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/highlights-warriors-make-20-3-pointers-game-4-loss",
},
{
"type":"csn",
"csn_iframeID":"postgame_videos",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/upJBDvO9u6Ce?autoPlay=true¶ms=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Monte Poole game wrap',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/poole-tell-tale-signs-curry-wasnt-right-after-fall",
},
{
"type":"youtube",
"youtube_iframeID":"postgame_videos",
"youtube_iframeURL":"http://www.youtube.com/embed/B-fSOWRrMK0?autoplay=1",
"youtube_iframeHeight":"310px",
"youtube_descString":'Warriors TV game wrap',
"youtube_descURL":"http://www.youtube.com/watch?v=B-fSOWRrMK0",
},
{
"type":"youtube",
"youtube_iframeID":"postgame_videos",
"youtube_iframeURL":"http://www.youtube.com/embed/HfquwXzZsAk?autoplay=1",
"youtube_iframeHeight":"310px",
"youtube_descString":'Stephen Curry & Klay Thompson highlights by GD\'s Final Highlights',
"youtube_descURL":"http://www.youtube.com/watch?v=HfquwXzZsAk",
},
{
"type":"youtube",
"youtube_iframeID":"postgame_videos",
"youtube_iframeURL":"http://www.youtube.com/embed/mqBUa6H2iQ8?autoplay=1",
"youtube_iframeHeight":"310px",
"youtube_descString":'Stephen Curry highlights by FreeDawkins',
"youtube_descURL":"http://www.youtube.com/watch?v=mqBUa6H2iQ8",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"other_videos_tue",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207378809&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Media availability: Steve Kerr interview',
"soundcloud_descURL":"http://soundcloud.com/warriors/steve-kerr-media-availability-52615",
},
{
"type":"csn",
"csn_iframeID":"other_videos_wed",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/0vZxMn_7KdhB?autoPlay=true&params=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Kozimor, Ratto, Berman: How will week-long break affect teams in NBA Finals?',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/ystl-how-will-week-long-break-affect-teams-nba-finals",
},
{
"type":"csn",
"csn_iframeID":"other_videos_wed",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/XQavJka5b1ix?autoPlay=true&params=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Kozimor, Ratto, Berman: How do Warriors slow down Harden in Game 5?',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/ystl-how-do-warriors-slow-down-harden-game-5",
},
{
"type":"csn",
"csn_iframeID":"other_videos_wed",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/CKll2QZ1qqCN?autoPlay=true&params=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Kozimor, Ratto, Berman: Curry\'s toughness validated after fall, return in Game 4?',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/ystl-currys-toughness-validated-after-fall-return-game-4",
},
{
"type":"csn",
"csn_iframeID":"other_videos_wed",
"csn_iframeURL":"http://player.theplatform.com/p/pcPFDC/bayarea/select/rL8F8gTBa052?autoPlay=true&params=zone%3Dwarrior",
"csn_iframeHeight":"300px",
"csn_descString":'Kozimor, Feinstein: NBA making mistake not moving Finals up',
"csn_descURL":"http://www.csnbayarea.com/video_content_type/ystl-feinstein-nba-making-mistake-not-moving-finals",
},
];
var gsomSoundCloudArray =
[
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245735&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Dwight Howard - postgame ESPN Radio (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/dwight-howard-postgame-espn-radio-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245461&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'James Harden - postgame ESPN (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/james-harden-postgame-espn-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207246150&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Steve Kerr - postgame (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/steve-kerr-postgame-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207248474&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Steph Curry - postgame (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/steph-curry-postgame-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245907&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Klay Thompson - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/klay-thompson-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245959&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Shaun Livingston - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/shaun-livingston-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245124&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Festus Ezeli - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/festus-ezeli-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245074&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Draymond Green - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/draymond-green-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245020&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Andrew Bogut - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/andrew-bogut-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207244959&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Harrison Barnes - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/harrison-barnes-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245790&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Kevin McHale - postgame (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/kevin-mchale-postgame-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207247822&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'James Harden - postgame (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/james-harden-postgame-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207248399&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Dwight Howard - postgame (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/dwight-howard-postgame-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245676&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Terrence Jones - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/terrence-jones-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245842&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Josh Smith - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/josh-smith-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207245371&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Jason Terry - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/jason-terry-locker-room-52515",
},
{
"type":"soundcloud",
"soundcloud_iframeID":"postgame_soundcloud",
"soundcloud_baseURL":"https%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F207244878&auto_play=true",
"soundcloud_iframeHeight_flash":"185px",
"soundcloud_iframeHeight_html5":"300px",
"soundcloud_descString":'Trevor Ariza - locker room (5/25/15)',
"soundcloud_descURL":"http://soundcloud.com/warriors/trevor-ariza-locker-room-52515",
},
];
/* Example:
{
"length":"x:xx min",
"URL":"",
"descString":"",
},
*/
var gsomRadioAudioArray =
[
{
"length":"8:36 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1635685/105685152/monte-poole-105685152.mp3",
"descString":"95.7 FM: Monte Poole with Henry Wofford"
},
];
var gsomRadioAudioArrayTue =
[
{
"length":"10:22 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1639665/105709826/matt-steinmetz-105709826.mp3",
"descString":"95.7 FM: Matt Steinmetz on Flight 957 Morning Show"
},
{
"length":"9:25 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1639665/105711566/garry-st-jean-105711566.mp3",
"descString":"95.7 FM: Garry St. Jean on Flight 957 Morning Show"
},
{
"length":"8:43 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1639665/105712553/lee-jenkins-105712553.mp3",
"descString":"95.7 FM: Lee Jenkins (Sports Illustrated writer) on Flight 957 Morning Show"
},
{
"length":"10:41 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1622915/105727141/world-b-free-105727141.mp3",
"descString":"95.7 FM: World B Free with Lund and Papa"
},
{
"length":"10:22 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1622915/105728256/mychal-thompson-105728256.mp3",
"descString":"95.7 FM: Mychal Thompson with Lund and Papa"
},
];
var gsomRadioAudioArrayWed =
[
{
"length":"7:28 min",
"URL":"http://media.957thegame.com/hosting/media/kgmz/1639665/105787347/brian-windhorst-105787347.mp3",
"descString":"95.7 FM: Brian Windhorst (ESPN NBA writer) on Flight 957 Morning Show"
},
];
/* Example:
{
"URL":"",
"descString":"",
},
*/
var gsomNBAcomVideosArray =
[
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-play7.nba_nba_576x324.flv",
"descString":"2.3 MB: Crawford Hits the Deck",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-play8.nba_nba_576x324.flv",
"descString":"9.0 MB: Curry Injured During Game 4",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-play11.nba_nba_576x324.flv",
"descString":"3.0 MB: Howard Called For Flagrant Foul",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-play12.nba_nba_576x324.flv",
"descString":"1.8 MB: Curry Shoots Air Ball",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-play15.nba_nba_576x324.flv",
"descString":"2.5 MB: Thompson Buries Three",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/25/0041400314-gsw-hou-recap.nba_nba_576x324.flv",
"descString":"28.0 MB: Warriors vs. Rockets Game 4",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/26/20150525-kerr-on-curry-injury.nba_nba_576x324.flv",
"descString":"16.2 MB: Podium: Kerr on Curry Injury",
},
{
"URL":"http://nba.cdn.turner.com/nba/big/channels/playoffs/2015/05/26/20150525-warriors-postgame.nba_nba_576x324.flv",
"descString":"19.1 MB: Podium bits: Kerr, Curry",
},
];
</script>
https://www.goldenstateofmind.com/2015/5/25/8657597/game-links-r3g4-golden-state-warriors-115-houston-rockets-128IQofaWarrior2015-05-25T21:18:53-07:002015-05-25T21:18:53-07:00Houston's big first quarter beats GSW, 128-115
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/39NcCBZCIStGEfGhxIlrSBC7abA=/0x0:4896x3264/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46395440/usa-today-8581239.0.jpg" />
<figcaption>Thomas B. Shea-USA TODAY Sports</figcaption>
</figure>
<p>The Rockets and Warriors set a NBA record for most combined threes in a game, but a big first quarter and 45 points from James Harden helped the home team to a Game 4 win to avoid a sweep.</p> <p>The <a class="sbn-auto-link" href="https://www.goldenstateofmind.com/">Golden State Warriors</a> did not take a 128-115 loss in Game 4 of the Western Conference Finals solely because <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658035/video-curry-suffers-nasty-fall-leaves-game/in/8421350">Stephen Curry suffered an injury</a> in the second quarter.</p>
<p>When Curry suffered that head contusion with just under six minutes left in the second quarter, the Warriors were already down by 19. During the approximately 12-minute period that Curry was out (from 5:52 in the second quarter until 5:58 in the third), the Warriors outscored the <a class="sbn-auto-link" href="https://www.thedreamshake.com/">Rockets</a> 33-21 on 52% shooting, had eight assists on 13 made shots and just two turnovers. <span>Klay Thompson</span> led the way during that period, scoring 12 of his team-high 24 points.</p>
<p>And, perhaps ironically, the Warriors managed a franchise record for most threes in a game (they finished shooting 20-for-46 from three) despite Curry's extended absence.</p>
<blockquote align="center" class="twitter-tweet" lang="en">
<p dir="ltr" lang="en">Warriors have set a franchise record for threes in a playoff game with 17. Dubs are 17-of-37 from long distance tonight (.459)</p>
— GSWStats (@gswstats) <a href="https://twitter.com/gswstats/status/603038731969245184">May 26, 2015</a>
</blockquote>
<p>
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
</p>
<p>After spotting the Rockets a 45-22 advantage in the first quarter, the Warriors actually outscored the Rockets 93-83 in the final three quarters and shot a scorching 16-for-31 from beyond the arc. Once again, it was a bit small ball that aided the Warriors as center <span>Andrew Bogut</span> played just 13:23 in those final three frames while <span>Leandro Barbosa</span> saw significant minutes. They were still within two possessions of the Rockets in the fourth quarter when it was 104-98 with 8:24 left before Barbosa missed a three.</p>
<p>In short, the Warriors <i>could have</i> won this game despite Curry's injury and a few questionable foul calls (<a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658251/video-dwight-howards-controversial-flagrant-1-foul-on-andrew-bogut">or non-calls</a>).</p>
<p>What this game came down to was that the Warriors came out flat in the first quarter against a desperate Rockets that simply played outstanding basketball.</p>
<blockquote align="center" class="twitter-tweet" lang="en">
<p dir="ltr" lang="en">You can analyze this game any way you want but the best point to make is that <span>Josh Smith</span> is 7-of-7 with three 3s.</p>
— Eric Freeman (@freemaneric) <a href="https://twitter.com/freemaneric/status/603033625878089728">May 26, 2015</a>
</blockquote>
<p>
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
</p>
<blockquote align="center" class="twitter-tweet" lang="en">
<p dir="ltr" lang="en">Houston's 14 three-pointers (14-of-24) are the most ever by a Warriors opponent in a playoff game. Rockets lead 99-84 after three</p>
— GSWStats (@gswstats) <a href="https://twitter.com/gswstats/status/603034227601440768">May 26, 2015</a>
</blockquote>
<p>
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
</p>
<p>Although <span>James Harden</span> finishing with a career playoff-high 45 points will grab headlines for this game, Josh Smith scoring 13 of his 20 points in the first quarter including three 3-pointers was the big difference. The Rockets shot 8-for-9 from beyond the arc in the first quarter and just looked like a team that didn't want to lose while the Warriors looked like a squad that expected to win.</p>
<p align="center"><img align="centre" src="https://cdn1.vox-cdn.com/uploads/chorus_asset/file/3726730/nba_hougsw_g4_1stqtr_sc.0.jpeg"></p>
<p>This game was a lesson in just how difficult it is to get a sweep in the conference finals: just 13 teams have done that in the nearly 40 years since the ABA/NBA merger and even some all-time great teams failed to accomplish that feat. A team can't take a quarter off and expect to earn a sweep to advance to the Finals. The Warriors were extremely fortunate to even scrap their way back into this one to have any sort of shot at a win.</p>
<p>In the end, there's no reason to panic or be disappointed about this one: a team that won 67 games this season and blew out a conference finalist by 35 in the previous game overcame an injury to the MVP and an onslaught by their opponent on the road to keep the game within reach. If anything, they've reinforced just how good they are and how good they can become as they continue to mature.</p>
<p>Houston outplayed the Warriors in Game 4 and deserved to win that one. We will have to wait and see what a more complete diagnosis of Curry's head injury might look like — I'm not a doctor and won't bother diagnosing anything here (but you can head to Twitter for plenty of amateur doctors making their diagnoses). What will be at least as interesting, if not more, to watch is whether the league upgrades <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658251/video-dwight-howards-controversial-flagrant-1-foul-on-andrew-bogut/in/8421350">Dwight Howard's foul on Andrew Bogut in the third quarter</a> to a Flagrant 2, which <a target="_blank" href="https://twitter.com/DeMarcusRFNET/status/603043519062798336">would result in a one-game suspension</a>.</p>
<p>Best of luck to the Rockets in staying alive in Game 5 on Wednesday at Oracle Arena.</p>
<p><i>For more on the game, check out <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8657309/warriors-at-rockets-game-4-preview-tv-schedule-results-nba-playoffs-2015">our Game 4 storystream</a>. </i></p>
https://www.goldenstateofmind.com/2015/5/25/8658391/warriors-at-rockets-game-4-final-score-stephen-curry-injury-nba-playoffs-2015Nate P.2015-05-25T20:48:01-07:002015-05-25T20:48:01-07:00Post game mope
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/fBIMztZ-Q3k4C_Wt2IEN8NTzLj0=/0x29:497x360/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46395286/mope.0.0.jpg" />
</figure>
<style>
h2.m-entry__title { font-size:20px; font-family:Arial,Helvetica,sans-serif; color:rgb(0,0,0); }
img.vox-lazy-load { display:none; }
div.m-entry__photo__caption { display:none; }
div.m-entry__upper-social { display:none; }
div.m-breaker-next-groups { display:none; }
div.m-breaker-next-read { display:none; }
.m-breaker-featured-poll h4 { font-size:18px; font-family:Arial,Helvetica,sans-serif; color:#000000; font-weight:bold; margin-left:0px; margin-right:0px; }
.m-poll-body li { font-size:14px; font-family:Arial,Helvetica,sans-serif; color:#000000; }
.m-poll-body__pct-count { font-size:30px; }
div.YAD { display:none; }
</style>
<script>
//////// COOKIE FUNCTIONS ////////
//cookie_key - required.
//default_value - optional.
function gsomGetCookie(cookie_key, default_value)
{
var cookiekey_start_index = document.cookie.indexOf(" " + cookie_key + "=");
if (cookiekey_start_index == -1)
//If the key could not be found, this could be the first key of the entire cookie string.
//Do a search without the preceding space.
cookiekey_start_index = document.cookie.indexOf(cookie_key + "=");
if (cookiekey_start_index == -1)
//The cookie key could not be found.
return default_value;
//Find where the key's value starts and ends. The key's value is after the = and ends at a ;
var cookievalue_start_index = document.cookie.indexOf("=", cookiekey_start_index) + 1;
var cookievalue_end_index = document.cookie.indexOf(";", cookievalue_start_index);
//If the ending ; could not be found, this could be the last key/value in the entire cookie string.
//So the end of the value is at the end of the entire cookie string.
if (cookievalue_end_index == -1)
cookievalue_end_index = document.cookie.length;
//Now extract the value for the requested key.
return unescape(document.cookie.substring(cookievalue_start_index, cookievalue_end_index));
}
//cookie_key - required
//cookie_value - required.
//expire_days_from_now - optional. If null, the cookie expires at the end of the session.
function gsomSetCookie(cookie_key, cookie_value, expire_days_from_now)
{
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + expire_days_from_now);
var cookie_value_full = escape(cookie_value)
+ ((expire_days_from_now == null) ? "" : "; expires=" + expireDate.toUTCString())
+ "; path=/";
document.cookie = cookie_key + "=" + cookie_value_full;
}
function gsomDeleteCookie(cookie_key)
{
//To delete the cookie, we set the expire date to yesterday.
gsomSetCookie(cookie_key, "", -1);
}
//////// USER SETTINGS ////////
var gsomInputMode = gsomGetCookie("gsomInputMode" , "mouse");
var gsomSoundCloudMode = gsomGetCookie("gsomSoundCloudMode" , "html5");
var gsomUseScrollButtonsMode = gsomGetCookie("gsomUseScrollButtonsMode", "off" );
var gsomFontFamilyMode = gsomGetCookie("gsomFontFamilyMode" , "Arial");
var gsomFontFamilyUserFont = gsomGetCookie("gsomFontFamilyUserFont" , "" );
var gsomFontSizeMode = gsomGetCookie("gsomFontSizeMode" , "13.5" );
var gsomFontSizeMin = 10, gsomFontSizeMax = 20;
//Ensure settings have a valid value.
if (gsomInputMode != 'mouse' && gsomInputMode != 'touch')
gsomInputMode = 'mouse';
if (gsomSoundCloudMode != 'flash' && gsomSoundCloudMode != 'html5')
gsomSoundCloudMode = 'html5';
if (gsomUseScrollButtonsMode != 'off' && gsomUseScrollButtonsMode != 'on')
gsomUseScrollButtonsMode = 'off';
if (gsomFontFamilyMode != 'Arial' && gsomFontFamilyMode != 'Gotham Narrow' && gsomFontFamilyMode != 'Verdana' && gsomFontFamilyMode != 'Lucida Grande' && gsomFontFamilyMode != '__userfont__')
gsomFontFamilyMode = 'Arial';
if (gsomFontSizeMode < gsomFontSizeMin) gsomFontSizeMode = gsomFontSizeMin;
else if (gsomFontSizeMode > gsomFontSizeMax) gsomFontSizeMode = gsomFontSizeMax;
//////// FUNCTIONS FOR DYNAMICALLY GENERATING HTML PAGE ELEMENTS ////////
var strNoDesc = '--------';
var gsomFontSizePx = gsomFontSizeMode + 'px';
var gsomFontFamilies;
if (gsomFontFamilyMode == '__userfont__') gsomFontFamilies = "'" + gsomFontFamilyUserFont + "'";
//Special case for Gotham Narrow, which comes from two fonts:
//"Gotham Narrow SSm A", "Gotham Narrow SSm B"
else if (gsomFontFamilyMode == 'Gotham Narrow') gsomFontFamilies = "'Gotham Narrow SSm A','Gotham Narrow SSm B'";
else gsomFontFamilies = "'" + gsomFontFamilyMode + "'";
//Append the fallback fonts if the above fonts aren't supported.
gsomFontFamilies = gsomFontFamilies + ",Arial,Helvetica,sans-serif";
//Each video info object contains different info depending on the source. For example, Youtube and CSN
//contains only one height, but SoundCloud contains two heights, depending on if the user has selected
//the flash or HTML5 player version.
//This function returns an object containing the info needed to fill in the video player list.
//They are: iframeID iframeURL iframeHeight descString descURL
function gsomUtilConvertVideoInfoToIframeInfo(videoInfo)
{
var videoPlayerInfo = new Object();
if (videoInfo.type == 'csn')
{
videoPlayerInfo.iframeID = videoInfo.csn_iframeID;
videoPlayerInfo.iframeURL = videoInfo.csn_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.csn_iframeHeight;
videoPlayerInfo.descString = "CSN: " + videoInfo.csn_descString;
videoPlayerInfo.descURL = videoInfo.csn_descURL;
}
else if (videoInfo.type == 'youtube')
{
videoPlayerInfo.iframeID = videoInfo.youtube_iframeID;
videoPlayerInfo.iframeURL = videoInfo.youtube_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.youtube_iframeHeight;
videoPlayerInfo.descString = "Youtube: " + videoInfo.youtube_descString;
videoPlayerInfo.descURL = videoInfo.youtube_descURL;
}
else if (videoInfo.type == 'mobli')
{
videoPlayerInfo.iframeID = videoInfo.mobli_iframeID;
videoPlayerInfo.iframeURL = videoInfo.mobli_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.mobli_iframeHeight;
videoPlayerInfo.descString = "Mobli: " + videoInfo.mobli_descString;
videoPlayerInfo.descURL = videoInfo.mobli_descURL;
}
else if (videoInfo.type == 'tout')
{
videoPlayerInfo.iframeID = videoInfo.tout_iframeID;
videoPlayerInfo.iframeURL = videoInfo.tout_iframeURL;
videoPlayerInfo.iframeHeight = videoInfo.tout_iframeHeight;
videoPlayerInfo.descString = "Tout: " + videoInfo.tout_descString;
videoPlayerInfo.descURL = videoInfo.tout_descURL;
}
else if (videoInfo.type == 'soundcloud')
{
var iframeURL = gsomSoundCloudMode == 'flash'
? 'https://player.soundcloud.com/player.swf?url=' + videoInfo.soundcloud_baseURL
: 'https://w.soundcloud.com/player/?url=' + videoInfo.soundcloud_baseURL + '&show_artwork=false';
var iframeHeight = gsomSoundCloudMode == 'flash'
? videoInfo.soundcloud_iframeHeight_flash
: videoInfo.soundcloud_iframeHeight_html5;
videoPlayerInfo.iframeID = videoInfo.soundcloud_iframeID;
videoPlayerInfo.iframeURL = iframeURL;
videoPlayerInfo.iframeHeight = iframeHeight;
videoPlayerInfo.descString = "SoundCloud: " + videoInfo.soundcloud_descString;
videoPlayerInfo.descURL = videoInfo.soundcloud_descURL;
}
return videoPlayerInfo;
}
function gsomDocWriteVideoListPlayerMouse(videosArray, iframeID, bPrintInstructions)
{
if (bPrintInstructions)
{
document.write('<p class="gsom">');
document.write('- Click on a video description to play it.<br>');
document.write('</p>');
}
var divID = iframeID + ".div";
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up/left buttons.
document.write( '<button style="width:50%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
document.write( '<button style="width:50%;" onclick="gsomDivScrollLeftRight(\''
+ divID
+ '\', 1)">◀</button>');
}
//Write the video player list.
document.write( '<div id="'
+ divID
+ '" class="" style="overflow:auto; min-height:100px; max-height:200px; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
var iRow = 0;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID != iframeID) continue;
iRow++;
document.write( '<tr class="gsom-zebra-tr" style="cursor:pointer;" ');
document.write('onmouseover="gsomVideoPlayerTrOnMouseOverOut(this, 1)" onmouseout="gsomVideoPlayerTrOnMouseOverOut(this, 0)" ');
document.write( 'onclick="gsomShowVideoAndDesc('
+ '\'' + thisVideo.iframeID + '\','
+ '\'' + thisVideo.iframeURL + '\','
+ '\'' + thisVideo.iframeHeight + '\','
+ '\'' + escape(thisVideo.descString) + '\','
+ '\'' + thisVideo.descURL + '\')">');
document.write('<td class="" style="text-align:left; padding:0px 0px 0px 2px; white-space: nowrap;">' + thisVideo.descString + '</td>');
document.write('</tr>');
}
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down/right buttons.
document.write( '<button style="width:50%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
document.write( '<button style="width:50%;" onclick="gsomDivScrollLeftRight(\''
+ divID
+ '\', 0)">▶</button>');
}
//Write the Off button/video description. The Off button is disabled until the user selects a video.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write('<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button id="' + iframeID + '.offbutton" onclick="gsomShowVideoAndDesc(\'' + iframeID + '\', \'about:blank\', \'0px\', null)" disabled>Off</button></td>');
document.write('<td class="" style="text-align:center; padding:0px 0px 0px 2px;" id="' + iframeID + '.captioncell">' + strNoDesc + '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteVideoListPlayerTouch(videosArray, iframeID, bPrintInstructions)
{
if (bPrintInstructions)
{
document.write('<p class="gsom">');
document.write('- Tap on a video description box to play it.<br>');
document.write('</p>');
}
var divID = iframeID + ".div";
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the video player list as a two column list in a table.
document.write( '<div id="'
+ divID
+ '" class="" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
//iNextColumn is a zero-based number indicating which column the next video will be placed in.
var iNextColumn = 0, iNumColumns = 2;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID != iframeID) continue;
//If iNextColumn is 0, we are about to start a new row.
if (iNextColumn == 0)
document.write('<tr class="" style="height:5em;">');
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;"');
document.write( 'onclick="gsomShowVideoAndDesc('
+ '\'' + thisVideo.iframeID + '\','
+ '\'' + thisVideo.iframeURL + '\','
+ '\'' + thisVideo.iframeHeight + '\','
+ '\'' + escape(thisVideo.descString) + '\','
+ '\'' + thisVideo.descURL + '\')">');
document.write(thisVideo.descString + '</td>');
//Increment to the next column, or drop back to column 0 if we have filled in the number of columns for this row.
iNextColumn = (iNextColumn + 1) % iNumColumns;
//If we have dropped back to column 0, we have completed this row.
if (iNextColumn == 0)
document.write('</tr>');
}
//If we didn't complete a row, and we have no more videos, the closing table row tag would not have been written above.
if (iNextColumn != 0)
document.write('</tr>');
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
//Write the Off button/video description. The Off button is disabled until the user selects a video.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write('<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button id="' + iframeID + '.offbutton" style="width:100%; margin:0px; padding:5px 0px;" onclick="gsomShowVideoAndDesc(\'' + iframeID + '\', \'about:blank\', \'0px\', null)" disabled><br>Off<br><br></button></td>');
document.write('<td class="" style="text-align:center; padding:0px 0px 0px 2px;" id="' + iframeID + '.captioncell">' + strNoDesc + '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteVideoListPlayer(videosArray, iframeID, bPrintInstructions)
{
var bAtLeastOneVideo = false;
for (var i = 0; i < videosArray.length; i++)
{
var thisVideo = gsomUtilConvertVideoInfoToIframeInfo(videosArray[i]);
if (thisVideo.iframeID == iframeID)
{
bAtLeastOneVideo = true;
break;
}
}
if (!bAtLeastOneVideo)
{
document.write('<p class="gsom">');
document.write('- No videos found.<br>');
document.write('</p>');
return;
}
if (gsomInputMode == 'touch') gsomDocWriteVideoListPlayerTouch(videosArray, iframeID, bPrintInstructions);
else gsomDocWriteVideoListPlayerMouse(videosArray, iframeID, bPrintInstructions);
}
function gsomDocWriteSingleVideoPlayer(iframeID, iframeURL, iframeHeight, descString, descURL)
{
var strShow = gsomInputMode == 'touch' ? '<br>Show<br><br>' : 'Show';
//Write the Show/Off button and video description.
document.write('<table class="gsom" style="margin:5px 0px 5px 0px;">');
document.write('<tr class="" style="line-height:1.6em; height:3.2em;">');
document.write( '<td class="" style="text-align:left; width: 50px; padding:0px 0px 0px 2px;"><button style="width:100%; margin:0px; padding:5px 0px;" id="'
+ iframeID + ".button"
+ '" onclick="gsomShowHideSingleVideo(\''
+ iframeID + ".button" + '\', \''
+ iframeID + '\', \''
+ iframeURL + '\', \''
+ iframeHeight + '\')">' + strShow + '</button></td>');
document.write( '<td class="" style="text-align:center; padding:0px 0px 0px 2px;">'
+ '<em><a class="gsom" href="' + descURL + '">' + unescape(descString) + '</a></em>'
+ '</td>');
document.write('</tr>');
document.write('</table>');
//Write the video player iframe.
document.write('<iframe class="" style="width:100%; height:0px; border-style:solid; border-width:0px;" id="' + iframeID + '" src="about:blank" allowfullscreen></iframe>');
}
function gsomDocWriteSingleSoundCloudPlayer(iframeID, baseURL, iframeHeightflash, iframeHeighthtml5, descString, descURL)
{
var soundCloundInfo = new Object();
soundCloundInfo.type = 'soundcloud';
soundCloundInfo.soundcloud_iframeID = iframeID;
soundCloundInfo.soundcloud_baseURL = baseURL;
soundCloundInfo.soundcloud_iframeHeight_flash = iframeHeightflash;
soundCloundInfo.soundcloud_iframeHeight_html5 = iframeHeighthtml5;
soundCloundInfo.soundcloud_descString = descString;
soundCloundInfo.soundcloud_descURL = descURL;
var thisSoundCloud = gsomUtilConvertVideoInfoToIframeInfo(soundCloundInfo);
gsomDocWriteSingleVideoPlayer(thisSoundCloud.iframeID, thisSoundCloud.iframeURL, thisSoundCloud.iframeHeight, escape(thisSoundCloud.descString), thisSoundCloud.descURL);
}
function gsomDocWriteRadioAudioMouse(radioAudioArray)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
for (var i = 0; i < radioAudioArray.length; i++)
{
var thisRadioAudio = radioAudioArray[i];
document.write( thisRadioAudio.length + ': <a class="gsom" href="'
+ thisRadioAudio.URL + '">'
+ thisRadioAudio.descString + '</a><br>');
}
document.write('</p>');
}
function gsomDocWriteRadioAudioTouch(radioAudioArray)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
document.write('</p>');
var divID = "KNBR-957-audio.div"
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the audio list as a two column list in a table.
document.write('<div id="' + divID + '" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
//iNextColumn is a zero-based number indicating which column the next video will be placed in.
var iNextColumn = 0, iNumColumns = 2;
for (var i = 0; i < radioAudioArray.length; i++)
{
var thisRadioAudio = radioAudioArray[i];
//If iNextColumn is 0, we are about to start a new row.
if (iNextColumn == 0)
document.write('<tr class="" style="height:5em;">');
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;">');
//Using 'display:inline-table' causes the anchor tag to fill the table cell, making any
//part of the cell clickable/tappable. But it doesn't center the text vertically.
//Adding a span around the text with 'display:table-cell; vertical-align:middle;' will center
//the text vertically inside the anchor tag.
document.write('<a class="gsom" style="display:inline-table;width:100%; height:100%;" href="' + thisRadioAudio.URL + '">');
document.write('<span style="display:table-cell; vertical-align:middle;">');
document.write(thisRadioAudio.length + ': ' + thisRadioAudio.descString);
document.write('</span></a></td>');
//Increment to the next column, or drop back to column 0 if we have filled in the number of columns for this row.
iNextColumn = (iNextColumn + 1) % iNumColumns;
//If we have dropped back to column 0, we have completed this row.
if (iNextColumn == 0)
document.write('</tr>');
}
//If we didn't complete a row, and we have no more videos, the closing table row tag would not have been written above.
if (iNextColumn != 0)
document.write('</tr>');
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
//Make sure there's at least one line of space after the div and before the next element.
document.write('<br>');
}
function gsomDocWriteRadioAudio(radioAudioArray)
{
if (radioAudioArray.length == 0)
{
document.write('<p class="gsom">');
document.write('- KNBR, 95.7 FM audio.<br>');
document.write('No radio links found.<br>');
document.write('</p>');
return;
}
if (gsomInputMode == 'touch') gsomDocWriteRadioAudioTouch(radioAudioArray);
else gsomDocWriteRadioAudioMouse(radioAudioArray);
}
function gsomDocWriteNBAcomVideosMouse(NBAcomVideosArray, recapURL)
{
document.write('<p class="gsom">');
document.write('- Recap and highlights from <a class="gsom" href="' + recapURL + '">nba.com\'s game page</a>:<br>');
if (NBAcomVideosArray.length == 0)
{
document.write('No links found.<br>');
document.write('</p>');
return;
}
for (var i = 0; i < NBAcomVideosArray.length; i++)
{
var thisNBAcomVideo = NBAcomVideosArray[i];
document.write( '<a class="gsom" href="'
+ thisNBAcomVideo.URL + '">'
+ thisNBAcomVideo.descString + '</a><br>');
}
document.write('</p>');
}
function gsomDocWriteNBAcomVideosTouch(NBAcomVideosArray, recapURL)
{
document.write('<p class="gsom">');
document.write('- Recap and highlights from <a class="gsom" href="' + recapURL + '">nba.com\'s game page</a>:<br>');
if (NBAcomVideosArray.length == 0)
{
document.write('No links found.<br>');
document.write('</p>');
return;
}
document.write('</p>');
var divID = "nbacom-video.div"
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll up button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 1)">▲</button>');
}
//Write the video list as a two column list in a table.
document.write('<div id="' + divID + '" style="overflow:auto; max-height:11em; border-style:solid; border-width:1px;">');
document.write('<table class="gsom" style="margin:0px 0px 0px 0px;">');
for (var i = 0; i < NBAcomVideosArray.length; i+=2)
{
document.write('<tr class="" style="height:5em;">');
for(var j = i; j < i + 2 && j < NBAcomVideosArray.length; j++)
{
var thisNBAcomVideo = NBAcomVideosArray[j];
document.write('<td style="text-align:left; padding:0px 0px 0px 2px; border:1px dotted black;">');
//Using 'display:inline-table' causes the anchor tag to fill the table cell, making any
//part of the cell clickable/tappable. But it doesn't center the text vertically.
//Adding a span around the text with 'display:table-cell; vertical-align:middle;' will center
//the text vertically inside the anchor tag.
document.write('<a class="gsom" style="display:inline-table;width:100%; height:100%;" href="' + thisNBAcomVideo.URL + '">');
document.write('<span style="display:table-cell; vertical-align:middle;">');
document.write(thisNBAcomVideo.descString);
document.write('</span></a></td>');
}
document.write('</tr>');
}
document.write('</table>');
document.write('</div>');
if (gsomUseScrollButtonsMode == 'on')
{
//Add the scroll down button.
document.write( '<button style="width:100%;" onclick="gsomDivScrollUpDown(\''
+ divID
+ '\', 0)">▼</button>');
}
}
function gsomDocWriteNBAcomVideos(NBAcomVideosArray, recapURL)
{
if (gsomInputMode == 'touch') gsomDocWriteNBAcomVideosTouch(NBAcomVideosArray, recapURL);
else gsomDocWriteNBAcomVideosMouse(NBAcomVideosArray, recapURL);
}
//////// EVENT FUNCTIONS ////////
function gsomVideoPlayerTrOnMouseOverOut(trElem, bMouseOver)
{
trElem.style.backgroundColor = bMouseOver ? '#8ce448' : '';
}
function gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight)
{
var iframeElem = document.getElementById(iframeID);
if (iframeElem == null) return;
iframeElem.src = iframeURL;
iframeElem.style.height = iframeHeight;
if (iframeURL != 'about:blank')
{
//After the user clicks on a URL to be shown in this iframe, we want to scroll the iframe into view.
//But we don't want to do any scrolling unless we're sure the iframe is NOT in view.
//First, we need to determine what part of the page is visible to the user. If the page is 9000 pixels tall,
//the user is very likely only seeing a fraction of that, say the 2001th - 3000th pixel rows, thus, a viewing
//height of 1000 pixels. This also means that there are 2000 pixel rows ABOVE the current view and 6000 pixel rows
//BELOW the current view.
//On some browsers, document.documentElement.scrollTop (which is the "html" element's scrollTop)
//tells us how many pixel rows are ABOVE the current view. On other browsers, the document.body.scrollTop
//(which is the "body" element's scrollTop) tells us this.
//We'll need to support both methods.
//In the above example, document.documentElement.scrollTop (or document.body.scrollTop) would be 2000, so
//add 1 to get the 2001th row, currently the first viewable pixel row.
var viewTopPixelRow = (document.documentElement.scrollTop > 0 ?
document.documentElement.scrollTop : document.body.scrollTop)
+ 1;
//In the above example, document.documentElement.clientHeight would be 1000, representing the viewable height.
var viewBottomPixelRow = (document.documentElement.scrollTop > 0 ?
document.documentElement.scrollTop : document.body.scrollTop)
+ document.documentElement.clientHeight;
//Next, we determine the vertical position of the iframe within the page. It seems that we can
//do this by adding all of the offsetTops of the iframe element and its parents.
var iframeTopPos = iframeElem.offsetTop;
var parentElem = iframeElem.offsetParent;
while (parentElem)
{
iframeTopPos += parentElem.offsetTop;
parentElem = parentElem.offsetParent;
}
//The bottom position of the iframe is the top position + its height.
var iframeBottomPos = iframeTopPos + iframeElem.clientHeight;
//Since the clickable list of videos is currently ABOVE the iframe, it is very unlikely that the iframe is somehow
//ABOVE the viewing area. So we only need to check if the iframe is BELOW the viewable area.
if (iframeBottomPos > viewBottomPixelRow)
{
//Add 10 pixels to the scroll, so there's a small amount of "padding" visible below the iframe.
//We don't know which element the browser uses for scrolling the entire page, so we increment both.
var iScrollAmount = iframeBottomPos - viewBottomPixelRow + 10;
document.documentElement.scrollTop += iScrollAmount;
document.body .scrollTop += iScrollAmount;
}
}
}
function gsomShowVideoAndDesc(iframeID, iframeURL, iframeHeight, descString, descURL)
{
gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight);
var videoPlayerOffButton = document.getElementById(iframeID + ".offbutton");
var videoPlayerCaptionCell = document.getElementById(iframeID + ".captioncell");
if (videoPlayerOffButton == null || videoPlayerCaptionCell == null) return;
if (iframeURL == 'about:blank')
{
videoPlayerOffButton.disabled = true;
videoPlayerCaptionCell.innerHTML = strNoDesc;
}
else
{
videoPlayerOffButton.disabled = false;
videoPlayerCaptionCell.innerHTML = '<em><a class="gsom" href="' + descURL + '">' + unescape(descString) + '</a></em>';
}
}
//The iframeURL and iframeHeight are values used when SHOWING the single video.
//If hiding, about:blank and a height of 0 is used.
function gsomShowHideSingleVideo(buttonID, iframeID, iframeURL, iframeHeight)
{
var buttonElem = document.getElementById(buttonID);
if (buttonElem == null) return;
if (buttonElem.innerHTML.indexOf("Off") >= 0)
{
gsomShowURLInIFrame(iframeID, 'about:blank', '0px');
buttonElem.innerHTML = gsomInputMode == 'touch' ? '<br>Show<br><br>' : 'Show';
}
else
{
gsomShowURLInIFrame(iframeID, iframeURL, iframeHeight);
buttonElem.innerHTML = gsomInputMode == 'touch' ? '<br>Off<br><br>' : 'Off';
}
}
//Scroll the given div ID up or down.
//bUp - 1 scrolls up, all other values scroll down
function gsomDivScrollUpDown(divID, bUp)
{
var divElem = document.getElementById(divID);
if (divElem == null) return;
var iScrollAmount = bUp == 1 ? -50 : 50;
//Use timers and small scroll steps to produce a "smooth" scrolling effect instead
//of "jumping" to scroll.
var iScrollNumSteps = 5;
var iScollStepSize = iScrollAmount / iScrollNumSteps;
for (var i = 0; i < iScrollNumSteps; i++)
setTimeout(function() { divElem.scrollTop += iScollStepSize; }, i*40);
}
//Scroll the given div ID left or right.
//bLeft - 1 scrolls left, all other values scroll right
function gsomDivScrollLeftRight(divID, bLeft)
{
var divElem = document.getElementById(divID);
if (divElem == null) return;
var iScrollAmount = bLeft == 1 ? -100 : 100;
//Use timers and small scroll steps to produce a "smooth" scrolling effect instead
//of "jumping" to scroll.
var iScrollNumSteps = 5;
var iScollStepSize = iScrollAmount / iScrollNumSteps;
for (var i = 0; i < iScrollNumSteps; i++)
setTimeout(function() { divElem.scrollLeft += iScollStepSize; }, i*40);
}
function gsomInitSettingsSection()
{
var radioBtnElems = document.getElementsByName('radiobtn_gsomInputMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomInputMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomSoundCloudMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomSoundCloudMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i=0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomUseScrollButtonsMode)
{
thisRadioBtn.checked = true;
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomFontFamilyMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.value == gsomFontFamilyMode)
{
thisRadioBtn.checked = true;
break;
}
}
//Also initialize the user entered font text box.
var textboxElem = document.getElementById('text_gsomFontFamilyUserFont');
if (textboxElem != null)
textboxElem.value = gsomFontFamilyUserFont;
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem != null)
spanFontSizeElem.innerHTML = gsomFontSizeMode;
}
function gsomSaveSettingsSection()
{
var radioBtnElems = document.getElementsByName('radiobtn_gsomInputMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomInputMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomSoundCloudMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomSoundCloudMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomUseScrollButtonsMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomUseScrollButtonsMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomUseScrollButtonsMode", thisRadioBtn.value, 5000);
break;
}
}
radioBtnElems = document.getElementsByName('radiobtn_gsomFontFamilyMode');
for (var i = 0; i < radioBtnElems.length; i++)
{
var thisRadioBtn = radioBtnElems[i];
if (thisRadioBtn.checked)
{
gsomSetCookie("gsomFontFamilyMode", thisRadioBtn.value, 5000);
break;
}
}
//Also save the user entered font.
var textboxElem = document.getElementById('text_gsomFontFamilyUserFont');
if (textboxElem != null)
gsomSetCookie("gsomFontFamilyUserFont", textboxElem.value, 5000);
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem != null)
gsomSetCookie("gsomFontSizeMode", spanFontSizeElem.innerHTML, 5000);
var settingsMsgElem = document.getElementById("gsomSettingsMsgSpan");
if (settingsMsgElem == null) return;
settingsMsgElem.innerHTML = 'Settings saved. Changes will take effect when the page is reloaded.';
}
//increaseBy can be a negative number to decrease the font size setting.
function IncreaseFontSizeSetting(increaseBy)
{
var spanFontSizeElem = document.getElementById('span_gsomFontSizeMode');
if (spanFontSizeElem == null) return;
var newFontSize = parseFloat(spanFontSizeElem.innerHTML, 10) + increaseBy;
if (newFontSize < gsomFontSizeMin) newFontSize = gsomFontSizeMin;
else if (newFontSize > gsomFontSizeMax) newFontSize = gsomFontSizeMax;
var btnDecrease = document.getElementById('btn_gsomFontSizeMode_decrease');
var btnIncrease = document.getElementById('btn_gsomFontSizeMode_increase');
if (btnDecrease == null || btnIncrease == null) return;
btnDecrease.disabled = newFontSize <= gsomFontSizeMin;
btnIncrease.disabled = newFontSize >= gsomFontSizeMax;
spanFontSizeElem.innerHTML = newFontSize;
}
function ShowHideWarriorsQuotes()
{
var quotesLinkElem = document.getElementById("a_showhide_warriorsquotes");
if (quotesLinkElem == null) return;
var bShowQuotes;
if (quotesLinkElem.innerHTML == "Hide Quotes")
{
bShowQuotes = false;
quotesLinkElem.innerHTML = "Show Quotes";
}
else
{
bShowQuotes = true;
quotesLinkElem.innerHTML = "Hide Quotes";
}
var quotesElems = document.getElementsByClassName('gsom_warriorsquotes');
if (quotesElems == null) return;
for (var i = 0; i < quotesElems.length; i++)
{
var thisQuoteElem = quotesElems[i];
thisQuoteElem.style.display = bShowQuotes ? 'inline' : 'none';
}
}
function ShowHideSettings()
{
var settingsDivElem = document.getElementById("settings.div");
var settingsLinkElem = document.getElementById("a_showhide_settings");
if (settingsDivElem == null || settingsLinkElem == null) return;
if (settingsDivElem.style.display == 'none')
{
settingsDivElem.style.display = "inline";
settingsLinkElem.innerHTML = "Hide Settings";
}
else
{
settingsDivElem.style.display = "none";
settingsLinkElem.innerHTML = "Show Settings";
}
}
//////// CSS STYLES ////////
//Some CSS styles depend on the user's settings. So we dynamically write out the CSS styles here.
document.write('<style>');
document.write('tr.gsom-zebra-tr { }');
document.write('tr.gsom-zebra-tr:nth-child(odd) { background-color:#E4E4E4; }');
document.write('tr.gsom-zebra-tr:nth-child(even) { background-color:#F7F7F7; }');
document.write('tr.gsom-whatsnext-tr { }');
document.write('tr.gsom-whatsnext-tr:nth-child(2) { background-color:#8CE448; }');
document.write('a.gsom:visited { color: #A44B87; }');
document.write('a.gsom:visited { color: #A44B87; }');
document.write('hr.gsom { background-color:#000000; height:2px; width:100%; margin:1em 0px 1em 0px; }');
document.write('h5.gsom { font-family:' + gsomFontFamilies + '; color:#000000; }');
document.write('blockquote.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; padding:0px 0px 0px 1em; }');
document.write('p.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; }');
document.write('table.gsom { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; width:100%; table-layout:fixed; }');
document.write('table.gsom_whatsnext { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; color:#000000; width:100%; }');
document.write('div.m-linksets.has-logo h3 { font-size:20px; }');
document.write('div.m-linksets ul { font-size:' + gsomFontSizePx + '; font-family:' + gsomFontFamilies + '; font-weight:bold; }');
if (gsomInputMode == 'touch')
document.write('span.gsom_boxscoregameflow_separator { display:inline-block; width:50px; text-align:center; }');
else
document.write('span.gsom_boxscoregameflow_separator { }');
document.write('</style>');
//////// LINKS DATA ////////
/*
Youtube Example:
"type":"youtube",
"youtube_iframeID":"",
"youtube_iframeURL":"",
"youtube_iframeHeight":"xxxpx",
"youtube_descString":"",
"youtube_descURL":"",
CSN Example:
"type":"csn",
"csn_iframeID":"",
"csn_iframeURL":"",
"csn_iframeHeight":"xxxpx",
"csn_descString":"",
"csn_descURL":"",
SoundCloud Example:
"type":"soundcloud",
"soundcloud_iframeID":"",
"soundcloud_baseURL":"",
"soundcloud_iframeHeight_flash":"xxxpx",
"soundcloud_iframeHeight_html5":"xxxpx",
"soundcloud_descString":"",
"soundcloud_descURL":"",
Mobli Example:
"type":"mobli",
"mobli_iframeID":"",
"mobli_iframeURL":"",
"mobli_iframeHeight":"xxxpx",
"mobli_descString":"",
"mobli_descURL":"",
Tout Example:
"type":"tout",
"tout_iframeID":"",
"tout_iframeURL":"",
"tout_iframeHeight":"xxxpx",
"tout_descString":"",
"tout_descURL":"",
*/
var gsomVideosArray =
[
];
var gsomSoundCloudArray =
[
];
/* Example:
{
"length":"x:xx min",
"URL":"",
"descString":"",
},
*/
var gsomRadioAudioArray =
[
];
/* Example:
{
"URL":"",
"descString":"",
},
*/
var gsomNBAcomVideosArray =
[
];
</script>
https://www.goldenstateofmind.com/2015/5/25/8658139/post-game-mope-no-sweep-but-at-least-currys-okIQofaWarrior2015-05-25T19:52:51-07:002015-05-25T19:52:51-07:00Injury update: Steph Curry comes back into the game<h3 class="link-title"><a rel="nofollow" href="https://twitter.com/Rusty_SFChron/status/603029474838380544">Injury update: Steph Curry comes back into the&nbsp;game</a></h3>
<div class="description"><p><p>After suffering a nasty fall, Curry passed the necessary protocols to return to the game.</p></p></div>
https://www.goldenstateofmind.com/2015/5/25/8658319/injury-update-steph-curry-comes-back-into-the-gamechowster242015-05-25T19:45:39-07:002015-05-25T19:45:39-07:00Video: Should Howard have been ejected for foul on Bogut?<h3 class="link-title"><a rel="nofollow" href="https://twitter.com/bballbreakdown/status/603027795413999616">Video: Dwight Howard's controversial flagrant-1 foul on Andrew&nbsp;Bogut</a></h3>
<div class="description"><p><p>I have no idea how that was not an ejection based on the way NBA officials typically call shots to the head.</p></p></div>
https://www.goldenstateofmind.com/2015/5/25/8658251/video-dwight-howards-controversial-flagrant-1-foul-on-andrew-bogutNate P.2015-05-25T19:27:20-07:002015-05-25T19:27:20-07:00Second half thread: GSW down 10 after Curry injury
<figure>
<img alt="" src="https://cdn.vox-cdn.com/thumbor/jXhe5lySlx7ZrQ6Q1o3lJgKHvko=/0x99:1806x1303/1310x873/cdn.vox-cdn.com/uploads/chorus_image/image/46394644/usa-today-8581091.0.jpg" />
<figcaption>Thomas B. Shea-USA TODAY Sports</figcaption>
</figure>
<p>Stephen Curry is questionable to return in the second half after suffering a head contusion in the second quarter of Game 4 in Houston. Nevertheless, the Warriors are down just 69-59.</p> <p>After <a target="_blank" href="https://twitter.com/gswstats/status/603012439479685121">a disastrous first quarter</a>, a 10-point deficit seemed to be 10 zillion light years away.</p>
<p>The fact that the Golden State Warriors are even within striking distance of the Houston Rockets at halftime is remarkable and a lot of that is due to the second quarter performance of Klay Thompson, who had all of his game-high 16 points in the second quarter to help his team head into halftime down just 69-59.</p>
<p style="text-align: center;"> <figure class="e-image">
<img alt="Klay SC 2nd qtr game 4" data-mask-text="false" src="https://cdn.vox-cdn.com/thumbor/C1jUZIaVEF2tWeqS4lpLGRqrnbU=/400x0/filters:no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/3726518/nba_thompson_2ndqtr_gm4.0.jpeg">
</figure>
<br><i>Klay Thompson's second quarter shot chart. </i></p>
<p>But of far greater concern than what's on the scoreboard — or even a single win in a seven-game series in which the Warriors have a 3-0 lead — is the health of 2015 NBA MVP Stephen Curry, who <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658061/update-curry-has-head-contusion-questionable-to-return">suffered a head contusion</a> after <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658035/video-curry-suffers-nasty-fall-leaves-game">a hard fall </a>trying to defend a Trevor Ariza layup in transition. <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8658061/update-curry-has-head-contusion-questionable-to-return">Curry is questionable to return</a> tonight, but at this point — especially in a time when there has been more attention than ever given to head injuries — we have to be most concerned about his health beyond tonight's game.</p>
<p><i>For more on the game, check out <a target="_blank" href="http://www.goldenstateofmind.com/2015/5/25/8657309/warriors-at-rockets-game-4-preview-tv-schedule-results-nba-playoffs-2015">our Game 4 storystream</a>.</i></p>
https://www.goldenstateofmind.com/2015/5/25/8657749/warriors-at-rockets-game-4-stephen-curry-injury-nba-playoffs-2015Nate P.