<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.hrwiki.org/w/skins/common/feed.css?207"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.hrwiki.org/w/index.php?feed=atom&amp;target=Phlip&amp;title=Special%3AContributions</id>
		<title>Homestar Runner Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.hrwiki.org/w/index.php?feed=atom&amp;target=Phlip&amp;title=Special%3AContributions"/>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Special:Contributions/Phlip"/>
		<updated>2026-05-26T03:15:29Z</updated>
		<subtitle>From Homestar Runner Wiki</subtitle>
		<generator>MediaWiki 1.15.4</generator>

	<entry>
		<id>http://www.hrwiki.org/wiki/disconnected</id>
		<title>disconnected</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/disconnected"/>
				<updated>2025-01-06T05:55:19Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 64.113.1.49 (Talk) to last revision by 50.124.224.166&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{sbenav}}&lt;br /&gt;
[[Image:Sbemail148.PNG|thumb|Twice the ruckus-raising productivity]]&lt;br /&gt;
&lt;br /&gt;
Strong Bad imagines his head disconnecting from his body.&lt;br /&gt;
&lt;br /&gt;
'''Cast (in order of appearance):''' {{Film|Strong Bad}}, [[Head Bad and Strong Body]], {{Film|Homestar Runner}}, {{Film|The King of Town}}, {{Film|The Poopsmith}}, {{Film|Bubs}}, {{Film|Coach Z}}, {{Film|The Cheat}}&lt;br /&gt;
&lt;br /&gt;
'''Places:''' [[Computer Room]], [[The Field]], [[The King of Town's Castle]], [[The Island]], [[Club Technochocolate]], [[Race Track]]&lt;br /&gt;
&lt;br /&gt;
{{Comp|Lappy 486}}&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Monday, March 13, 2006&lt;br /&gt;
&lt;br /&gt;
'''Running time:''' 3:11&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' Lappy 486&lt;br /&gt;
&lt;br /&gt;
{{dvd|strongbad_email.exe Disc Five}}&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{singing}'' This week, I'm feeling my style! I've got confidence in my email!&lt;br /&gt;
&lt;br /&gt;
''{reading}''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;lappy email&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;subject: sb!!!!&amp;lt;/div&amp;gt;&lt;br /&gt;
Dear Strong Bad,&amp;lt;br /&amp;gt;&lt;br /&gt;
If your head got disconnected and your head was rolling&amp;lt;br /&amp;gt;&lt;br /&gt;
all over the place and you didn't even know were your&amp;lt;br /&amp;gt;&lt;br /&gt;
body is or your head, what would you do?&amp;lt;br /&amp;gt;&lt;br /&gt;
Jenny&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''{Strong Bad struggles to read everything between &amp;quot;were&amp;quot; and the final &amp;quot;head&amp;quot;. He also sings Jenny's name, as follows:}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{singing}'' Jennyyy... ''{high-pitched}'' Jenny! ''{speaking normally, typing}'' Um, was ''your'' head connected to ''your'' body when you wrote this email? I think I get the gist of it. ''{clears the screen}'' While my head and body are normally the bosomest ''{pronounced boosomest}'' of buddies, I suppose I could double my productivity if they were separated. Like, I could raise that ruckus I've been planning in two days instead of four! The plausibilities are endless!&lt;br /&gt;
&lt;br /&gt;
''{Cut to The Field, where Strong Bad's disembodied head is speaking to Homestar Runner. A sign reads &amp;quot;THE CAREER ADVISOR IS REAL IN&amp;quot; with &amp;quot;REAL&amp;quot; being a separate removable word.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{voiceover}'' My head could be off giving folks career advice...&lt;br /&gt;
&lt;br /&gt;
''{The scene pans over and darkens, while a second scene appears on the left with a split down the middle of the screen.  The scene on the left shows Strong Bad's headless body next to a box of &amp;quot;riot rocks&amp;quot;, near the King of Town's castle.  He is throwing the rocks at the King of Town and The Poopsmith, who is wearing [[whatsit]]-covered armor and blocking the rocks with a shield that has the King's face on it.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{voiceover}'' ...whilst my body is rioting against the municipality!&lt;br /&gt;
&lt;br /&gt;
''{The body's scene darkens while the head's scene brightens.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' Maybe this running business just isn't for you. Have you ever considered the making and selling of tiny breads?&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Homestar Bunmaker, eh? Me likey, me likey! Thanks, Eggman! ''{turns away, but then turns back}'' Oh, and... ''{throws coins}'' why don't you get yourself something to eat? Put some meat on them bones, girl!&lt;br /&gt;
&lt;br /&gt;
''{Homestar walks off.  The bar dividing the two scenes slides off to the left, resulting in a single scene.  The camera pans right to reveal the same rock-throwing scene just to the right of Strong Bad's head.  His head turns toward his body.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' That's some nice revolutin', there, body, but, uh, maybe we should spread out. Like, more.&lt;br /&gt;
&lt;br /&gt;
''{The body gives the head a thumbs-up. Cut to a closeup of Strong Bad's head on a beach.  His head is sitting on a picnic blanket, resting against a palm tree, wearing a pair of sunglasses.  There is a drink with three umbrellas in front of him. A seagull can be heard in the background. The camera zooms out slowly.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' Ah, livin' the sleazy life.&lt;br /&gt;
&lt;br /&gt;
''{The camera cuts back to show that Strong Bad's head is actually alone on a small island.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' ''{turning back}'' Hey, cabana boy! My drink needs more umbrellas! What kind of deserted island is this, anyway?&lt;br /&gt;
&lt;br /&gt;
''{Cut to Club Technochocolate, where Strong Bad's body is dancing with Bubs.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{voiceover}'' Meanwhile, my body could be off putting its considerably reduced weight on it down at the cloughb!&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' Dang, Strong Body! Without all that extra head ballast, your moves are twicely fresh! Twicely fresh!&lt;br /&gt;
&lt;br /&gt;
''{Cut to an image of Strong Bad's head rolling across The Field.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{voiceover}'' My head would probably get pretty dizzy just rollin' around all the time. I might have to rig up some kind of repulsor lifts!&lt;br /&gt;
&lt;br /&gt;
''{The camera cuts back, and the head begins to hover through a disc on the bottom.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Naw, scratch that. I'm gonna need something with a little more... muscle.&lt;br /&gt;
&lt;br /&gt;
''{The disc disappears and is replaced by flaming exhaust pipes on the top of its head. Motorcycle sounds are heard.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' Oh, yeah! That's what I'm talkin' about! ''{leans back, as though revving up}'' Reer! Reeeeer! ''{starts zipping back and forth across the scene quickly}'' Rooow! Rooow! Rooo! Reer! ''{imitating brakes as it stops}'' Reeeeee! Whoa! This mess rules! I can finally win the million-yard dash! ''{zips forward again}'' Roooo...&lt;br /&gt;
&lt;br /&gt;
''{Cut to a finish line, which the head zips through quickly. Then cut to the other side, where Coach Z is holding a stopwatch.}''&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' ''{imitating brakes}'' Reeeee! Oh, yes! I beat Homestar!&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' Sorry, Head Bad, but you was the only one competin' this year! Old 'Strammy's gone and quit the runnin' business!&lt;br /&gt;
&lt;br /&gt;
''{Homestar jumps up behind Strong Bad's head, wearing a new hat that reads &amp;quot;BUNMAKER&amp;quot; and holding a box of &amp;quot;TINY BREADS&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Cooornbreeeeead! I got cornbread here! Dinner rolls! Cornbread! Everybody wants a bun! Lemme hear that dinner roll!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a blank white screen. Strong Bad's body walks on from stage right, while the unaltered head rolls on from stage left.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{voiceover}'' Maybe one day, we'd both learn to regenerate...&lt;br /&gt;
&lt;br /&gt;
''{The head gains an arm, a green leg, a spirally arm, and an extremely thin robotic-looking leg. The body gains an odd growth colored to look like Strong Bad's head in its chest.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ...creating two perfectly-formed Strong Bad specimens!&lt;br /&gt;
&lt;br /&gt;
'''STRONG BODY:''' ''{in a somewhat whiny voice that sounds nothing like Strong Bad}'' I would like to go to the store.&lt;br /&gt;
&lt;br /&gt;
'''HEAD BAD:''' ''{in a scratchy voice followed by laughing that also sounds nothing like Strong Bad}'' ''{unintelligible}''&amp;lt;!-- DON'T CHANGE THIS! --&amp;gt; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;&amp;lt;span id=&amp;quot;footnoteref&amp;quot;&amp;gt;[[#Footnote|[1]]]&amp;lt;/span&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; &amp;lt;!-- DON'T CHANGE THIS! --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the Lappy.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{typing}'' Eeeugh! Go away, head-nub and nub-head. Those things look straight out of the creature shop from some low-to-no budget horror film. Maybe chopping my head off isn't such a good idea.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to show The Cheat standing next to a guillotine near the computer.}''&lt;br /&gt;
&lt;br /&gt;
'''THE CHEAT:''' ''{makes dejected The Cheat noises, walks off}''&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the Lappy's screen.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{typing}'' Well, time to go satisfy my sudden craving for tiny breads. ''{gets up}'' Hope I can find my local bunman...&lt;br /&gt;
&lt;br /&gt;
''{[[The Paper]] comes down.}''&lt;br /&gt;
&lt;br /&gt;
===Footnote===&lt;br /&gt;
&lt;br /&gt;
#[[#footnoteref|This line]] could be &amp;quot;I like your shoes&amp;quot;, &amp;quot;I hate your shoes&amp;quot;, &amp;quot;I think you're shoes&amp;quot;, &amp;quot;I think you're cute&amp;quot;, or &amp;quot;I ate your shoes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Easter Eggs==&lt;br /&gt;
[[Image:sbemail Deodorant.png|thumb|Soccer scent.]]&lt;br /&gt;
[[Image:Disconnected Easter egg.PNG|thumb|We're onto you.]]&lt;br /&gt;
*At the very beginning, click &amp;quot;strongbad_email.exe&amp;quot; to see sbemail Deodorant. Pictures show:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
sbemail&amp;lt;br /&amp;gt;&lt;br /&gt;
Deodorant&amp;lt;br /&amp;gt;&lt;br /&gt;
Soccer Scent&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;I'm feeling my style...&amp;lt;br /&amp;gt;&lt;br /&gt;
I've got confidence in my email!&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*At the end, click on &amp;quot;horror film&amp;quot; to see a movie poster for &amp;quot;Regenerator 4&amp;quot;.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
A Low-To-No Budget Horror Film&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
REGENERATOR 4&amp;lt;br /&amp;gt;&lt;br /&gt;
OR: FOUR MORE REGENERATORS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
With Special Make-up Effects by&amp;lt;br /&amp;gt;&lt;br /&gt;
TOLD SALLIAVER[[Lowercase i's|i]]&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Click on &amp;quot;good idea&amp;quot; to see a propaganda poster of The Poopsmith riot squad.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
SUPPORT THE MUNICIPALITY!&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
WE'RE ONTO YOU.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fun Facts==&lt;br /&gt;
&lt;br /&gt;
===Explanations===&lt;br /&gt;
&lt;br /&gt;
*[[Wikipedia:Ballast tanks|Ballast]] is a material (such as water) used in a ballast tank to add mass to an object, usually to improve stability.&lt;br /&gt;
&lt;br /&gt;
===Trivia===&lt;br /&gt;
&lt;br /&gt;
*The label on the disk in the floppy disk container reads &amp;quot;[[Floppy Disk Container#below the root|below the root]]&amp;quot;.&lt;br /&gt;
*One million yards is approximately 568 miles.&lt;br /&gt;
*This is the first email in which an Easter egg is found before the actual email is shown.&lt;br /&gt;
*When Head Bad is on the deserted island, he is wearing his [[Dangeresque (character)|Dangeresque]] sunglasses.&lt;br /&gt;
&lt;br /&gt;
===Remarks===&lt;br /&gt;
&lt;br /&gt;
*Viewing the Flash file of this email reveals a large black block covering the area that is normally outside the frame. &lt;br /&gt;
*[[Wiktionary:plausible|Plausible]] means &amp;quot;seemingly believable&amp;quot;, and a [[Wiktionary:plausibility|plausibility]] is anything that is plausible. Strong Bad's use of the word &amp;quot;plausibility&amp;quot; is [[Malapropisms|incorrect]]; a more appropriate word would be &amp;quot;possibility&amp;quot;.&lt;br /&gt;
*The Regenerator 4 Easter egg has an unexpected [[Lowercase i's|lowercase i]] in the same word as a capital I.&lt;br /&gt;
*In the DVD commentary for [[island]], [[Matt Chapman]] said that he and [[Mike Chapman|Mike]] planned to reuse the island in a later toon.&lt;br /&gt;
*When Head Bad finishes the 1 million yard dash, the running lanes are labeled 5, 6, 7.  Lanes 1 through 4 are missing.&lt;br /&gt;
*&amp;quot;The Municipality&amp;quot; is a synonym of &amp;quot;town&amp;quot;, as in the one over which the King rules.&lt;br /&gt;
*This is the first time the King of Town has shown any authority in Free Country USA.&lt;br /&gt;
&lt;br /&gt;
===Goofs===&lt;br /&gt;
&lt;br /&gt;
*When Head Bad gets the 'muscle' engine growing out of his head, his shadow on the ground never changes to match the engine.&lt;br /&gt;
*When Head Bad finishes the 1 million yard dash, the finish line tape is connected to a pole. In another shot there, the pole is gone, and the tape just sits on the ground.&lt;br /&gt;
*When Strong Body is &amp;quot;rioting against the municipality&amp;quot; a rock appears in his glove after each throw without him reaching into the box. Also, the rocks in the box don't seem to be disappearing.&lt;br /&gt;
*The Poopsmith's bat and Head Bad's sign should have been seen in the opposite scenes before the screen pans, seeing as both objects crossed the division between the screens.&lt;br /&gt;
*When Strong Bad is on the island, the lemon on the drinking glass appears to be directly connected to the glass, instead of being wedged into the edge.&lt;br /&gt;
*Bubs' mouth does not move the second time he says &amp;quot;twicely fresh&amp;quot;.&lt;br /&gt;
*Strong Body's neck still has the shadow usually cast by Strong Bad's head, even when it's not there.&lt;br /&gt;
&lt;br /&gt;
===Inside References===&lt;br /&gt;
*[[Head Bad and Strong Body]] were first used on [[Main Page 7]].&lt;br /&gt;
*Coach Z calling Homestar &amp;quot;'Strammy&amp;quot; mirrors his mispronunciation &amp;quot;Stramstar&amp;quot; in [[A Jorb Well Done]].&lt;br /&gt;
*Strong Bad's pronunciation of &amp;quot;club&amp;quot; also occurred in [[extra plug]].&lt;br /&gt;
*The exhaust pipes on Strong Bad's head are reminiscent of the ones used on Bubs's pumpkin in [[Pumpkin Carve-nival]].&lt;br /&gt;
*Homestar becoming a bunmaker could be related to his obsession with [[bread]] in [[origins]].&lt;br /&gt;
*The phrase &amp;quot;put your weight on it&amp;quot; was previously used in [[flashback]].&lt;br /&gt;
*Bubs describes Strong Body's dancing as &amp;quot;[[twice]]ly fresh&amp;quot;.&lt;br /&gt;
*Bubs's dance in [[Club Technochocolate]] is the same one he did in [[geddup noise]].&lt;br /&gt;
*While Strong Body is dancing in Club Technochocolate, he slides on the ground while kneeling, a move that was also performed by Strong Bad at the end of his [[rock opera]].&lt;br /&gt;
*Strong Bad's head was first called an [[egg]] in [[Strong Bad is in Jail Cartoon]].&lt;br /&gt;
*A &amp;quot;cabana boy&amp;quot; was mentioned earlier in the [[Puppet Jam: Tropical Lazor Beams#DVD Transcript|DVD version of Tropical Lazor Beams]].&lt;br /&gt;
*This is another appearance of [[loose coins]].&lt;br /&gt;
*Strong Bad mentions seeing his local &amp;quot;bunm'n&amp;quot;, which is an example of [[&amp;quot;man&amp;quot; pronounced as &amp;quot;m'n&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
===Real-World References===&lt;br /&gt;
&lt;br /&gt;
*Strong Bad's &amp;quot;career advisor&amp;quot; sign is similar to the &amp;quot;Psychiatric help&amp;quot; sign used by [[Wikipedia:Lucy van Pelt|Lucy van Pelt]] from the [[Peanuts]] comics. More specifically, it reads &amp;quot;The doctor is real in&amp;quot;, with &amp;quot;real in&amp;quot; being the movable part of the sign in ''[[Wikipedia:A Charlie Brown Christmas|A Charlie Brown Christmas]]''. &lt;br /&gt;
**The sign also is written in the &amp;quot;Peanuts&amp;quot; [[Fonts#P|font]].&lt;br /&gt;
*The Repulsorlift is the technology used in the ''[[Wikipedia:Star Wars|Star Wars]]'' universe to create lift for vehicles.  It is most notably used on the various speeders, but it also works for spacecraft, such as the [[Wikipedia:X-wing|X-wing]].  It is supposedly based on the creation of artificial gravity &amp;quot;pockets&amp;quot; that act against the natural gravity of other objects.&lt;br /&gt;
*The phrase &amp;quot;put your weight on it&amp;quot; (in reference to dancing) comes from the Rudy Ray Moore movie ''[[Wikipedia:Disco Godfather|Disco Godfather]]''. &lt;br /&gt;
*&amp;quot;Lemme hear that dinner roll&amp;quot; is a reference to the lyrics of the 1994 song [[Wikipedia:Tootsie Roll (song)|&amp;quot;Tootsie Roll&amp;quot;]] by the band 69 Boyz.&lt;br /&gt;
*The exhaust pipes coming out of Head Bad could be referred to as a &amp;quot;[[Wikipedia:Manifold (automotive engineering)|header]]&amp;quot; in automotive engineering parlance.&lt;br /&gt;
*The &amp;quot;We're Onto You&amp;quot; poster could be a reference to the similar propaganda &amp;quot;Big Brother Is Watching You&amp;quot; from the book ''[[Wikipedia:Nineteen Eighty-Four|Nineteen Eighty-Four]]''.&lt;br /&gt;
**The &amp;quot;We're Onto You&amp;quot; poster may also be a reference to the video game [[Wikipedia:Beyond Good &amp;amp; Evil (video game)|Beyond Good &amp;amp; Evil]], because one of the common sights in said game is a poster that says &amp;quot;Support the Government.  We're here to protect you.&amp;quot;&lt;br /&gt;
*Bubs's repetition of the phrase &amp;quot;twicely fresh&amp;quot; is reminiscent of the Sesame Street character and host of Mysterious Theater Vincent Twice's repetition of his own name. &lt;br /&gt;
*&amp;quot;Regenerator 4&amp;quot; is possibly a reference to the [[Wikipedia:Re-Animator|Re-Animator]] series of horror films.&lt;br /&gt;
*&amp;quot;With Special Make-up Effects by TOLD SALLIAVERi&amp;quot; could be a reference to [[Wikipedia:Tom Savini|Tom Savini]], well-known special effects make-up man in many low-budget (as well as hit) movies, such as [[Wikipedia:Day of the Dead|Day of the Dead]] and the [[Wikipedia:Friday the 13th (series)|Friday the 13th]] series.&lt;br /&gt;
*Strong Bad's deserted island drink could be a [[Wikipedia:Tequila Sunrise (cocktail)|Tequila Sunrise]], judging by the scene's tropical theme and the drink's gradual color blend from yellow to dark orange.&lt;br /&gt;
&amp;lt;!-- Please do not add references to V is for Vendetta; this reference was declined. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The &amp;quot;Regenerator 4&amp;quot; poster is too generic to refer to any one specific low-budget movie. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Please note, &amp;quot;bosom buddies&amp;quot; is a common phrase. It is unlikely to be a reference to the Hanks/Scolari TV show, the song from the show Mame, or anything. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The Eggman reference was declined. Do not add it. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- The &amp;quot;Jim Henson's Creature Shop&amp;quot; reference was declined.  Do not add it. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fast Forward===&lt;br /&gt;
*The floppy disk reading &amp;quot;below the root&amp;quot; also appears in [[keep cool]].&lt;br /&gt;
*The Municipality is later referenced in [[more armies]].&lt;br /&gt;
*Strong Bad does the same dance moves at Club Technochocolate in [[nightlife]].&lt;br /&gt;
**The extended version of the music heard at Club Technochocolate would be heard in the aforementioned email.&lt;br /&gt;
&lt;br /&gt;
== DVD Version ==&lt;br /&gt;
{{commentary|email=true}}&lt;br /&gt;
&lt;br /&gt;
===Commentary Transcript===&lt;br /&gt;
('''Commentary by:''' [[Mike Chapman]], [[Matt Chapman]])&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{laughs}'' I feel like that's a, uh, jingle for soap or{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Deodorant.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' {{--}}deodorant, yeah.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Definitely.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Just this week... ''{laughter}''&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' It's the deodorant that lasts all week{{--}} I need the deodorant, and the soap that lasts all week long, Mike. Between showers.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Unfortunately, you're right. You do need that.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Yeah.&lt;br /&gt;
&lt;br /&gt;
''{long pause}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Well... I'm gonna go ahead say something here.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' All right. ''{starts to say something else, but is cut off by Mike}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' I'm gonna jump right in. I don't mean to cut you off or anything.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' No. Hop on in.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' But I'm just gonna, uh, keep talking here. Yeah.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Wait, you don't ''really'' have anything to say.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{overlapping}'' No, I was just trying to break the silence.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{overlapping}'' Look, come on, we're going now.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Okay, he's &amp;quot;Real In&amp;quot;. ''{referring to Strong Bad's sign}'' That's good.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Look, there's the Pooper Trooper.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Is that his name?&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' I don't know, that's what I call him sometimes.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' I never heard that before. You should... you should ''tell'' me these things.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' There's the logo for the Municipality. The oppressive King of Tow{{--}} ''{Mike laughs}'' The King of Town's oppressive other, uh... other ego, as I{{--}} as I call him.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{laughing}'' Other ego.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Uh, I want a box of riot{{--}} Ach! Whoa! ''{split screen pans to reveal Strong Bad's parts are side by side}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' That's{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' They were all the time just vlipped on vlop.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Ooh, I get it.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' A, uh... Is that a prat fall? Is that what they call a prat fall?&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{laughs}'' No.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Is that physical humor?&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' No.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' A spit take! That's a spit take!&lt;br /&gt;
&lt;br /&gt;
''{short pause, Strong Bad's head is lounging on an island}'' &lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' That's a nice scene right there.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Yeah, I want that cocktail.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' I want that sunbeam on my face. ''{cut to Strong Bad's body dancing in Club Technochocolate}'' Oh, look at that.&lt;br /&gt;
&lt;br /&gt;
''{laughter}''&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Ooo.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' This is a nice club... club technochocolate song.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' I like how{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' We should use this more often.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' {{--}}Strong Bad always, uh, pronounces club &amp;quot;cloughb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Uh-huh.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{Strong Bad's head is rolling in the field, Matt makes a sound effect noise}'' This reminds me of that Easter eggs thing that I made a long time ago for Easter.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' I remember.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Where all the characters were eggs, rolling around.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' I remember that.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{Strong Bad's head begins hovering}'' Listen to that noise. ''{pause, then makes noise}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Did you make that with your mouth? Is that{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' It was probably you.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Yeah.&lt;br /&gt;
&lt;br /&gt;
''{pause}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' What do you think that is?&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{overlapping}'' So he's got real engines in his head{{--}} Yeah, he ''has'' to make the noises with his mouth. &lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{laughs}''&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' He can talk and still go ''bub-bub-bub-bub-bub-bub-bub-bub''.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' And there was some smoke coming up from, like skidding, but he was floating in air. &lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{laughs}'' Yeah.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' There's no friction.  ''{pause}'' Head Bad and Strong Body.&lt;br /&gt;
&lt;br /&gt;
''{pause}''&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' What is this{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{overlapping}'' He took his advice!&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Oh, Bunmaker.&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' He's Homestar Bunmaker.&lt;br /&gt;
&lt;br /&gt;
''{pause}''&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{rhythmically}'' Let me hear that dinner roll!&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Homestar's got a thing with bread, right?&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Yeah, totally.  ''{pause until both parts have regenerated}'' Ugh. &lt;br /&gt;
&lt;br /&gt;
''{pause until Head Bad laughs slightly while talking to Strong Body; Mike laughs during this pause}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' That was ''you'' laughing there, Matt.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' No!&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' That wasn't Strong Bad laughing.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' I kinda laughed...! Uh, I think I'm pretty funny, Mike. ''{laughing}''&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' ''{laughing}'' Yeah? ''{plainly}'' Yeah. ''{pause}'' Um, so what's the Tom Saliaveri, I think is the name? That we{{--}}&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' Oh, the, uh, director of the horror films?&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' Yeah, the special effects artist or something.&lt;br /&gt;
&lt;br /&gt;
'''MATT:''' ''{overlapping}'' Oh, that's, yeah...&lt;br /&gt;
&lt;br /&gt;
'''MIKE:''' And it's like, ve{{--}} I just{{--}} ''{The Paper comes down}'' ''{softly}'' Oh, is that the end?&lt;br /&gt;
&lt;br /&gt;
===Fun Facts===&lt;br /&gt;
*Matt's mention of the &amp;quot;Easter eggs thing that [he] made a long time ago for Easter&amp;quot; refers to the unfinished toon, [[Eggs (toon)|Eggs]], which was going to be made for Easter in 2001, but was never completed. It was finally released unfinished in 2007.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
{{sbemailextlinks|148|7364}}&lt;br /&gt;
{{Strong Bad Email}}&lt;br /&gt;
[[Category: Emails With DVD Commentary]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/The_Show:_Ween_Edition</id>
		<title>The Show: Ween Edition</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/The_Show:_Ween_Edition"/>
				<updated>2023-10-30T13:42:52Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Transcript */ I promise I remember how this stuff works&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{aholidaynav}}&lt;br /&gt;
&lt;br /&gt;
[[Image:The Show Ween Edition.png|thumb|&amp;quot;Let's get you locked in the isolation booth, dum-dum.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
This year, Homestar implements his [[What are you supposed to be?|attempts to guess the cast's costumes]] into a fun little game on [[The Show]].&lt;br /&gt;
&lt;br /&gt;
'''Cast (in order of appearance):''' {{film|Homestar Runner}}, {{film|Coach Z}}, {{film|The King of Town}}, {{film|Bubs}}, {{film|Marzipan}}, {{film|Pom Pom}}, {{film|The Cheat}}, {{film|The Poopsmith}}, {{film|Homsar}}, {{film|Strong Bad}}, {{film|Strong Bad}}, {{film|Strong Mad}}, {{film|Strong Sad}}, [[Rafferty]], [[Champeen]], [[Preshy]]&lt;br /&gt;
&lt;br /&gt;
See '''[[The Show: Ween Edition Costumes]]''' for more information on what everyone was wearing.&lt;br /&gt;
&lt;br /&gt;
'''Places:''' [[The Show]]&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Monday, October 30, 2023&lt;br /&gt;
&lt;br /&gt;
'''Running Time:''' 6:37&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' Sponsored by That Bottle of Water That's Over There - Toons The Show: Ween Edition - Homestar Runner&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
''{We open on Homestar against the night sky, stars and the moon visible in the background. Ominous music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Each Halloween, severals of people become mildly annoyed, when Homestar Runner misinterprets their costume.&lt;br /&gt;
&lt;br /&gt;
''{Record scratch, ominous music stops.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' So I made a game show out of it!&lt;br /&gt;
&lt;br /&gt;
''{Zoom out to see Homestar standing on an orange floor, the night sky lifts up to reveal The Show background. The Show's theme music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' ''{to the tune of the The Show theme}'' Boo doo-doo! Boo-doo doo!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' That's right, paunchy America! It's time to play...&lt;br /&gt;
&lt;br /&gt;
''{The show's title appears on screen in time with the crowd.}''&lt;br /&gt;
&lt;br /&gt;
'''CROWD:''' ''{voice-over}'' Name! Slash! Guess! That! Homestar! Runner! Hallo! Ween! Costume! Misin! Terpre! Tation!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' And here's the star of Name/Guess That ''{mumbles}'' thing and the stuff: Homestar Runner!&lt;br /&gt;
&lt;br /&gt;
''{The show's title falls off-screen, and Homestar walks onstage in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Thanks so much, Ron Johnny! It's a pleasure and enjoy-joy to be doing this again for the first year in a row.&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's get you locked in the isolation booth, dum-dum.&lt;br /&gt;
&lt;br /&gt;
''{Homestar enters a small cylindrical chamber and shuts the door.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' and bring our our first contestant: Coach Z!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a window panel, which opens to reveal Coach Z dancing on a pedestal in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' OK now, Coach Z, the rules are simple. Just tell us what you think Homestar Runner's misinterpretation of your costume will be.&lt;br /&gt;
&lt;br /&gt;
''{Coach Z nods, and a lower third pops up reading &amp;quot;Coach Z as a Beastie Boy from the Intergalactic video&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' Well, I think there's a lot of good options, but I gotta go with, &amp;quot;Hey, Coach Z, I really like your Devo crossing guard costume!&amp;quot; He was always telling me to go froward, move ahead!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' A solid guess!&lt;br /&gt;
&lt;br /&gt;
''{A pop-up appears of a cinderblock, with a wig and googly eyes, and the text &amp;quot;Solid Guess!&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's go to the iso booth and see what Homestar chose.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the isolation booth. Homestar turns around to look at Coach Z. Drumroll.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hey, Coach Z, I really like your Devo construction worker costume!&lt;br /&gt;
&lt;br /&gt;
''{Homestar holds up a card reading &amp;quot;Devo construction worker&amp;quot;. Sad gameshow music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Oooh, so close, Coach Z, but I'm afraid we can't accept it.&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' ''{sadly}'' Ohh...&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Thanks for playing!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a shot of a bottle of water, surrounded by a strip of lights. The bottle is labelled &amp;quot;Smarty Water&amp;quot; and has two green smudges on it.}''&lt;br /&gt;
&lt;br /&gt;
'''ANNOUNCER:''' ''{voice-over}'' Coach Z will receive: that bottle of water that's over there. It has some green stuff on it, but it might be on the outside of the bottle, I'm not sure. That bottle of water, that's over there.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the stage, and Homestar's booth.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Continuing on, Homestar, how you feeling in there?&lt;br /&gt;
&lt;br /&gt;
''{Homestar jiggles, making the sound of shaking an empty soda cup with ice in the bottom.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Rumpled on the inside!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's ignore that, and meet our next contestant: The King of Town!&lt;br /&gt;
&lt;br /&gt;
''{Cut to another section of the stage, with a trapdoor in the floor, which opens, and the King of Town appears up through it, in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Alright King, let's hear your guess.&lt;br /&gt;
&lt;br /&gt;
''{A lower third reads &amp;quot;King of Town as Immortan Joe&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''KING OF TOWN:''' &amp;quot;Hey, King, I really like your what-you-look-like-when-you-first-wake-up-still-wearing-your-CPAP-machine costume!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' A real zinger! I could see that one!&lt;br /&gt;
&lt;br /&gt;
''{A pop-up appears of a pair of glasses, with a wig and cartoon eyes and mouth, with the text &amp;quot;I could see that one!&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Homestar?&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hey, King of Town, I really cotton to your Mötley Crüe in the ICÜ costume.&lt;br /&gt;
&lt;br /&gt;
''{Homestar holds up a card reading &amp;quot;Mötley Crüe in the ICÜ&amp;quot;. A buzzer sounds.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Ooh, way off with that one, KOT. Back in the pit.&lt;br /&gt;
&lt;br /&gt;
''{The trapdoor opens, and the King of Town falls back below the stage. Cut to a set of three doors, with a sign reading &amp;quot;Doors 3&amp;quot;. Three doors are labelled &amp;quot;1rd&amp;quot;, &amp;quot;2ce&amp;quot; and &amp;quot;3th&amp;quot;. Zoom in to the &amp;quot;2ce&amp;quot; door.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' And now, behind door number twice, it's Bubs!&lt;br /&gt;
&lt;br /&gt;
''{The door opens, revealing Bubs, in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Time for you to guess Homestar's misinterpretation of your costume, without going over.&lt;br /&gt;
&lt;br /&gt;
''{The lower third reads &amp;quot;Bubs as Jack Flack&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' Let's see... I think he'd say, &amp;quot;Say, Bubs, say, Bubs, I really like your French GI-Joe costume! What was that character's name again? Jaunty Plumarenne? He came with a baguette bazooka!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{A Cheap As Free Toys action figure is shown based on Bubs's costume, named as &amp;quot;Jaunty Plumarenne&amp;quot;, with other labels reading &amp;quot;Action-like figurine&amp;quot;, &amp;quot;Baguette Bazooka&amp;quot; and &amp;quot;Bulletproof Beret&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' I'm sorry, we're going to need your answer in the form of a dollar amount.&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' Uh.... seventeen-fifty?&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Homestar, let's see it!&lt;br /&gt;
&lt;br /&gt;
''{Cut back to Homestar, who is thinking hard and writing on his card. He turns the card around to show &amp;quot;$17.50&amp;quot;. A bell rings.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' That's correct!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hooray!&lt;br /&gt;
&lt;br /&gt;
''{Homestar tears up the card and throws it as confetti.}''&lt;br /&gt;
&lt;br /&gt;
==Fun Facts==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
{{halloweennav}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/The_Show:_Ween_Edition</id>
		<title>The Show: Ween Edition</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/The_Show:_Ween_Edition"/>
				<updated>2023-10-30T13:41:00Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Transcript */ This is about all I have time for tonight, up to the end of Bubs's section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{aholidaynav}}&lt;br /&gt;
&lt;br /&gt;
[[Image:The Show Ween Edition.png|thumb|&amp;quot;Let's get you locked in the isolation booth, dum-dum.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
This year, Homestar implements his [[What are you supposed to be?|attempts to guess the cast's costumes]] into a fun little game on [[The Show]].&lt;br /&gt;
&lt;br /&gt;
'''Cast (in order of appearance):''' {{film|Homestar Runner}}, {{film|Coach Z}}, {{film|The King of Town}}, {{film|Bubs}}, {{film|Marzipan}}, {{film|Pom Pom}}, {{film|The Cheat}}, {{film|The Poopsmith}}, {{film|Homsar}}, {{film|Strong Bad}}, {{film|Strong Bad}}, {{film|Strong Mad}}, {{film|Strong Sad}}, [[Rafferty]], [[Champeen]], [[Preshy]]&lt;br /&gt;
&lt;br /&gt;
See '''[[The Show: Ween Edition Costumes]]''' for more information on what everyone was wearing.&lt;br /&gt;
&lt;br /&gt;
'''Places:''' [[The Show]]&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Monday, October 30, 2023&lt;br /&gt;
&lt;br /&gt;
'''Running Time:''' 6:37&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' Sponsored by That Bottle of Water That's Over There - Toons The Show: Ween Edition - Homestar Runner&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
''{We open on Homestar against the night sky, stars and the moon visible in the background. Ominous music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Each Halloween, severals of people become mildly annoyed, when Homestar Runner misinterprets their costume.&lt;br /&gt;
&lt;br /&gt;
''{Record scratch, ominous music stops.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' So I made a game show out of it!&lt;br /&gt;
&lt;br /&gt;
''{Zoom out to see Homestar standing on an orange floor, the night sky lifts up to reveal The Show background. The Show's theme music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' ''{to the tune of the The Show theme}'' Boo doo-doo! Boo-doo doo!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' That's right, paunchy America! It's time to play...&lt;br /&gt;
&lt;br /&gt;
''{The show's title appears on screen in time with the crowd.}''&lt;br /&gt;
&lt;br /&gt;
'''CROWD:''' ''{voice-over}'' Name! Slash! Guess! That! Homestar! Runner! Hallo! Ween! Costume! Misin! Terpre! Tation!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' And here's the star of Name/Guess That ''{mumbles}'' thing and the stuff: Homestar Runner!&lt;br /&gt;
&lt;br /&gt;
''{The show's title falls off-screen, and Homestar walks onstage in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Thanks so much, Ron Johnny! It's a pleasure and enjoy-joy to be doing this again for the first year in a row.&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's get you locked in the isolation booth, dum-dum.&lt;br /&gt;
&lt;br /&gt;
''{Homestar enters a small cylindrical chamber and shuts the door.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' and bring our our first contestant: Coach Z!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a window panel, which opens to reveal Coach Z dancing on a pedestal in costume.}&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' OK now, Coach Z, the rules are simple. Just tell us what you think Homestar Runner's misinterpretation of your costume will be.&lt;br /&gt;
&lt;br /&gt;
''{Coach Z nods, and a lower third pops up reading &amp;quot;Coach Z as a Beastie Boy from the Intergalactic video&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' Well, I think there's a lot of good options, but I gotta go with, &amp;quot;Hey, Coach Z, I really like your Devo crossing guard costume!&amp;quot; He was always telling me to go froward, move ahead!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' A solid guess!&lt;br /&gt;
&lt;br /&gt;
''{A pop-up appears of a cinderblock, with a wig and googly eyes, and the text &amp;quot;Solid Guess!&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's go to the iso booth and see what Homestar chose.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the isolation booth. Homestar turns around to look at Coach Z. Drumroll.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hey, Coach Z, I really like your Devo construction worker costume!&lt;br /&gt;
&lt;br /&gt;
''{Homestar holds up a card reading &amp;quot;Devo construction worker&amp;quot;. Sad gameshow music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Oooh, so close, Coach Z, but I'm afraid we can't accept it.&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' ''{sadly}'' Ohh...&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Thanks for playing!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a shot of a bottle of water, surrounded by a strip of lights. The bottle is labelled &amp;quot;Smarty Water&amp;quot; and has two green smudges on it.}''&lt;br /&gt;
&lt;br /&gt;
'''ANNOUNCER:''' ''{voice-over}'' Coach Z will receive: that bottle of water that's over there. It has some green stuff on it, but it might be on the outside of the bottle, I'm not sure. That bottle of water, that's over there.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the stage, and Homestar's booth.}&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Continuing on, Homestar, how you feeling in there?&lt;br /&gt;
&lt;br /&gt;
''{Homestar jiggles, making the sound of shaking an empty soda cup with ice in the bottom.}&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Rumpled on the inside!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's ignore that, and meet our next contestant: The King of Town!&lt;br /&gt;
&lt;br /&gt;
''{Cut to another section of the stage, with a trapdoor in the floor, which opens, and the King of Town appears up through it, in costume.}&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Alright King, let's hear your guess.&lt;br /&gt;
&lt;br /&gt;
''{A lower third reads &amp;quot;King of Town as Immortan Joe&amp;quot;.}&lt;br /&gt;
&lt;br /&gt;
'''KING OF TOWN:''' &amp;quot;Hey, King, I really like your what-you-look-like-when-you-first-wake-up-still-wearing-your-CPAP-machine costume!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' A real zinger! I could see that one!&lt;br /&gt;
&lt;br /&gt;
''{A pop-up appears of a pair of glasses, with a wig and cartoon eyes and mouth, with the text &amp;quot;I could see that one!&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Homestar?&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hey, King of Town, I really cotton to your Mötley Crüe in the ICÜ costume.&lt;br /&gt;
&lt;br /&gt;
''{Homestar holds up a card reading &amp;quot;Mötley Crüe in the ICÜ&amp;quot;. A buzzer sounds.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Ooh, way off with that one, KOT. Back in the pit.&lt;br /&gt;
&lt;br /&gt;
''{The trapdoor opens, and the King of Town falls back below the stage. Cut to a set of three doors, with a sign reading &amp;quot;Doors 3&amp;quot;. Three doors are labelled &amp;quot;1rd&amp;quot;, &amp;quot;2ce&amp;quot; and &amp;quot;3th&amp;quot;. Zoom in to the &amp;quot;2ce&amp;quot; door.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' And now, behind door number twice, it's Bubs!&lt;br /&gt;
&lt;br /&gt;
''{The door opens, revealing Bubs, in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Time for you to guess Homestar's misinterpretation of your costume, without going over.&lt;br /&gt;
&lt;br /&gt;
''{The lower third reads &amp;quot;Bubs as Jack Flack&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' Let's see... I think he'd say, &amp;quot;Say, Bubs, say, Bubs, I really like your French GI-Joe costume! What was that character's name again? Jaunty Plumarenne? He came with a baguette bazooka!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{A Cheap As Free Toys action figure is shown based on Bubs's costume, named as &amp;quot;Jaunty Plumarenne&amp;quot;, with other labels reading &amp;quot;Action-like figurine&amp;quot;, &amp;quot;Baguette Bazooka&amp;quot; and &amp;quot;Bulletproof Beret&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' I'm sorry, we're going to need your answer in the form of a dollar amount.&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' Uh.... seventeen-fifty?&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Homestar, let's see it!&lt;br /&gt;
&lt;br /&gt;
''{Cut back to Homestar, who is thinking hard and writing on his card. He turns the card around to show &amp;quot;$17.50&amp;quot;. A bell rings.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' That's correct!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hooray!&lt;br /&gt;
&lt;br /&gt;
''{Homestar tears up the card and throws it as confetti.}''&lt;br /&gt;
&lt;br /&gt;
==Fun Facts==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
{{halloweennav}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/The_Show:_Ween_Edition</id>
		<title>The Show: Ween Edition</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/The_Show:_Ween_Edition"/>
				<updated>2023-10-30T13:04:41Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Transcript */ Been a while since I've done one of these. Up to the entrance of KoT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{aholidaynav}}&lt;br /&gt;
&lt;br /&gt;
[[Image:The Show Ween Edition.png|thumb|&amp;quot;Let's get you locked in the isolation booth, dum-dum.&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
This year, Homestar implements his [[What are you supposed to be?|attempts to guess the cast's costumes]] into a fun little game on [[The Show]].&lt;br /&gt;
&lt;br /&gt;
'''Cast (in order of appearance):''' {{film|Homestar Runner}}, {{film|Coach Z}}, {{film|The King of Town}}, {{film|Bubs}}, {{film|Marzipan}}, {{film|Pom Pom}}, {{film|The Cheat}}, {{film|The Poopsmith}}, {{film|Homsar}}, {{film|Strong Bad}}, {{film|Strong Bad}}, {{film|Strong Mad}}, {{film|Strong Sad}}, [[Rafferty]], [[Champeen]], [[Preshy]]&lt;br /&gt;
&lt;br /&gt;
See '''[[The Show: Ween Edition Costumes]]''' for more information on what everyone was wearing.&lt;br /&gt;
&lt;br /&gt;
'''Places:''' [[The Show]]&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Monday, October 30, 2023&lt;br /&gt;
&lt;br /&gt;
'''Running Time:''' 6:37&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' Sponsored by That Bottle of Water That's Over There - Toons The Show: Ween Edition - Homestar Runner&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
''{We open on Homestar against the night sky, stars and the moon visible in the background. Ominous music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Each Halloween, severals of people become mildly annoyed, when Homestar Runner misinterprets a costume.&lt;br /&gt;
&lt;br /&gt;
''{Record scratch, ominous music stops.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' So I made a game show out of it!&lt;br /&gt;
&lt;br /&gt;
''{Zoom out to see Homestar standing on an orange floor, the night sky lifts up to reveal The Show background. The Show's theme music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' ''{to the tune of the The Show theme}'' Boo doo-doo! Boo-doo doo!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' That's right, paunchy America! It's time to play...&lt;br /&gt;
&lt;br /&gt;
''{The show's title appears on screen in time with the crowd.}''&lt;br /&gt;
&lt;br /&gt;
'''CROWD:''' ''{voice-over}'' Name! Slash! Guess! That! Homestar! Runner! Hallo! Ween! Costume! Misin! Terpre! Tation!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' And here's the star of Name/Guess That ''{mumbles}'' thing and the stuff: Homestar Runner!&lt;br /&gt;
&lt;br /&gt;
''{The show's title falls off-screen, and Homestar walks onstage in costume.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Thanks so much, Ron Johnny! It's a pleasure and enjoy-joy to be doing this again for the first year in a row.&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's get you locked in the isolation booth, dum-dum.&lt;br /&gt;
&lt;br /&gt;
''{Homestar enters a small cylindrical chamber and shuts the door.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' and bring our our first contestant: Coach Z!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a window panel, which opens to reveal Coach Z dancing on a pedestal in costume.}&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' OK now, Coach Z, the rules are simple. Just tell us what you think Homestar Runner's misinterpretation of your costume will be.&lt;br /&gt;
&lt;br /&gt;
''{Coach Z nods, and a lower third pops up reading &amp;quot;Coach Z as a Beastie Boy from the Intergalactic video&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' Well, I think there's a lot of good options, but I gotta go with, &amp;quot;Hey, Coach Z, I really like your Devo crossing guard costume!&amp;quot; He was all ways telling me to go froward, move ahead!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' A solid guess!&lt;br /&gt;
&lt;br /&gt;
''{A pop-up appears of a cinderblock, with a wig and googly eyes, and the text &amp;quot;Solid Guess!&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's go to the iso booth and see what Homestar chose.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the isolation booth. Homestar turns around to look at Coach Z. Drumroll.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Hey, Coach Z, I really like your Devo construction worker costume!&lt;br /&gt;
&lt;br /&gt;
''{Homestar holds up a card reading &amp;quot;Devo construction worker&amp;quot;. Sad gameshow music plays.}''&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Oooh, so close, Coach Z, but I'm afraid we can't accept it.&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' ''{sadly}'' Ohh...&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Thanks for playing!&lt;br /&gt;
&lt;br /&gt;
''{Cut to a shot of a bottle of water, surrounded by a strip of lights. The bottle is labelled &amp;quot;Smarty Water&amp;quot; and has two green smudges on it.}''&lt;br /&gt;
&lt;br /&gt;
'''ANNOUNCER:''' ''{voice-over}'' Coach Z will receive: that bottle of water that's over there. It has some green stuff on it, but it might be on the outside of the bottle, I'm not sure. That bottle of water, that's over there.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the stage, and Homestar's booth.}&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Continuing on, Homestar, how you feeling in there?&lt;br /&gt;
&lt;br /&gt;
''{Homestar jiggles, making the sound of shaking an empty soda cup with ice in the bottom.}&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR:''' Rumpled on the inside!&lt;br /&gt;
&lt;br /&gt;
'''NARRATOR:''' ''{voice-over}'' Let's ignore that, and meet our next contestant: The King of Town!&lt;br /&gt;
&lt;br /&gt;
==Fun Facts==&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
{{halloweennav}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2022-08-29T06:16:30Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reply to anonymous user&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
===Version 4.4 (11 Mar, 2018)===&lt;br /&gt;
* Run on HTTPS pages (NB: Greasemonkey/Tampermonkey only, not in Chrome extension).&lt;br /&gt;
* Run on Tampermonkey on Chrome.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;br /&gt;
::The latest TamperMonkey implements both APIs, actually. In my own scripts, that actually tripped me up at first. I had to test for the absence of GM_ functions for GM4, rather than testing for the GM object. &lt;br /&gt;
::Also, I've actually had to roll back to 4.0.65 to get full compatibility. --{{User:Trlkly/sig}} 01:15, 11 March 2018 (UTC)&lt;br /&gt;
:::So, good news: I figured out [https://github.com/mrphlip/allinone/commit/e28a89b37ef40854d8497dfc27483b1e625407ae what was wrong on Tampermonkey], so the latest script seems to work there now. Bad news: I can't get the HTTPS pages working in the Chrome extension proper for now... because the calls to the Wiki to download subtitles etc are blocked as mixed content, and the workaround for that means doing something more fancy with the Chrome stuff than just stuffing a Greasemonkey script inside a CRX and going to town. I'll look into it when I get the chance, but no promises on anything soon. {{User:Phlip/sig}} 11:48, 11 March 2018 (UTC)&lt;br /&gt;
::::Thanks for the fix. It works for me, too. Personally, I'm fine with using it on Tampermonkey. It frees up space in my rows of addon buttons. The only problem is that installation/updating is annoying, since I have to copy and paste. The &amp;amp;fakeextension=.user.js URL trick doesn't seem to trigger TM's install dialog. {{User:Trlkly/sig}} 21:41, 12 March 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Yo ==&lt;br /&gt;
&lt;br /&gt;
Will you update Homestar All-in-One for Ruffle?&lt;br /&gt;
:From what I've found, poking around in Ruffle so far, it doesn't seem to have a lot of the external API needed to interface with a script like this... there doesn't seem to be a call to get where the movie is currently playing, for instance, which would make things like the seekbar and the subtitles impossible. I'll keep an eye on their developments, but currently it's not really an option. {{User:Phlip/sig}} 12:02, 5 January 2021 (UTC)&lt;br /&gt;
::Not so quick question: is the external API that this script needs part of [https://github.com/ruffle-rs/ruffle/issues/310 AVM1] or [https://github.com/ruffle-rs/ruffle/issues/1368 AVM2/AS3]? (Or &amp;quot;Yes&amp;quot;, or neither?)  Is it possible to tell if one or more issues have been raised for this external API from the two master issues linked? (Sorry I'm still a little hazy on the difference between AVM0/1/2 and ActionScript and whatever else constitutes as part of the Flash architecture.) --[[User:Stux|Stux]] 12:57, 5 January 2021 (UTC)&lt;br /&gt;
:::It's not really the same thing... those ActionScript whatevers all deal with the scripts that are running ''inside'' the SWF. So, like, what all the games are implemented in, all the buttons and clickable Easter eggs, and whatnot. They're internal APIs inside the Flash object. What I'm looking at is an external API exposed by the Flash plugin to the host... for our purposes, that means JavaScript in the surrounding page (or JavaScript which has been injected into the page by a plugin like GM). It resembles the AS1 api, but it has some subtle differences, and it's really a different beast. I'm not sure it's even on Ruffle's radar at this point (and it would probably be quite low on the priority ladder if it is). {{User:Phlip/sig}} 13:05, 5 January 2021 (UTC)&lt;br /&gt;
::::Ah, thank you for clarifying Phlip!  That makes a bit more sense.  I've documented your response in my [[User:Stux/Flash2021|tracking page]] for posterity.  Hopefully in the not-too-distant future I can file a ticket for that.  (I should also check and see if Lightspark has support for that.)&lt;br /&gt;
::::Also if you don't mind, to further clarify my mental image of the Flash architecture: are AVM0/1/2 then the spec for the {{wp|bytecode}} that the Flash VM executes while Actionscript is the source language that is compiled into the appropriate bytecode? --[[User:Stux|Stux]] 13:31, 5 January 2021 (UTC)&lt;br /&gt;
::::Oh, I think I just answered my own question while reading the [[Wikipedia:Bytecode#Examples|examples section]] of the WP article I linked to:&lt;br /&gt;
::::''{{wp|ActionScript}} executes in the ActionScript Virtual Machine (AVM), which is part of Flash Player and AIR. ActionScript code is typically transformed into bytecode format by a {{wp|compiler}}.''&lt;br /&gt;
::::So it seems my guess is correct? --[[User:Stux|Stux]] 13:35, 5 January 2021 (UTC)&lt;br /&gt;
&lt;br /&gt;
Gh0sti (1/6/2020): Flashpoint a project to grant everyone access to everything that is of flash content, games and animation. Flashpoint does have a fork of firefox called basalisk that can run extensions like greasemonkey. Somehow greasemonkey can be enabled I just need to get that extension working within the app and see if the script can load. https://bluemaxima.org/flashpoint/&lt;br /&gt;
&lt;br /&gt;
== Not working 2022 ==&lt;br /&gt;
Can this be made to work with Ruffle? I assume the retiring of Flash is why I can't see the subtitles in 2022. {{unsigned|107.11.225.250|03:56, 29 August 2022 (UTC)}}&lt;br /&gt;
:Per the discussion [[#Yo|above]], the last time I checked into the Ruffle project, it didn't provide the hooks needed for an external tool like the subtitles to work properly. Now, it's been a year and a half since then, so maybe support has improved, but from a quick couple minutes of poking around it doesn't seem to just yet. {{User:Phlip/sig}} 06:16, 29 August 2022 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Guybrush20X6/Trogdor_Kickstarter_Page</id>
		<title>User:Guybrush20X6/Trogdor Kickstarter Page</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Guybrush20X6/Trogdor_Kickstarter_Page"/>
				<updated>2021-07-21T13:09:41Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 92.204.174.134 (Talk) to last revision by Bobmath&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main content of the '''[[Trogdor!! The Board Game]]''' {{p|l=https://www.kickstarter.com/projects/1999933720/trogdor-the-board-game Kickstarter campaign}}.&lt;br /&gt;
&lt;br /&gt;
WIP: Feel free to edit as if a main space page.&lt;br /&gt;
__TOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|width=&amp;quot;680px&amp;quot;|&lt;br /&gt;
==Kickstarter Video==&lt;br /&gt;
{{seemain|Trogdor!! The Board Game (video)}}&lt;br /&gt;
&lt;br /&gt;
==Campaign==&lt;br /&gt;
===About===&lt;br /&gt;
From the [[hr:|Brothers Chaps]] and [https://cheapass.com/ James Ernest] comes '''Trogdor!! the Board Game.''' For centuries, the legendary wingaling dragon '''[[Trogdor]] the Burninator''' has terrorized the peasant kingdom of [[Peasantry]] with his scorching flames and greased-up beefy arm. Now, he has descended from the mountains once again and will not stop until he burninates the entire countryside and all those unfortunate enough to get in his way!&lt;br /&gt;
&lt;br /&gt;
[[File:meepledance.gif|680px]]&lt;br /&gt;
&lt;br /&gt;
You and up to 5 friends -or maybe people you just paid to come over- take on the roles of a cult of hooded creepos calling themselves the '''[[The Three Keepers of Trogdor|Keepers of Trogdor]]''' who have devoted their lives to aiding the mighty dragon in his quest for total and complete burnination.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterKeepers.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Just a few of the 9 Keepers of Trogdor available in the game. [[More like]] Creepos of Trogdor if you ask me.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Take turns guiding Trogdor on his destructive lost weekend around Peasantry. Help him avoid pesky knights and archers, devour peasants, burninate the countryside, and, of course, the thatched roof COTTAGES!!&lt;br /&gt;
&lt;br /&gt;
[[File:gameGallery1.jpg|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''A flaming peasant flees her flaming cottage. Or maybe she's running back in to save her rare vinyl.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterTrogSpinner.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Uh oh. We got a Trog-spinner.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What's in the box===&lt;br /&gt;
[[File:KickstarterHeader1.png|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterBoxItems.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''All artwork and assets not final. You're gonna see those words a lot.''&amp;lt;/center&amp;gt;&lt;br /&gt;
*1 wooden Trogdor meeple&lt;br /&gt;
*7 wooden Peasant meeples&lt;br /&gt;
*1 removable wooden Flame Helmet for the Peasants&lt;br /&gt;
*2 wooden Knight meeples&lt;br /&gt;
*1 wooden Troghammer meeple&lt;br /&gt;
*1 wooden Archer Twins meeple&lt;br /&gt;
*3 wooden cottages with flippable burninated side&lt;br /&gt;
*25 double-sided thick cardboard terrain tiles &lt;br /&gt;
*1 thick cardboard Trog-meter&lt;br /&gt;
*1 deck of 36 casino quality, blackjack-sized Trogdeck cards&lt;br /&gt;
*1 deck of 45 casino quality, blackjack-sized movement cards&lt;br /&gt;
*9 tarot-sized Keepers of Trogdor cards&lt;br /&gt;
*9 tarot-sized Magical Item cards&lt;br /&gt;
*Instruction booklet&lt;br /&gt;
&lt;br /&gt;
[[File:gameGallery9.jpg|680px]]&lt;br /&gt;
&lt;br /&gt;
The game will come in a box with full color art by our pal [https://www.patreon.com/ChrisSchweizer Chris Schweizer] (Crogan Adventures, The Creeps) who also illustrated the countryside tiles, item cards, and the Keepers of Trogdor.&lt;br /&gt;
&lt;br /&gt;
''Boring box dimensions: '''12.5'''&amp;quot; high x '''8.9'''&amp;quot; wide x '''2.8'''&amp;quot; deep''&lt;br /&gt;
&lt;br /&gt;
===How I play it?===&lt;br /&gt;
[[File:KickstarterHeader2.png|680px]]&lt;br /&gt;
&lt;br /&gt;
'''Trogdor!!''' is a co-op puzzle, area control game where 2-6 players work together to help a beefy-armed dragon completely decimate a kingdom using unique powers and items all while avoiding knights and archers bent on stopping you. &lt;br /&gt;
&lt;br /&gt;
Play time is '''30-45 minutes''' with variable levels of difficulty the players can set. The age is '''14+.'''&lt;br /&gt;
&lt;br /&gt;
[[File:TwitterBoardGameBurnination.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''How to burninate cottages: Surround, scorch the ground, flip that thatched-up mound. Stop-mo by Graw Mad.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here's Strong Sad's hands with an episode of his tabletop review series 'Six-Sadded, Die' to play through a couple turns for you:&lt;br /&gt;
&lt;br /&gt;
{{seemain|Six-Sadded, Die}}&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterStack.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Stack em to the heavens! Stack em to the heavens! You can play an unofficial game where you make up the rules yourself called Stack Em To The Heavens!!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backer Tiers===&lt;br /&gt;
[[File:KickstarterHeader3.png|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterWingalingLevel.png|680px]]&lt;br /&gt;
&lt;br /&gt;
The '''Wingaling Level''' is our base level tier. It includes the full boxed game (contents listed up the page a bit) with screen-printed wooden meeple game pieces.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterBurninatorLevel.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Next is the '''Burninator Level'''. It has the full boxed game with wooden meeples like the '''Wingaling Level''', but it '''''ALSO''''' includes a full set of high quality plastic miniature game pieces including:&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterMinis.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Sculpts by Rick Van Velsor. Prototype 3D printing and scanning by 3D-printingtech.com''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*1 plastic Trogdor mini&lt;br /&gt;
*7 plastic Peasant minis&lt;br /&gt;
*1 plastic removable Flame Helmet for Peasants&lt;br /&gt;
*2 plastic Knights minis&lt;br /&gt;
*1 plastic Troghammer mini&lt;br /&gt;
*1 plastic Archer Twins mini&lt;br /&gt;
*3 plastic thatched roof cottage bases&lt;br /&gt;
*3 plastic thatched roof cottage roofs with flippable burninated underside&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ''plastic miniatures come packaged separately but they WILL fit inside the box along with their wooden meeple step-siblings''&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterBurninatorBoxItems.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Hey, guess what? Can you guess? All art and assets not final.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hold on to your angry eyebrows because things are about to start getting ''fancy''-go-nuts! We have partnered with the incredible artisans at '''[https://wyrmwoodgaming.com/ Wyrmwood Gaming]''', makers of high-end, handcrafted wooden game boards, tables, and accessories to bring you the following ''insane'' tiers:&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterBeefyLevel.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Did you need more beef with your Burninator? Then you require the '''Wyrmwood Beefy Level'''. This level includes: &lt;br /&gt;
&lt;br /&gt;
*the full boxed game with meeples and plastic minis&lt;br /&gt;
*this beautifully handcrafted and engraved wooden game board made of cherry.&lt;br /&gt;
*Keep the countryside tiles in place and flip em with ease thanks to awesome tilt-a-tile technology (I just made that name up). &lt;br /&gt;
*Engraved compass rose so Troggie always knows where he's going&lt;br /&gt;
*'''NOTE:''' this game board does NOT feature Trogdor engraved on the back like the next two tiers&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterMajestyLevel.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Prototype cards and minis shown above. Did we mention all art and assets NOT final?''&amp;lt;/center&amp;gt;&lt;br /&gt;
The '''Wyrmwood Majesty Level''' gets even more nuts! It has the full boxed game included in the '''Burninator Level''' PLUS this incredible, handcrafted cherry box and game board featuring:&lt;br /&gt;
&lt;br /&gt;
*engraved cherry wood &lt;br /&gt;
*removable engraved lid/game board with cool tilt-a-tile technology for easy flippins&lt;br /&gt;
*engraved compass rose so Troggie knows where he's goin'&lt;br /&gt;
*card/game piece storage box&lt;br /&gt;
*detachable Trogshelf with recessed Peasant Void&lt;br /&gt;
*separate engraved cherry Trog-meter&lt;br /&gt;
*box dimensions: '''18''' 13/18&amp;quot; x '''18''' 13/18&amp;quot; x '''2''' 1/4&amp;quot;('''2''' 9/16&amp;quot; high with lid)&lt;br /&gt;
*lid/playboard dimensions: '''17''' 15/16&amp;quot; x '''17''' 15/16&amp;quot; x 13/16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterMajestyTrogMeter.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Art and design not final. Do you love reading that over and over?''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterConsummateLevel.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Again, prototype cards and minis shown here. But I have some good news, all art and assets NOT final!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The '''Wyrmwood Consummate Level''' is where the artisans (woodworking nerds) at Wyrmwood really get to show off their 'skills of an artist.' It has all the same contents and features of the '''Wyrmwood Majesty Level''' made with even more luxurious woods and materials and a built in Lazy-Susan! &lt;br /&gt;
&lt;br /&gt;
*removable engraved lid/game board made of fancy woods I can't pronounce: Wenge, Waterfall Bubinga, Tiger Maple inlaid with Jet, Silver stringing, and Brass! &lt;br /&gt;
*gameboard still has cool tilt-a-tile technology for easy flippins&lt;br /&gt;
*engraved compass rose so Troggie knows where he's goin' &lt;br /&gt;
*card/game piece storage box &lt;br /&gt;
*detachable Trogshelf with recessed Peasant Void&lt;br /&gt;
*separate engraved Wenge Trog-meter&lt;br /&gt;
*box dimensions: 18 13/18&amp;quot; x 18 13/18&amp;quot; x 2 1/4&amp;quot;(2 9/16&amp;quot; high with lid) &lt;br /&gt;
*lid/playboard dimensions: 17 15/16&amp;quot; x 17 15/16&amp;quot; x 13/16&amp;quot;&lt;br /&gt;
*built-in Lazy-Susan so you can rotate the board to whosoever's turn it may be!&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterConsummateTrogMeter.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''All art and assets not final comes with everything you see here.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterTiltATile.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Tilt-a-tile tech in action! The most satisfying card flip you'll ever see/hear. Bonus feature: all art and assets not final.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterLazySusan.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Built-in Lazy Susan lets you turninate the countryside! Makes the game fun for your friends who can't read upside-down!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{seemain|Wyrmwood Video}}&lt;br /&gt;
&lt;br /&gt;
===Stretch Goals===&lt;br /&gt;
[[File:KickstarterHeader4.png|680px]]&lt;br /&gt;
&lt;br /&gt;
We know you want more! Keep supporting us, and more crazy cool things will keep happening.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoals.gif|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal1.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Our first stretch goal was to reach '''$150,000''' allowing us to have new art made so the game can include all unique, non-repeating game board tiles and use spot UV on the flames on the burninated side to increase the effect of burnination (we didn't know what it meant either, it makes a part of the art shinier than the others. cool!). &lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal2.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Art and assets so NOT final it hurts!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Our second stretch goal was to reach '''$250,000'''. See that &amp;quot;Stack Em To The Heavens&amp;quot; gif back up the page? We're gonna turn that into a '''real mini game''' and you'll get a little canvas bag with the rules on it to keep all the meeples in so you can take em with you and play at coffee shops and DMVs everywhere! We will also be able to bring you a '''Companion Soundboard Website''' with catchy Strong Bad phrases, music, and sound effects to enhance your game play.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterSbemail.png|680px]]&lt;br /&gt;
&lt;br /&gt;
You also unlocked a new '''Strong Bad Email'''! And the email Strong Bad answers will be from a lucky backer! That's right, the next sbemail that gets made will be chosen from 'emails' submitted in the comments by backers!&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal3.png|680px]]&lt;br /&gt;
&lt;br /&gt;
We know you love video content, so we're bringing you more! Strong Bad will be continuing his Skills of an Artist series by drawing one of your suggestions in the comment section of the campaign in an upcoming video.&lt;br /&gt;
&lt;br /&gt;
Oh man! Look! Here is that video we just mentioned a sentence or two ago! You can watch it now! Thanks to backer '''Chris O'Connor''' for the suggestion!&lt;br /&gt;
&lt;br /&gt;
{{see|Really Cool Boat}}&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal4.png|680px]]&lt;br /&gt;
&lt;br /&gt;
We're adding some game upgrades! We're upgrading the cards to be '''linen cards''' so they're easy to shuffle and feel luxurious right out of the box. In addition to that, we're adding some '''spot UV''' to the flames of the game box itself, giving your box the ultimate effect of burnination. &lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal5.png|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:Kickstarter3DSixSaddedDie.png|680px]]&lt;br /&gt;
&lt;br /&gt;
For our fifth stretch goal, we'll be bringing you an all new Six-Sadded, Die video but in the meantime, grab the file ([[oldhr:wallpapers/6saddie_innie.stl|innie]] or [[oldhr:wallpapers/6saddie_outie.stl|outie]]) to 3D print your own Six-Sadded, Die! Help us get to '''12,000 backers''' so we can do it! &lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterStrongBadCards.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Art not final!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We decided to give you a surprise gift when we hit 12,000 backers! Strong Bad will be adding some of his own Keeper and Item cards for the game. &lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterGoal6.png|680px]]&lt;br /&gt;
&lt;br /&gt;
For our sixth stretch goal, we'll be adding alternate Trogdor Meeples based on the designs by Coach Z, Strong Mad, Strong Sad, and Strong Bad to the game. We need '''15,000 backers''' to do it!&lt;br /&gt;
&lt;br /&gt;
===Backer Burnination Bingo===&lt;br /&gt;
[[File:KickstarterHeader5.png|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterBingo.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''You guys sorta did it!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We're doing that thing that campaigns do! It's '''Backer Burnination Bingo'''! Do awesome stuff in real life, help Trogdor burninate this cottage and we'll do dumb stuff in return!&lt;br /&gt;
&lt;br /&gt;
In our game, before you can use an action to burninate a cottage, you must burninate all the surrounding terrain tiles as well as the tile the cottage is on. In such fashion, help Trogdor burninate everything by fulfilling all the dumb demands on the terrain tiles and cottage itself! Once you’ve done them all, you will be rewarded by a live stream of Matt playing Strong Bad’s Cool Game For Attractive People and performing all the voices LIVE until he gets tired of it, or his throat gives out!&lt;br /&gt;
&lt;br /&gt;
Submit your achievements to Maya at maya@homestarrunner.com. When you submit pictures and content to us, know that we may post your picture in an update to show your awesomeness! You can track what achievements have been reached on this board which will be just below the stretch goal section of our campaign.&lt;br /&gt;
&lt;br /&gt;
'''UPDATE:''' We gave you the video of 25 people yelling 'Trogdor!' (though we'd still like to see that) since today (Aug 11, '18) is the 10th anniversary of the release of SBCG4AP and since the campaign's almost over. SO, On Sunday Aug 12th at 6pm EST, Matt is gonna do a Kickstarter Live while playing the game and performing the voices like we already said a couple paragraphs ago! Tune in and chat and comment and watch as the wheels come off!!&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterFilePhoto.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Matt and Mattsets NOT Final.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Add-Ons===&lt;br /&gt;
[[File:KickstarterHeader6.png|680px]]&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterAddOnMeeples.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Art and assets NOT final. But in the ballpark. The meeply ballpark.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We're going to make a whole set of meeples of the 12 main Homestar Runner characters. Use them in this board game, or drop em into whatever other tabletop experience you want! You can also add these in BackerKit for an additional cost.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterAddOnShirts.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Oh, hey guess what? All art and images not final.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You allowed us to be able to make some screen-printed T-Shirt add-ons! There will be a Trogdor box art design and a 'Six-Sadded, Die.' design. You can add them in BackerKit during the survey period for an additional cost. &lt;br /&gt;
&lt;br /&gt;
===Reviews===&lt;br /&gt;
[[File:KickstarterHeader7.png|680px]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Bring the fun of pyromania into your living room with TROGDOR! the BOARD GAME! Finally all the delight of torching screaming peasants with none of the pesky jailtime that would accompany burning people in real life. Crack open a cold one, grab your personal DND Greg, and prepare to Burninate your cares away with the game that puts the &amp;quot;AAAAA&amp;quot; in &amp;quot;TABLETOP AAAAADVENTURE&amp;quot; Add actual lighter fluid and matches for a more realistic experience!*&amp;quot; ''*Legal Note: Please do not do this''&lt;br /&gt;
&lt;br /&gt;
'''-Alex Hirsch, board game copy writer extraordinaire, creator of Gravity Falls'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Trogdor my love, over my heart I have thatched a roof. I kissed every dried straw. Thatched them together with poems for you so tight. A tight thatch helps shed water away and insulate my heart for you Trogdor. Burninate me. Burninate my cottaged heart to cinders and consume me to fill your Trog-Meter.. then can you squish my ashes in the crook of your muscles damn boyee.:&lt;br /&gt;
&lt;br /&gt;
'''-Pendleton Ward, poet, creator of Adventure Time'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;The game is nostalgic, fun, and engaging. I didn't expect the amount of thought I'd have to put in to win!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-[http://unfilteredgamer.com/ Unfiltered Gamer]'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Nothing brings players together like the smell of a burning peasant in the middle of his toasty cottage surrounded by the ashy wasteland of what once was his home.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-[http://indietabletop.net/ IndieTabletop]'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Trogdor is quick, quirky, and actually a bit difficult...Homestar Runner knows their audience and delivers exactly the right product for its fans.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-[http://pawnsperspective.com/ Pawn's Perspective]'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;All art and assets NOT final!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-Lem Sportsinterviews, haver of ''dozens'' of dollars'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;If Peasant's Quest was too technologically advanced, you can instead have fun burninating the countryside in Trogdor! TOGETHER!!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-[https://thecardboardstacker.com/ Cardboard Stacker]'''&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I tested a Trogdor game prototype that was was just a few random LEGO pieces, some pocket lint and a linoleum tile. Even in that early form, this game was so compelling that I quit my job and alienated my family just to play it more. This game will ruin your life in the best possible way. [Think of some good &amp;quot;burninate&amp;quot; pun for here before sending this blurb to the Chaps]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''-Paul Sabourin, 48% of [http://www.paulandstorm.com/ Paul &amp;amp; Storm]'''&lt;br /&gt;
&lt;br /&gt;
===Backstory===&lt;br /&gt;
[[File:KickstarterHeader8.png|680px]]&lt;br /&gt;
&lt;br /&gt;
There's no good reason that the Trogdor board game took 15 years to happen other than the fact that Mike and Matt (the Homestar Runner people) started playing more board games with their kids and friends.&lt;br /&gt;
&lt;br /&gt;
Troggie seemed like an easy fit for a tabletop game, so they cranked out a janky prototype, and it kinda worked!&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterPrototype.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''3 dice AND 2 decks? What is wrong with you guys? Kerrek tracks seem cool though.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once it was decided that this was not the worst idea ever, they contacted Pat Rothfuss who one time sent Limozeen a box of his fantasy novels. He made a board game once and it was good, so they asked him for advice.&lt;br /&gt;
&lt;br /&gt;
Pat introduced them to James Ernest from [https://cheapass.com/ Cheapass Games]. With his help, the game became playable, perhaps even... enjoyable!&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterPatJames.png|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Courtroom sketches of Pat and James.''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While James playtested and iterated all over the place, [https://www.patreon.com/ChrisSchweizer Chris Schweizer] got busy working on art for the game and our pal [http://eventuresentertainment.com/ Rick Van Velsor] (who sculpted the Homestar and Cheat Commandos figurines) began sculpting designs for the vinyl miniatures (available in the Burninator level and above). &lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterSculpt.gif|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Rick Van Velsor takes our janky 3D Tinkercad prototype and molds it into pure majesty!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, the game is ready to be produced and played by burnination enthusiasts everywhere.&lt;br /&gt;
&lt;br /&gt;
===Social Media===&lt;br /&gt;
[[File:KickstarterHeader9.png|680px]]&lt;br /&gt;
&lt;br /&gt;
For updates outside of Kickstarter, like our [https://www.facebook.com/trogdortheboardgame/ Facebook page] and follow us on [[twitter:trogdorboardgame|Twitter]]. Our Community Manager Maya ([https://www.kickstarter.com/projects/maxtemkin/secret-hitler?ref=user_menu Secret Hitler]) will be posting there with reminders about the updates here as well as stretch goal and add-on announcements. You can reach out to them at maya@homestarrunner.com if you have any additional questions. &lt;br /&gt;
&lt;br /&gt;
===Shipping===&lt;br /&gt;
[[File:KickstarterHeader10.png|680px]]&lt;br /&gt;
&lt;br /&gt;
We will be using our friends over at Amplifier to ship you your stuff to the rest of the world and BackerKit to collect your survey information. The following shipping costs are estimates and potentially subject to change (which you would be notified about):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''FOR THE WINGALING, BURNINATOR, AND WYRMWOOD BEEFY LEVELS'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the US: $15 &lt;br /&gt;
&lt;br /&gt;
Outside of the US: $25&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''FOR THE WYRMWOOD MAJESTY AND WYRMWOOD CONSUMMATE LEVELS'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Within the US: $25&lt;br /&gt;
&lt;br /&gt;
Outside of the US: $35&lt;br /&gt;
&lt;br /&gt;
The shipping costs will be handled after the campaign in BackerKit when the surveys go out. The Wyrmwood Majesty and Wyrmwood Consummate levels both weigh around 13 lbs, hence the shipping cost. &lt;br /&gt;
&lt;br /&gt;
'''TAKE NOTE: WE DO NOT SHIP TO EVERY COUNTRY IN THE WORLD''', but listing the countries we do ship to is way too long, and we know you don't want to read it. Here is a list of countries '''we DO NOT ship to''':&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterCountries.png|680px]]&lt;br /&gt;
&lt;br /&gt;
===Thank Yous===&lt;br /&gt;
[[File:KickstarterHeader11.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Thank you Homestar fans! Thank you spouses, friends, and fambly! Thank you Kickstarter! Thank you Pat Rothfuss! Thank you James Ernest! Thank you Cheapass Games! Thank you Jonathan Ritter-Roderick! Thank you Lay Waste Games! Thank you Greater Than Games! Thank you reviewers and playtesters!&lt;br /&gt;
&lt;br /&gt;
===Risks and challenges===&lt;br /&gt;
Are you asking for some Risks &amp;amp; Challenges?!?!&lt;br /&gt;
&lt;br /&gt;
-Unforeseen overseas production delays are probably the biggest potential issue. The vinyl figurines have a long lead time and we want them to be awesome. If something went wrong during that phase of production, it could cause a delay. We are building in buffers for that sorta thing just in case.&lt;br /&gt;
&lt;br /&gt;
-We already have production quotes from PandaGM and Wyrmwood. We will use BackerKit once the campaign is over and ship from Amplifier, the same fulfillment company we use for all other Homestar merch.&lt;br /&gt;
&lt;br /&gt;
'''[https://www.kickstarter.com/help/faq/kickstarter%20basics#Acco Learn about accountability on Kickstarter]'''&lt;br /&gt;
&lt;br /&gt;
Questions about this project? '''[https://www.kickstarter.com/projects/1999933720/trogdor-the-board-game/faqs Check out the FAQ]'''&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==FAQs==&lt;br /&gt;
===How much is shipping?===&lt;br /&gt;
&lt;br /&gt;
Our shipping costs are detailed in the shipping section of the campaign page. Scroll down past the game info to see more details about shipping costs. We will be doing all of our shipping costs in the pledge managing system AFTER the campaign, so when you make your pledge, Kickstarter will show $0 shipping. Please note that the shipping is not included in your pledge.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;(Last updated: Fri, July 27 2018 3:45 PM BST)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Do you have a retail tier?===&lt;br /&gt;
&lt;br /&gt;
At the moment, we don't, but if there is enough demand, we will consider maybe adding one!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;(Last updated: Wed, August 1 2018 4:31 AM PDT)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====How can I get multiple copies of the game?====&lt;br /&gt;
&lt;br /&gt;
After the campaign is over, you can add as many copies of any tier as you like in BackerKit as well as any of our future add-ons.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;(Last updated: Wed, August 1 2018 4:31 AM PDT)&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Updates==&lt;br /&gt;
===We're Funded + Stretch Goals===&lt;br /&gt;
Update #1&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 17 2018&lt;br /&gt;
&lt;br /&gt;
Hello Fellow Keepers of Trogdor,&lt;br /&gt;
&lt;br /&gt;
Due to your support and immense enthusiasm, we managed to get funded in just under three hours! Thank you guys so much for that. It means a lot that you are all so passionate about playing our game and helping Trogdor on his quest for WORLD BURNINATION!&lt;br /&gt;
&lt;br /&gt;
And now the part you’ve all been waiting for...&lt;br /&gt;
&lt;br /&gt;
'''Stretch Goals: Non-Repeating Tiles and Spot UV'''&lt;br /&gt;
&lt;br /&gt;
Our first stretch goal will be to improve the game board tiles. Right now, the 25 countryside tiles comprising the gameboard have some repeats. The two mountains are the same artwork, for example. We’d like to tell our artist, Chris Schweizer, to get back to work and draw more countryside so that no two tiles are the same. In addition to that, adding spot UV to the fire on the burninated will make them look EVEN MORE burninated, so we’d like to do that too. Help us make the cards unique and and increase burnination by getting us to our next goal of $150,000.&lt;br /&gt;
&lt;br /&gt;
Again, thank you all for the support so far, and stay tuned as we’ve got LOTS more fun goals planned.&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on,&lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
===MEEPLE MINI GAME and a WEBSITE===&lt;br /&gt;
Update #2&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 17 2018&lt;br /&gt;
&lt;br /&gt;
Hello Fellow Keepers of Trogdor,&lt;br /&gt;
&lt;br /&gt;
You guys are truly awesome. We’ve blown past our first stretch goal, and don’t worry! We’ve already got another great one in store!&lt;br /&gt;
&lt;br /&gt;
'''Stretch Goal #2: Stack 'Em To The Heavens and a Website'''&lt;br /&gt;
&lt;br /&gt;
We know that a lot of you are fans of our wooden meeple pieces. Living vicariously through meeples is a great bonus to being a fan of board games in general. To give you and your meeples the time of your lives, we will make up a tiny stand alone game called &amp;quot;Stack 'Em To The Heavens&amp;quot; to be played using the 7 included peasant meeples. We will even add a screen-printed drawstring bag to put them in! To be clear, this game does not exist yet. But, by the time you receive your rewards, there will be an actual structured-ish game you all can enjoy!&lt;br /&gt;
&lt;br /&gt;
In addition to that, we’ll be making you all a Companion Soundboard Website for the game! It will feature classic Strong Bad talksays such as &amp;quot;Arrowed,&amp;quot; &amp;quot;It’s Over,&amp;quot; and &amp;quot;Consummate! I said Consummate!&amp;quot; as well as some musical selections to help set the proper mood for your quest of burnination through the countryside. The goal for this is $250,000. Thanks for helping us get this far, and we hope you’ll continue to support us in the future! We’ve still got more goals in store.&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on, &lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
===3rd Stretch Goal (T-SHIRTS) + STRONG BAD EMAIL===&lt;br /&gt;
Update #3&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 18 2018&lt;br /&gt;
&lt;br /&gt;
Hello again Fellow Keepers of Trogdor,&lt;br /&gt;
&lt;br /&gt;
We have just been burninating through these stretch goals, and we’re so happy that you guys have been supporting us so much! Our next goal is extra special, and we hope you like it.&lt;br /&gt;
&lt;br /&gt;
'''Stretch Goal #3: T-Shirts and Surprise!'''&lt;br /&gt;
&lt;br /&gt;
T-Shirts, T-Shirts, T-Shirts! Our third stretch goal involves T-Shirts! We saw that a bunch of you in the comments were itching for some T-Shirts, and we actually had a few ideas in mind! Great minds think in similar ways! We’ve got two great designs for you guys. The first shirt has a picture of the game box on it front and center. We really love what Chris has brought to the table with his artistic abilities, so we’re putting it on a shirt for everyone to wear and feel the majesty. The second shirt is dedicated to our very own Strong Sad. He puts a lot of effort into his board game review youtube channel, and despite his melancholy, it’s fantastic to see all that work pay off. The shirt has the logo for his youtube channel, so give him some support for that! Both of these shirts will be accessible to you as add-ons in BackerKit after the surveys are collected, and all of our add-ons are Kickstarter Exclusive. We’re switching up our goals from dollar milestones to backer milestones from now on, so the goal for this is for the campaign to reach 5,000 backers.&lt;br /&gt;
&lt;br /&gt;
'''Backer Submitted SBEMAIL!!'''&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterSbemail2.png|680px]]&lt;br /&gt;
&lt;br /&gt;
You guys already achieved this and you didn’t know it! To thank you amazing fans for all your incredible support over the years, we wanna give you a leg up in getting your email checked by Strong Bad because you never know exactly what kinda email will suit the wrestleman’s whims on a given day. SO, the next Strong Bad Email toon that gets made will be chosen from ‘emails’ submitted by you guys in the comments for this update! NOTE: Strong Bad may not get to check this next email until after the campaign on account of all the Trogdor QA he’s busy with. Your patience (and support!) is appreciated. It’s just something we want to do for you all to show our support. It’s close to our hearts and we're sure yours too.&lt;br /&gt;
&lt;br /&gt;
Again, thank you all for your continued support! We’ve still got more stretch goals on the way.&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on, &lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
===4th Stretch Goal===&lt;br /&gt;
Update #4&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 18 2018&lt;br /&gt;
&lt;br /&gt;
Hello Fellow Keepers of Trogdor,&lt;br /&gt;
&lt;br /&gt;
It’s been a crazy couple days, and we truly appreciate your admiration and support. We can’t wait for you all to actually get the play the game, but in the meantime, we’ve got more cool stretch goals to share with you.&lt;br /&gt;
&lt;br /&gt;
'''Stretch Goal #4 - Homestar Character Meeples'''&lt;br /&gt;
&lt;br /&gt;
A lot of people have been asking if it’s possible to bring any of the other Homestar characters into the game. Fortunately, you’re in luck! It’s something that we were thinking of doing anyway! Since great minds are similarly thinking similar things, we’re bringing you a set of all of the classic Homestar character meeples to be used just for fun! You can use them wherever you want in the game, but don’t let that stop you! You can also use these meeples in any other board game you may have that uses meeples too. You can add this set of character meeples to your pledge in BackerKit at an additional cost during the survey period. We can fulfill this goal by reaching 10,000 backers.&lt;br /&gt;
&lt;br /&gt;
You guys have all been amazing, so we’re switching up our stretch goals a little. We hope you like what we’ve offered so far, but the future stretch goals will not be anything physical that you can buy or add to your pledge. All future stretch goals will be even more awesome than before, and they will involve us interacting with you all directly. Live draws? Puppet cosplay? Who knows! Keep spreading the word and supporting us to find out!&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on, &lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
===Six-Sadded, Die Video + New Stretch Goals===&lt;br /&gt;
Update #5&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 20 2018&lt;br /&gt;
&lt;br /&gt;
Hey you guys! We replaced some of our old stretch goals with a cool new upcoming video and game upgrades. We’ve also got a NEW stretch goal to announce, so check it out!&lt;br /&gt;
&lt;br /&gt;
'''New Stretch Goal #3: Skills of An Artist Video'''&lt;br /&gt;
&lt;br /&gt;
To replace the third stretch goal, we're going to be doing a special video episode of Strong Bad's &amp;quot;Skills of An Artist&amp;quot; series. Submit your suggestions in the comment section of this post, and Strong Bad will take one of the suggestions to draw in a special video for you guys. We’re looking at the suggestions in the main comments thread as well since that’s where we originally requested this. We love doing interactive stuff with you, and we know you love videos, so we hope you like this addition. We can’t wait to see your suggestions!&lt;br /&gt;
&lt;br /&gt;
'''New Stretch Goal #4: Game Upgrade'''&lt;br /&gt;
&lt;br /&gt;
In the place of stretch goal #4, we’re going to make changes to the cards and box. We're now going to upgrade the quality even more to linen so they feel silky and luxurious right out of the box. In addition to that, we’ll be making some changes to the game box as well. In our first stretch goal, we added spot UV to the gameplay tiles. Now, we’re going to expand that enhanced burnination by adding spot UV to the box of the game too.&lt;br /&gt;
&lt;br /&gt;
'''Stretch Goal #5: Six-Sadded, Die Video and 3D print Six-Sadded, Die'''&lt;br /&gt;
&lt;br /&gt;
Our next stretch goal will be to give you guys some more of the great content you’ve come to know and love. As you now know, Strong Sad has been dabbling in board games and presented you all with the great walkthrough video of our game. It would be amazing to bring you guys more of his board game gameplay and review content. We’d like Strong Sad to give you his playtest review of the 90’s Boardelectrix hit 'Don't Make Daddy P.O.'d'!! '''Help us get to 12,000 backers''' so he can live his dreams!&lt;br /&gt;
&lt;br /&gt;
Now the video is great, but that's not all. Right here is a file that you can use to 3D print your own Six-Sadded, Die for all you makers out there. One has Strong Sad's face protruding '''out''' of the die like in the intro to 'Six-Sadded, Die' and the other has them '''recessed into''' the die like all good pips. Enjoy! If you print one, you can send pictures to maya@homestarrunner.com, and we'll feature some of them in our next update.&lt;br /&gt;
&lt;br /&gt;
Links:&lt;br /&gt;
&lt;br /&gt;
[[oldhr:wallpapers/6saddie_innie.stl|http://old.homestarrunner.com/wallpapers/6saddie_innie.stl]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[oldhr:wallpapers/6saddie_outie.stl|http://old.homestarrunner.com/wallpapers/6saddie_outie.stl]]&lt;br /&gt;
&lt;br /&gt;
We hope you all like these upgrades and will enjoy our new videos. Thank you for your continued support! We’re going to keep working hard for you to get you the best game and stuff we can give.&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on,&lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
===Lucky Yates from Archer on Six-Sadded, Die===&lt;br /&gt;
Update #6&amp;lt;br&amp;gt;&lt;br /&gt;
Jul 23 2018&lt;br /&gt;
&lt;br /&gt;
Hello Fellow Keepers of Trogdor,&lt;br /&gt;
&lt;br /&gt;
We’re currently working on our Six-Sadded, Die video stretch goal for you guys, but we have a surprise to tell you about.&lt;br /&gt;
&lt;br /&gt;
'''Lucky Yates Collaboration'''&lt;br /&gt;
&lt;br /&gt;
We’ve got a collaboration to announce! As you know our next goal is for Strong Sad to show you guys another review video from his online tabletop review show, Six-Sadded, Die. In order to make the video even more amazing, we’ve decided to collaborate with our pal Lucky Yates, the voice of Krieger from Archer. Help us get to 12,000 backers, and he’ll be making the video with Strong Sad himself. We hope you like it!&lt;br /&gt;
&lt;br /&gt;
'''Some of Your Six-Sadded, Dice'''&lt;br /&gt;
&lt;br /&gt;
Thank you guys for sending us some pictures of your dice from the files we provided you! Here are some of those so more of you can see how cool they are.&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterPrintedDie1.jpg|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Thank you, DH!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:KickstarterPrintedDie2.jpg|680px]]&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;''Thank you also, James! You managed to add extra sadness!''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Keep these coming, and and tell us if you are somehow able to actually use this die in a real gaming scenario!&lt;br /&gt;
&lt;br /&gt;
Keep on Burninating on, &lt;br /&gt;
&lt;br /&gt;
- Matt, Mike, and Maya&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
===Inside References=== &lt;br /&gt;
*One of the captions reads &amp;quot;[[More like]] Creepos of Trogdor if you ask me&amp;quot;.&lt;br /&gt;
*&amp;quot;Uh-oh. We got a Trog-spinner.&amp;quot; calls back to [[Teen Girl Squad Issue 10]].&lt;br /&gt;
*[[Graw Mad]] is credited for stop motion work, apparently improving a lot from his stop motion debut in [[the facts]].&lt;br /&gt;
*One of Strong Bad's suggestions for new item cards is [[Strong Sad's Severed Head]].&lt;br /&gt;
*&amp;quot;Fambly&amp;quot; is [[Senor Cardgage]]'s way of saying &amp;quot;family&amp;quot; from [[Senorial Day]].&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2021-01-05T13:06:08Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Yo */ clearly spending too much time in Markdown land&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
===Version 4.4 (11 Mar, 2018)===&lt;br /&gt;
* Run on HTTPS pages (NB: Greasemonkey/Tampermonkey only, not in Chrome extension).&lt;br /&gt;
* Run on Tampermonkey on Chrome.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;br /&gt;
::The latest TamperMonkey implements both APIs, actually. In my own scripts, that actually tripped me up at first. I had to test for the absence of GM_ functions for GM4, rather than testing for the GM object. &lt;br /&gt;
::Also, I've actually had to roll back to 4.0.65 to get full compatibility. --{{User:Trlkly/sig}} 01:15, 11 March 2018 (UTC)&lt;br /&gt;
:::So, good news: I figured out [https://github.com/mrphlip/allinone/commit/e28a89b37ef40854d8497dfc27483b1e625407ae what was wrong on Tampermonkey], so the latest script seems to work there now. Bad news: I can't get the HTTPS pages working in the Chrome extension proper for now... because the calls to the Wiki to download subtitles etc are blocked as mixed content, and the workaround for that means doing something more fancy with the Chrome stuff than just stuffing a Greasemonkey script inside a CRX and going to town. I'll look into it when I get the chance, but no promises on anything soon. {{User:Phlip/sig}} 11:48, 11 March 2018 (UTC)&lt;br /&gt;
::::Thanks for the fix. It works for me, too. Personally, I'm fine with using it on Tampermonkey. It frees up space in my rows of addon buttons. The only problem is that installation/updating is annoying, since I have to copy and paste. The &amp;amp;fakeextension=.user.js URL trick doesn't seem to trigger TM's install dialog. {{User:Trlkly/sig}} 21:41, 12 March 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Yo ==&lt;br /&gt;
&lt;br /&gt;
Will you update Homestar All-in-One for Ruffle?&lt;br /&gt;
:From what I've found, poking around in Ruffle so far, it doesn't seem to have a lot of the external API needed to interface with a script like this... there doesn't seem to be a call to get where the movie is currently playing, for instance, which would make things like the seekbar and the subtitles impossible. I'll keep an eye on their developments, but currently it's not really an option. {{User:Phlip/sig}} 12:02, 5 January 2021 (UTC)&lt;br /&gt;
::Not so quick question: is the external API that this script needs part of [https://github.com/ruffle-rs/ruffle/issues/310 AVM1] or [https://github.com/ruffle-rs/ruffle/issues/1368 AVM2/AS3]? (Or &amp;quot;Yes&amp;quot;, or neither?)  Is it possible to tell if one or more issues have been raised for this external API from the two master issues linked? (Sorry I'm still a little hazy on the difference between AVM0/1/2 and ActionScript and whatever else constitutes as part of the Flash architecture.) --[[User:Stux|Stux]] 12:57, 5 January 2021 (UTC)&lt;br /&gt;
:::It's not really the same thing... those ActionScript whatevers all deal with the scripts that are running ''inside'' the SWF. So, like, what all the games are implemented in, all the buttons and clickable Easter eggs, and whatnot. They're internal APIs inside the Flash object. What I'm looking at is an external API exposed by the Flash plugin to the host... for our purposes, that means JavaScript in the surrounding page (or JavaScript which has been injected into the page by a plugin like GM). It resembles the AS1 api, but it has some subtle differences, and it's really a different beast. I'm not sure it's even on Ruffle's radar at this point (and it would probably be quite low on the priority ladder if it is). {{User:Phlip/sig}} 13:05, 5 January 2021 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2021-01-05T13:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Yo */ reply for Stux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
===Version 4.4 (11 Mar, 2018)===&lt;br /&gt;
* Run on HTTPS pages (NB: Greasemonkey/Tampermonkey only, not in Chrome extension).&lt;br /&gt;
* Run on Tampermonkey on Chrome.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;br /&gt;
::The latest TamperMonkey implements both APIs, actually. In my own scripts, that actually tripped me up at first. I had to test for the absence of GM_ functions for GM4, rather than testing for the GM object. &lt;br /&gt;
::Also, I've actually had to roll back to 4.0.65 to get full compatibility. --{{User:Trlkly/sig}} 01:15, 11 March 2018 (UTC)&lt;br /&gt;
:::So, good news: I figured out [https://github.com/mrphlip/allinone/commit/e28a89b37ef40854d8497dfc27483b1e625407ae what was wrong on Tampermonkey], so the latest script seems to work there now. Bad news: I can't get the HTTPS pages working in the Chrome extension proper for now... because the calls to the Wiki to download subtitles etc are blocked as mixed content, and the workaround for that means doing something more fancy with the Chrome stuff than just stuffing a Greasemonkey script inside a CRX and going to town. I'll look into it when I get the chance, but no promises on anything soon. {{User:Phlip/sig}} 11:48, 11 March 2018 (UTC)&lt;br /&gt;
::::Thanks for the fix. It works for me, too. Personally, I'm fine with using it on Tampermonkey. It frees up space in my rows of addon buttons. The only problem is that installation/updating is annoying, since I have to copy and paste. The &amp;amp;fakeextension=.user.js URL trick doesn't seem to trigger TM's install dialog. {{User:Trlkly/sig}} 21:41, 12 March 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Yo ==&lt;br /&gt;
&lt;br /&gt;
Will you update Homestar All-in-One for Ruffle?&lt;br /&gt;
:From what I've found, poking around in Ruffle so far, it doesn't seem to have a lot of the external API needed to interface with a script like this... there doesn't seem to be a call to get where the movie is currently playing, for instance, which would make things like the seekbar and the subtitles impossible. I'll keep an eye on their developments, but currently it's not really an option. {{User:Phlip/sig}} 12:02, 5 January 2021 (UTC)&lt;br /&gt;
::Not so quick question: is the external API that this script needs part of [https://github.com/ruffle-rs/ruffle/issues/310 AVM1] or [https://github.com/ruffle-rs/ruffle/issues/1368 AVM2/AS3]? (Or &amp;quot;Yes&amp;quot;, or neither?)  Is it possible to tell if one or more issues have been raised for this external API from the two master issues linked? (Sorry I'm still a little hazy on the difference between AVM0/1/2 and ActionScript and whatever else constitutes as part of the Flash architecture.) --[[User:Stux|Stux]] 12:57, 5 January 2021 (UTC)&lt;br /&gt;
:::It's not really the same thing... those ActionScript whatevers all deal with the scripts that are running _inside_ the SWF. So, like, what all the games are implemented in, all the buttons and clickable Easter eggs, and whatnot. They're internal APIs inside the Flash object. What I'm looking at is an external API exposed by the Flash plugin to the host... for our purposes, that means JavaScript in the surrounding page (or JavaScript which has been injected into the page by a plugin like GM). It resembles the AS1 api, but it has some subtle differences, and it's really a different beast. I'm not sure it's even on Ruffle's radar at this point (and it would probably be quite low on the priority ladder if it is). {{User:Phlip/sig}} 13:05, 5 January 2021 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2021-01-05T12:02:58Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Yo */ reply for anon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
===Version 4.4 (11 Mar, 2018)===&lt;br /&gt;
* Run on HTTPS pages (NB: Greasemonkey/Tampermonkey only, not in Chrome extension).&lt;br /&gt;
* Run on Tampermonkey on Chrome.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;br /&gt;
::The latest TamperMonkey implements both APIs, actually. In my own scripts, that actually tripped me up at first. I had to test for the absence of GM_ functions for GM4, rather than testing for the GM object. &lt;br /&gt;
::Also, I've actually had to roll back to 4.0.65 to get full compatibility. --{{User:Trlkly/sig}} 01:15, 11 March 2018 (UTC)&lt;br /&gt;
:::So, good news: I figured out [https://github.com/mrphlip/allinone/commit/e28a89b37ef40854d8497dfc27483b1e625407ae what was wrong on Tampermonkey], so the latest script seems to work there now. Bad news: I can't get the HTTPS pages working in the Chrome extension proper for now... because the calls to the Wiki to download subtitles etc are blocked as mixed content, and the workaround for that means doing something more fancy with the Chrome stuff than just stuffing a Greasemonkey script inside a CRX and going to town. I'll look into it when I get the chance, but no promises on anything soon. {{User:Phlip/sig}} 11:48, 11 March 2018 (UTC)&lt;br /&gt;
::::Thanks for the fix. It works for me, too. Personally, I'm fine with using it on Tampermonkey. It frees up space in my rows of addon buttons. The only problem is that installation/updating is annoying, since I have to copy and paste. The &amp;amp;fakeextension=.user.js URL trick doesn't seem to trigger TM's install dialog. {{User:Trlkly/sig}} 21:41, 12 March 2018 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Yo ==&lt;br /&gt;
&lt;br /&gt;
Will you update Homestar All-in-One for Ruffle?&lt;br /&gt;
:From what I've found, poking around in Ruffle so far, it doesn't seem to have a lot of the external API needed to interface with a script like this... there doesn't seem to be a call to get where the movie is currently playing, for instance, which would make things like the seekbar and the subtitles impossible. I'll keep an eye on their developments, but currently it's not really an option. {{User:Phlip/sig}} 12:02, 5 January 2021 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Cheat_Commandos-_Blue_Laserdisc_Challenge_Playthrough</id>
		<title>Cheat Commandos- Blue Laserdisc Challenge Playthrough</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Cheat_Commandos-_Blue_Laserdisc_Challenge_Playthrough"/>
				<updated>2020-03-31T06:31:04Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;redirect to Blue Laserdisc Challenge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Blue Laserdisc Challenge]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip</id>
		<title>User talk:Phlip</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip"/>
				<updated>2019-08-20T12:55:38Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Hey there Philp! */ reply to JeffyTheWikiMan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{/Archives}}&lt;br /&gt;
&lt;br /&gt;
== #hrwiki-fanstuff-rc ==&lt;br /&gt;
&lt;br /&gt;
Hi. Is it possible at all to create a fanstuff recent change IRC channel? I know it would certainly not be as active as this here RC, but it would still be quite helpful. Please? --TheDenzel (not logged in)&lt;br /&gt;
:It would be theoretically possible, but I don't think there's any plans for it at the moment... it's been quite a while since the RC channel for this wiki was set up, I've forgotten most of it... I'd have to figure out most of how I did it from scratch again... and I've got other things to do that are more important. {{User:Phlip/sig}} 14:34, 2 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Homestar video player? ==&lt;br /&gt;
&lt;br /&gt;
Hi there Phlip, I was wondering if you still had that Greasemonkey version of the homestarrunner.com video player thingy that enabled it to play/pause and fast forward and such.  I downloaded it a while ago and loved it, but I accidentally uninstalled Greasemonkey (Long story) and it's been lost.  Can I get a link for the script or whatever it's called?  Thanks!  {{User:GuardDuck/sig}} 07:37, 23 December 2008 (UTC)&lt;br /&gt;
:You mean the fabulous [[User:Phlip/Greasemonkey|all-in-one Homestar script]].{{User:Loafing/sig}} 10:59, 23 December 2008 (UTC)&lt;br /&gt;
::Ah, indeed I did.  Thank you very much, Loafing!  It works wonders for all my homestar-watchingness.  {{User:GuardDuck/sig}} 01:34, 24 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Stinkoman 20X6 Cheat version ==&lt;br /&gt;
&lt;br /&gt;
Can you send me a link to it? I can't find it anywhere after the fanstuff wiki went down.--{{User:AWMPSCE/sig}} 17:02, 10 January 2009 (UTC)&lt;br /&gt;
:[http://www.mrphlip.com/stinkoman/ Here]. {{User:Phlip/sig}} 01:31, 11 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hey! ==&lt;br /&gt;
&lt;br /&gt;
Hey! You live in Australia? That's so cool! I wanna live there! I have a question: does it snow there?&lt;br /&gt;
Shmank you! [[User:Stark Traurig|Stark Traurig]] 18:59, 25 January 2009 (UTC)&lt;br /&gt;
:In order: Hi! Yep. Not really, it's the middle of summer right now, and it's seriously hot. Yes, you do. Depends where you are... most of the country's pretty snow-free, but the [[Wikipedia:Great Dividing Range|mountains]] tend to get a some snow... Where I grew up in the mountains, it would snow a little each year, but rarely settled... just melted when it hit the ground. I know there are some places in the southern mountains that consistently get snow every year. I think Tasmania gets snowy too... I haven't really been down there in the winter. {{User:Phlip/sig}} 02:18, 26 January 2009 (UTC)&lt;br /&gt;
::Hehe, yeah. We're in the middle of winter right now. I shoveled snow for like 2 hours the other day. I was just lucky it was the light, fluffy kind and not the wet, heavy stuff. [[User:Stark Traurig|Stark Traurig]] 21:13, 26 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Deleted Theme Song Video subtitles ==&lt;br /&gt;
&lt;br /&gt;
Hey man, I was watching HR today and noticed there are no subtitles for [http://www.homestarrunner.com/video.html| http://www.homestarrunner.com/video.html].  I considered creating them and then noticed you deleted the original page with the entry:&lt;br /&gt;
&lt;br /&gt;
05:32, 19 August 2008 Phlip (Talk | contribs) deleted &amp;quot;Subtitles:video/en&amp;quot; ‎ (nonsense)&lt;br /&gt;
&lt;br /&gt;
Is there a reason for this page to not exist?  I would think the theme song should have subtitles too...&lt;br /&gt;
Thanks -[[User:Dutchscout|Dutchscout]] 08:57, 21 February 2009 (UTC)&lt;br /&gt;
:I've already mentioned why there aren't subtitles at [[Subtitles talk:video/en]]... As for that deletion, it's because some anonny made the page with gibberish. There was never any actual subtitles on that page. {{User:Phlip/sig}} 09:00, 21 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HELP! ==&lt;br /&gt;
I tried to set up a new email account but I ended up needing a password which I don't know.  And that was after I changed my email on the forum.  Since I can't check my email, I can't reactivate my account, so I can't access the forum.  Could you work your sysop magic and activate my account for me? {{User:Coach z's cool/sig}} 18:55, 1 March 2009 (UTC)&lt;br /&gt;
:I changed the email address of your forum account to match the one listed in your wiki preferences. You should be able to reactivate it from there. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 05:30, 2 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==  Homestar Persona ==&lt;br /&gt;
This is sort of a strange question, but you seem to be the techie here. You know that new add-on for Firefox called Personas? I think it would be cool to have a Homestar Persona on there.  So if you ever have any free time too work on it, Firefox would be even cooler. I'd make it myself, but as you know, I'm no techie. Later! {{User:Coach z's cool/sig}} 17:39, 31 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== DS Homebrew ==&lt;br /&gt;
&lt;br /&gt;
Hey, fellow Aussie!  I was wondering, with the Homebrew Games, did you get the flash file and just change the extention to .nds or something, or did youu have to put it through a program?  This is because I want to know if it is possible to change a .wad version of [[Homestar Ruiner]] into one that can be played on the DS, preferably as a .nds file.  I tired just changing the extention, but that just gives me a white screen.  If you could respond, that would be great.  {{User:Open Source Greg/sig}} 08:40, 11 May 2009 (UTC)&lt;br /&gt;
:Neither. Converting those games to the DS wasn't some simple process... I had to rebuild the game from scratch. I did decompile the originals to get at the sprites and the code... but in both cases that's only so I could use them as a reference when re-creating it. (The sounds I could decompile and pull across directly... the music in pop_tire I had to recreate, though, otherwise it would've been too big.) Converting any of the SBCG4AP games is probably impossible... even if you did manage to port them, the DS probably isn't powerful enough to run them (the advantage of the Videlectrix games is that they are, by design, simple enough to run on the lower-power hardware... since that's what they're imitating). But if you want to give it a try, go ahead... the toolchain can be downloaded [http://www.devkitpro.org/ here]... that's designed for C, and works fine in C++ (which is what I used to make my two games)... but you should be able to use any language GCC can compile. [http://nocash.emubase.de/gbatek.htm This] is also a very useful page... once you understand all of that, writing DS games is pretty straightforward. Feel free to ask me if you want a hand with any of the specifics. {{User:Phlip/sig}} 09:11, 11 May 2009 (UTC)&lt;br /&gt;
::Wow, thanks a bunch.  I think I might try first off with recreating RhinoFeeder for DS, to make sure I can do it.  Do I just need the flash file, and run it through that?  Also, is it possible for a 15 year old with no computer programming experience at all to do this?  Just wondering...{{User:Open Source Greg/sig}} 09:33, 11 May 2009 (UTC)&lt;br /&gt;
:::In short? No and no. {{User:Phlip/sig}} 09:41, 11 May 2009 (UTC)&lt;br /&gt;
::::Well, I'm going to try anyway.  I hope I can do it.  If not, I'll leave it to the professionals.  But, it can't help to try.  Also, about how long do you spend trying to make a ds game from the Videlectrix game?  I want to know how much effort I'm up against.  {{User:Open Source Greg/sig}} 10:14, 11 May 2009 (UTC)&lt;br /&gt;
:::::It was a while ago, so I don't remember the exact timeframes... but from experienced programmer who'd never written for the DS to finished was probably about a month or so. Much of which was spent learning how the DS worked... the actual game itself was maybe a week or two (but I got lucky, the pop_tire Flash file decompiled really cleanly, so it was a really good reference to work from... also, I didn't have a job at the time, so I was working pretty much full-time on the game). But that was mostly thanks to the fact that I already knew C inside out, and had worked on embedded systems before (so I already knew what, say, a memory-mapped register is... which is handy, since the DS is full of them). If I had to learn all of that from scratch, it would've taken much longer. And for someone who hasn't done any programming before... I'd very much not recommend the DS as a starting platform. If you really want to learn how to program, I'd suggest Python (on a full computer, not a games console) to start with... much easier to learn. Once you get good at programming in general, then learn C, and how stuff works on the low level. And when you get good at ''that'', ''then'' consider switching to an embedded platform, like the DS (or whatever new handheld is out by then). Really, it'll make it much easier in the long run. {{User:Phlip/sig}} 12:18, 11 May 2009 (UTC)&lt;br /&gt;
::::::Yeah, I gave up.  I don't have a clue how to do this.  I'll leave it to you.  Speaking of which, why don't you try and do another one?  I have Pop:Tire and Secret Collect on my CycloDS, but another one would be awexome.  Sorry if I seem pushy or used up your time with this FAIL!  Oh, and my cousin is a computer programmer (he is making a game for EA along with his friend at the moment), but I doubt he could help me... {{User:Open Source Greg/sig}} 12:37, 11 May 2009 (UTC)&lt;br /&gt;
:::::::Yeah, I don't really have the time to start a new major project any time soon... being a full-time professional programmer means I do a lot less just coding for fun... rather spend my time away from work doing [[not]] exactly the same thing as at work, y'know? I do want to remake some more Videlectrix games at some point (people are always asking for Stinkoman 20X6) but don't hold your breath (unless your able to hold your breath for several years, in which case ''do'' hold it, and impress people). {{User:Phlip/sig}} 12:57, 11 May 2009 (UTC)&lt;br /&gt;
::::::::Yeah.  Stinkoman would be too gard, though.  You have to be able to use the several different buttons at the same time, and even the invisable ones.  Thanks neway, and i will hold my breath...for several years...and probably die.&lt;br /&gt;
&lt;br /&gt;
== hey ==&lt;br /&gt;
&lt;br /&gt;
hey man, how do i make a new page very quick for a new toon? (like next week) {{unsigned|Deesejaiman|13:32, 1 June 2009 (UTC)}}&lt;br /&gt;
:Easiest way I know of is to just copy the page of an earlier toon, and remove all the stuff... leaving basically just the headers and the formatting templates. I know there was a [[:Template:newsbemail|template]] to quickly set up pages for SBEmails, but I don't think there is a similar template for the other toon types. Maybe we should have one. {{User:Phlip/sig}} 14:26, 1 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== subtitles ==&lt;br /&gt;
&lt;br /&gt;
Hey, I'm having a weird XML error and I was wondering if you could help me. (I know you're probably busy right now... :B) - {{User:Catjaz63/sig}} 23:45, 29 April 2015 (UTC) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Error in XML: error on line 231 at column 14: Opening and ending tag mismatch: line line 0 and transcript&amp;quot;&lt;br /&gt;
:Catjaz63: While I cannot help you with the issue itself, I am pretty sure that Phlip would ask for more information about your issue, such as: what page/toon were you on?  what tool were you using? (the greasemonkey script or the old php subtitles tool -- the latter is no longer maintained)  and what browser and version you are using.  Good luck! --[[User:Stux|Stux]] 23:50, 29 April 2015 (UTC)&lt;br /&gt;
::I'm using Google Chrome and the Homestar-all-in-one. The page I'm on is [[I Killed Pom Pom]] and I'm using my own subtitles, which can be found [http://pastebin.com/uL5yd3JP here]. - {{User:Catjaz63/sig}} 00:03, 30 April 2015 (UTC)&lt;br /&gt;
:::Ah! I see! That makes a lot more sense now.  And looking again at the error message I would suggest that you carefully look through your transcript XML and make sure that all your XML tags are matched (so each &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;line&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag has a matching &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag, and same for tags like sfx, strongbad, etc.)  Unlike HTML, XML is very unforgiving. --[[User:Stux|Stux]] 00:56, 30 April 2015 (UTC)&lt;br /&gt;
::::''uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuugh'' &amp;lt;nowiki&amp;gt;222 &amp;lt;line start...&amp;gt;s and 229 &amp;lt;/line&amp;gt;s.&amp;lt;/nowiki&amp;gt; Fridge. -{{User:Catjaz63/sig}} 01:02, 30 April 2015 (UTC)&lt;br /&gt;
:::::Fixed it! Sorry for posting on the talk page. :B - {{User:Catjaz63/sig}} 01:22, 30 April 2015 (UTC)&lt;br /&gt;
::::::Sweet! Excellent news! I don't think Phlip would mind too much.  Glad you got it fixed and thanks for your hard work! :) --[[User:Stux|Stux]] 01:47, 30 April 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Me Being Annoying ==&lt;br /&gt;
&lt;br /&gt;
Still a little curious about [[User_talk:Phlip/Archive_3#mrphlip.com/wiki/|this]] after 9 years. Sorry this is probably annoying. Just feeling nostalgic. {{User:The thing/sig}} 02:46, 20 April 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hey there Philp! ==&lt;br /&gt;
&lt;br /&gt;
I added a link to your DS Version of Population: Tire to the page for, well, Population: Tire! (in the external links section, of course)&lt;br /&gt;
Also, the DS version of pop: tire CAN work using DS Download Play, since there's no DLDI crap going on there. Only side effect is that the Cold One's and those darn birds look all glitched up. -Crapfully, [[User:JeffyTheWikiMan|JeffyTheWikiMan]] 12:49, 20 August 2019 (UTC)&lt;br /&gt;
&lt;br /&gt;
Edit: Holy Craaap! you made a DS Version of Secret Collect, Too?! Man. You are just AMAZING.&lt;br /&gt;
:Thanks for the thought, but we try to keep the main section of the wiki to official H*R stuff, and not fan-created works. It's just simpler that way. {{User:Phlip/sig}} 12:55, 20 August 2019 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Population:_Tire</id>
		<title>Population: Tire</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Population:_Tire"/>
				<updated>2019-08-20T12:54:21Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Remove fan product&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{gamenav|New Game|pop_tire|Peasant's Quest|RhinoFeeder}}&lt;br /&gt;
&lt;br /&gt;
[[Image:poptiregame.PNG|thumb|Population... TIIIRREEE!]]&lt;br /&gt;
'''Population: Tire''' is a game by [[Videlectrix]] that takes place in [[Strong Badia]] in which you use your mouse cursor to keep the [[Tire]] bouncing in the air as long as possible. Increase your score multiplier by hitting birds, balloons, {{Film|The Cheat}} and {{Film|Strong Sad}}, and beware of wind changes and flying [[Cold One]]s!&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Monday, June 23, 2003&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' I FEEL ASLEEP!&lt;br /&gt;
&lt;br /&gt;
'''Viidelectrix Page Title:''' pop_tire&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
== Premise ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;font-family: monospace; padding:8px; border: 1px solid #000; width:25em&amp;quot;&amp;gt;&lt;br /&gt;
IN THE YEAR 19xx, THE CITIZENS OF&amp;lt;br&amp;gt;&lt;br /&gt;
STRONGBADIA&amp;lt;!--sic--&amp;gt; ARE TERRORIZED BY A&amp;lt;br&amp;gt;&lt;br /&gt;
FACELESS FOE. AS A TOP SECRET CRACK&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;COMMANDO OPERATIVE&amp;lt;/span&amp;gt;, IT IS YOU JOB TO&amp;lt;br&amp;gt;&lt;br /&gt;
PROTECT THE LAST REMAINING CITIZEN FROM&amp;lt;br&amp;gt;&lt;br /&gt;
TOUCHING THE TAINTED SOIL. YOU &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;ARE&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
SOLDIER!&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
SCORE POINTS BY BOUNCING TIRE WITH&amp;lt;br&amp;gt;&lt;br /&gt;
MOUSE. HIT INFIDELS TO INCREASE THE&amp;lt;br&amp;gt;&lt;br /&gt;
VALUE OF EACH BOUNCE. STRING COMBOS TO&amp;lt;br&amp;gt;&lt;br /&gt;
PREVENT &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;THE&amp;lt;/span&amp;gt; VALUE FROM DROPPING OVER&amp;lt;br&amp;gt;&lt;br /&gt;
TIME.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
YOU ONE ARE OF BRAVE FEW. ACCEPT YOUR&amp;lt;br&amp;gt;&lt;br /&gt;
MISSION &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;AND STEP&amp;lt;/span&amp;gt; FOURTH.&amp;lt;br&amp;gt;&lt;br /&gt;
AND REMEMBER; NEVER, EVER BREAK A COLD&amp;lt;br&amp;gt;&lt;br /&gt;
ONE.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: In the [[Viidelectrix]] version of the game, &amp;quot;MOUSE&amp;quot; has changed to &amp;quot;TIP OF POINTY FINGER THINGY&amp;quot;, a reference to using the [[Wikipedia:Wii Remote|Wii Remote]].&lt;br /&gt;
&lt;br /&gt;
== Scoring Chart ==&lt;br /&gt;
The main objective of this game is to keep the Tire in the air as long as possible. You earn one point times your Multiplier for each bounce, and your score resets to 0 when the Tire hits the ground.  The Multiplier appears when it is 2x or higher &amp;amp;mdash; otherwise, it is always 1x and never falls below this value. The Multiplier decreases by 1x every 5 seconds if you don't hit any objects.&lt;br /&gt;
&lt;br /&gt;
You can increase your Multiplier by hitting various objects:&lt;br /&gt;
&lt;br /&gt;
*Balloon: +1x&lt;br /&gt;
*Bird: +2x&lt;br /&gt;
*The Cheat: +1x&lt;br /&gt;
*Cold One: -5x&lt;br /&gt;
&lt;br /&gt;
The Cheat can be hit repeatedly, but each time you hit him, he reverses direction and starts walking faster.&lt;br /&gt;
&lt;br /&gt;
== Strong Sad Effects ==&lt;br /&gt;
&lt;br /&gt;
Strong Sad occasionally appears from [[behind the fence]]. Hitting him will award the effect indicated in his thought balloon:&lt;br /&gt;
&lt;br /&gt;
*2X: Your multiplier is increased by 2.&lt;br /&gt;
*-2X: Your multiplier is decreased by 2.&lt;br /&gt;
*BIG: The Tire increases in size.&lt;br /&gt;
*FLY: The Tire falls more slowly.&lt;br /&gt;
*SAD: Your multiplier is reduced to 1. ''(The word in the thought balloon changes to '''x0''', but you can still score 1 point per bounce.)''&lt;br /&gt;
&lt;br /&gt;
When you get FLY or BIG, the sound is different when you hit the tire.&lt;br /&gt;
&lt;br /&gt;
== Fun Facts ==&lt;br /&gt;
===Explanations===&lt;br /&gt;
&lt;br /&gt;
*The [[Deliberately Poor English|bad grammar]] in the introduction is a reference to the language found in old video games that were poorly translated from Japanese to English.&lt;br /&gt;
*The tire could not be hitting any of the bonus entities except The Cheat; the tire's shadow is in a separate plane from the bird, balloon, and Strong Sad.&lt;br /&gt;
&lt;br /&gt;
===Trivia===&lt;br /&gt;
*When the Tire hits the ground, your Multiplier resets to 1x, and the effect you receive depends on your score:&lt;br /&gt;
** '''0-2:''' Nothing.&lt;br /&gt;
** '''3-99:''' A sad-sounding sound effect.&lt;br /&gt;
** '''100-499:''' A quick, energetic sound effect.&lt;br /&gt;
** '''500-999:''' A more complicated sound effect, and a plane flies by towing a random message.&lt;br /&gt;
** '''1000+:''' A dramatic tune plays, and a plane flies by towing a random message.&lt;br /&gt;
*The possible messages you can see behind the plane are:&lt;br /&gt;
**YOU RULE&lt;br /&gt;
**PURE FUN&lt;br /&gt;
**GIVE IT UP&lt;br /&gt;
**FHI-FIVE&lt;br /&gt;
**POP:YOU&lt;br /&gt;
**ROCK/ROLL&lt;br /&gt;
**GOOD ONE&lt;br /&gt;
**TIRE-TASTIC!&lt;br /&gt;
**JAM ON IT&lt;br /&gt;
**LET GO&lt;br /&gt;
**PARTY.WOO!&lt;br /&gt;
**PARDON ME?&lt;br /&gt;
**X-L-NT&lt;br /&gt;
**[[X it out|GROW IT OUT]]&lt;br /&gt;
**PARENTAL!!&lt;br /&gt;
**GOSH!&lt;br /&gt;
**LOVIN' IT&lt;br /&gt;
**SPANKIN'!&lt;br /&gt;
**YOU 4 EVA&lt;br /&gt;
**YOU.COM&lt;br /&gt;
**YOU.CALM&lt;br /&gt;
**WISHIWASU&lt;br /&gt;
**WHO'S THAT?&lt;br /&gt;
**THE BOUNCA!&lt;br /&gt;
*The background reacts to the computer system time, similar to how the alarm clock reacts in [[12:00]]. For example, if you play this game at 2 in the morning, you will see a night sky. It alternates within 24 hours, starting with midnight:&lt;br /&gt;
**Dark Blue (Beginning)&lt;br /&gt;
**Dark Indigo&lt;br /&gt;
**Dark Brown&lt;br /&gt;
**Orange&lt;br /&gt;
**Bright Cyan Blue&lt;br /&gt;
**Bright Blue&lt;br /&gt;
**Dark Brown&lt;br /&gt;
**Orange&lt;br /&gt;
**Dark Indigo&lt;br /&gt;
**Dark Blue (End)&lt;br /&gt;
*This is the first Videlectrix game to have the [[Videlectrix Mascot]] appear.&lt;br /&gt;
*In the game [[Awexome Cross]], The Cheat can fit inside the tire and roll along in it.  In this game, however, The Cheat appears too large to be able to fit in the tire.&lt;br /&gt;
*Cold Ones start appearing when you reach a x5 multiplier, and become more frequent when you reach x10.&lt;br /&gt;
&lt;br /&gt;
===Glitches===&lt;br /&gt;
*If you disable play, the multiplier will be frozen. You will not be able to hit any other objects or obstacles, and no new objects or obstacles will appear.&lt;br /&gt;
**The tire will still be able to bounce, and you will still be able to score points.&lt;br /&gt;
&lt;br /&gt;
===Inside References===&lt;br /&gt;
* The bird in this game also flies across the screen in [[take-a-break.exe]], which appeared in [[huttah!]].&lt;br /&gt;
** The same bird is also seen flying over [[Bubs]]'s [[Baloney Sammich Truck]] in [[Weclome Back]].&lt;br /&gt;
*The title screen is of the second-to-last shot in [[flag day]].&lt;br /&gt;
&lt;br /&gt;
===Real-World References===&lt;br /&gt;
*This game's loading screen is a spoof of the [[Wikipedia:Commodore 64|Commodore 64]] boot screen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;email&amp;quot; style=&amp;quot;background-image:none;border:4px solid #87cefa;background:#0000cd;color:#87cefa&amp;quot;&amp;gt;*** COMPYDORE 64 BASIC V2 ***&amp;lt;br /&amp;gt;&lt;br /&gt;
64K RAM SYSTEM  38911 BASIC BYTES FREE&amp;lt;br /&amp;gt;&lt;br /&gt;
READY.&amp;lt;br /&amp;gt;&lt;br /&gt;
LOAD &amp;quot;*&amp;quot;,8,1&amp;lt;br /&amp;gt;&lt;br /&gt;
SEARCHING FOR *&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
READY.&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*The loading screen used to read &amp;quot;9,1&amp;quot;, but was later changed to read &amp;quot;8,1&amp;quot;.  In the C-64, &amp;quot;9,1&amp;quot; told the computer to access the second floppy drive, if one was connected.  The &amp;quot;,1&amp;quot; meant the program had a machine code component (for the technically-minded, it indicated that the loaded program shouldn't be relocated in memory).&lt;br /&gt;
:*This game plays in stereo, even though the C-64 was not capable of stereo sound.&lt;br /&gt;
:*In the [[Viidelectrix]] version of this game, the word &amp;quot;Compydore&amp;quot; on the loading screen was changed to &amp;quot;Compiidore&amp;quot; to refer to the [[Wikipedia:Wii|Nintendo Wii]].&lt;br /&gt;
[[Image:mgearsleepy-feelasleep.gif|thumb|250px|I FEEL ASLEEP!!]]&lt;br /&gt;
* The page title &amp;quot;I FEEL ASLEEP!&amp;quot; quotes the game ''[[Wikipedia:Metal Gear (video game)|Metal Gear]]'' for the [[Nintendo#Nintendo Entertainment System (NES)|NES]].&lt;br /&gt;
** There is a C-64 version of Metal Gear, based on the NES version, but it appears to lack this quote. The Japanese version also lacks this scene.&lt;br /&gt;
* The seagull graphic and several of the sound effects are taken from the game ''[[Wikipedia:California Games|California Games]]'' (1988).&lt;br /&gt;
* Other sound effects (including hitting The Cheat and breaking a Cold One) are taken from the game ''[[Wikipedia:Wizball|Wizball]]'', a surrealistic shooter game for the C-64.&lt;br /&gt;
* Hitting a balloon makes the same sound as running through an explosion in the C-64 game &amp;quot;Paradroid&amp;quot;.&lt;br /&gt;
* When the tire drops and you have 3-99 score, the sound effect played is from the C64 game &amp;quot;Park Patrol.&amp;quot;&lt;br /&gt;
* The title screen [[Wikipedia:MIDI|MIDI music]] uses square waves from the [[Wikipedia:General MIDI|General MIDI]] specification.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward===&lt;br /&gt;
*In [[8-Bit is Enough]], [[Strong Bad]] says &amp;quot;Load PQuest,8,1&amp;quot; when entering [[Peasantry]].&lt;br /&gt;
*A DS homebrew version of this game created by [[User:Phlip|Phlip]] was [[Weekly Fanstuff 2007#WF-2007-05-24|featured]] as a [[Weekly Fanstuff]] in 2007.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*play [[HR:pop_tire.html|Population:Tire]]&lt;br /&gt;
*play the [[HR:pop_tire.swf|Flash file for Population:Tire]]&lt;br /&gt;
*play the [[Videlectrix:vii/pop_tire.html|Wii version of the game]]&lt;br /&gt;
*play the [[Videlectrix:vii/pop_tire.swf|Wii version of the game (Flash file)]]&lt;br /&gt;
*listen to the [[Videlectrix:songs/poptire theme.mp3|Game Music]]&lt;br /&gt;
&lt;br /&gt;
{{VidelectrixGames}}&lt;br /&gt;
[[Category:Videlectrix Games]][[Category:Videlectrix Mascot Filmography]][[Category:Viidelectrix]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2018-03-11T11:48:59Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Version 4.4; reply to User:Trlkly|&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
===Version 4.4 (11 Mar, 2018)===&lt;br /&gt;
* Run on HTTPS pages (NB: Greasemonkey/Tampermonkey only, not in Chrome extension).&lt;br /&gt;
* Run on Tampermonkey on Chrome.&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;br /&gt;
::The latest TamperMonkey implements both APIs, actually. In my own scripts, that actually tripped me up at first. I had to test for the absence of GM_ functions for GM4, rather than testing for the GM object. &lt;br /&gt;
::Also, I've actually had to roll back to 4.0.65 to get full compatibility. --{{User:Trlkly/sig}} 01:15, 11 March 2018 (UTC)&lt;br /&gt;
:::So, good news: I figured out [https://github.com/mrphlip/allinone/commit/e28a89b37ef40854d8497dfc27483b1e625407ae what was wrong on Tampermonkey], so the latest script seems to work there now. Bad news: I can't get the HTTPS pages working in the Chrome extension proper for now... because the calls to the Wiki to download subtitles etc are blocked as mixed content, and the workaround for that means doing something more fancy with the Chrome stuff than just stuffing a Greasemonkey script inside a CRX and going to town. I'll look into it when I get the chance, but no promises on anything soon. {{User:Phlip/sig}} 11:48, 11 March 2018 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2018-03-11T11:41:32Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Version 4.4 - work with HTTPS urls&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;cachedodge=4.4.101&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.4&lt;br /&gt;
// 2018-03-11&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.4.&lt;br /&gt;
// @version       4.4.101&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascriptfakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         https://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         https://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         https://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         https://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         https://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(async function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = async function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.getValue &amp;amp;&amp;amp; await GM.getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true))&lt;br /&gt;
			return 2; // Use GM4 methods&lt;br /&gt;
		else if (typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true))&lt;br /&gt;
			return 1; // Use GM3 methods&lt;br /&gt;
		else&lt;br /&gt;
			return 0; // Use native methods&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = await Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = async function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions == 2)&lt;br /&gt;
			return await GM.getValue(key, def);&lt;br /&gt;
		else if (this.useGMFunctions == 1)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions == 2)&lt;br /&gt;
			GM.setValue(key, value);&lt;br /&gt;
		else if (this.useGMFunctions == 1)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function(url, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;
			if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest) {&lt;br /&gt;
				GM.xmlHttpRequest({&lt;br /&gt;
					method: method,&lt;br /&gt;
					url: url,&lt;br /&gt;
					onload: res =&amp;gt; resolve({text: res.responseText, status: res.status, statusText: res.statusText, headers: res.responseHeaders}),&lt;br /&gt;
					onerror: res =&amp;gt; reject(`${res.status} ${res.statusText}`)&lt;br /&gt;
				});&lt;br /&gt;
			} else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;) {&lt;br /&gt;
				GM_xmlhttpRequest({&lt;br /&gt;
					method: method,&lt;br /&gt;
					url: url,&lt;br /&gt;
					onload: res =&amp;gt; resolve({text: res.responseText, status: res.status, statusText: res.statusText, headers: res.responseHeaders}),&lt;br /&gt;
					onerror: res =&amp;gt; reject(`${res.status} ${res.statusText}`)&lt;br /&gt;
				});&lt;br /&gt;
			} else {&lt;br /&gt;
				var xhr = new XMLHttpRequest();&lt;br /&gt;
				xhr.onload = () =&amp;gt; resolve({text: xhr.responseText, status: xhr.status, statusText: xhr.statusText, headers: xhr.getAllResponseHeaders()});&lt;br /&gt;
				xhr.onerror = () =&amp;gt; reject(`${xhr.status} ${xhr.statusText}`);&lt;br /&gt;
				xhr.open(method, url);&lt;br /&gt;
				xhr.send();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = async function downloadWiki(page)&lt;br /&gt;
	{&lt;br /&gt;
		for (var timesredirected = 0; timesredirected &amp;lt; 3; timesredirected++) {&lt;br /&gt;
			var res = await this.downloadPage(this.buildWikiUrl(page));&lt;br /&gt;
	&lt;br /&gt;
			// check for redirects&lt;br /&gt;
			var matches = res.text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
			if (matches)&lt;br /&gt;
			{&lt;br /&gt;
				// Get the page name out of the redirect text&lt;br /&gt;
				var text = matches[1];&lt;br /&gt;
				if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
					text = matches[1];&lt;br /&gt;
				if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
					text = matches[1];&lt;br /&gt;
				page = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				return res.text;&lt;br /&gt;
		}&lt;br /&gt;
		throw &amp;quot;Too many redirects&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.parseWikiXML = function(text)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			throw &amp;quot;Error in XML:\n&amp;quot; + e.toString();&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				throw (&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				throw (&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				throw (&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return doc;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = async function currentFrame(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			var a = await playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
			// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
			// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
			// that we're paused.&lt;br /&gt;
			if (a != this.guessisplaying.lastframe)&lt;br /&gt;
			{&lt;br /&gt;
				this.guessisplaying.lastframe = a;&lt;br /&gt;
				this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
				this.guessisplaying.state = true;&lt;br /&gt;
			}&lt;br /&gt;
			else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
			{&lt;br /&gt;
				this.guessisplaying.state = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			return a;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return await playercomm.currentFrame(flashmovie)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = async function totalFrames(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			return await playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			return await playercomm.totalFrames(flashmovie)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = async function isPlaying(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			return this.guessisplaying.state;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return await playercomm.isPlaying(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = async function framesLoaded(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			return await playercomm.targetFramesLoaded(flashmovie, '/videoplayer')&lt;br /&gt;
		else&lt;br /&gt;
			return await playercomm.targetFramesLoaded(flashmovie, '/')&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = async function isLoaded(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await this.currentFrame(flashmovie);&lt;br /&gt;
		return frame &amp;gt;= 0;&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.waitLoaded = function(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		var useglobal = false;&lt;br /&gt;
		if (!flashmovie) {&lt;br /&gt;
			useglobal = true;&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		}&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return new Promise((resolve, reject) =&amp;gt; reject());&lt;br /&gt;
	&lt;br /&gt;
		if (useglobal &amp;amp;&amp;amp; this.loadedPromise)&lt;br /&gt;
			return this.loadedPromise;&lt;br /&gt;
	&lt;br /&gt;
		async function poll(resolve) {&lt;br /&gt;
			if (await this.isLoaded(flashmovie))&lt;br /&gt;
				resolve();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(poll.bind(this, resolve), 100)&lt;br /&gt;
		}&lt;br /&gt;
		var promise = new Promise(poll.bind(this));&lt;br /&gt;
		if (useglobal)&lt;br /&gt;
			this.loadedPromise = promise;&lt;br /&gt;
		return promise;&lt;br /&gt;
	}&lt;br /&gt;
	Utils.prototype.stop = async function stop(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
			// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
			// go back to state=true&lt;br /&gt;
			await this.currentFrame(flashmovie);&lt;br /&gt;
			this.guessisplaying.state = false;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.stop(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = async function play(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.play(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = async function goto(frame, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame);&lt;br /&gt;
	&lt;br /&gt;
			// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
			// go back to state=true&lt;br /&gt;
			await this.currentFrame(flashmovie);&lt;br /&gt;
			this.guessisplaying.state = false;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.goto(flashmovie, frame);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = async function zoomOut(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 100 * factor);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = async function zoomIn(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 100 / factor);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = async function zoomReset(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = async function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		// Can load the preferences in each module in parallel&lt;br /&gt;
		var start = new Date();&lt;br /&gt;
		var loadpromises = []&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			loadpromises.push(this.modules[i].load());&lt;br /&gt;
		await Promise.all(loadpromises)&lt;br /&gt;
		var end = new Date();&lt;br /&gt;
		console.log(`Loaded prefs in ${end - start}ms`);&lt;br /&gt;
		// Initialise each module in sequence&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			await this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function(elem, frame)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function(elem, target, frame)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function(elem, zoom)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function(elem, scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.load = function()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());&lt;br /&gt;
		globals.modules.updates.cacheDodge();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.load = async function load()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = await utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = await utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = async function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			await this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = async function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		await utils.waitLoaded();&lt;br /&gt;
		await playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = await utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = await utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = async function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			await this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		this.paused = !await utils.isPlaying();&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = async function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		this.paused = !await utils.isPlaying();&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = async function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var tot = await utils.totalFrames();&lt;br /&gt;
		if (tot &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var frame = await utils.currentFrame();&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				frame = 0;&lt;br /&gt;
			if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				var a = tot.toString();&lt;br /&gt;
				var b = (frame+1).toString();&lt;br /&gt;
				while (b.length &amp;lt; a.length)&lt;br /&gt;
					b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
				this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
			}&lt;br /&gt;
			if(!this.dragging)&lt;br /&gt;
			{&lt;br /&gt;
				if (tot &amp;gt; 1)&lt;br /&gt;
					this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
				else&lt;br /&gt;
					this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
				this.paused = !await utils.isPlaying();&lt;br /&gt;
				this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			}&lt;br /&gt;
			var loaded = await utils.framesLoaded();&lt;br /&gt;
			this.loadmeter.style.width = (loaded/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.framecountertext)&lt;br /&gt;
		{&lt;br /&gt;
			this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = async function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		this.paused = await utils.isPlaying();&lt;br /&gt;
		this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
		if (this.paused)&lt;br /&gt;
			await utils.stop();&lt;br /&gt;
		else&lt;br /&gt;
			await utils.play();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = async function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.goto(0);&lt;br /&gt;
		await utils.play();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = async function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		var tot = await utils.totalFrames();&lt;br /&gt;
		await utils.goto(tot - 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = async function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		await utils.goto(frame - 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = async function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		await utils.goto(frame + 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = async function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = async function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = async function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = async function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		var t = await utils.totalFrames();&lt;br /&gt;
		if (t &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			var frame = Math.round(t * pos);&lt;br /&gt;
			await utils.goto(frame);&lt;br /&gt;
		}&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = await utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				/*no await*/ this.doCheckNext();&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.doCheckNext = async function doCheckNext()&lt;br /&gt;
	{&lt;br /&gt;
		try {&lt;br /&gt;
			var res = await utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + (await utils.getPref('cachedodge', 0)), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (res.status == 200 &amp;amp;&amp;amp; res.headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function()&lt;br /&gt;
	{&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = await utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.init = function() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			/*no await*/ this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;https://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;https://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;https://homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = async function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		try {&lt;br /&gt;
			var res = await utils.downloadPage(&lt;br /&gt;
				&amp;quot;https://homestarrunner.com/rando.xml?cachedodge=&amp;quot; + (await utils.getPref('cachedodge', 0))&lt;br /&gt;
			);&lt;br /&gt;
	&lt;br /&gt;
			var parser = new DOMParser();&lt;br /&gt;
			// fix invalid XML...&lt;br /&gt;
			// add missing root element&lt;br /&gt;
			var doc = res.text.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
			doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
			// fix bad ampersands&lt;br /&gt;
			doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
			doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
			var sbemailcounter = 0;&lt;br /&gt;
			this.allrandourls = [];&lt;br /&gt;
			for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				var node = doc.documentElement.childNodes[i];&lt;br /&gt;
				if (node.nodeType == 1)&lt;br /&gt;
				{&lt;br /&gt;
					var type = node.nodeName.toLowerCase();&lt;br /&gt;
					var u = node.getAttribute('u');&lt;br /&gt;
					var n = node.getAttribute('n');&lt;br /&gt;
					if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
					if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						sbemailcounter++;&lt;br /&gt;
						n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
					}&lt;br /&gt;
					if (u)&lt;br /&gt;
						this.allrandourls.push({u: &amp;quot;https://homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
					else&lt;br /&gt;
						this.allrandourls.push({u: &amp;quot;https://homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.filterRando();&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = await utils.getPref('captions', true);&lt;br /&gt;
		this.colours = await utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = await utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = await utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(await utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = await utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		/*no await*/ this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = async function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	&lt;br /&gt;
		try {&lt;br /&gt;
			var xml = await utils.downloadWiki(&amp;quot;Subtitles:Languages&amp;quot;);&lt;br /&gt;
			xml = utils.parseWikiXML(xml);&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			while (this.setting_language.firstChild)&lt;br /&gt;
				this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
			option.selected = true;&lt;br /&gt;
			this.setting_language.appendChild(option);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var pre = document.createElement(&amp;quot;pre&amp;quot;);&lt;br /&gt;
		pre.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(pre);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = async function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			await this.loadCharacters();&lt;br /&gt;
			await this.reloadSubs();&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.removeSubtitles();&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
				this.transcriptError(e.toString());&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.loadCharacters = async function loadCharacters() {&lt;br /&gt;
		if (this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var xml = await utils.downloadWiki('Subtitles:Characters');&lt;br /&gt;
		xml = utils.parseWikiXML(xml);&lt;br /&gt;
	&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.reloadSubs = async function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		var xml;&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			xml = await utils.downloadWiki('Subtitles:' + globals.filename + '/' + this.language);&lt;br /&gt;
		else&lt;br /&gt;
			xml = this.testsubsdata;&lt;br /&gt;
		xml = utils.parseWikiXML(xml);&lt;br /&gt;
		this.parseTranscript(xml);&lt;br /&gt;
	&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.parseTranscript = function(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = async function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		if (frame &amp;lt; 0)&lt;br /&gt;
			return;&lt;br /&gt;
		frame++; // Make 1-based&lt;br /&gt;
		// binary search to find the right transcript line&lt;br /&gt;
		var first = 0;&lt;br /&gt;
		var last = this.transcript.length;&lt;br /&gt;
		while(first &amp;lt; (last - 1))&lt;br /&gt;
		{&lt;br /&gt;
			var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
			if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
			{&lt;br /&gt;
				first = mid;&lt;br /&gt;
				if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				last = mid;&lt;br /&gt;
		}&lt;br /&gt;
		// should we actually show the line?&lt;br /&gt;
		if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
			this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
		else&lt;br /&gt;
			this.setSubtitles(false);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.4.101=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 4, 101];&lt;br /&gt;
	Updates.CHECK_INTERVAL = 24*60*60*1000; // once per day&lt;br /&gt;
	Updates.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.prototype.init = function()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = async function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.updatelink) {&lt;br /&gt;
			this.updatelink.parentNode.removeChild(this.updatelink);&lt;br /&gt;
			this.updatelink = null;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var str;&lt;br /&gt;
		if (Date.now() - (await utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0)) &amp;gt; Updates.CHECK_INTERVAL)&lt;br /&gt;
		{&lt;br /&gt;
			str = await utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random());&lt;br /&gt;
			str = str.text;&lt;br /&gt;
			utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
			utils.setPref(&amp;quot;lastcheckstring&amp;quot;, str);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			str = await utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				this.updatelink = updatelink;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.cacheDodge = function()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, 0);&lt;br /&gt;
		/*no await*/ this.doCheck();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	await globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&amp;lt;/pre&amp;gt;*/&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2018-03-11T01:04:57Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* HTTPS support */ reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles not working in latest version ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HTTPS support ==&lt;br /&gt;
&lt;br /&gt;
The site has moved to HTTPS. Partial support can be achieved by changing the http:// to *:// (which covers HTTP and HTTPS only), but I'm missing a whole lot of features. {{User:Trlkly/sig}} 00:41, 11 March 2018 (UTC)]&lt;br /&gt;
&lt;br /&gt;
Additional info: if I got back to the previous version, it works just fine, once I change the @match URLs as above. It is possible that the problem is just that the new GM4 version doesn't work well with TamperMonkey (on Chrome, in my case. I can't edit the version in the Chrome store without a bunch of hassle.) --{{User:Trlkly/sig}} 00:51, 11 March 2018 (UTC)&lt;br /&gt;
:Yeah, I know there can be some subtle differences between Greasemonkey and Tampermonkey (I have some other scripts I maintain that have to work in both). I haven't really put that effort in here since the Chrome Web Store version exists. But I do know TM is compatible with GM3 not GM4. But then, the script should work with either GM3 or GM4? I dunno. Maybe I'll take a look. But I'll do the HTTPS thing, sure. {{User:Phlip/sig}} 01:04, 11 March 2018 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Talk:Main_Page</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Talk:Main_Page"/>
				<updated>2017-12-23T04:55:53Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 107.167.109.167 (Talk) to last revision by The Knights Who Say Ni&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main Page Talk}}&lt;br /&gt;
&lt;br /&gt;
== Forum Registration ==&lt;br /&gt;
&lt;br /&gt;
Hey, for a while now I've wanted to be able to join the HRWiki forum, but I've looked high and low and I've not been able to find a way to do that. Is this another thing you have to send via email, or what? {{User:SRMX12/sig}} 15:03, 2 April 2016 (UTC)&lt;br /&gt;
:Yup! - {{User:Catjaz63/sig}} 18:35, 2 April 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Downloads! ==&lt;br /&gt;
&lt;br /&gt;
Whenever I go to a page's history and click on &amp;quot;Compare selected revisions&amp;quot;, it says I have to download it. Is there some way for me to compare two versions of a page easily without having to download anything? {{User:Gfdgsgxgzgdrc/sig‎}} 22:55, 14 April 2016 (UTC)&lt;br /&gt;
:I don't experience that. Please list the exact steps you are taking, as well as your browser and OS. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:01, 14 April 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I'm using Google Chrome. What I do is I go to a page, click history, and click the &amp;quot;Compare selected revisions&amp;quot; button, and then a pop-up appears that says to name the file that I'm downloading. Then I just click that &amp;quot;X&amp;quot; in the corner to close the box. {{User:Gfdgsgxgzgdrc/sig‎}} 01:05, 15 April 2016 (UTC)&lt;br /&gt;
:::I'm also using Google Chrome and I cannot replicate this. My first recommendation is to check your browser and/or machine for malware, but that's unlikely. - {{User:Catjaz63/sig}} 01:37, 15 April 2016 (UTC)&lt;br /&gt;
::I fixed it! I got a new computer, but the problem was still there. And it worked whenever I logged out, so I knew it was a problem with my account. I went through my preferences and found out that the &amp;quot;Use external diff by default (for experts only, needs special settings on your computer)&amp;quot; box was checked for the last few years. I unchecked the box, and now I can compare edits! [[virus|I shoulda done this like a million years ago!]] {{User:Gfdgsgxgzgdrc/sig‎}} 04:47, 21 September 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Jam parsing glitch ==&lt;br /&gt;
&lt;br /&gt;
I wanted to check if there was a page about jam (of course there isn't &amp;amp;mdash; not even a redirect page with that name), but when I typed &amp;quot;jam&amp;quot; into the search bar, it brought me [[James#G as J|here]]. If I had typed &amp;quot;James&amp;quot;, that would make sense, but I only typed &amp;quot;jam&amp;quot;. What's more, if I type &amp;lt;nowiki&amp;gt;[[jam]]&amp;lt;/nowiki&amp;gt;, the href points to the James article before I even click on it, [[jam|like so]]. Is there some kind of server-side string replacement going on here? --{{User:Purple Wrench/sig}} 14:46, 20 April 2016 (UTC)&lt;br /&gt;
:That is odd. What if you [http://hrwiki.org/w/index.php?title=Jam&amp;amp;action=edit&amp;amp;redlink=1 create the page]? {{User:The thing/sig}} 15:11, 20 April 2016 (UTC)&lt;br /&gt;
::Norwegian deals, it worked! But this kinda thing could still happen with other pages. For example, while it would make sense for &amp;quot;Jame&amp;quot; to redirect to &amp;quot;James&amp;quot;, there is no redirect page for it, so the same glitch happens. How do we know it isn't happening with other words? --{{User:Purple Wrench/sig}} 15:43, 20 April 2016 (UTC)&lt;br /&gt;
:::This is a side effect of [[HRW:AUTOPIPE|autopipe]]. It's testing whether we have a page of the plural, but it can't discern that &amp;quot;james&amp;quot; is not a valid plural for &amp;quot;jam&amp;quot;, only that the page [[James]] exists. It tries both &amp;quot;s&amp;quot; and &amp;quot;es&amp;quot; suffixes (and if the word ends in &amp;quot;y&amp;quot;, &amp;quot;ies&amp;quot;):&lt;br /&gt;
:::*&amp;quot;word&amp;quot; → &amp;quot;words&amp;quot; → &amp;quot;wordes&amp;quot;&lt;br /&gt;
:::*&amp;quot;box&amp;quot; → &amp;quot;boxs&amp;quot; → &amp;quot;boxes&amp;quot;&lt;br /&gt;
:::*&amp;quot;monkey&amp;quot; → &amp;quot;monkeys&amp;quot; → &amp;quot;monkeyes&amp;quot; → &amp;quot;monkeies&amp;quot;&lt;br /&gt;
:::*&amp;quot;army&amp;quot; → &amp;quot;armys&amp;quot; → &amp;quot;armyes&amp;quot; → &amp;quot;armies&amp;quot;&lt;br /&gt;
:::In all of those groups, only one is the correct plural, but the function tries to match them all. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 16:44, 20 April 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Happy Cheatday? ==&lt;br /&gt;
&lt;br /&gt;
Today is my 26th Birthday. I think we aught to do something to acknowledge users' birthdays. Like &amp;quot;It's Dot Com!'s&amp;quot; birthday. He's my favorite user.... {{User:ToaJuaraevo01/sig1}} 17:39, 14 May 2016 (UTC)&lt;br /&gt;
:Well it's also ''my'' birthday. But, I really don't see the reason for this or where it would be placed. - {{User:Catjaz63/sig}} 17:52, 14 May 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Brainkrieg, not Brainkreig ==&lt;br /&gt;
The listing for the Brainkrieg shirt is not correct. It is '''BRAINKRIEG''', not Brainkreig. Could someone correct it, please?—[[User:Bde1982|Bde1982]] 14:06, 16 August 2016 (UTC)&lt;br /&gt;
:Done. Thanks for letting us know~  --[[User:DorianGray|DorianGray]] 14:13, 16 August 2016 (UTC)&lt;br /&gt;
::You're welcome. Have a nice day.—[[User:Bde1982|Bde1982]] 14:28, 16 August 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Halloween main page ==&lt;br /&gt;
&lt;br /&gt;
Since Halloween is coming, can we change the wiki into the ween theme? --[[Special:Contributions/195.194.74.65|195.194.74.65]] 14:52, 6 October 2016 (UTC)&lt;br /&gt;
:Is it even time? We usually don't changes the styles for two or three more weeks. Putting up the decorations now would be the earliest we've done it by far, but I'll do it if that's the consensus. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:22, 6 October 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Google+ ==&lt;br /&gt;
&lt;br /&gt;
So... homestarrunnerdotcom has an official [https://plus.google.com/u/0/103696391348629638078 Google+] page. It's linked to from their [[YouTube]] account. Just pointing this out. {{User:Gfdgsgxgzgdrc/sig‎}} 02:51, 7 October 2016 (UTC)&lt;br /&gt;
:During the time that the YouTube page was created, you had to link your YouTube account to a Google+ profile or it made a Google+ profile for you out of your YouTube account. Nothing unusual or strange, just the YouTube page but the Google+ auto-created page. - {{User:Catjaz63/sig}} 03:28, 7 October 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== New content! sorta. ==&lt;br /&gt;
&lt;br /&gt;
[[youtube:j1pBcMvWRr4|This.]] {{User:Gfdgsgxgzgdrc/sig‎}} 23:22, 13 October 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The old fanstuff wiki ==&lt;br /&gt;
&lt;br /&gt;
Can I ask why the old Fanstuff Wiki has been closed? I know there's a second one but I'm just curious --[[Special:Contributions/90.203.233.77|90.203.233.77]] 20:45, 10 November 2016 (UTC)&lt;br /&gt;
:The overall quality became increasingly poor to the point that we didn't want to host it anymore. While there were a few good things about it, it was largely a playground devoid of much substance. We tried to cut out most of the tired memes and drivel and start anew, but eventually even that became more trouble than it was worth. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 20:55, 10 November 2016 (UTC)&lt;br /&gt;
::Dude, are you kidding me?! The fanstuff was pretty cool and so was the art and little mini-games. --[[Special:Contributions/90.203.155.145|90.203.155.145]] 16:26, 14 November 2016 (UTC)&lt;br /&gt;
:::If you say so. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:14, 14 November 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Main Page Glitch? ==&lt;br /&gt;
&lt;br /&gt;
How come the pages are all back to normal colors and style, but the icon in the top-left corner is still Halloween themed? Is this happening to anyone else, or is it just me?&lt;br /&gt;
{{User:Mml554/sig}}&lt;br /&gt;
:Yeah, that's the case for me too. I seem to remember there was a brief time when the icon was normal type. Is it a mistake, or is it because of [[Fan Costumes 2016]] besing released? {{User:SRMX12/sig}} 22:03, 21 November 2016 (UTC)&lt;br /&gt;
::I was waiting to change back from Halloween until after the fan costumes toon was released. I eventually gave up waiting, but then two days later they finally released the toon. Rather than change the whole theme back, I just put the Halloween logo back up for a few more days. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 01:48, 22 November 2016 (UTC)&lt;br /&gt;
:::I also saw that the content of the day is showing both the fan costumes ''and'' the Thanksgiving toons. Should this be changed/fixed? {{User:Mml554/sig}}&lt;br /&gt;
::::It's intentional. Fan costumes have been up less than a week but today is Thanksgiving. I decided not to have to choose between them. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 14:30, 24 November 2016 (UTC)&lt;br /&gt;
:::::Clicking the snowflakes bring you to a random page; this makes me happy {{User:Mml554/sig}}&lt;br /&gt;
&lt;br /&gt;
== Deleted envelope since late 2015 ==&lt;br /&gt;
&lt;br /&gt;
Hi there! We detected that one letter saying &amp;quot;The Brothers Chaps&amp;quot; was removed, and we really want to know why they did this. We went to HomestarRunner.com and detected it. Can anyone please tell us why? --[[Special:Contributions/77.218.255.196|77.218.255.196]] 22:26, 8 December 2016 (UTC)&lt;br /&gt;
:Because TBC decided to change it. That's really all anyone here knows, and really all that matters. {{User:DeFender1031/sig}} 22:39, 8 December 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== New Year logo ==&lt;br /&gt;
&lt;br /&gt;
How did you get Homestar Runner to say 'Happy New Year'? Did you like, take some lines out of toons or did you get some Homestar Runner impressionists to say it? --[[Special:Contributions/90.197.11.150|90.197.11.150]] 22:09, 1 January 2017 (UTC)&lt;br /&gt;
:[[HRWiki:Main Page Talk Archive 42#HAPPY newyear]]. {{unsigned|RickTommy|22:29, 1 January 2017 (UTC)}}&lt;br /&gt;
&lt;br /&gt;
== April Fools logo ==&lt;br /&gt;
&lt;br /&gt;
[http://www.hrwiki.org/wiki/Special:Logos] You forgot that April Fools logo when Homestar says 'Umm what's going on here?'--[[Special:Contributions/195.194.74.65|195.194.74.65]] 15:40, 5 January 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Giving away a The Cheat hoody! ==&lt;br /&gt;
&lt;br /&gt;
(Or rather, selling for the cost of shipping) Hello! I am trying to find a home for my The Cheat hoody which I got about 10 years ago but have scarcely worn. It's in good shape. A thrift store would be happy to have it, but I'd really like to get it in the hands of someone who is part of the fan community and would appreciate something like this. HR and hrwiki gave me some great times back in the day! Sorry if this isn't the optimum place to post this. If interested, see: [http://knoxville.craigslist.org/clo/5948497586.html link] {{unsigned|12.150.126.251|22:03, 6 January 2017 (UTC)}}&lt;br /&gt;
&lt;br /&gt;
== A History of Homestar...y ==&lt;br /&gt;
&lt;br /&gt;
[http://io9.gizmodo.com/an-oral-history-of-homestar-runner-the-internets-favor-1791519879 There's been another interview with TBC.] {{User:Gfdgsgxgzgdrc/sig‎}} 01:08, 25 January 2017 (UTC)&lt;br /&gt;
:This should probably get a page, right? {{User:Gfdgsgxgzgdrc/sig‎}} 00:17, 27 January 2017 (UTC)&lt;br /&gt;
::Go for it. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 01:37, 27 January 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Updated Main Page ==&lt;br /&gt;
&lt;br /&gt;
Sorry 'bout all dese talk page posts, but... [[@StrongBadActual]] ''isn't linked to anywhere on the Main Page''. And neither is [[YouTube]], which has replaced [[FeedBurner]] on the NavBar. There's also a bunch of empty space beneath the &amp;quot;Miscellany&amp;quot; secion. There's at least 4 things we can do with that empty space:&lt;br /&gt;
#Put Strong Bad's latest tweets there, [http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;direction=prev&amp;amp;oldid=752027 a-like so].&lt;br /&gt;
#Put featured article &amp;quot;reruns&amp;quot; there. [http://www.hrwiki.org/w/index.php?title=Main_Page&amp;amp;oldid=719053 Like this type.]&lt;br /&gt;
#Bring back featured articles. There are as many active users now as there were back then, and over 300 unused drafts.&lt;br /&gt;
#Just... ''{sigh}'' leave it how it is.&lt;br /&gt;
So... hey, sysops? Ya think we should do these things?&lt;br /&gt;
{{User:Gfdgsgxgzgdrc/sig‎}} 00:26, 14 October 2016 (UTC)&lt;br /&gt;
:Hello? {{User:Gfdgsgxgzgdrc/sig‎}} 02:48, 26 October 2016 (UTC)&lt;br /&gt;
::We should probably fill that big gap on the left. I don't hate the Twitter idea, although really the whole main page needs a complete overhaul. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:29, 26 October 2016 (UTC)&lt;br /&gt;
:::Yeah. We should also change it back to what it is before Halloween came. So, recap: Tweets will be in the main page, So does the featured article, and leave it how it is. So, CAN WE DO IT PLZ? :) --[[Special:Contributions/76.177.17.164|76.177.17.164]] 18:40, 3 November 2016 (UTC)&lt;br /&gt;
::::We don't change back for at least a week after Halloween. There may still be a costume commentary toon to come. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 19:16, 3 November 2016 (UTC)&lt;br /&gt;
:::::So, what does everyone else think about the new main page ideas? {{User:Gfdgsgxgzgdrc/sig‎}} 04:57, 23 February 2017 (UTC)&lt;br /&gt;
::::::I think rather highly of them. I mean, a) we have this huge blank space on the main page that's begging to be filled, and b) Strong Bad's Twitter makes up a large part of H*R activity nowadays, and putting them on the main page would complement the What's New? section nicely. '''If nothing else,''' we at ''least'' need to link to @StrongBadActual from the main page. Seriously. {{User:SRMX12/sig}} 17:00, 23 February 2017 (UTC)&lt;br /&gt;
:::::::Somebody fill {{t|recenttweets}} with data. Check your work in the [[sandbox]] ({{p|l=http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;oldid=764871 current version}}). Barring opposition, once it looks presentable, we'll implement it. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:33, 23 February 2017 (UTC)&lt;br /&gt;
::::::::Alright. {{p|l=http://hrwiki.org/w/index.php?title=Template:recenttweets&amp;amp;oldid=764875 What do you think?}} {{User:SRMX12/sig}} 23:28, 23 February 2017 (UTC)&lt;br /&gt;
I'd say {{p|l=http://www.hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;oldid=764892 it's shaping up}}. We'll give people a little time to comment but if there are no nays in the next day or two then I'll load the changes. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:29, 24 February 2017 (UTC)&lt;br /&gt;
:Man, it's been forever since the Main Page was changed. This'll be exciting! {{User:Gfdgsgxgzgdrc/sig‎}} 02:44, 24 February 2017 (UTC)&lt;br /&gt;
::Also, is the Featured Content section really necessary? It hardly even gets updated. {{User:Gfdgsgxgzgdrc/sig‎}} 05:59, 24 February 2017 (UTC)&lt;br /&gt;
:::Oppose. It's bad enough that 90% of the Internet has done the same thing in some way, shape or form. Also, what if SBA suffers the same fate as Ronginald? {{User:RickTommy/sig}} 07:24, 24 February 2017 (UTC)&lt;br /&gt;
::::Is there a specific reason why you dislike this? &amp;quot;It's bad enough that 90% of the Internet has done the same thing in some way, shape or form&amp;quot; is not a reason, it's just begging the question. As for &amp;quot;what if they shut it down&amp;quot;, I would say two things. Firstly, it seems as though @ronginald was an experiment with twitter and they're now going full-force with @StrongBadActual. As such it seems unlikely that they'll shut it down any time soon. Secondly, if they DO shut it down, we can figure out what to replace it with at that time. For the moment, it exists, fills the space nicely, and makes sense to be there. {{User:DeFender1031/sig}} 11:47, 24 February 2017 (UTC)&lt;br /&gt;
:So, with regards to [http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;diff=prev&amp;amp;oldid=764954 these] [http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;diff=764972&amp;amp;oldid=764954&amp;amp;rcid=727815 edits], there is clear disagreement regarding the format of the main page nav bar. The question is basically this: should the Nav Bar look exactly like [[Site Components#NavBar|H*R's nav bar]] or should we follow the traditional wording we've had?  I slightly lean towards making it look like the H*R Nav bar since it's new and it makes it looks kinda slick.  In any case, I'm here bringing up this topic in order to hear the merits or each side and gague community consensus. --[[User:Stux|Stux]] 00:36, 27 February 2017 (UTC)&lt;br /&gt;
:: I'm sure it was ever intended to match the nav bar at the ''bottom'' of the official site (more like the navigation along the left side of the main pages, plus legal for some reason), nor do I really think it should, due to the redundancy of links. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 01:33, 27 February 2017 (UTC)&lt;br /&gt;
::: I think it looks cleaner without the &amp;quot;Main Menu&amp;quot; text, and it seems more appropriate to have that particular area of the page match the hrwiki navbar. The links on the left lower down can be for the other stuff we want to provide easy navigation to. {{User:DeFender1031/sig}} 01:40, 27 February 2017 (UTC)&lt;br /&gt;
'''Alternate &amp;lt;strike&amp;gt;universes&amp;lt;/strike&amp;gt; layouts:'''&amp;lt;br /&amp;gt;&lt;br /&gt;
Since DeFender and I are playing with alternative layouts, I figured it'd be best to list them here:&lt;br /&gt;
* Style 0 (current): http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;oldid=765849&lt;br /&gt;
* Style 1 (my first suggestion): http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;diff=765195&amp;amp;oldid=765191&amp;amp;rcid=728042&lt;br /&gt;
* Style 2 (DeFender's suggestion): http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;diff=765197&amp;amp;oldid=765196&amp;amp;rcid=728044&lt;br /&gt;
* Style 0b (I forgot DC was trying things out): http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;diff=prev&amp;amp;oldid=765188&lt;br /&gt;
And so, opinions? I kinda like the oddball &amp;quot;nonsense&amp;quot; header. Feel free to add more &amp;quot;styles&amp;quot; to this list! --[[User:Stux|Stux]] 19:45, 5 March 2017 (UTC)&lt;br /&gt;
:{{p|l=http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;oldid=765205 Here's my idea.}} Surprisingly, there's no link to [[homestarrunner.com]] on the main page, so I added one in the introduction. I added Big Toons and Shorts to the &amp;quot;Features&amp;quot; section, so it can include all of the toon categories. I removed the {{t|u}} icons because they made the page look complicated and cluttered. And I also removed the featured content, because it hardly ever gets updated. {{User:Gfdgsgxgzgdrc/sig‎}} 00:03, 6 March 2017 (UTC)&lt;br /&gt;
::I don't feel particularly strongly one way or the other regarding the placement of the &amp;quot;Browse the knowledge base&amp;quot; section, though I think if it's laid out as in styles 1 and 2 it should be centered. While I agree that the {{t|u}} icons make the page look a little cluttered, the absence of them seems to produce the opposite problem, i.e. making that section of the page a bit sparse. {{User:DEIDATVM/sig}} 18:38, 6 April 2017 (UTC)&lt;br /&gt;
::This one is my favorite. Gets the strong bad tweets while also not having those tacky lil icons. {{User:The thing/sig}} 03:50, 21 April 2017 (UTC)&lt;br /&gt;
:::Oppose again, but for a different reason: it's too big of a change for a Wiki that has faded into obscurity. {{User:RickTommy/sig}} 01:48, 22 April 2017 (UTC)&lt;br /&gt;
::::Again, why does this wiki's obscurity matter? {{User:Gfdgsgxgzgdrc/sig‎}} 04:10, 22 April 2017 (UTC)&lt;br /&gt;
:::::When no one is really looking at it regularly is the PERFECT time for big changes, because it's less disruptive. If anything, that's an argument FOR changing it. {{User:DeFender1031/sig}} 20:36, 22 April 2017 (UTC)&lt;br /&gt;
::::::{{p|l=http://hrwiki.org/w/index.php?title=HRWiki:Sandbox&amp;amp;oldid=766321 So, this Main Page is pretty much perfect in my opinion.}} What does everybody else think? {{User:Gfdgsgxgzgdrc/sig‎}} 18:53, 24 April 2017 (UTC)&lt;br /&gt;
:::::::Also, I think the [[homestarrunner.com]] article should be linked to, but where? {{User:Gfdgsgxgzgdrc/sig‎}} 22:12, 25 April 2017 (UTC)&lt;br /&gt;
::::::::So, I think {{p|l=http://hrwiki.org/w/index.php?title=HRWiki:Main_page_redesign&amp;amp;oldid=768368 this design}} is pretty good (aside from the temporary twiceness of featured articles). I created [[HRWiki talk:Main page redesign|a section on the talk page]] to discuss certain changes, such as which changes should be removed, what should be added or changed, etc. Hopefully, it will make things more organized and help to create the best possible Main Page. Feel free to discuss your opinions and ideas there. {{User:Gfdgsgxgzgdrc/sig‎}} 04:40, 9 September 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== emails not responding to forum==&lt;br /&gt;
I would like to join the forum but have emailed the admins numerous times and have gotten nothing. what can I do - RasterOfMandomness&lt;br /&gt;
&lt;br /&gt;
:I have created a forum account for you with that username.  The forum software will email you an autogenerated password.&amp;amp;nbsp;-- [[User:Tom|Tom]] 02:15, 3 August 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Slowdowns ==&lt;br /&gt;
&lt;br /&gt;
Is anyone else experiencing slowdowns whenever you try to access any page on the wiki? I assumed it was just my Wi-Fi connection, but only the wiki slows down and not any other website I tested. --{{User:Mml554/sig}} 02:19, 18 August 2017 (UTC)&lt;br /&gt;
:That happens whenever there's a new update because of all the activity. Nothing unusual, although it would be nice if it could be fixed. {{User:Gfdgsgxgzgdrc/sig‎}} 03:23, 18 August 2017 (UTC)&lt;br /&gt;
::Although that would indeed be nice, beefing up our capabilities is impractical, unfortunately. Our current setup is fine nearly all of the time, and the official site doesn't update often enough to justify the expense or hassle of increased capabilities. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 05:00, 21 August 2017 (UTC)&lt;br /&gt;
:Since you joined the wiki last year, you may not be aware that it wasn't always like this. See also [[HRWiki:2011 Server Move|here]] and [http://www.hrwiki.org/w/index.php?title=HRWiki%3ADonations&amp;amp;diff=717319&amp;amp;oldid=711556 here]. As much as the change was annoying initially, it does make a lot of sense given the low amount of traffic except for [[April Fool 2014|occasional absurd spikes]]. --{{User:Purple Wrench/sig}} 01:01, 22 August 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Dating @Strongbadactual references ==&lt;br /&gt;
&lt;br /&gt;
I think that whenever something makes a appearance in Strong Bad's twitter account it should have the date of the post next to it. It doesn't seem right to link the entire twitter account for a single post mention but it's not like it would be feasible to give each individual tweet it's own page. For example&lt;br /&gt;
&lt;br /&gt;
*[[@StrongBadActual]] &amp;amp;mdash; August 22nd, 2017&lt;br /&gt;
&lt;br /&gt;
[[User:Guybrush20X6|Guybrush20X6]] 14:29, 1 September 2017 (UTC)&lt;br /&gt;
:That's pretty much how we list references that showed up in weeklies as well. I'd support this. {{User:DeFender1031/sig}} 14:33, 1 September 2017 (UTC)&lt;br /&gt;
::Set up a sample on [[Doreauxgard‎]] to see how it looked. Seems to work fine for me. [[User:Guybrush20X6|Guybrush20X6]] 15:32, 1 September 2017 (UTC)&lt;br /&gt;
:::Guybrush20X6 - Typically no matter what date format we use, you want to leave off the ordinal suffix (In the above example, August 22, 2017 instead of August 22nd, 2017). {{User:The Knights Who Say Ni/sig}} 20:33, 1 September 2017 (UTC)&lt;br /&gt;
:::: NP, those Suffixes will be DELETED! in no time. [[User:Guybrush20X6|Guybrush20X6]] 20:38, 1 September 2017 (UTC)&lt;br /&gt;
:::::I like Purple Wrench's idea of &amp;quot;[[Talk:@StrongBadActual#Numbering the Tweets|Tweet from @StrongBadActual on August 22, 2017]]&amp;quot;. It might be too late to change it, but the current format has only recently been decided and it isn't used on many pages yet, so changing it wouldn't be a daunting task. I think it may be more professional and looks a bit nicer. It's a little longer, but it could be shortened to maybe &amp;quot;@StrongBadActual tweet from August 22, 2017&amp;quot;. But if we keep the current one, that's good too. {{User:Gfdgsgxgzgdrc/sig‎}} 05:27, 2 October 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Worldbuilders ==&lt;br /&gt;
&lt;br /&gt;
Should there be a page for &amp;lt;nowiki&amp;gt;[[Worldbuilders]]&amp;lt;/nowiki&amp;gt;? Homestar Runner has helped them out [[twitter:StrongBadActual/status/605474248551854080|three]] [[Strong Bad Classics!|seperate]] [[twitter:StrongBadActual/status/936064642702602242|times]] in the last couple years. And three is enough for an article, right? {{User:Gfdgsgxgzgdrc/sig‎}} 04:13, 8 December 2017 (UTC)&lt;br /&gt;
:There seems to be some misunderstanding about the so-called &amp;quot;rule of three&amp;quot;. According to the [[HRWiki:Inclusion guidelines|inclusion guidelines]], a minimum of &amp;quot;three or four&amp;quot; appearances are needed for something to qualify as a running gag. For everything else, there are different guidelines with different numbers and different weights given to the prominence of whatever the things in question is. {{User:DeFender1031/sig}} 13:49, 8 December 2017 (UTC)&lt;br /&gt;
::[[Talk:Captain's Hat#Third time's a charm|Yes, I know that]]. I wasn't referring to the rule of three in any way; I was just asking if that number was notable enough for a page. {{User:Gfdgsgxgzgdrc/sig‎}} 07:26, 9 December 2017 (UTC)&lt;br /&gt;
:::So here's the thing. None of the categories of possible pages mentioned in the inclusion guidelines neatly encapsulate real-world organizations with which TBC are working (probably because the aforementioned guidelines were written before H*R was big enough to be worth collaborating with). In general, I'd say that ONE major collaboration with some real world entity would warrant a page (for example, [[Telltale Games]], [[The Future Animators of the Future]]), but I'm on the fence about Worldbuilders as it seems to be more &amp;quot;we made a toon to help them promote their thing and occasionally tweet about it&amp;quot; rather than &amp;quot;we're working closely with them in a major way&amp;quot;. I think I still lean vaguely in the direction of having a page though. {{User:DeFender1031/sig}} 15:42, 9 December 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-12-02T03:02:51Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* WHAT THE CRAP?! */ Huh.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== WHAT THE CRAP?! ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;br /&gt;
:Where's the preferences panel? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:59, 2 December 2017 (UTC)&lt;br /&gt;
::EDIT; The subtitles works now. Thanks, mind games! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 03:02, 2 December 2017 (UTC)&lt;br /&gt;
:::... ok then. Glad I could help??? {{User:Phlip/sig}} 03:02, 2 December 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-12-02T02:55:19Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* WHAT THE CRAP?! */ Some debugging steps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== WHAT THE CRAP?! ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;br /&gt;
::Firefox Quantum and the subtitles loads forever! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:46, 2 December 2017 (UTC)&lt;br /&gt;
Hmm. the subtitles are working just fine for me on Firefox. Can I get you to try something for me?&lt;br /&gt;
* Go to a toon on H*R.&lt;br /&gt;
* Press F12, to open up the developer panel, go to the Console tab.&lt;br /&gt;
* Open up the preferences panel for the script in the top left, and click the &amp;quot;Clear subtitles cache&amp;quot; button.&lt;br /&gt;
* Refresh the page.&lt;br /&gt;
* Let me know if there's any error messages in the console. It should looks something like [https://i.imgur.com/qxuoGvg.png this], let me know if there's any other messages there.&lt;br /&gt;
That should help me track down what's happening. {{User:Phlip/sig}} 02:55, 2 December 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-12-02T02:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* WHAT THE CRAP?! */ Some more info would be nice.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== WHAT THE CRAP?! ==&lt;br /&gt;
&lt;br /&gt;
The subtitles in your script's new version doesn't work! Can you please fix it? --[[Special:Contributions/198.37.214.254|198.37.214.254]] 02:25, 2 December 2017 (UTC)&lt;br /&gt;
:Can you be a bit more specific? What browser are you using? What version of the browser? Can you give an example of a page where the subtitles aren't working? In what way &amp;quot;not working&amp;quot;, are they just not showing up at all? Is it saying &amp;quot;loading&amp;quot; forever? Or is the &amp;quot;loading&amp;quot; message going away and the subtitles section disappearing? Or something else? {{User:Phlip/sig}} 02:29, 2 December 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-11-24T12:21:11Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;4.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
===Version 4.3 (24 Nov, 2017)===&lt;br /&gt;
* More thorough fix for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
* Rewrite a lot of the script to use promises instead of callbacks, so the code is a lot cleaner.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;br /&gt;
:Have updated to a more thorough fix. Note that you might have to update the script manually, I think the bandaid fix potentially broke the &amp;quot;check for updates&amp;quot; feature. Once you have the new version it should go back to checking for updates normally again. {{User:Phlip/sig}} 12:21, 24 November 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-11-24T12:18:42Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;So I learned how JS promises work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;cachedodge=4.3.97&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.3&lt;br /&gt;
// 2017-11-24&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.3.&lt;br /&gt;
// @version       4.3.97&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascriptfakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(async function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = async function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.getValue &amp;amp;&amp;amp; await GM.getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true))&lt;br /&gt;
			return 2; // Use GM4 methods&lt;br /&gt;
		else if (typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true))&lt;br /&gt;
			return 1; // Use GM3 methods&lt;br /&gt;
		else&lt;br /&gt;
			return 0; // Use native methods&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = await Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = async function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions == 2)&lt;br /&gt;
			return await GM.getValue(key, def);&lt;br /&gt;
		else if (this.useGMFunctions == 1)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions == 2)&lt;br /&gt;
			GM.setValue(key, value);&lt;br /&gt;
		else if (this.useGMFunctions == 1)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		return new Promise((resolve, reject) =&amp;gt; {&lt;br /&gt;
			if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest) {&lt;br /&gt;
				GM.xmlHttpRequest({&lt;br /&gt;
					method: method,&lt;br /&gt;
					url: url,&lt;br /&gt;
					onload: res =&amp;gt; resolve({text: res.responseText, status: res.status, statusText: res.statusText, headers: res.responseHeaders}),&lt;br /&gt;
					onerror: res =&amp;gt; reject(`${res.status} ${res.statusText}`)&lt;br /&gt;
				});&lt;br /&gt;
			} else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;) {&lt;br /&gt;
				GM_xmlhttpRequest({&lt;br /&gt;
					method: method,&lt;br /&gt;
					url: url,&lt;br /&gt;
					onload: res =&amp;gt; resolve({text: res.responseText, status: res.status, statusText: res.statusText, headers: res.responseHeaders}),&lt;br /&gt;
					onerror: res =&amp;gt; reject(`${res.status} ${res.statusText}`)&lt;br /&gt;
				});&lt;br /&gt;
			} else {&lt;br /&gt;
				var xhr = new XMLHttpRequest();&lt;br /&gt;
				xhr.onload = () =&amp;gt; resolve({text: xhr.responseText, status: xhr.status, statusText: xhr.statusText, headers: xhr.getAllResponseHeaders()});&lt;br /&gt;
				xhr.onerror = () =&amp;gt; reject(`${xhr.status} ${xhr.statusText}`);&lt;br /&gt;
				xhr.open(method, url);&lt;br /&gt;
				xhr.send();&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = async function downloadWiki(page)&lt;br /&gt;
	{&lt;br /&gt;
		for (var timesredirected = 0; timesredirected &amp;lt; 3; timesredirected++) {&lt;br /&gt;
			var res = await this.downloadPage(this.buildWikiUrl(page));&lt;br /&gt;
	&lt;br /&gt;
			// check for redirects&lt;br /&gt;
			var matches = res.text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
			if (matches)&lt;br /&gt;
			{&lt;br /&gt;
				// Get the page name out of the redirect text&lt;br /&gt;
				var text = matches[1];&lt;br /&gt;
				if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
					text = matches[1];&lt;br /&gt;
				if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
					text = matches[1];&lt;br /&gt;
				page = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				return res.text;&lt;br /&gt;
		}&lt;br /&gt;
		throw &amp;quot;Too many redirects&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.parseWikiXML = function parseWikiXML(text)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			throw &amp;quot;Error in XML:\n&amp;quot; + e.toString();&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				throw (&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				throw (&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				throw (&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return doc;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = async function currentFrame(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			var a = await playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
			// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
			// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
			// that we're paused.&lt;br /&gt;
			if (a != this.guessisplaying.lastframe)&lt;br /&gt;
			{&lt;br /&gt;
				this.guessisplaying.lastframe = a;&lt;br /&gt;
				this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
				this.guessisplaying.state = true;&lt;br /&gt;
			}&lt;br /&gt;
			else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
			{&lt;br /&gt;
				this.guessisplaying.state = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			return a;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return await playercomm.currentFrame(flashmovie)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = async function totalFrames(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			return await playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;)&lt;br /&gt;
		else&lt;br /&gt;
			return await playercomm.totalFrames(flashmovie)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = async function isPlaying(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			return this.guessisplaying.state;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			return await playercomm.isPlaying(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = async function framesLoaded(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			return await playercomm.targetFramesLoaded(flashmovie, '/videoplayer')&lt;br /&gt;
		else&lt;br /&gt;
			return await playercomm.targetFramesLoaded(flashmovie, '/')&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = async function isLoaded(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await this.currentFrame(flashmovie);&lt;br /&gt;
		return frame &amp;gt;= 0;&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.waitLoaded = function waitLoaded(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		var useglobal = false;&lt;br /&gt;
		if (!flashmovie) {&lt;br /&gt;
			useglobal = true;&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		}&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return new Promise((resolve, reject) =&amp;gt; reject());&lt;br /&gt;
	&lt;br /&gt;
		if (useglobal &amp;amp;&amp;amp; this.loadedPromise)&lt;br /&gt;
			return this.loadedPromise;&lt;br /&gt;
	&lt;br /&gt;
		async function poll(resolve) {&lt;br /&gt;
			if (await this.isLoaded(flashmovie))&lt;br /&gt;
				resolve();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(poll.bind(this, resolve), 100)&lt;br /&gt;
		}&lt;br /&gt;
		var promise = new Promise(poll.bind(this));&lt;br /&gt;
		if (useglobal)&lt;br /&gt;
			this.loadedPromise = promise;&lt;br /&gt;
		return promise;&lt;br /&gt;
	}&lt;br /&gt;
	Utils.prototype.stop = async function stop(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
			// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
			// go back to state=true&lt;br /&gt;
			await this.currentFrame(flashmovie);&lt;br /&gt;
			this.guessisplaying.state = false;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.stop(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = async function play(flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.play(flashmovie);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = async function goto(frame, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame);&lt;br /&gt;
	&lt;br /&gt;
			// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
			// go back to state=true&lt;br /&gt;
			await this.currentFrame(flashmovie);&lt;br /&gt;
			this.guessisplaying.state = false;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			await playercomm.goto(flashmovie, frame);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = async function zoomOut(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 100 * factor);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = async function zoomIn(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 100 / factor);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = async function zoomReset(factor, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		await playercomm.zoom(flashmovie, 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = async function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		// Can load the preferences in each module in parallel&lt;br /&gt;
		var start = new Date();&lt;br /&gt;
		var loadpromises = []&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			loadpromises.push(this.modules[i].load());&lt;br /&gt;
		await Promise.all(loadpromises)&lt;br /&gt;
		var end = new Date();&lt;br /&gt;
		console.log(`Loaded prefs in ${end - start}ms`);&lt;br /&gt;
		// Initialise each module in sequence&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			await this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		return new Promise(resolve =&amp;gt; window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(resolve),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.load = function load()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());&lt;br /&gt;
		globals.modules.updates.cacheDodge();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.load = async function load()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = await utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = await utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = async function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			await this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = async function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		await utils.waitLoaded();&lt;br /&gt;
		await playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = await utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = await utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = async function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			await this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		this.paused = !await utils.isPlaying();&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = async function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		this.paused = !await utils.isPlaying();&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = async function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var tot = await utils.totalFrames();&lt;br /&gt;
		if (tot &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var frame = await utils.currentFrame();&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				frame = 0;&lt;br /&gt;
			if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				var a = tot.toString();&lt;br /&gt;
				var b = (frame+1).toString();&lt;br /&gt;
				while (b.length &amp;lt; a.length)&lt;br /&gt;
					b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
				this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
			}&lt;br /&gt;
			if(!this.dragging)&lt;br /&gt;
			{&lt;br /&gt;
				if (tot &amp;gt; 1)&lt;br /&gt;
					this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
				else&lt;br /&gt;
					this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
				this.paused = !await utils.isPlaying();&lt;br /&gt;
				this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			}&lt;br /&gt;
			var loaded = await utils.framesLoaded();&lt;br /&gt;
			this.loadmeter.style.width = (loaded/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.framecountertext)&lt;br /&gt;
		{&lt;br /&gt;
			this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = async function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		this.paused = await utils.isPlaying();&lt;br /&gt;
		this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
		if (this.paused)&lt;br /&gt;
			await utils.stop();&lt;br /&gt;
		else&lt;br /&gt;
			await utils.play();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = async function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.goto(0);&lt;br /&gt;
		await utils.play();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = async function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		var tot = await utils.totalFrames();&lt;br /&gt;
		await utils.goto(tot - 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = async function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		await utils.goto(frame - 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = async function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		await utils.goto(frame + 1);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = async function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = async function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = async function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		await utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = async function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		var t = await utils.totalFrames();&lt;br /&gt;
		if (t &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			var frame = Math.round(t * pos);&lt;br /&gt;
			await utils.goto(frame);&lt;br /&gt;
		}&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = await utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				/*no await*/ this.doCheckNext();&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.doCheckNext = async function doCheckNext()&lt;br /&gt;
	{&lt;br /&gt;
		try {&lt;br /&gt;
			var res = await utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + (await utils.getPref('cachedodge', 0)), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (res.status == 200 &amp;amp;&amp;amp; res.headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = await utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			/*no await*/ this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = async function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		try {&lt;br /&gt;
			var res = await utils.downloadPage(&lt;br /&gt;
				&amp;quot;http://homestarrunner.com/rando.xml?cachedodge=&amp;quot; + (await utils.getPref('cachedodge', 0))&lt;br /&gt;
			);&lt;br /&gt;
	&lt;br /&gt;
			var parser = new DOMParser();&lt;br /&gt;
			// fix invalid XML...&lt;br /&gt;
			// add missing root element&lt;br /&gt;
			var doc = res.text.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
			doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
			// fix bad ampersands&lt;br /&gt;
			doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
			doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
			var sbemailcounter = 0;&lt;br /&gt;
			this.allrandourls = [];&lt;br /&gt;
			for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				var node = doc.documentElement.childNodes[i];&lt;br /&gt;
				if (node.nodeType == 1)&lt;br /&gt;
				{&lt;br /&gt;
					var type = node.nodeName.toLowerCase();&lt;br /&gt;
					var u = node.getAttribute('u');&lt;br /&gt;
					var n = node.getAttribute('n');&lt;br /&gt;
					if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
					if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						sbemailcounter++;&lt;br /&gt;
						n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
					}&lt;br /&gt;
					if (u)&lt;br /&gt;
						this.allrandourls.push({u: &amp;quot;http://homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
					else&lt;br /&gt;
						this.allrandourls.push({u: &amp;quot;http://homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			this.filterRando();&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = await utils.getPref('captions', true);&lt;br /&gt;
		this.colours = await utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = await utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = await utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(await utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = await utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		/*no await*/ this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = async function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	&lt;br /&gt;
		try {&lt;br /&gt;
			var xml = await utils.downloadWiki(&amp;quot;Subtitles:Languages&amp;quot;);&lt;br /&gt;
			xml = utils.parseWikiXML(xml);&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			while (this.setting_language.firstChild)&lt;br /&gt;
				this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
			option.selected = true;&lt;br /&gt;
			this.setting_language.appendChild(option);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var pre = document.createElement(&amp;quot;pre&amp;quot;);&lt;br /&gt;
		pre.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(pre);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = async function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		try {&lt;br /&gt;
			await this.loadCharacters();&lt;br /&gt;
			await this.reloadSubs();&lt;br /&gt;
		} catch (e) {&lt;br /&gt;
			this.removeSubtitles();&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
				this.transcriptError(e.toString());&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.loadCharacters = async function loadCharacters() {&lt;br /&gt;
		if (this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var xml = await utils.downloadWiki('Subtitles:Characters');&lt;br /&gt;
		xml = utils.parseWikiXML(xml);&lt;br /&gt;
	&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.reloadSubs = async function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		var xml;&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			xml = await utils.downloadWiki('Subtitles:' + globals.filename + '/' + this.language);&lt;br /&gt;
		else&lt;br /&gt;
			xml = this.testsubsdata;&lt;br /&gt;
		xml = utils.parseWikiXML(xml);&lt;br /&gt;
		this.parseTranscript(xml);&lt;br /&gt;
	&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.parseTranscript = function parseTranscript(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = async function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var frame = await utils.currentFrame();&lt;br /&gt;
		if (frame &amp;lt; 0)&lt;br /&gt;
			return;&lt;br /&gt;
		frame++; // Make 1-based&lt;br /&gt;
		// binary search to find the right transcript line&lt;br /&gt;
		var first = 0;&lt;br /&gt;
		var last = this.transcript.length;&lt;br /&gt;
		while(first &amp;lt; (last - 1))&lt;br /&gt;
		{&lt;br /&gt;
			var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
			if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
			{&lt;br /&gt;
				first = mid;&lt;br /&gt;
				if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				last = mid;&lt;br /&gt;
		}&lt;br /&gt;
		// should we actually show the line?&lt;br /&gt;
		if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
			this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
		else&lt;br /&gt;
			this.setSubtitles(false);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.3.97=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 3, 97];&lt;br /&gt;
	Updates.CHECK_INTERVAL = 24*60*60*1000; // once per day&lt;br /&gt;
	Updates.prototype.load = async function load() {&lt;br /&gt;
		this.enabled = await utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		/*no await*/ this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = async function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.updatelink) {&lt;br /&gt;
			this.updatelink.parentNode.removeChild(this.updatelink);&lt;br /&gt;
			this.updatelink = null;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var str;&lt;br /&gt;
		if (Date.now() - (await utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0)) &amp;gt; Updates.CHECK_INTERVAL)&lt;br /&gt;
		{&lt;br /&gt;
			str = await utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random());&lt;br /&gt;
			str = str.text;&lt;br /&gt;
			utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
			utils.setPref(&amp;quot;lastcheckstring&amp;quot;, str);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			str = await utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				this.updatelink = updatelink;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, 0);&lt;br /&gt;
		/*no await*/ this.doCheck();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	await globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&amp;lt;/pre&amp;gt;*/&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-11-22T05:49:51Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;That's not where I meant to put that&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;cachedodge=4.2.77&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.2&lt;br /&gt;
// 2017-11-22&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.2.&lt;br /&gt;
// @version       4.2.77&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascriptfakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Note that on Firefox Quantum, with Greasemonkey 4, this will not use the&lt;br /&gt;
		// GM get/setValue, but use localStorage instead, as getValue returns&lt;br /&gt;
		// a Promise now, which would require rewriting a lot of things (which maybe&lt;br /&gt;
		// I'll get to eventually).&lt;br /&gt;
	&lt;br /&gt;
		// We don't want it to actually write anything to console.log, though, so&lt;br /&gt;
		// let's stop that&lt;br /&gt;
		var log = console.log;&lt;br /&gt;
		console.log = function log(){};&lt;br /&gt;
		var gmstorage = typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true);&lt;br /&gt;
		console.log = log;&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, loadcb, errorcb, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM.xmlHttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM_xmlhttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var xhr = new XMLHttpRequest();&lt;br /&gt;
			xhr.onload = function onload() {loadcb(xhr.responseText, xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				xhr.onerror = function onerror() {errorcb(xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			xhr.open(method, url);&lt;br /&gt;
			xhr.send();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = function downloadWiki(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadPage(this.buildWikiUrl(page), this.wikiPageDownloaded.bind(this, loadcb, errorcb, 0), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiPageDownloaded = function wikiPageDownloaded(loadcb, errorcb, timesredirected, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// check for redirects&lt;br /&gt;
		var matches = text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
		if (matches)&lt;br /&gt;
		{&lt;br /&gt;
			if (timesredirected &amp;gt;= 3) // follow 3 redirects, but no more&lt;br /&gt;
			{&lt;br /&gt;
				errorcb(500, &amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Get the page name out of the redirect text&lt;br /&gt;
			text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			text = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			this.downloadPage(this.buildWikiUrl(text), this.wikiPageDownloaded.bind(this, loadcb, errorcb, timesredirected + 1), errorcb);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(text, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWikiXML = function downloadWikiXML(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadWiki(page, this.wikiXMLDownloaded.bind(this, loadcb, errorcb), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiXMLDownloaded = function wikiXMLDownloaded(loadcb, errorcb, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			errorcb(500, &amp;quot;Error in XML:\n&amp;quot; + e.toString());&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(doc, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = function currentFrame(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;, (a) =&amp;gt; {&lt;br /&gt;
				// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
				// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
				// that we're paused.&lt;br /&gt;
				if (a != this.guessisplaying.lastframe)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.lastframe = a;&lt;br /&gt;
					this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
					this.guessisplaying.state = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback(a);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.currentFrame(flashmovie, callback)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = function totalFrames(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.totalFrames(flashmovie, callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = function isPlaying(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			callback(this.guessisplaying.state);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.isPlaying(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = function framesLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/videoplayer', callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/', callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = function isLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {callback(frame &amp;gt;= 0)}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.whenLoaded = function whenLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;gt;= 0)&lt;br /&gt;
				callback();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(this.whenLoaded.bind(this, callback, flashmovie), 100);&lt;br /&gt;
		}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.stop = function stop(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.stop(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = function play(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.play(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = function goto(frame, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.goto(flashmovie, frame, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = function zoomOut(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 * factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = function zoomIn(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 / factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = function zoomReset(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 0, callback);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());	&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		utils.whenLoaded(() =&amp;gt; {&lt;br /&gt;
			playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
			utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			if (tot &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					if (frame &amp;lt; 0)&lt;br /&gt;
						frame = 0;&lt;br /&gt;
					if (this.framecountertext)&lt;br /&gt;
					{&lt;br /&gt;
						var a = tot.toString();&lt;br /&gt;
						var b = (frame+1).toString();&lt;br /&gt;
						while (b.length &amp;lt; a.length)&lt;br /&gt;
							b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
						this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
					}&lt;br /&gt;
					if(!this.dragging)&lt;br /&gt;
					{&lt;br /&gt;
						if (tot &amp;gt; 1)&lt;br /&gt;
							this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
						utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
							this.paused = !playing;&lt;br /&gt;
							this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					utils.framesLoaded((frame) =&amp;gt; {&lt;br /&gt;
						this.loadmeter.style.width = (frame/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
			this.paused = playing;&lt;br /&gt;
			this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			if (this.paused)&lt;br /&gt;
				utils.stop();&lt;br /&gt;
			else&lt;br /&gt;
				utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		utils.goto(0, () =&amp;gt; {&lt;br /&gt;
			utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			utils.goto(tot - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame + 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		utils.totalFrames((t) =&amp;gt; {&lt;br /&gt;
			if (t &amp;gt; 1)&lt;br /&gt;
			{&lt;br /&gt;
				var frame = Math.round(t * pos);&lt;br /&gt;
				utils.goto(frame);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0), this.onCheckLoad.bind(this), this.onCheckError.bind(this), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckLoad = function onCheckLoad(text, status, statustext, headers)&lt;br /&gt;
	{&lt;br /&gt;
		if (status == 200 &amp;amp;&amp;amp; headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
		this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
		this.nextlink = undefined;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		utils.downloadPage(&lt;br /&gt;
			&amp;quot;http://www.homestarrunner.com/rando.xml?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0),&lt;br /&gt;
			this.randoXMLLoaded.bind(this),&lt;br /&gt;
			this.randoXMLError.bind(this)&lt;br /&gt;
		);&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLLoaded = function randoXMLLoaded(responseText)&lt;br /&gt;
	{&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		// fix invalid XML...&lt;br /&gt;
		// add missing root element&lt;br /&gt;
		var doc = responseText.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
		doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
		// fix bad ampersands&lt;br /&gt;
		doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
		doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		var sbemailcounter = 0;&lt;br /&gt;
		this.allrandourls = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = doc.documentElement.childNodes[i];&lt;br /&gt;
			if (node.nodeType == 1)&lt;br /&gt;
			{&lt;br /&gt;
				var type = node.nodeName.toLowerCase();&lt;br /&gt;
				var u = node.getAttribute('u');&lt;br /&gt;
				var n = node.getAttribute('n');&lt;br /&gt;
				if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
				if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					sbemailcounter++;&lt;br /&gt;
					n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
				}&lt;br /&gt;
				if (u)&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
				else&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLError = function randoXMLError()&lt;br /&gt;
	{&lt;br /&gt;
		this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = utils.getPref('captions', true);&lt;br /&gt;
		this.colours = utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
		utils.downloadWikiXML(&amp;quot;Subtitles:Languages&amp;quot;, this.languageListDownloaded.bind(this), this.languageListError.bind(this));&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListDownloaded = function languageListDownloaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListError = function languageListError()&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var div = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		div.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(div);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:Characters', this.charactersLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.charactersLoaded = function charactersLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
		this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.downloadSubsError = function downloadSubsError(status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		if (this.testsubs)&lt;br /&gt;
			this.transcriptError(statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.reloadSubs = function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:' + globals.filename + '/' + this.language, this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			utils.wikiXMLDownloaded(this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this), this.testsubsdata, 200, &amp;quot;OK&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.transcriptLoaded = function transcriptLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				return;&lt;br /&gt;
			frame++; // Make 1-based&lt;br /&gt;
			// binary search to find the right transcript line&lt;br /&gt;
			var first = 0;&lt;br /&gt;
			var last = this.transcript.length;&lt;br /&gt;
			while(first &amp;lt; (last - 1))&lt;br /&gt;
			{&lt;br /&gt;
				var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
				if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
				{&lt;br /&gt;
					first = mid;&lt;br /&gt;
					if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					last = mid;&lt;br /&gt;
			}&lt;br /&gt;
			// should we actually show the line?&lt;br /&gt;
			if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
				this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
			else&lt;br /&gt;
				this.setSubtitles(false);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.2.77=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 2, 77];&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.havechecked = false;&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.havechecked || !this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
		this.havechecked = true;&lt;br /&gt;
	&lt;br /&gt;
		if (Date.now() - utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0) &amp;gt; 86400000)&lt;br /&gt;
		{&lt;br /&gt;
			utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random(), this.onLoad.bind(this));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.handleUpdateString(utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;));&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.onLoad = function onLoad(textcontent)&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
		utils.setPref(&amp;quot;lastcheckstring&amp;quot;, textcontent);&lt;br /&gt;
		this.handleUpdateString(textcontent);&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.handleUpdateString = function handleUpdateString(str)&lt;br /&gt;
	{&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&amp;lt;/pre&amp;gt;*/&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-11-22T05:47:17Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Cache busting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.2&lt;br /&gt;
// 2017-11-22&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.2.&lt;br /&gt;
// @version       4.2.76&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;cachedodge=4.2.76&amp;amp;fakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Note that on Firefox Quantum, with Greasemonkey 4, this will not use the&lt;br /&gt;
		// GM get/setValue, but use localStorage instead, as getValue returns&lt;br /&gt;
		// a Promise now, which would require rewriting a lot of things (which maybe&lt;br /&gt;
		// I'll get to eventually).&lt;br /&gt;
	&lt;br /&gt;
		// We don't want it to actually write anything to console.log, though, so&lt;br /&gt;
		// let's stop that&lt;br /&gt;
		var log = console.log;&lt;br /&gt;
		console.log = function log(){};&lt;br /&gt;
		var gmstorage = typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true);&lt;br /&gt;
		console.log = log;&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, loadcb, errorcb, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM.xmlHttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM_xmlhttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var xhr = new XMLHttpRequest();&lt;br /&gt;
			xhr.onload = function onload() {loadcb(xhr.responseText, xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				xhr.onerror = function onerror() {errorcb(xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			xhr.open(method, url);&lt;br /&gt;
			xhr.send();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = function downloadWiki(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadPage(this.buildWikiUrl(page), this.wikiPageDownloaded.bind(this, loadcb, errorcb, 0), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiPageDownloaded = function wikiPageDownloaded(loadcb, errorcb, timesredirected, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// check for redirects&lt;br /&gt;
		var matches = text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
		if (matches)&lt;br /&gt;
		{&lt;br /&gt;
			if (timesredirected &amp;gt;= 3) // follow 3 redirects, but no more&lt;br /&gt;
			{&lt;br /&gt;
				errorcb(500, &amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Get the page name out of the redirect text&lt;br /&gt;
			text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			text = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			this.downloadPage(this.buildWikiUrl(text), this.wikiPageDownloaded.bind(this, loadcb, errorcb, timesredirected + 1), errorcb);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(text, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWikiXML = function downloadWikiXML(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadWiki(page, this.wikiXMLDownloaded.bind(this, loadcb, errorcb), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiXMLDownloaded = function wikiXMLDownloaded(loadcb, errorcb, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			errorcb(500, &amp;quot;Error in XML:\n&amp;quot; + e.toString());&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(doc, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = function currentFrame(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;, (a) =&amp;gt; {&lt;br /&gt;
				// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
				// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
				// that we're paused.&lt;br /&gt;
				if (a != this.guessisplaying.lastframe)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.lastframe = a;&lt;br /&gt;
					this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
					this.guessisplaying.state = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback(a);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.currentFrame(flashmovie, callback)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = function totalFrames(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.totalFrames(flashmovie, callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = function isPlaying(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			callback(this.guessisplaying.state);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.isPlaying(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = function framesLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/videoplayer', callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/', callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = function isLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {callback(frame &amp;gt;= 0)}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.whenLoaded = function whenLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;gt;= 0)&lt;br /&gt;
				callback();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(this.whenLoaded.bind(this, callback, flashmovie), 100);&lt;br /&gt;
		}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.stop = function stop(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.stop(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = function play(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.play(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = function goto(frame, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.goto(flashmovie, frame, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = function zoomOut(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 * factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = function zoomIn(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 / factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = function zoomReset(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 0, callback);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());	&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		utils.whenLoaded(() =&amp;gt; {&lt;br /&gt;
			playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
			utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			if (tot &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					if (frame &amp;lt; 0)&lt;br /&gt;
						frame = 0;&lt;br /&gt;
					if (this.framecountertext)&lt;br /&gt;
					{&lt;br /&gt;
						var a = tot.toString();&lt;br /&gt;
						var b = (frame+1).toString();&lt;br /&gt;
						while (b.length &amp;lt; a.length)&lt;br /&gt;
							b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
						this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
					}&lt;br /&gt;
					if(!this.dragging)&lt;br /&gt;
					{&lt;br /&gt;
						if (tot &amp;gt; 1)&lt;br /&gt;
							this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
						utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
							this.paused = !playing;&lt;br /&gt;
							this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					utils.framesLoaded((frame) =&amp;gt; {&lt;br /&gt;
						this.loadmeter.style.width = (frame/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
			this.paused = playing;&lt;br /&gt;
			this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			if (this.paused)&lt;br /&gt;
				utils.stop();&lt;br /&gt;
			else&lt;br /&gt;
				utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		utils.goto(0, () =&amp;gt; {&lt;br /&gt;
			utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			utils.goto(tot - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame + 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		utils.totalFrames((t) =&amp;gt; {&lt;br /&gt;
			if (t &amp;gt; 1)&lt;br /&gt;
			{&lt;br /&gt;
				var frame = Math.round(t * pos);&lt;br /&gt;
				utils.goto(frame);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0), this.onCheckLoad.bind(this), this.onCheckError.bind(this), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckLoad = function onCheckLoad(text, status, statustext, headers)&lt;br /&gt;
	{&lt;br /&gt;
		if (status == 200 &amp;amp;&amp;amp; headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
		this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
		this.nextlink = undefined;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		utils.downloadPage(&lt;br /&gt;
			&amp;quot;http://www.homestarrunner.com/rando.xml?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0),&lt;br /&gt;
			this.randoXMLLoaded.bind(this),&lt;br /&gt;
			this.randoXMLError.bind(this)&lt;br /&gt;
		);&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLLoaded = function randoXMLLoaded(responseText)&lt;br /&gt;
	{&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		// fix invalid XML...&lt;br /&gt;
		// add missing root element&lt;br /&gt;
		var doc = responseText.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
		doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
		// fix bad ampersands&lt;br /&gt;
		doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
		doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		var sbemailcounter = 0;&lt;br /&gt;
		this.allrandourls = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = doc.documentElement.childNodes[i];&lt;br /&gt;
			if (node.nodeType == 1)&lt;br /&gt;
			{&lt;br /&gt;
				var type = node.nodeName.toLowerCase();&lt;br /&gt;
				var u = node.getAttribute('u');&lt;br /&gt;
				var n = node.getAttribute('n');&lt;br /&gt;
				if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
				if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					sbemailcounter++;&lt;br /&gt;
					n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
				}&lt;br /&gt;
				if (u)&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
				else&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLError = function randoXMLError()&lt;br /&gt;
	{&lt;br /&gt;
		this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = utils.getPref('captions', true);&lt;br /&gt;
		this.colours = utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
		utils.downloadWikiXML(&amp;quot;Subtitles:Languages&amp;quot;, this.languageListDownloaded.bind(this), this.languageListError.bind(this));&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListDownloaded = function languageListDownloaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListError = function languageListError()&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var div = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		div.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(div);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:Characters', this.charactersLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.charactersLoaded = function charactersLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
		this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.downloadSubsError = function downloadSubsError(status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		if (this.testsubs)&lt;br /&gt;
			this.transcriptError(statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.reloadSubs = function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:' + globals.filename + '/' + this.language, this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			utils.wikiXMLDownloaded(this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this), this.testsubsdata, 200, &amp;quot;OK&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.transcriptLoaded = function transcriptLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				return;&lt;br /&gt;
			frame++; // Make 1-based&lt;br /&gt;
			// binary search to find the right transcript line&lt;br /&gt;
			var first = 0;&lt;br /&gt;
			var last = this.transcript.length;&lt;br /&gt;
			while(first &amp;lt; (last - 1))&lt;br /&gt;
			{&lt;br /&gt;
				var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
				if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
				{&lt;br /&gt;
					first = mid;&lt;br /&gt;
					if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					last = mid;&lt;br /&gt;
			}&lt;br /&gt;
			// should we actually show the line?&lt;br /&gt;
			if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
				this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
			else&lt;br /&gt;
				this.setSubtitles(false);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.2.76=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 2, 76];&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.havechecked = false;&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.havechecked || !this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
		this.havechecked = true;&lt;br /&gt;
	&lt;br /&gt;
		if (Date.now() - utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0) &amp;gt; 86400000)&lt;br /&gt;
		{&lt;br /&gt;
			utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random(), this.onLoad.bind(this));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.handleUpdateString(utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;));&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.onLoad = function onLoad(textcontent)&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
		utils.setPref(&amp;quot;lastcheckstring&amp;quot;, textcontent);&lt;br /&gt;
		this.handleUpdateString(textcontent);&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.handleUpdateString = function handleUpdateString(str)&lt;br /&gt;
	{&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&amp;lt;/pre&amp;gt;*/&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-11-22T05:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Fix this comment thing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.2&lt;br /&gt;
// 2017-11-22&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.2.&lt;br /&gt;
// @version       4.2.75&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Note that on Firefox Quantum, with Greasemonkey 4, this will not use the&lt;br /&gt;
		// GM get/setValue, but use localStorage instead, as getValue returns&lt;br /&gt;
		// a Promise now, which would require rewriting a lot of things (which maybe&lt;br /&gt;
		// I'll get to eventually).&lt;br /&gt;
	&lt;br /&gt;
		// We don't want it to actually write anything to console.log, though, so&lt;br /&gt;
		// let's stop that&lt;br /&gt;
		var log = console.log;&lt;br /&gt;
		console.log = function log(){};&lt;br /&gt;
		var gmstorage = typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true);&lt;br /&gt;
		console.log = log;&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, loadcb, errorcb, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM.xmlHttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM_xmlhttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var xhr = new XMLHttpRequest();&lt;br /&gt;
			xhr.onload = function onload() {loadcb(xhr.responseText, xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				xhr.onerror = function onerror() {errorcb(xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			xhr.open(method, url);&lt;br /&gt;
			xhr.send();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = function downloadWiki(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadPage(this.buildWikiUrl(page), this.wikiPageDownloaded.bind(this, loadcb, errorcb, 0), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiPageDownloaded = function wikiPageDownloaded(loadcb, errorcb, timesredirected, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// check for redirects&lt;br /&gt;
		var matches = text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
		if (matches)&lt;br /&gt;
		{&lt;br /&gt;
			if (timesredirected &amp;gt;= 3) // follow 3 redirects, but no more&lt;br /&gt;
			{&lt;br /&gt;
				errorcb(500, &amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Get the page name out of the redirect text&lt;br /&gt;
			text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			text = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			this.downloadPage(this.buildWikiUrl(text), this.wikiPageDownloaded.bind(this, loadcb, errorcb, timesredirected + 1), errorcb);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(text, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWikiXML = function downloadWikiXML(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadWiki(page, this.wikiXMLDownloaded.bind(this, loadcb, errorcb), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiXMLDownloaded = function wikiXMLDownloaded(loadcb, errorcb, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			errorcb(500, &amp;quot;Error in XML:\n&amp;quot; + e.toString());&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(doc, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = function currentFrame(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;, (a) =&amp;gt; {&lt;br /&gt;
				// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
				// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
				// that we're paused.&lt;br /&gt;
				if (a != this.guessisplaying.lastframe)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.lastframe = a;&lt;br /&gt;
					this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
					this.guessisplaying.state = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback(a);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.currentFrame(flashmovie, callback)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = function totalFrames(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.totalFrames(flashmovie, callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = function isPlaying(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			callback(this.guessisplaying.state);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.isPlaying(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = function framesLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/videoplayer', callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/', callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = function isLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {callback(frame &amp;gt;= 0)}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.whenLoaded = function whenLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;gt;= 0)&lt;br /&gt;
				callback();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(this.whenLoaded.bind(this, callback, flashmovie), 100);&lt;br /&gt;
		}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.stop = function stop(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.stop(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = function play(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.play(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = function goto(frame, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.goto(flashmovie, frame, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = function zoomOut(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 * factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = function zoomIn(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 / factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = function zoomReset(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 0, callback);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());	&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		utils.whenLoaded(() =&amp;gt; {&lt;br /&gt;
			playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
			utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			if (tot &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					if (frame &amp;lt; 0)&lt;br /&gt;
						frame = 0;&lt;br /&gt;
					if (this.framecountertext)&lt;br /&gt;
					{&lt;br /&gt;
						var a = tot.toString();&lt;br /&gt;
						var b = (frame+1).toString();&lt;br /&gt;
						while (b.length &amp;lt; a.length)&lt;br /&gt;
							b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
						this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
					}&lt;br /&gt;
					if(!this.dragging)&lt;br /&gt;
					{&lt;br /&gt;
						if (tot &amp;gt; 1)&lt;br /&gt;
							this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
						utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
							this.paused = !playing;&lt;br /&gt;
							this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					utils.framesLoaded((frame) =&amp;gt; {&lt;br /&gt;
						this.loadmeter.style.width = (frame/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
			this.paused = playing;&lt;br /&gt;
			this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			if (this.paused)&lt;br /&gt;
				utils.stop();&lt;br /&gt;
			else&lt;br /&gt;
				utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		utils.goto(0, () =&amp;gt; {&lt;br /&gt;
			utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			utils.goto(tot - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame + 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		utils.totalFrames((t) =&amp;gt; {&lt;br /&gt;
			if (t &amp;gt; 1)&lt;br /&gt;
			{&lt;br /&gt;
				var frame = Math.round(t * pos);&lt;br /&gt;
				utils.goto(frame);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0), this.onCheckLoad.bind(this), this.onCheckError.bind(this), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckLoad = function onCheckLoad(text, status, statustext, headers)&lt;br /&gt;
	{&lt;br /&gt;
		if (status == 200 &amp;amp;&amp;amp; headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
		this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
		this.nextlink = undefined;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		utils.downloadPage(&lt;br /&gt;
			&amp;quot;http://www.homestarrunner.com/rando.xml?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0),&lt;br /&gt;
			this.randoXMLLoaded.bind(this),&lt;br /&gt;
			this.randoXMLError.bind(this)&lt;br /&gt;
		);&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLLoaded = function randoXMLLoaded(responseText)&lt;br /&gt;
	{&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		// fix invalid XML...&lt;br /&gt;
		// add missing root element&lt;br /&gt;
		var doc = responseText.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
		doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
		// fix bad ampersands&lt;br /&gt;
		doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
		doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		var sbemailcounter = 0;&lt;br /&gt;
		this.allrandourls = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = doc.documentElement.childNodes[i];&lt;br /&gt;
			if (node.nodeType == 1)&lt;br /&gt;
			{&lt;br /&gt;
				var type = node.nodeName.toLowerCase();&lt;br /&gt;
				var u = node.getAttribute('u');&lt;br /&gt;
				var n = node.getAttribute('n');&lt;br /&gt;
				if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
				if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					sbemailcounter++;&lt;br /&gt;
					n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
				}&lt;br /&gt;
				if (u)&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
				else&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLError = function randoXMLError()&lt;br /&gt;
	{&lt;br /&gt;
		this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = utils.getPref('captions', true);&lt;br /&gt;
		this.colours = utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
		utils.downloadWikiXML(&amp;quot;Subtitles:Languages&amp;quot;, this.languageListDownloaded.bind(this), this.languageListError.bind(this));&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListDownloaded = function languageListDownloaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListError = function languageListError()&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var div = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		div.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(div);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:Characters', this.charactersLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.charactersLoaded = function charactersLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
		this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.downloadSubsError = function downloadSubsError(status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		if (this.testsubs)&lt;br /&gt;
			this.transcriptError(statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.reloadSubs = function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:' + globals.filename + '/' + this.language, this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			utils.wikiXMLDownloaded(this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this), this.testsubsdata, 200, &amp;quot;OK&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.transcriptLoaded = function transcriptLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				return;&lt;br /&gt;
			frame++; // Make 1-based&lt;br /&gt;
			// binary search to find the right transcript line&lt;br /&gt;
			var first = 0;&lt;br /&gt;
			var last = this.transcript.length;&lt;br /&gt;
			while(first &amp;lt; (last - 1))&lt;br /&gt;
			{&lt;br /&gt;
				var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
				if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
				{&lt;br /&gt;
					first = mid;&lt;br /&gt;
					if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					last = mid;&lt;br /&gt;
			}&lt;br /&gt;
			// should we actually show the line?&lt;br /&gt;
			if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
				this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
			else&lt;br /&gt;
				this.setSubtitles(false);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.2.75=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 2, 75];&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.havechecked = false;&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.havechecked || !this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
		this.havechecked = true;&lt;br /&gt;
	&lt;br /&gt;
		if (Date.now() - utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0) &amp;gt; 86400000)&lt;br /&gt;
		{&lt;br /&gt;
			utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random(), this.onLoad.bind(this));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.handleUpdateString(utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;));&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.onLoad = function onLoad(textcontent)&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
		utils.setPref(&amp;quot;lastcheckstring&amp;quot;, textcontent);&lt;br /&gt;
		this.handleUpdateString(textcontent);&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.handleUpdateString = function handleUpdateString(str)&lt;br /&gt;
	{&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&amp;lt;/pre&amp;gt;*/&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-11-22T04:49:20Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Release notes */ 4.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
===Version 4.2 (22 Nov, 2017)===&lt;br /&gt;
* Quick fix for basic support for Firefox Quantum and Greasemonkey 4.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-11-22T04:47:41Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* FireFox Quantum */ Got it working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;br /&gt;
OK, I've put up a bandaid fix that gets the script working again in Greasemonkey 4. It's a bit suboptimal as it won't remember your settings from prior versions, you'll have to pick your options again. It'll still keep remembering it going forward, though. Making it use the proper GM config storage will require some significant rewriting. Which I'll get to, but that's less pressing than just getting it working again. {{User:Phlip/sig}} 04:47, 22 November 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-11-22T04:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Bandaid fix for Greasemonkey 4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.2&lt;br /&gt;
// 2017-11-22&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.2.&lt;br /&gt;
// @version       4.2.74&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM.getValue&lt;br /&gt;
// @grant         GM.setValue&lt;br /&gt;
// @grant         GM.xmlHttpRequest&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// Note that on Firefox Quantum, with Greasemonkey 4, this will not use the&lt;br /&gt;
		// GM get/setValue, but use localStorage instead, as getValue returns&lt;br /&gt;
		// a Promise now, which would require rewriting a lot of things (which maybe&lt;br /&gt;
		// I'll get to eventually).&lt;br /&gt;
	&lt;br /&gt;
		// We don't want it to actually write anything to console.log, though, so&lt;br /&gt;
		// let's stop that&lt;br /&gt;
		var log = console.log;&lt;br /&gt;
		console.log = function log(){};&lt;br /&gt;
		var gmstorage = typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true);&lt;br /&gt;
		console.log = log;&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, loadcb, errorcb, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		if (typeof(GM) == &amp;quot;object&amp;quot; &amp;amp;&amp;amp; GM.xmlHttpRequest)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM.xmlHttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else if (typeof(GM_xmlhttpRequest) == &amp;quot;function&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM_xmlhttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var xhr = new XMLHttpRequest();&lt;br /&gt;
			xhr.onload = function onload() {loadcb(xhr.responseText, xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				xhr.onerror = function onerror() {errorcb(xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			xhr.open(method, url);&lt;br /&gt;
			xhr.send();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = function downloadWiki(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadPage(this.buildWikiUrl(page), this.wikiPageDownloaded.bind(this, loadcb, errorcb, 0), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiPageDownloaded = function wikiPageDownloaded(loadcb, errorcb, timesredirected, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// check for redirects&lt;br /&gt;
		var matches = text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
		if (matches)&lt;br /&gt;
		{&lt;br /&gt;
			if (timesredirected &amp;gt;= 3) // follow 3 redirects, but no more&lt;br /&gt;
			{&lt;br /&gt;
				errorcb(500, &amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Get the page name out of the redirect text&lt;br /&gt;
			text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			text = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			this.downloadPage(this.buildWikiUrl(text), this.wikiPageDownloaded.bind(this, loadcb, errorcb, timesredirected + 1), errorcb);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(text, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWikiXML = function downloadWikiXML(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadWiki(page, this.wikiXMLDownloaded.bind(this, loadcb, errorcb), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiXMLDownloaded = function wikiXMLDownloaded(loadcb, errorcb, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			errorcb(500, &amp;quot;Error in XML:\n&amp;quot; + e.toString());&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(doc, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = function currentFrame(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;, (a) =&amp;gt; {&lt;br /&gt;
				// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
				// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
				// that we're paused.&lt;br /&gt;
				if (a != this.guessisplaying.lastframe)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.lastframe = a;&lt;br /&gt;
					this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
					this.guessisplaying.state = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback(a);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.currentFrame(flashmovie, callback)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = function totalFrames(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.totalFrames(flashmovie, callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = function isPlaying(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			callback(this.guessisplaying.state);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.isPlaying(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = function framesLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/videoplayer', callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/', callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = function isLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {callback(frame &amp;gt;= 0)}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.whenLoaded = function whenLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;gt;= 0)&lt;br /&gt;
				callback();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(this.whenLoaded.bind(this, callback, flashmovie), 100);&lt;br /&gt;
		}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.stop = function stop(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.stop(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = function play(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.play(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = function goto(frame, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.goto(flashmovie, frame, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = function zoomOut(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 * factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = function zoomIn(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 / factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = function zoomReset(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 0, callback);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());	&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		utils.whenLoaded(() =&amp;gt; {&lt;br /&gt;
			playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
			utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			if (tot &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					if (frame &amp;lt; 0)&lt;br /&gt;
						frame = 0;&lt;br /&gt;
					if (this.framecountertext)&lt;br /&gt;
					{&lt;br /&gt;
						var a = tot.toString();&lt;br /&gt;
						var b = (frame+1).toString();&lt;br /&gt;
						while (b.length &amp;lt; a.length)&lt;br /&gt;
							b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
						this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
					}&lt;br /&gt;
					if(!this.dragging)&lt;br /&gt;
					{&lt;br /&gt;
						if (tot &amp;gt; 1)&lt;br /&gt;
							this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
						utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
							this.paused = !playing;&lt;br /&gt;
							this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					utils.framesLoaded((frame) =&amp;gt; {&lt;br /&gt;
						this.loadmeter.style.width = (frame/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
			this.paused = playing;&lt;br /&gt;
			this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			if (this.paused)&lt;br /&gt;
				utils.stop();&lt;br /&gt;
			else&lt;br /&gt;
				utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		utils.goto(0, () =&amp;gt; {&lt;br /&gt;
			utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			utils.goto(tot - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame + 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		utils.totalFrames((t) =&amp;gt; {&lt;br /&gt;
			if (t &amp;gt; 1)&lt;br /&gt;
			{&lt;br /&gt;
				var frame = Math.round(t * pos);&lt;br /&gt;
				utils.goto(frame);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0), this.onCheckLoad.bind(this), this.onCheckError.bind(this), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckLoad = function onCheckLoad(text, status, statustext, headers)&lt;br /&gt;
	{&lt;br /&gt;
		if (status == 200 &amp;amp;&amp;amp; headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
		this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
		this.nextlink = undefined;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		utils.downloadPage(&lt;br /&gt;
			&amp;quot;http://www.homestarrunner.com/rando.xml?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0),&lt;br /&gt;
			this.randoXMLLoaded.bind(this),&lt;br /&gt;
			this.randoXMLError.bind(this)&lt;br /&gt;
		);&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLLoaded = function randoXMLLoaded(responseText)&lt;br /&gt;
	{&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		// fix invalid XML...&lt;br /&gt;
		// add missing root element&lt;br /&gt;
		var doc = responseText.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
		doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
		// fix bad ampersands&lt;br /&gt;
		doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
		doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		var sbemailcounter = 0;&lt;br /&gt;
		this.allrandourls = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = doc.documentElement.childNodes[i];&lt;br /&gt;
			if (node.nodeType == 1)&lt;br /&gt;
			{&lt;br /&gt;
				var type = node.nodeName.toLowerCase();&lt;br /&gt;
				var u = node.getAttribute('u');&lt;br /&gt;
				var n = node.getAttribute('n');&lt;br /&gt;
				if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
				if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					sbemailcounter++;&lt;br /&gt;
					n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
				}&lt;br /&gt;
				if (u)&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
				else&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLError = function randoXMLError()&lt;br /&gt;
	{&lt;br /&gt;
		this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = utils.getPref('captions', true);&lt;br /&gt;
		this.colours = utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
		utils.downloadWikiXML(&amp;quot;Subtitles:Languages&amp;quot;, this.languageListDownloaded.bind(this), this.languageListError.bind(this));&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListDownloaded = function languageListDownloaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListError = function languageListError()&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var div = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		div.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(div);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:Characters', this.charactersLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.charactersLoaded = function charactersLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
		this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.downloadSubsError = function downloadSubsError(status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		if (this.testsubs)&lt;br /&gt;
			this.transcriptError(statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.reloadSubs = function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:' + globals.filename + '/' + this.language, this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			utils.wikiXMLDownloaded(this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this), this.testsubsdata, 200, &amp;quot;OK&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.transcriptLoaded = function transcriptLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				return;&lt;br /&gt;
			frame++; // Make 1-based&lt;br /&gt;
			// binary search to find the right transcript line&lt;br /&gt;
			var first = 0;&lt;br /&gt;
			var last = this.transcript.length;&lt;br /&gt;
			while(first &amp;lt; (last - 1))&lt;br /&gt;
			{&lt;br /&gt;
				var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
				if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
				{&lt;br /&gt;
					first = mid;&lt;br /&gt;
					if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					last = mid;&lt;br /&gt;
			}&lt;br /&gt;
			// should we actually show the line?&lt;br /&gt;
			if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
				this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
			else&lt;br /&gt;
				this.setSubtitles(false);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.2.74=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 2, 74];&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.havechecked = false;&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.havechecked || !this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
		this.havechecked = true;&lt;br /&gt;
	&lt;br /&gt;
		if (Date.now() - utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0) &amp;gt; 86400000)&lt;br /&gt;
		{&lt;br /&gt;
			utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random(), this.onLoad.bind(this));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.handleUpdateString(utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;));&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.onLoad = function onLoad(textcontent)&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
		utils.setPref(&amp;quot;lastcheckstring&amp;quot;, textcontent);&lt;br /&gt;
		this.handleUpdateString(textcontent);&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.handleUpdateString = function handleUpdateString(str)&lt;br /&gt;
	{&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-11-19T14:26:33Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* FireFox Quantum */ Looking into it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;br /&gt;
&lt;br /&gt;
== FireFox Quantum ==&lt;br /&gt;
&lt;br /&gt;
The script seems to not load in the new FireFox Quantum. I upgraded to Greasemonkey 4.0 as well.{{User:Bassbone/sig}} 20:29, 14 November 2017 (UTC)&lt;br /&gt;
:I'm having the same problem, for the record. Can anyone shed some light? {{User:SRMX12/sig}} 02:31, 17 November 2017 (UTC)&lt;br /&gt;
::They elected to rewrite Greasemonkey nearly completely for version 4.0; as such there are many things that are backwards incompatible. We'll let you know when we have more details or a solution. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:43, 17 November 2017 (UTC)&lt;br /&gt;
:::I believe that Firefox 57 can only use WebExtensions-based add-ons (and indeed, I can get the Chrome add-on partially working in Firefox, with the main caveat being the subtitles breaking if &amp;quot;check if next exists&amp;quot; is checked). Given this, would it be possible to get a fully-working version of the extension on the Mozilla add-ons site rather than a Greasemonkey script on this wiki? And would that be worth doing? {{User:DEIDATVM/sig}} 10:59, 17 November 2017 (UTC)&lt;br /&gt;
::::Then, whoever created this userscript must make it Quantum-compatible! --[[Special:Contributions/198.37.214.254|198.37.214.254]] 15:27, 18 November 2017 (UTC)&lt;br /&gt;
:::::&amp;quot;Must&amp;quot;? Whatever happened to &amp;quot;Please&amp;quot; and &amp;quot;Thank you&amp;quot;? --[[User:Stux|Stux]] 03:41, 19 November 2017 (UTC)&lt;br /&gt;
:::::*Can you get whoever created this userscript to make it Quantum-compatible, please? Thank you. --[[Special:Contributions/198.37.214.254|198.37.214.254]] 14:23, 19 November 2017 (UTC)&lt;br /&gt;
:::::::I just picked up the new Firefox today, and I'm looking through the notes on the new version of Greasemonkey. No guarantees as to a timeline, but I'm actively looking into it. {{User:Phlip/sig}} 14:26, 19 November 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Homestar_Runner</id>
		<title>Homestar Runner</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Homestar_Runner"/>
				<updated>2017-11-12T05:28:05Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 174.0.3.148 (Talk) to last revision by Gfdgsgxgzgdrc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{charnav|Homestar Runner|hs|Homsar|Strong Bad}}&lt;br /&gt;
[[Image:NewerestHomestar.png|thumb|&amp;quot;Everybody loves [[Strongest Man in the World|the me!]] I'm a terrific athlete!&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
{{aboutcharacter}} {{for|world where the characters exist|Homestar Runner universe}} {{for|entire body of work|Homestar Runner (body of work)}} {{for|website itself|homestarrunner.com}}&lt;br /&gt;
&lt;br /&gt;
== Biography ==&lt;br /&gt;
'''Homestar Runner''' is the star of his namesake website.  He is mainly colored white, with black [[comma]]-shaped eyes and a prominent [[Wikipedia:Prognathism|underbite]].  Usually, he wears a [[#Homestar's Clothing|red shirt with a white star]] and a [[#Homestar Runner's Hat|blue beanie with a red brim and a white spinner]].  His legs are quite long in relation to the rest of his body.  Though he [[Lack of Visible Arms|lacks a visible pair of arms]], he is still able to function as though he has them, being able to carry and throw things and even type proficiently. It's generally accepted that either he ''does'' have arms, but for reasons that are never explained, they are invisible, or that he has limited telekinetic powers. According to the toon [[Marshmallow's Last Stand]], he weighs one hundred pounds. While his middle name was said to be Michael by [[Marzipan]] in [[Halloween Potion-ma-jig]] and by himself in [[Flash is Dead!]], it may also be Hal, as heard in the DVD commentary for [[time capsule#Commentary Transcript|time capsule]], though it was also suggested that Hal is Marzipan's pet name for him.&lt;br /&gt;
&lt;br /&gt;
The subject of jokes and the recipient of [[Nicknames#Homestar Runner|nicknames]], Homestar is an earnest character with a pure heart and nothing but love for the rest of mankind. Unfortunately, his absolute cluelessness and clumsiness keep him from realizing his full potential. As Strong Bad stated in [[TrogdorCon '97]], he has an &amp;quot;unbelievably loose grasp on the world around [him]&amp;quot;. He's not ''completely'' stupid (he once correctly stated [[Wikipedia:Coulomb's law|Coulomb's law]], albeit [[4 branches|after being asked]] what two plus two is) and has proven to be remarkably clever in the past, though [[stupid stuff|such occurrences]] are few and far between. He and most of the other residents of [[Free Country, USA]] speak English, but as seen in his [[First Time Here?|welcome speech to homestarrunner.com]], he is also able to speak [[Spanish]], though it is unknown exactly how much. He frequently uses two-syllable exclamations, like [[montage|&amp;quot;Hi-Ya!&amp;quot;]], [[radio|&amp;quot;Highball!&amp;quot;]], and [[Homestar Presents: Presents|&amp;quot;Ahct-poo!&amp;quot;]]. Also, Homestar has the strange habit of flicking his head in the opposite direction while talking, only to flick it right back, almost like a tic. If he is annunciating several syllables in a word, he will usually flick his head of each of the emphasized parts, such as in [[A Death-Defying Decemberween]], he says, &amp;quot;No way, dog! No way, Bubs!&amp;quot;, his head twitching at both the 'no's.&lt;br /&gt;
&lt;br /&gt;
Homestar is the star athlete on an unspecified sports team led by [[Coach Z]] and keeps it that way via vigorous workouts, as revealed in the [[Strong Bad Email]] [[dullard]].  He is also the colonel (which is always pronounced phonetically) of the [[Homestarmy]] and  the supreme overlord of [[Broternal Order of Different Helmets]] in [[Ever and More!]]. His [[Homestar Runner and Pom Pom's Relationship|best friend]] remains [[Pom Pom]]. He has some [[Wikipedia:Rhotacism (speech impediment)|speech impediments]] (as he says, he has &amp;quot;[[Puppet Jam: Vitamins/Celebrities|twouble with [his] aw's]]&amp;quot;), and appears to have [[Homestar Runner and Homestar Runner's Relationship|short-term memory problems]], as he frequently forgets things he has just done or said (for examples, see the [[Marzipan's Answering Machine Version 12.2|12th Answering Machine]] or [[Homestar Presents: Presents]]). Homestar has also shown an incredible ability to sleep, which has been known to get him into trouble. The most extreme example of this oversleeping is the toon [[Weclome Back]], where he slept through June, and possibly the better half of May as well. He also tends to &amp;quot;borrow&amp;quot; things from (and return things to) [[Strong Bad]], for example, [[Strong Bad's fondue pot]].&lt;br /&gt;
&lt;br /&gt;
Although he is often the target of pranks by Strong Bad, Homestar believes that he is friends with the &amp;quot;[[wrestleman]]&amp;quot; and tries to win his favor, often with bad results that Homestar completely misunderstands. Occasionally, he and Strong Bad will be on pleasant terms, usually participating together in a Strong Bad Email or watching TV at Homestar's house. As a whole, Homestar seems to be too dim to realize when people are being mean to him, or when he's being mean to other people. He often unintentionally insults his friends or steps on their feelings and is unable to understand their resulting feelings of anger. Another quirk of Homestar's is his ability to be easily outsmarted at his own game, but still be completely oblivious and even happy. As Strong Bad put it in [[secret recipes]], &amp;quot;It's like, even when we win, he wins.&amp;quot; It should also be noted that Homestar's psychology may account for his sleepwalking behavior, as exhibited in the Strong Bad Email [[nightlife]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Homestar 3d variation.PNG|thumb|140px|&amp;quot;Hey, Strong Bad. I've got a low polygon count.&amp;quot;]]&lt;br /&gt;
[[Image:Homestarteeth.png|thumb|left|130px|Yes, he does have teeth.]]&lt;br /&gt;
&lt;br /&gt;
Homestar has behaved indignantly at various times, often due to discussions of tender subjects, misunderstanding the topic at-hand or his general ignorance of the present situation. While in this state he acts single-mindedly, and in extreme instances violently. This side of his character, not often shown on the website, is often followed by his coming down into an upset and exhausted state, such as in [[Happy Fireworks]], when he refuses to acknowledge Marzipan's absence, or in [[long pants]], when he adamantly rejects the suggestion that he doesn't wear long pants. In [[email thunder]], he claims that on this occasion he had accidentally taken some of Strong Sad's pills.&lt;br /&gt;
&lt;br /&gt;
At present, Homestar works on the [[isp|help desk]] at an [[The Office|unnamed tech company]] with Strong Bad and [[The Cheat]], but has frequently dabbled in the entertainment industry. He made several [[Fluffy Puff Commercial|commercials]] for [[Fluffy Puff Marshmallows]] along with the product's mascot, [[Marshie]]. He was paid for his work in the commercials with a lifetime supply of &amp;quot;[[Color flavored|Red Flavored]] [[Fluffy Puff Translucent Dessert Related Substance]]&amp;quot;. He is also the host of an obscure talk/game show named &amp;quot;[[The Show]]&amp;quot;, has co-starred in at least three ''[[Dangeresque (film series)|Dangeresque]]'' movies, has sung seven hit singles and 1 Double Jam such as &amp;quot;[[Everybody Knows It]]&amp;quot;, &amp;quot;[[Puppet Jam: Bad Jokes|Bad Jokes]]&amp;quot; and 5 other jams with [[They Might Be Giants]], has revealed that he is considering a career in [[crying|male modeling]], and also has guest starred in an episode of [[Caleb Rentpayer]] (in which he shot Caleb). He enjoys running, breaking into Strong Bad's house, singing, and finding the perfect [[Decemberween]] present. He also seems to really like [[bread]], as seen in [[origins]] and [[disconnected]]. Other favored foods are [[Fluffy Puff Marshmallows|marshmallows]], [[Bronco Trolleys]], [[melonade]], and supposedly [[Wikipedia:Hot Pockets|Hot Pockets]], according to the email [[dullard]]. His most prized possession is his propeller-cap and its [[Spin My Buzzer|&amp;quot;buzzer&amp;quot;]]. He might be a fan of the [[Wikipedia:NHL|NHL]]'s [[Wikipedia:Boston Bruins|Boston Bruins]], as he is seen wearing a Bruins shirt in [[Superbowl Dealie]].&lt;br /&gt;
&lt;br /&gt;
He, [[Coach Z]], [[Bubs]], and [[Pom Pom]], appear to be the current law enforcement in [[Free Country, USA]], as seen in [[Strong Bad is in Jail Cartoon]] and [[road trip]]. The King of Town calls upon his and Pom Pom's assistance in [[The King of Town DVD]], suggesting higher authority and/or credibility. However, he is also seen as a thief in [[candy product]], stealing a pair of half-eaten &amp;quot;choco-pants&amp;quot;. In the October 2007 special [[Jibblies 2]], he saves his friends by agreeing to stay inside the [[Jibblies Painting]] for &amp;quot;eternity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*'''Domicile:''' [[Homestar Runner's House]] &lt;br /&gt;
*'''Debut:''' [[Original Book|&amp;quot;The Homestar Runner Enters The Strongest Man in the World Contest&amp;quot;]]&lt;br /&gt;
*[[:Category:Homestar Runner Filmography|Complete Filmography]]&lt;br /&gt;
&lt;br /&gt;
{{Character Video Transcript}}&lt;br /&gt;
&lt;br /&gt;
== Homestar's Eyes ==&lt;br /&gt;
[[Image:Straighton.png|thumb|Cartoon straight-on]]&lt;br /&gt;
[[Image:TMBG_Homestar_closeup_20040925.jpg|thumb|right|Puppet Stuff straight-on]]&lt;br /&gt;
Homestar's eyes are quite strange.&lt;br /&gt;
*Sometimes they seem to move around his head. Most of the time they're like a flounder's eyes, but they switch sides of his face whenever he turns. In the [[Old Intro 2]], Homestar's eyes seem to move as the camera circles around him. Also, in [[Theme Song Video]], the currently absent toon [[Marshmallow's Last Stand]], the old version of [[In Search Of The Yello Dello DVD|In Search of the Yello Dello]], the [[Homestar Runner and Strong Bad Screensaver|Homestar Screensaver]], [[action figure]], [[Eggs (toon)|Eggs toon]], [[Costume Commercial]], and [[Hremail 7]] he faces to the front, which further lends credence to this theory.&lt;br /&gt;
**It is possible that Homestar's eyes are in fact on the front of his head, but his generally accepted stature always has him facing slightly to the side.  Because he is a cartoon character, the three-dimensional shape of his head and face are not shown, so the viewer is left to infer the eyes' correct positions based on which direction Homestar appears to be facing.&lt;br /&gt;
&lt;br /&gt;
*His puppet and his two figurines, on the other hand, have eyes stuck on one side of his head. Occasionally the other side of Puppet Homestar's face can be seen.&lt;br /&gt;
**[[The Brothers Chaps]] actually made the eyes detachable, so that they can be switched if necessary.&lt;br /&gt;
&lt;br /&gt;
*Homestar's eyes almost always blink at regular intervals (once every approximately 3.9 seconds), even when the cartoon is paused or has stopped, and in some special cases such as where he appears on a magazine cover (as seen in the email [[modeling]]).  This is explained by the fact that his eyes are animated as a Flash movie clip, which generally animates continuously.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Homestar's Clothing ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Homestar's Legs and shirt in the middle.PNG|50px|thumb|In the middle]]&lt;br /&gt;
[[Image:Onetwo_hrfoot.PNG|50px|thumb|left|The bottom of his feet]]&lt;br /&gt;
[[Image:Homestarhat.png|thumb|200px|Spin my buzzer!]]&lt;br /&gt;
Homestar Runner usually wears a [[Homestar Runner's Hat|blue and red propeller cap]], commonly called a beanie. He calls the propeller a &amp;quot;buzzer&amp;quot;. In an interview with [[Wonkavision Magazine Interview|Wonkavision Magazine]], he claimed that he was born with his hat on.  He is occasionally seen without it.  He had lost his hat in [[Where My Hat is At?]] and apparently [[Marshmallow's Last Stand]] (according to the DVD commentary) as well.  In the email [[super powers]], Strong Bad managed to make the hat pop off of Homestar's head.  In the email [[car]], Homestar had his hat &amp;quot;tricked out&amp;quot; with features such as hydraulics and underglow neon.  He also claimed that if Strong Bad [[Spin My Buzzer|spun his &amp;quot;buzzer&amp;quot;]], it would play the theme from ''[[Wikipedia:Night Court|Night Court]]'', but it was obvious Homestar hummed it himself.  Homestar dressed as himself in [[TrogdorCon '97]], and wore two hats as a result.&lt;br /&gt;
&lt;br /&gt;
Homestar's shirt seems to most resemble a red skirt with a white star on it. [[Strong Bad]] stole the star in [[Marshmallow's Last Stand]] and used it to coax Homestar and [[Pom Pom]] into wrestling [[Strong Mad]] and himself. Despite the brothers' loss to Homestar and Pom Pom, Strong Bad tore up the star, and only by kicking Strong Bad and taking one of the stars floating around his head was Homestar able to return his shirt to its original glory. The only other times Homestar's star has been removed were in [[different town]], in which Strong Bad imagined Homestar angrily tearing the star off his shirt and stamping on it when he &amp;quot;called it quits&amp;quot;, and [[hygiene]], when he takes it off and blows his nose in it as John. Clearly, the star is a mark of pride to Homestar Runner.  In [[Hremail 62]], Homestar shows off some of his apparently older stars, which he calls &amp;quot;Homestars.&amp;quot; A real-life version of the shirt is available for purchase in the [[Store]].&lt;br /&gt;
&lt;br /&gt;
In the original script for [[flashback]], Strong Bad wore a similar shirt until Marzipan gave one to Homestar (to replace his Duckie Shirt). After this point, Strong Bad would have ripped off his shirt, explaining why he never wore one to this day. [[The Homestar Runner Gets Something Stuck In His Craw]] offered the alternative explanation that the star shirt somehow became stuck in his craw while he somersaulted around the world fifty times. &lt;br /&gt;
&lt;br /&gt;
Other than his propeller cap, Homestar's shirt appears to be his only piece of clothing, as his questionable [[Homestar Runner's Pants|pants]] are a mystery. However, a Homestar costume is available in [[Strong Bad's Cool Game for Attractive People]] as separate shirt, white pants, and white shoes with blue soles.  He wore a gray version of his shirt in [[impression]] while doing a bad imitation of [[Strong Sad]]. In [[Costume Commercial]], Homestar is seen wearing pants when trick-or-treating as Bubs at Strong Bad's house.&lt;br /&gt;
&lt;br /&gt;
In [[long pants]], Strong Bad claims that Homestar doesn't have shoes, but has blue soles glued to the bottom of his feet. Several times, however, this has been disproven, as in [[New Boots]] [[The Cheat]] [[Powered by The Cheat|animated]] Homestar's shoes being unambiguous objects. This was confirmed in [[Hremail 2000]], where he was shown holding his shoe, though the same hremail shows a close up of his foot with warts and hair, and no clear distinction between shoe and foot.  He also has two larger shoe sizes; sizes 18 and [[Strong Mad]].&lt;br /&gt;
&lt;br /&gt;
Note that the shirt is also straight compared to the eyes on the unfinished toon, [[Tis True, Pom Pom, Tis True]].&lt;br /&gt;
&lt;br /&gt;
==Homestar &amp;amp; Marzipan==&lt;br /&gt;
&amp;lt;!-- Please keep this section as brief as possible. Only very important information directly related to basic gameplay should be added. Any other information may be added to the Homestar and Marzipan Relationship article in the first instance. --&amp;gt;&lt;br /&gt;
[[Image:marzipan.png|thumb|Homestar's favorite hippie.]]&lt;br /&gt;
&lt;br /&gt;
:''Main article: [[Homestar Runner and Marzipan's Relationship]]'' &lt;br /&gt;
Homestar's relationship with Marzipan seems tenuous at best, and it has appeared to deteriorate over time.  Although Homestar frequently (and usually inadvertently) insults Marzipan, and she claims to have broken up with him several times, the two still seem to stick together. It is unclear how their relationship started, but the fact that their relationship is never truly broken suggests that they really do love each other.&lt;br /&gt;
&lt;br /&gt;
Homestar appears to greatly value their relationship; on the ''rare'' occasion that he realizes that their relationship is in jeopardy, he will spring into a desperate ploy to patch things up. He also seems to miss and need Marzipan's badgering every once in a while. When she was out of town in [[Happy Fireworks|July of 2005]], he carried around a [[Cardboard Marzipan|cardboard cutout]] version of her and provided a voice for it. The cardboard version still made similar comments about violence and Homestar's poor grammar that the actual Marzipan would have, providing Homestar with the presumably cathartic opportunity to say &amp;quot;Shut up, Marzipan.&amp;quot; Even then, Homestar's relationship with the &amp;quot;Cardboard Marzi&amp;quot; appeared to be tenuous, as he voiced her flirting with other men. Cardboard Marzipan returned in [[No Hands on Deck|August of 2006]], when she was slightly more positive with Homestar, and said she was proud of his unusually-constructed deck.&lt;br /&gt;
&lt;br /&gt;
In [[Date Nite]], Marzipan went out with The Cheat, much to Homestar's dismay. Though the date went well, Marzipan did not stay with The Cheat. She later went out with Bubs, to Coach Z's dismay.&lt;br /&gt;
&lt;br /&gt;
In [[Donut Unto Others]], it was revealed that Homestar and Marzipan have broken up at least 17 times, and that the 17th break-up had reached its 16th anniversary.&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
:''Main article: [[Character Relationships]]''&lt;br /&gt;
*[[Homestar Runner and Homestar Runner's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Bad's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Pom Pom's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Marzipan's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Coach Z's Relationship]]&lt;br /&gt;
*[[Homestar Runner and The Cheat's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Bubs's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Sad's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Mad's Relationship]]&lt;br /&gt;
&lt;br /&gt;
== Variations ==&lt;br /&gt;
*[[The Homestar Runner]] ([[Old-Timey]])&lt;br /&gt;
*[[1-Up]] ([[20X6]])&lt;br /&gt;
*[[Dangeresque Too]] ([[Dangeresque (film series)|Dangeresque]])&lt;br /&gt;
*[[Uzi Bazooka]] ([[Dangeresque (film series)|Dangeresque]])&lt;br /&gt;
*[[The King of Town (Decemberween)|The King of Town]] ([[Decemberween]])&lt;br /&gt;
*[[The Homestar Runner (storybook)]]&lt;br /&gt;
*[[Tofu Homestar]]&lt;br /&gt;
*[[Atari Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Vector Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Bad Graphics Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Compy 386-emulated Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Handheld Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Dating Sim Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Melee Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Kid Speedy Homestar]]&lt;br /&gt;
*[[Other Character Variations|Freaky Marzipan]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Other Character Variations|Suave Homestar]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Other Character Variations|One-eyed Homestar]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Teenage Variation#Teenage Homestar Runner|Teenage Homestar]]&lt;br /&gt;
*[[Free Petry Dish, USA Variation#Homestarmecium|Homestarmecium]] ([[highschool]])&lt;br /&gt;
*[[The Castlefunnies|The Castlefunnies Homestar Runner]] ([[old comics]])&lt;br /&gt;
*[[Cardboard Homestar]]&lt;br /&gt;
*[[3D Character Variations|3D Homestar]]&lt;br /&gt;
*[[Puppet Character Variations|Puppet Homestar]]&lt;br /&gt;
*[[The Exact Same]]&lt;br /&gt;
*[[Powered by The Cheat Character Variations|Powered by The Cheat Homestar]]&lt;br /&gt;
*[[Mario Paint Character Variations|Mario Paint Homestar]]&lt;br /&gt;
*[[Other Character Variations|Ornament Homestar]]&lt;br /&gt;
*[[Other Character Variations|Egg Homestar]]&lt;br /&gt;
*[[Other Character Variations|John]] ([[hygiene]])&lt;br /&gt;
*[[Other Character Variations|Shadow Homestar]]&lt;br /&gt;
*[[H. Star]] ([[Xeriouxly Forxe]])&lt;br /&gt;
*[[Yonder Website Character Variations#Character 2|Character 2]] ([[Characters from Yonder Website|Yonder Website]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Halloween Costumes]] ===&lt;br /&gt;
*[[Wikipedia:Kurt Cobain|Kurt Cobain]] in [[Homestarloween Party]].&lt;br /&gt;
*[[Wikipedia:The Greatest American Hero|The Greatest American Hero]] in [[The House That Gave Sucky Treats]].&lt;br /&gt;
*[[Wikipedia:Angus Young|Angus Young]] in [[Pumpkin Carve-nival]].&lt;br /&gt;
*[[John McEnroe]] in [[3 Times Halloween Funjob]].&lt;br /&gt;
*Carl Spackler (played by [[Wikipedia:Bill Murray|Bill Murray]] in [[IMDb:tt0080487|Caddyshack]]) in [[Halloween Fairstival]].&lt;br /&gt;
*Moocher from [[IMDb:tt0078902|Breaking Away]] in [[Halloween Potion-ma-jig]].&lt;br /&gt;
*[[Wikipedia:Teen Wolf|Teen Wolf]] in [[Happy Hallow-day]].&lt;br /&gt;
*[[Wikipedia:Artie, the Strongest Man in the World|Artie, the Strongest Man in the World]] in [[Jibblies 2]]&lt;br /&gt;
*[[Wikipedia:Yahoo Serious|Yahoo Serious]]([[Seriously|ly]]) in [[Most in the Graveyard]].&lt;br /&gt;
*[[Wikipedia:Rubin and Ed|Crispin Glover as Rubin Farr]] in [[Doomy Tales of the Macabre]].&lt;br /&gt;
*[[Wikipedia:Christmas on Mars|The Alien Super-Being]] in [[Which Ween Costumes]].&lt;br /&gt;
*[[Wikipedia:Tobias Fünke|Tobias Fünke]] in [[I Killed Pom Pom]].&lt;br /&gt;
*[[Wikipedia:Raising Arizona|H.I. McDunnough]] in [[The House That Gave Sucky Tricks]].&lt;br /&gt;
*[[Wikipedia:Mr. B Natural|Mr. B. Natural]] in [[Later That Night...]].&lt;br /&gt;
&lt;br /&gt;
==Quotes of the Week==&lt;br /&gt;
{{qotwstart}}&lt;br /&gt;
*{{qotw|&amp;quot;Now you guys are sure this won't emancipate me from my ridiculous striped pants?&amp;quot;|[[highschool]]|Mirror:hs_emancipate.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Doodle doodle loot doot doot doot doodoo. Boodle oodle oot doot doo! And so forth.&amp;quot; ''{Inspector Gadget theme continues}''|[[Donut Unto Others]] extended take|Mirror:hs_gadget.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Don't you remember? That's how you got Darryl Strawbry on your team back then.&amp;quot;|[[Kick-A-Ball]] outtake|Mirror:hs_strawbry.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I know how 'em duckie goes! Wack wack.&amp;quot;|possible [[Career Day]] outtake|Mirror:hs_duckie.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Roundy here is from back when I was known as the Popcorn Lumpou.&amp;quot; ''{Without his usual speech impediment}'' &amp;quot;Lumper.&amp;quot; '''[[Matt Chapman|Matt]]:''' &amp;quot;Lumper.&amp;quot;|[[Hremail 62]] outtake|Mirror:hs_lumper.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;'''[[Matt Chapman|Matt]]:''' &amp;quot;Try and sound like Homestar too.&amp;quot; '''[[Mike Chapman|Mike]]:''' &amp;quot;I'll do it.&amp;quot; *BURP!* '''Matt''': &amp;quot;Sounds like a moth comin' out!&amp;quot;|[[hygiene]] outtake|Mirror:hs_mikeburp.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;We are just talkin' about Bubs with a piece of paper stapled to his face, right?&amp;quot;|[[Happy Dethemberween]] outtake|Mirror:hs_bubstaple.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;No, HERE'S my grocery list: Amazing thing, amazing thing, amazing thing, amazing thing.&amp;quot;|[[love poems]]|Mirror:hs_amazing.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;So what are you saying? That you -GULP- want his bod?&amp;quot;|[[Date Nite]]|Mirror:hs_wanthisbod.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Oh, hello guys! This is my talk and mouth move. Great times!&amp;quot;|Quote of the Week exclusive|Mirror:hs_greatimes.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Drinko some Malinko! Malinko flavored water! Crystal clear like domestic beer!&amp;quot;|[[rough copy]]|Mirror:hs_drinko.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I wonder how you spell tabasco. TABASCOooo!&amp;quot;|[[the movies]]|Mirror:hstabasco.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;A-listen to me now. Cheer up, Coach Z. It doesn't have to be creepy and depressing all the time...&amp;quot;|[[Decemberween Short Shorts]]|Mirror:hs_cheerupcz.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Doo doot. Tch. Doo doo dit. Tch. Doot doo doot. Tch. It's the hold music...&amp;quot;|[[isp]]|Mirror:hs_holdmusic.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Hey guys! H'whatcha teekenbot?&amp;quot;|[[Strong Bad is a Bad Guy]]|Mirror:hs_heyguys.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;You're doing great! Now shoulders down! One and two! Feel the burn and go to bed! Make some breakfast, talk to me!&amp;quot;|[[lady fan]]|Mirror:hs_doingreat.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;The good times are over!!&amp;quot;|[[Bug in Mouth Disease]]|Mirror:hs_goodtimes.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;What in Pete Sampras is going on here?!?&amp;quot;|[[Cool Things]]|Mirror:hs_petesampras.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Buttdance again, like the rhythm's down your pants now!&amp;quot;|[[bottom 10]]|Mirror:hs_buttdance2.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;A wagon full of pamcakes? In the Champeenship?! I'd like to see ya try!&amp;quot;|[[montage]]|Mirror:hs_champeenship.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;THE GOOD TIMES ARE OVER!!!&amp;quot;|[[Bug In Mouth Disease]]|Mirror:hs_goodtimesover.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Li'l Brudder! I—I don't know what I'm doing with my life!&amp;quot;|[[crying]]|Mirror:hs_lilbrudder.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Let me in, da da da. Let me in!&amp;quot;|[[3 Times Halloween Funjob]]|Mirror:hs_letmein.zip}}&lt;br /&gt;
*{{qotw|&amp;quot;That's bupkis!&amp;quot;|[[the facts]]|Mirror:hs_thatsbupkis.zip}}&lt;br /&gt;
*{{qotw|'''[[Little Girl]]:''' &amp;quot;That sounds like funny!&amp;quot; '''Homestar Runner:''' &amp;quot;It ''sounds'' like funny, but it's not.&amp;quot;|[[Homestar vs. Little Girl]]|Mirror:hsgirl_likefunny.zip}}&lt;br /&gt;
*{{qotw|Todayborday is Labor Day song|[[Labor Dabor]]|Mirror:labordaysong_hs.zip}}&lt;br /&gt;
*{{qotw|&amp;quot;Here comes [[The Thnikkaman]]!&amp;quot;|[[monument]] Easter egg|Mirror:hs_thnikkaman.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;And somebody's a-ga-wabbin' a-my butt.&amp;quot;|[[3 Times Halloween Funjob]]|Mirror:hs_grabbinbutt.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Let's do this like Brutus.&amp;quot;|[[monster truck]]|Mirror:hs_brutus.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I could go for a few [[Cold One|cold ones]] right about now.&amp;quot;|[[Where My Hat Is At?]]|Mirror:hs_coldones.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I'm a belle!&amp;quot;|[[halloweener]]|Mirror:hs_imabelle.wav}}&lt;br /&gt;
*{{qotw|&amp;quot;Seriously, [[Pom Pom]], I'm about to [[pee]] my [[Homestar Runner's Pants|pants]].&amp;quot;|[[A Jumping Jack Contest]]|Mirror:hs_peepants.mp3}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Homestar Runner Evolution]]&lt;br /&gt;
*[[Homestar Runner Other Costumes|Other Costumes]]&lt;br /&gt;
*[[Nicknames#Homestar Runner|Nicknames]]&lt;br /&gt;
*[[Homestar Runner's Pants]]&lt;br /&gt;
*[[Homestar Runner's Daisy Dukes]]&lt;br /&gt;
*[[Homestar Runner Left Behind]]&lt;br /&gt;
*[[Homestar Runner Peeking]]&lt;br /&gt;
*[[Buttdance]]&lt;br /&gt;
*[[Prancing]]&lt;br /&gt;
*[[Seriously]]&lt;br /&gt;
*[[Spin My Buzzer]]&lt;br /&gt;
*[[Witch's Brew]]&lt;br /&gt;
*[[Homestar Runner's Fashion Sense]]&lt;br /&gt;
*[[Naked Homestar Runner]]&lt;br /&gt;
*[[Homestar Runner's Sleepwear]]&lt;br /&gt;
*[[Homestar Runner Without his Speech Impediment]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[[HR:vcr_hs.html|watch Homestar Runner's character video]]&lt;br /&gt;
*[[HR:vcr_hs.swf|view the Flash file for Homestar Runner's character video]]&lt;br /&gt;
&lt;br /&gt;
{{Characters|Homestar Runner}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Homestarmy]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/HRWiki_talk:Subtitles</id>
		<title>HRWiki talk:Subtitles</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/HRWiki_talk:Subtitles"/>
				<updated>2017-10-02T05:41:58Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Subtitles have lost their gumption */ Fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-family: georgia; border: 1px dashed #06f; background: #eef; padding: 0.5em; margin: 0.5em 0.5em 1em; text-align: center; font-size: 20px; line-height: 30px&amp;quot;&amp;gt;[[#Language requests|Request a subtitles language.]]&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Subtitles Talk Archive}}&lt;br /&gt;
&lt;br /&gt;
== Language requests ==&lt;br /&gt;
=== Dutch (NL) ===&lt;br /&gt;
&lt;br /&gt;
Would you please add NL to [[Subtitles:Languages]]? --[[User:Pdedecker|Pdedecker]] 11:18, 4 February 2007 (UTC)&lt;br /&gt;
:I just saw that NL has been added, thanks! --[[User:Pdedecker|Pdedecker]] 18:46, 6 February 2007 (UTC)&lt;br /&gt;
::Oh yes, I forgot to post in this thread. You're welcome! Cheers! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:21, 8 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Finnish (FI) ===&lt;br /&gt;
&lt;br /&gt;
I would be quite eager to start out with Finnish subtitling cartoons, as I have absolutely nothing to do after I get home from college (weird, huh?). So if someone would add Finnish there, it'd be much obliged. --[[User:Sysrq868|Sysrq868]] 16:58, 28 August 2007 (UTC)&lt;br /&gt;
:You should be all set. Go crazy go nuts! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:35, 29 August 2007 (UTC)&lt;br /&gt;
=== Polish (PL) ===&lt;br /&gt;
&lt;br /&gt;
What I said. [[User:JudgeDeadd|JudgeDeadd]] 04:34, 29 August 2007 (UTC)&lt;br /&gt;
:You should be good to go. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 20:06, 29 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Turkish (TR) ===&lt;br /&gt;
&lt;br /&gt;
Could you add Turkish language to the subtitles, please? Peace at Home, Peace in the World [[User:85.107.249.107|85.107.249.107]] 11:05, 15 October 2007 (UTC)&lt;br /&gt;
:I would be happy to, but tell me a little bit about yourself first. Do you intend to write the subtitles pages yourself, or do you just wish that Turkish was already available? If you mean that you're going to help write them, then why not [[Special:Userlogin|sign up for an account]]? It's free and has many benefits. On the other hand, if you just want to be able to read the site in Turkish, then we'll need to find a translator first. Please let me know. Talk atcha later! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:21, 20 October 2007 (UTC)&lt;br /&gt;
::Hello, do you remember me? Or an IP starts with 85? Don't remember? Then, look at subtitles requests and choose Turkish(TR) from the navigation menu? Yeah, I did what you say, and it passed some time, but I was looking continually the page whether a reply comes before you reply. And, that's your answer: I'm Turkish, and so, I can read and write Turkish subtitles. I know English, of course, but not all Turks. (Or some of them are know at least). Anyway, I want Turkish subtitles add to the list, and my goal is that HR cartoons have loved by Turkish kids, adults, and everyone. Is this wrong? Say if it is. Anymore, I already tested a SB Email cartoon. Look if you want. [http://subtitles.hrwiki.org/sbemail167/tr Here comes.] OK, I think it (my reply) is long enough. I talked you and if you want, you talk atcha later, too. Thanx. [[User:Homesturk|Homesturk]] 16:57, 27 November 2007 (UTC)&lt;br /&gt;
:::Of course I remember you. Glad to see you created an account! I will enable the Turkish subtitles just as soon as I get a chance. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:11, 27 November 2007 (UTC)&lt;br /&gt;
::Turkish is now enabled. Start tranglin'! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 07:51, 29 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Italian (IT) ===&lt;br /&gt;
&lt;br /&gt;
Italian is one of the most well-known languages in the world. I think it deserves subtitles. [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:See below. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Japanese (JP) ===&lt;br /&gt;
&lt;br /&gt;
This language is infamous for its bad translations into English - I think it deserves subtitles as well. I am also a fluent Japanese speaker. [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:See below. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
::I am currently studying the Japanese language, and once I am fluent in it I would be happy to translate and transcribe japanese subtitles -- [[User:McArbys|The McArby!]] 21:45, 25 November 2009 (UTC)&lt;br /&gt;
:::There is a difference though, are you planning to write Japanese as characters, or as the English pronunciation as many anime shows do? {{User:ColdReactive/sig}} 01:54, 26 November 2009 (UTC)&lt;br /&gt;
:::: Well, if I can find some sort of keyboard for Japanese characters I can switch my system language to the Kanji, but If (and probably) not, I would go for the Romanized, they would be the japanese words for sure. [[User:McArbys|The McArby!]] 02:21, 26 November 2009 (UTC)&lt;br /&gt;
:::::Romanized Japanese is not how Japanese is written in everyday contexts, so Romanized Japanese is not going to do here. It needs to be in kanji and kana or it isn't worth doing. Just a reminder also that we need a high degree of fluency here before you're ready to do this (I consider myself fluent in German, yet I don't write subtitles very much just because it's really hard to reflect H*R's colloquialism in German), so it'll probably take a lot of study before you're ready to do this. Don't want to discourage you, though; in fact, I hope you'll study hard and learn Japanese really well soon. {{User:Heimstern Läufer/sig}} 02:26, 26 November 2009 (UTC)&lt;br /&gt;
::::::Not discouraged at all, this is just going to get me to work even harder, Learn the Kanji, which will be really hard, and Once I am really good at it, I will volunteer to do Japanese, talk to me again about this in a couple of years. I'm taking as much as I can to figure it out, some iPhone Apps, Rosetta Stone (dosent work to well) Hoping to get a textbook. -- [[User:McArbys|The McArby!]] 02:44, 26 November 2009 (UTC)&lt;br /&gt;
:::::::That's not what I meant at all. I meant something like this: &amp;quot;nani?!&amp;quot; or like that, not the characters. I think it would be better to do it this way than to fudge up the characters. {{User:ColdReactive/sig}} 19:59, 26 November 2009 (UTC)&lt;br /&gt;
::::::::Personal Pronouns:&lt;br /&gt;
Homestar - Boku&lt;br /&gt;
Strong Bad - Ore or Ore-sama&lt;br /&gt;
Strong Mad - Oira&lt;br /&gt;
Strong Sad - Watakushi&lt;br /&gt;
Coach Z - Washi (A good way to preserve the mispronunciations.)&lt;br /&gt;
Bubs - Oira&lt;br /&gt;
The Cheat - (uses own language.)&lt;br /&gt;
The Poopsmith - (The Poopsmith has token a vow of silence)&lt;br /&gt;
King of Town - Washi&lt;br /&gt;
Homsar - Boku&lt;br /&gt;
Stinkoman - Ore&lt;br /&gt;
&lt;br /&gt;
=== Chinese (ZH) ===&lt;br /&gt;
&lt;br /&gt;
Another popular language! [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:We don't enable languages just because they're there. We have to have someone demonstrate that they're committed to working on translation. Why don't you [[Special:Userlogin|create an account]] and let us know what kind of input you can give and then we'll talk again. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Norwegian (Bokmål), code: NO-NB ===&lt;br /&gt;
&lt;br /&gt;
I am Norwegian, and a huge fan of both H*R and H*R Wiki (for real, they are both on my [[Wikipedia:Russ|Russ]] card!)! I was hoping you could add Norwegian Bokmål (there are two official written languages in Norway). But you must know that my intention is to only translate, like, three to five of my favourite toons, just for fun. I honestly believe that as good as all Norwegian H*R fans know English well enough to make extensive site translation unnecessary (primarily because I would guess they are all in their late teens or older). But if you would rather prefer more serious contributions, I respect that. --[[User:WP CEO|WP CEO]] 08:23, 19 January 2008 (UTC)&lt;br /&gt;
:Hmm, if you know going in that you're only going to do three to five toons, then it's not really worth all the things we have to do behind the scenes to set it up. If someday you think you could add a more substantial number of subtitles (or if someone else would be willing to help out), then let me know and I'll be happy to enable them. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:35, 19 January 2008 (UTC)&lt;br /&gt;
::Oh, I was not aware it was a big job for you, sorry! I will keep this in mind, and mention it to the H*R fans I know. Perhaps I will change my mind about it, we will see. Thanks a lot! --[[User:WP CEO|WP CEO]] 03:13, 20 January 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Russian (Русский) (Ru) ===&lt;br /&gt;
&lt;br /&gt;
Although I am not anywhere near Russian ethnicly or have fluent knowlage of the language, I still think Russian should be added to the subtitles thing, for a hopefully better international success. {{unsigned|67.172.24.191|01:57, 9 July 2008 (UTC)}}&lt;br /&gt;
:Well, it would be nice to have Russian, but I'm not going to add it unless a native or near-native speaker commits to doing a substantial number of transcripts in the language. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:24, 17 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Arabic (ar) ===&lt;br /&gt;
&lt;br /&gt;
Hi! I'll request language again! My Arabic knowledge is basic, but I am upgrading it! What will you say about?&amp;lt;br /&amp;gt;&lt;br /&gt;
Talk atcha later! {{User:Homesturk/sig}} 12:25, 29 September 2008 (UTC)&lt;br /&gt;
:We tend not to add languages unless there's someone fluent in the language willing to spend the time to make the subtitles... we [[HRWiki:Subtitles#Translating Subtitles|ask that]] people still learning a language don't write the translations &amp;amp;ndash; they tend sound odd (often using the wrong words, since the translator hasn't learned the right ones), or the jokes fall flat (if the translator doesn't have enough real-world experience with the language to know, say, what idioms and expressions are often used by the speakers of that language, that would be a good replacement for the ones used in the toons). But don't let that discourage you... keep plugging away at learning the language, and when you're fluent, come back and we'll be happy to set it all up for you :D {{User:Phlip/sig}} 13:39, 29 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Serbian (SR) ===&lt;br /&gt;
&lt;br /&gt;
Please add this. [[User:RocketMasterZ|RocketMasterZ]] 21:16, 19 April 2009 (UTC)&lt;br /&gt;
:Unless someone makes a really strong case for why we should add another language, I think we've enabled all that we're going to for now. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:54, 7 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Esperanto (eo) ===&lt;br /&gt;
&lt;br /&gt;
I don't know how much business I have requesting Esperanto when I'm still a beginner, but it's (relatively) quickly learned. If this request hasn't sparked someone's initiative by the time I know the language better, I'll be more able to help with it myself at that point. --atimholt 02:21, 7 April 2010 (UTC)&lt;br /&gt;
:Ha ha, no. No made-up languages, please. We also have a rule that someone must be fluent in a language before we add it (see also the above thread). &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:54, 7 April 2010 (UTC)&lt;br /&gt;
::I agree with you that we shouldn't add Esperanto since we don't have a native speaker in our hands, but made-up language or not, according to Wikipedia: &amp;quot;Esperanto has between 100,000 and 2 million speakers in about 115 countries, and approximately one thousand native speakers&amp;quot;. {{User:Elcool/sig}} 05:42, 7 April 2010 (UTC)&lt;br /&gt;
:::How many of those do you suppose are Homestar Runner fans who will help with the translating? How many of them would be fans if only we offered Esperanto subtitles? I strongly suspect both numbers are close enough to zero not to be able to justify the overhead of adding another language. We don't add languages just because we ''can''. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 07:21, 7 April 2010 (UTC)&lt;br /&gt;
::::Well... I'm not sayin' we should... :P. {{User:Elcool/sig}} 10:03, 7 April 2010 (UTC)&lt;br /&gt;
::::I could translate some toons into esperanto. I know esperanto pretty well. Unless you really think it's a complete waste of time. [[User:Barton|Barton]]&amp;lt;sup&amp;gt;[[User talk:Barton|talk]]&amp;lt;/sup&amp;gt; 17:08, 25 September 2010 (UTC)&lt;br /&gt;
:::::Well, not to put too fine a point on it, but I think it's a complete waste of time. We don't have an Esperanto audience, so it would be translation for its own sake. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:51, 25 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Icelandic (IS) ===&lt;br /&gt;
&lt;br /&gt;
I'd really like to see some of the cartoons translated into Icelandic. I don't know all that much, as I'm still learning. I just think it's an interesting language and that it would be nice to see some Icelandic Homestar. --[[User:PikaSka|PikaSka]] 03:00, 30 May 2016 (UTC)&lt;br /&gt;
:We tend not to add languages unless there's someone fluent in the language willing to spend the time to make the subtitles, and even then we're unlikely to add this specific language because there really isn't a wide audience for it. Currently I think we've enabled all that we're going to for the foreseeable future. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:34, 30 May 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Where are all the Preeeeeow!s? ==&lt;br /&gt;
&lt;br /&gt;
Hey, I was looking at a few pages, and it seems not every email with [The Paper] has a &amp;lt;sfx&amp;gt;Preeeeow!&amp;lt;/sfx&amp;gt; near the end.  In light of this, I propose a Preeeeow project to add the appropriate &amp;lt;sfx&amp;gt; to the SBemail subtitles.  If I end up being the only one doing this, that's ok, but are there any objections/why the subtitles shouldn't include this?  Thanks for feedback, [[User:Dutchscout|Dutchscout]] 21:06, 11 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Quoting ==&lt;br /&gt;
&lt;br /&gt;
I'm thinking we should expand on the current sbemail quoting standard. Earlier subtitles have them in a usual quote, e.g.:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Dear Strong Bad,&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Do you take you mask and boxing gloves off before you go to bed?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Sincerely, Abdi LaRue San Diego, California&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
However, the ones [[User:Rexy|Rexy]] has been doing recently in a paragraph-spanning form, e.g.:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Dear Strong Bad,&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Do you take you mask and boxing gloves off before you go to bed?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Sincerely, Abdi LaRue San Diego, California&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
I find the way Rexy does it more suitable than the way we've been doing it previously. Should we add this to the standards? --[[Special:Contributions/75.5.176.233|75.5.176.233]] 22:11, 12 December 2008 (UTC)&lt;br /&gt;
:It really ends up differing depending on who made the subtitles; for instance, when I write subtitles, I tend to do the latter (though I haven't written any in a while). Would be nice if we had some standards, but while the second way is technically more correct, it's not the most well-known grammatical rule. --{{User:Jay/sig}} 23:21, 12 December 2008 (UTC)&lt;br /&gt;
:Indeed, I just noticed that some of the earlier subtitles that I wrote were ''&amp;quot;corrected&amp;quot;'' to the former (end quotes after every line) some time after I had written them. Thanks, Shwoo! 9_9 (Well, okay, like I said, it's not the most well-known grammatical rule.) --{{User:Jay/sig}} 23:24, 12 December 2008 (UTC)&lt;br /&gt;
::What (with the &amp;quot;Shwoo! 9_9&amp;quot;)? --[[Special:Contributions/75.5.176.233|75.5.176.233]] 23:37, 12 December 2008 (UTC)&lt;br /&gt;
:::Shwoo was the user who &amp;quot;corrected&amp;quot; my already-correct quotation mark usage. --{{User:Jay/sig}} 00:00, 13 December 2008 (UTC)&lt;br /&gt;
::::Those are rolling eyes. Shwoo changed something that Jay had specifically intended to be another way, although she was doing what she saw fit since we haven't discussed this before. Jay wasn't ''really'' thanking her. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:03, 13 December 2008 (UTC)&lt;br /&gt;
:::::I totally missed the &amp;quot;Thanks,&amp;quot;. Oops. --[[Special:Contributions/75.5.176.233|75.5.176.233]] 00:05, 13 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Translating into italian ==&lt;br /&gt;
&lt;br /&gt;
Hi, I'm an italian H*R fan and I'm willing to translate the subtitles into italian, what do you think?&lt;br /&gt;
&lt;br /&gt;
== Subtitles Not Working? ==&lt;br /&gt;
&lt;br /&gt;
In Greasemonkey, none of the subtitles are displaying for me anymore. Does anyone else have this problem? I checked my preferences, cleared both the caches, and re-installed it. {{User:MichaelXX2/sig}} 21:07, 12 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Works for me.  Is it a specific toon, or did you try several different ones?  Just for kicks, what versions of things do you has?  I've got FF 3.0.10 and Greasemonkey 0.8.20090123.1  {{User:GreenHelmet/sig}} 21:38, 12 May 2009 (UTC)&lt;br /&gt;
:PS: Oh, do you have an adblocker installed?  If so, try disabling it for both homestarrunner and hrwiki (or just disable it entirely temporarily). {{User:GreenHelmet/sig}} 21:51, 12 May 2009 (UTC)&lt;br /&gt;
::It works fine at my house, it's at my dad's office that it doesn't work. I don't have adblock on that computer and all of my software is up-to-date. {{User:MichaelXX2/sig}} 01:59, 13 May 2009 (UTC)&lt;br /&gt;
:::And you're sure Phlip's script is installed as well as greasemonkey? {{User:DeFender1031/sig}} 02:19, 13 May 2009 (UTC)&lt;br /&gt;
::::Well, I can't check now, as I'm not home. Maybe I uninstalled it somewhere along the line by accident. {{User:MichaelXX2/sig}} 02:23, 13 May 2009 (UTC)&lt;br /&gt;
I'm having this problem too.  I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]].  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Philip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;? --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:09, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:28, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitle List ==&lt;br /&gt;
[[Special:Subtitleslist]] ''really'' needs updated. And it's a good list too. {{User:Theycallmefree/sig}} 12:36, 11 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== French doing awesome! ==&lt;br /&gt;
&lt;br /&gt;
Just wanted to mention what a truly remarkable job all the French subtitleers &amp;lt;!--Like &amp;quot;musketeers&amp;quot;? get it? It's lame, I know...--&amp;gt;are doing. There a total of 482 subtitles in English, and 230 in French. That's so close to half, I can smell the baguette! And new one's a being made every day! [http://www.hrwiki.org/w/index.php?title=Special:RecentChanges&amp;amp;to=20100113043529&amp;amp;namespace=102] So all you people working hard translating unintelligible speech into an unintelligible language - Pour yourself a glass of the finest wine cooler and nom on that rotten cheese. You deserve it! {{User:Elcool/sig}} 04:39, 13 January 2010 (UTC)&lt;br /&gt;
:I second that!{{User:Loafing/sig}} 06:02, 13 January 2010 (UTC)&lt;br /&gt;
::Hey, thanks for the support! I have recently taken upon myself to do one toon's French subtitles per day. If I keep this up, and assuming I do it alone (which isn't always the case, thankfully), hmm...482 - 230 = 252 days. Ooh, maths. That makes 8 months and 8 days. Hooray? Ah, whatever, goold ol' Homestar is worth it.&lt;br /&gt;
::Anyway, I haven't done my subtitles for the day, so here goes. I might have some rotten cheese in the fridge to celebrate. Oh, and thanks again! --[[User:Meuhcoin|Meuhcoin]] 21:32, 14 January 2010 (UTC)&lt;br /&gt;
:::Nice job. I hope you reach your goals faster then you predicted :). {{User:Elcool/sig}} 22:29, 14 January 2010 (UTC)&lt;br /&gt;
::::I'm learning French now because my fiancee is from Quebec. So in a few years, I'll be able to help you out - if you don't finish in 252 days ;-){{User:Loafing/sig}} 21:20, 15 January 2010 (UTC)&lt;br /&gt;
:::::And now we've hit the 300 mark! (THIS IS SPARTA!) {{User:RickTommy/sig}} 06:35, 8 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Removal ==&lt;br /&gt;
&lt;br /&gt;
Can we request for the removal of languages? [[User:RickTommy|RickTommy]] 01:59, 30 January 2010 (UTC)&lt;br /&gt;
:Why? What languages do you want to remove?--{{User:Record307/sig}} 02:17, 30 January 2010 (UTC)&lt;br /&gt;
::Well, so far, only four toons have been translated into Polish. And there are quite a few Portuguese scripts that have only had a small fraction translated. [[User:RickTommy|RickTommy]] 02:22, 30 January 2010 (UTC)&lt;br /&gt;
:::So? This is here for convenience. There maybe users joining that may know how to translate Polish and Portuguese.--{{User:Record307/sig}} 02:39, 30 January 2010 (UTC)&lt;br /&gt;
::::And on a side note, why haven't Videography and DTotM been added to [[Special:Subtitleslist]]? [[User:RickTommy|RickTommy]] 02:45, 30 January 2010 (UTC)&lt;br /&gt;
:::::Once we've added a language, it probably won't be removed. If anything is missing from the list of subtitles pages, it's because it needs to be added to [[HRWiki:Subtitles/Data]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:46, 30 January 2010 (UTC)&lt;br /&gt;
::::::And anyways, if another Polish user comes along and see the red links, he'll be more encouraged to contribute, then going over the process of adding a new language again. {{User:Elcool/sig}} 08:59, 30 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles list ==&lt;br /&gt;
&lt;br /&gt;
[[Special:Subtitleslist]] and [[HRwiki:Subtitles/Data]] are ''still'' outdated. Can they please be updated? {{User:RickTommy/sig}} 09:54, 17 April 2010 (UTC)&lt;br /&gt;
:Yes, you can totally update them.{{User:Loafing/sig}} 10:17, 17 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The new subtitles I made won't work ==&lt;br /&gt;
&lt;br /&gt;
With the help of someone fluent in the language, I have recently made [[Subtitles:sbemail119/es|Spanish subtitles]] for [[animal]]. Only problem is, when I use the local viewer, they don't show up. Are there extra steps I have to take to install them, or did I do something wrong? {{User:Power Pie/sig}}&lt;br /&gt;
&lt;br /&gt;
::You made [http://www.hrwiki.org/w/index.php?title=Subtitles:sbemail119/es&amp;amp;diff=prev&amp;amp;oldid=702434 an error] with the markup, as you forgot to close one of the tags. This kind of syntax error breaks everything, that's why the subtitles weren't showing up. If you're going to make more subtitles, I suggest you use the [[User:Phlip/Greasemonkey|Greasemonkey script]]. It has the ability to preview subtitles, and throws a warning when you make a syntax error (instead of not doing anything). Hope that helped! [[User:Meuhcoin|Meuhcoin]] 14:52, 19 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Discouragement ==&lt;br /&gt;
&lt;br /&gt;
Is it bad form to discourage others from creating a particular subtitles script? {{User:RickTommy/sig}} 02:35, 26 June 2010 (UTC)&lt;br /&gt;
:The proper method is to put one of our {{t|inprogress}} templates on the page as you work. Read the section addressed &amp;quot;to the person working&amp;quot; for more info. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:34, 26 June 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Local viewer has PHP errors ==&lt;br /&gt;
&lt;br /&gt;
I was attempting to view [[User:20eric06|20eric06]]'s recent overhaul to [[Subtitles:xmas10/pt-br]] in the [http://subtitles.hrwiki.org/xmas10/pt-br local viewer] just for kicks, but the subtitles weren't showing up. Then I opened up the source code and here's what I get starting on line 11 (Line-wrapped to prevent an ugly mess and preserve the HTML. MediaWiki and its silly whitespace treatment. Pssh.):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Specification mandate value for attribute voiceove in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: attributes construct error in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Couldn't find end of Start Tag line line 148 in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Premature end of data in tag transcript line 2 in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{User:Soiled Bargains/sig}} 19:11, 9 January 2011 (UTC)&lt;br /&gt;
:There was a missing closing &amp;lt;code&amp;gt;&amp;amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; tag. The tag was added and it worked. In addition, the script has been updated to handle the error more gracefully. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:19, 12 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not sure if this is interesting or not... ==&lt;br /&gt;
&lt;br /&gt;
...but we finally have [[500 The Cheats|a toon]] that has been subtitled into every supported language. {{User:RickTommy/sig}} 07:00, 18 December 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitling Emails ==&lt;br /&gt;
Should subtitles be completely grammatically correct (for things like capitalization, spacing, spelling, not pronunciation), in sbemails? (They are already being typed out on his computer) {{User:Broncotroll/sig}} 22:15, 16 March 2013 (UTC)&lt;br /&gt;
:Give an example or two where the subtitles would differ from the text on the screen. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:26, 16 March 2013 (UTC)&lt;br /&gt;
::Like in [[duck pond]], where Strong Bad pronounces unfortunately normally but spells it wrong. Or in the grillions of emails like [[the facts]] where he doesn't space after an ellipsis or types email &amp;quot;e-mail&amp;quot;. Basically, anything with a &amp;lt;sic&amp;gt; in it. {{User:Broncotroll/sig}} 22:38, 16 March 2013 (UTC)&lt;br /&gt;
:::The subtitles should be a record of what we hear. If he says &amp;quot;unfortunately&amp;quot; correctly even if he mistypes it, then we should not misspell it in the subtitles. If we put &amp;quot;unfortunatley&amp;quot;, it gives the impression that he intentionally mispronounced it (which is a common enough running gag of his that it would be confusing). As for punctuation, I don't have a problem with adding a space here or there, but generally I think we should mimic Strong Bad's typing unless there's a really compelling reason to change something (a hyphen would not qualify in this case), because otherwise we're just putting doubt in the mind of the reader as to why the two differ. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:51, 16 March 2013 (UTC)&lt;br /&gt;
:::: Thanks, Mr. Dot Net! So would this [http://www.hrwiki.org/w/index.php?title=Subtitles:sbemail114/en&amp;amp;action=edit&amp;amp;undoafter=702467&amp;amp;undo=735146 this revision] be fine (cause email was dehyphenated)?  {{User:Broncotroll/sig}} 23:21, 16 March 2013 (UTC)&lt;br /&gt;
::::: That's not really an example of what you were talking about, because those words don't appear on the screen in the toon itself. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:31, 16 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Idea for a language, and it's just for laughs ==&lt;br /&gt;
&lt;br /&gt;
This would be just for laughs, but we all know about YouTube's terrible auto-captions, right? I guess we could take that a tiny bit further. So, we I came up with (Strong) Bad Translator Language! Now for your laughter needs. I really think this'd be funny. Any takers on this ridiculous project? --[[User:Camwoodstock|Camwoodstock]] 19:59, 21 July 2013 (UTC)&lt;br /&gt;
:HRWiki is an encyclopedia, not a playground; and we don't condone such ridiculous projects. In other words, we don't do things like this &amp;quot;just for laughs&amp;quot;. It wouldn't be helpful. It might start out being funny, but it would quickly turn into an annoyance. Besides, most of the cartoons can already be found on YouTube, and the bad subtitles can already be applied there. So if you want the bad subtitles, go ahead and watch them on YouTube. {{User:The Knights Who Say Ni/sig}} 20:50, 21 July 2013 (UTC)&lt;br /&gt;
::HRWiki is an encyclopedia, but it's one based on dumb animal characters. We do plenty of things just for laughs if the joke is funny enough. That said, I don't see the potential humor here as being enough to outweigh the technical expense. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:35, 21 July 2013 (UTC)&lt;br /&gt;
:::&amp;lt;small&amp;gt;&amp;lt;font color=#808080&amp;gt;I was hoping I wouldn't sound like I was coming across too harshly. I don't think I succeeded.&amp;lt;/font&amp;gt;&amp;lt;/small&amp;gt; Yes, we do tend to have fun around here. We definitely want to keep an enjoyable atmosphere, so there certainly are some things that happen just for laughs. I'm not suggesting otherwise. But I think I said &amp;quot;things like this&amp;quot;. I think it would be harder to come to an agreement on what belongs in the articles (in this case, on which word of Mangled English wasn't said, but should go in the caption anyway), thus making it not worth the time. {{User:The Knights Who Say Ni/sig}} 01:32, 22 July 2013 (UTC)&lt;br /&gt;
I can understand, but I would still like to see this done. If there can be support for custom subtitles, without having languages, I would like that at least.&lt;br /&gt;
:Using the &amp;quot;test subtitles script&amp;quot; feature in [[User:Phlip/Greasemonkey|Phlip's greasemonkey plugin]], you can input whatever subtitles you want. Feel free to do so in your own browser any time you wish. Just don't expect the wiki to store your custom subtitles for you. {{User:DeFender1031/sig}} 22:43, 22 July 2013 (UTC)&lt;br /&gt;
::Oh, thanks. Sorry, new to subtitles. :/ --[[User:Camwoodstock|Camwoodstock]] 18:21, 23 July 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Local viewer broken on IE 11, Flash 15 ==&lt;br /&gt;
&lt;br /&gt;
I just tried viewing the Fish Eye Lens video with subtitles, and unfortunately the subtitles do not update.&lt;br /&gt;
&lt;br /&gt;
Looking at the code, this appears to be because the script is expected a function named CurrentFrame to be part of the flash movie object, but this is apparently not the case anymore - I don't know when that changed.&lt;br /&gt;
&lt;br /&gt;
Instead, however, there is a FrameNum property which has the same effect, and running this code in the developer console makes everything work:&lt;br /&gt;
&lt;br /&gt;
 flashmovie.CurrentFrame = function() { return flashmovie.FrameNum; }&lt;br /&gt;
&lt;br /&gt;
In the interest of making sure this doesn't disrupt other browsers, I would suggest only running it if the normal function doesn't exist:&lt;br /&gt;
&lt;br /&gt;
 if (flashmovie.CurrentFrame === undefined &amp;amp;&amp;amp; flashmovie.FrameNum !== undefined) {&lt;br /&gt;
   flashmovie.CurrentFrame = function() { return flashmovie.FrameNum; }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Adding those lines to the end of the setup() function seemed to work fine. [[User:Pidgeot|Pidgeot]] &amp;lt;small&amp;gt;[[User_talk:Pidgeot|(t)]] [[Special:Contributions/Pidgeot|(c)]] [[Special:Emailuser/Pidgeot|(e)]]&amp;lt;/small&amp;gt; 00:34, 19 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flash File Subs ==&lt;br /&gt;
&lt;br /&gt;
I've noticed while viewing flash files the subtitles now work there although they hadn't previously. This means that secret toons that only have .swf file remaining such as &amp;quot;Non-Sequitur Champion&amp;quot;, &amp;quot;Strong Bad is a bad guy&amp;quot; and even &amp;quot;Happy T&amp;quot; and the Limozeen Thanksgiving cards can most likely now be subtitled. --[[User:Happypasta|Happypasta]] 00:33, 21 November 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Translating names in the subtitles ==&lt;br /&gt;
&lt;br /&gt;
What is the standard for translating the characters' names into the various languages vs. not doing so? I just saw an anonny take perfectly good Spanish names on a Spanish subtitles page and translate them back into English. I've seen several pages which retained the English names though, so I thought I'd ask. {{User:The Knights Who Say Ni/sig}} 15:15, 24 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hiding then appearing words or phrases ==&lt;br /&gt;
&lt;br /&gt;
In a recent [http://www.hrwiki.org/w/index.php?title=Subtitles:recordstoreday/en&amp;amp;diff=prev&amp;amp;oldid=752227 edit,] I removed the effect of hiding certain words or phrases and then showing them at a later moment. This trend has bothered me for a very long time, as the effect is often unnecessary. I especially oppose it when the effect gets in the way of somebody actually reading the dialog, as there have been many instances where certain words only appear for 20 frames or less. A common argument is that hiding a punchline will allow a soundless viewer to enjoy the punchline in a similar fashion that one of the hearing-persuasion would, but in the case of the Record Store Day reversion, there were no punchlines that were enhanced or prevented from spoilery by hiding the word. I believe the purpose of subtitles in any medium is to allow someone to easily and effortlessly follow the story where sound is present, and it is in my opinion that obstructing words in situations where it is unnecessary is an effort against accessibility. What do you guys think? {{User:MichaelXX2/sig}} 21:16, 15 October 2015 (UTC)&lt;br /&gt;
: I agree, as it happens, and I think DeFender was hasty in reverting you. I think the &amp;quot;hidden&amp;quot; text can be used well, but it is ''far'' overused by many people, and that &amp;quot;one letter at a time&amp;quot; thing you removed from Record Day (twice!) really doesn't improve anything. --{{User:Jay/sig}} 22:02, 15 October 2015 (UTC)&lt;br /&gt;
:: Yeah, in the case of that toon revealing one word/letter at a time really hindered readability. I admit sometimes it can be used to good effect but there it didn't do anything to enhance the humor. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:59, 29 October 2015 (UTC)&lt;br /&gt;
::: Honestly, I think it'd be best to keep the one about the &amp;quot;Cassette Maxi Single of their 7th Final Reunion Tour Brunch.&amp;quot; would probably be better, since the humour is in the length and the ridiculousness of the release. (Also the bait-and-switch that it's a brunch at the end) - {{User:Catjaz63/sig}} 04:38, 14 November 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitle fix ==&lt;br /&gt;
&lt;br /&gt;
Okay, I've got a serious problem with the subtitles. Can you fix the subtitle errors? --[[Special:Contributions/76.177.17.164|76.177.17.164]] 21:24, 6 June 2016 (UTC)&lt;br /&gt;
:I'm not having any problems. I've tried multiple toons and both the Greasemonkey and local player. What problems are you having? &amp;amp;mdash; [[User:It's dot com|It's dot com]] 21:40, 6 June 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles have lost their gumption ==&lt;br /&gt;
&lt;br /&gt;
Ever since the release of [[Characters from Yonder Website]], the subtitles have ceased to work for me (it's the only reason I haven't created the English subtitles for it yet). Any toon that I view with the extension gets stuck on &amp;quot;Loading subtitles&amp;quot; eternally, and nothing on the seek bar works either. Is anyone &amp;lt;s&amp;gt;and/or everyone&amp;lt;/s&amp;gt; else experiencing this problem? What could be causing this? {{User:SRMX12/sig}} 14:11, 30 September 2017 (UTC)&lt;br /&gt;
:The local viewer works for me in several browsers using different operating systems. The Greasemonkey script works in Firefox. Have you tried turning it off and on again? &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:40, 30 September 2017 (UTC)&lt;br /&gt;
::It works fine for me too. {{User:Gfdgsgxgzgdrc/sig‎}} 22:53, 30 September 2017 (UTC)&lt;br /&gt;
:::I did try turning it off and on again, if by that you mean uninstalling and reinstalling it. If this has any relevance, I'm using the All-In-One extension for Chrome&amp;amp;mdash; I haven't tried the Greasemonkey script, since I don't have Firefox (though I might consider getting it if this persists). I notice a couple of recent reports on the Chrome extension from other users who seem to be having the same problem, so I'm guessing it's an issue with the extension, which is a little worrying. (I just checked and the local viewer works fine.) Is the extension working for anyone else? {{User:SRMX12/sig}} 00:51, 1 October 2017 (UTC)&lt;br /&gt;
::::Update: I got Firefox for the heck of it, and the Greasemonkey script works fine. I think I prefer Chrome still, so I'm hoping this issue can be resolved, but this will let me create the subtitles at least. {{User:SRMX12/sig}} 01:49, 1 October 2017 (UTC)&lt;br /&gt;
:::::Okay, subtitles in the All-in-One script aren't working in Chrome for me. We'll look into it. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:14, 1 October 2017 (UTC)&lt;br /&gt;
::::::The Chrome extension is still working fine for me. Including you guys and the people on [https://www.reddit.com/r/HomestarRunner/comments/732q02/hr_chrome_extension_not_working_anymore/ the Homestar Reddit], that's six people who have noticed it stop working recently. I seem to be the only person with no problems. I'm not really sure what to do. (Nice ween sig styles, by the way, SRMX12!) {{User:Gfdgsgxgzgdrc/sig‎}} 05:24, 1 October 2017 (UTC)&lt;br /&gt;
:::::::OK, I can see the problem, but the fix isn't trivial, it requires reworking a bunch of stuff with how the script talks to the flash object. I'm working on it, but no promises as to when it will be ready... {{User:Phlip/sig}} 12:42, 1 October 2017 (UTC)&lt;br /&gt;
::::::::So it wasn't quite as bad as I thought, I've uploaded a new version of the extension to the Chrome store, so you should be getting the update automatically soon. {{User:Phlip/sig}} 05:41, 2 October 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2017-10-02T05:38:29Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Release notes */ 4.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
===Version 4.1 (2 Oct, 2017)===&lt;br /&gt;
* Rewrote Flash-interaction handling to work in newer versions of Chrome.&lt;br /&gt;
* Added wikilink override for [[Screenland - 24 Apr 2017]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;br /&gt;
::::DANG IT PHILIP [[User:Catjaz63|Catjaz63]] 01:21, 30 March 2015 (UTC)&lt;br /&gt;
:::::It updated! Thanks Philip, yo! [[User:Catjaz63|Catjaz63]] 01:27, 31 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== .html v. .swf ==&lt;br /&gt;
&lt;br /&gt;
Since [[HR:games.html|games.html]] ([[Scrolling Shooter Games Menu]]) and [[HR:games.swf|games.swf]] ([[Third Games Menu]]) contain two separate menus, they may need to be separately ''this.addHRWikiLink'''d if such a thing is possible. {{User:Mee/sig}} 17:00, 10 June 2015 (UTC)&lt;br /&gt;
:Same with [[HR:slash/slash/index.html|slash/slash]] (Easter Egg from [[Screenland - 24 Apr 2017]]), which, in the extension, links to [[Index Page]]. {{User:DEIDATVM/sig}} 13:35, 18 July 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey</id>
		<title>User:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip/Greasemonkey"/>
				<updated>2017-10-02T05:36:23Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Update for new Chrome&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
==Installation instructions==&lt;br /&gt;
===Firefox===&lt;br /&gt;
If you don't have it already, you'll need to install [https://addons.mozilla.org/en-US/firefox/addon/748 Greasemonkey], then restart Firefox and return to this page.&lt;br /&gt;
&lt;br /&gt;
Then, just click on &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js}} this link]&amp;lt;/span&amp;gt; to install the script.&lt;br /&gt;
&lt;br /&gt;
To upgrade a new version when it's updated, just click the install link again &amp;amp;ndash; it'll automagically replace the old version. If the option is enabled, the script will automatically check for updates for you.&lt;br /&gt;
&lt;br /&gt;
===Chrome===&lt;br /&gt;
This script can be installed as [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb an extension from the Chrome Web Store]. Chrome will then automatically keep it up-to-date for you via the normal update process.&lt;br /&gt;
&lt;br /&gt;
==Script code==&lt;br /&gt;
&amp;lt;pre&amp;gt;*/&lt;br /&gt;
&lt;br /&gt;
// Homestar All-In-One&lt;br /&gt;
// version 4.1&lt;br /&gt;
// 2017-10-02&lt;br /&gt;
// Copyright (c) Phillip Bradbury, Loafing&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// This program is free software; you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
//&lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
//&lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program; if not, write to the Free Software&lt;br /&gt;
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
//&lt;br /&gt;
// --------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
// ==UserScript==&lt;br /&gt;
// @name          Homestar All-In-One&lt;br /&gt;
// @namespace     http://www.hrwiki.org/&lt;br /&gt;
// @description   Combination of many Homestar Runner scripts. Version 4.1.&lt;br /&gt;
// @version       4.1.72&lt;br /&gt;
// @downloadURL   http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&lt;br /&gt;
// @icon          http://www.hrwiki.org/w/images/thumb/1/1b/logo.png/32px-logo.png&lt;br /&gt;
// @match         http://homestarrunner.com/*&lt;br /&gt;
// @match         http://www.homestarrunner.com/*&lt;br /&gt;
// @match         http://podstar.homestarrunner.com/*&lt;br /&gt;
// @match         http://videlectrix.com/*&lt;br /&gt;
// @match         http://www.videlectrix.com/*&lt;br /&gt;
// @match         http://hrwiki.org/mirror/*&lt;br /&gt;
// @match         http://www.hrwiki.org/mirror/*&lt;br /&gt;
// @match         https://secure.homestarrunner.com/heythanks.html*&lt;br /&gt;
// @grant         GM_getValue&lt;br /&gt;
// @grant         GM_setValue&lt;br /&gt;
// @grant         GM_xmlhttpRequest&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
&lt;br /&gt;
(function(){&lt;br /&gt;
	function Utils()&lt;br /&gt;
	{&lt;br /&gt;
		this.guessisplaying = {&lt;br /&gt;
			lastframe: -1,&lt;br /&gt;
			lastframeat: new Date(),&lt;br /&gt;
			state: true&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Taken from http://diveintogreasemonkey.org/patterns/add-css.html&lt;br /&gt;
	Utils.prototype.addGlobalStyle = function addGlobalStyle(css)&lt;br /&gt;
	{&lt;br /&gt;
		var head, style;&lt;br /&gt;
		head = document.getElementsByTagName('head')[0];&lt;br /&gt;
		if (!head) return;&lt;br /&gt;
		style = document.createElement('style');&lt;br /&gt;
		style.type = 'text/css';&lt;br /&gt;
		style.appendChild(document.createTextNode(css));&lt;br /&gt;
		head.appendChild(style);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Based on http://userscripts.org/topics/41177&lt;br /&gt;
	Utils.prototype.useGMFunctions = function useGMFunctions()&lt;br /&gt;
	{&lt;br /&gt;
		// We can't just test if GM_getValue exists, because in Chrome they do exist&lt;br /&gt;
		// but they don't actually do anything, just report failure to console.log&lt;br /&gt;
	&lt;br /&gt;
		// We don't want it to actually write anything to console.log, though, so&lt;br /&gt;
		// let's stop that&lt;br /&gt;
		var log = console.log;&lt;br /&gt;
		console.log = function log(){};&lt;br /&gt;
		var gmstorage = typeof(GM_getValue) == &amp;quot;function&amp;quot; &amp;amp;&amp;amp; GM_getValue(&amp;quot;this-value-doesn't-exist-I-promise&amp;quot;, true);&lt;br /&gt;
		console.log = log;&lt;br /&gt;
	&lt;br /&gt;
		return gmstorage;&lt;br /&gt;
	};&lt;br /&gt;
	// Only really need to do this once...&lt;br /&gt;
	Utils.prototype.useGMFunctions = Utils.prototype.useGMFunctions();&lt;br /&gt;
	Utils.prototype.getPref = function getPref(key, def)&lt;br /&gt;
	{&lt;br /&gt;
		// Have to do it like this instead of like &amp;quot;if(window.GM_getValue)&amp;quot;&lt;br /&gt;
		// because apparently this function isn't actually on &amp;quot;window&amp;quot;, and I don't&lt;br /&gt;
		// know where it actually lives...&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			return GM_getValue(key, def);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			var value = localStorage.getItem(&amp;quot;hr-allinone-&amp;quot; + key);&lt;br /&gt;
			if (value === null)&lt;br /&gt;
				return def;&lt;br /&gt;
			var type = value[0];&lt;br /&gt;
			value = value.substring(1);&lt;br /&gt;
			if (type == 'b')&lt;br /&gt;
				return Number(value) != 0;&lt;br /&gt;
			else if (type == 'n')&lt;br /&gt;
				return Number(value);&lt;br /&gt;
			else&lt;br /&gt;
				return value;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.setPref = function setPref(key, value)&lt;br /&gt;
	{&lt;br /&gt;
		if (this.useGMFunctions)&lt;br /&gt;
			GM_setValue(key, value);&lt;br /&gt;
		else if (window.localStorage)&lt;br /&gt;
		{&lt;br /&gt;
			if (typeof(value) == &amp;quot;string&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;s&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;number&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;n&amp;quot; + value);&lt;br /&gt;
			else if (typeof(value) == &amp;quot;boolean&amp;quot;)&lt;br /&gt;
				localStorage.setItem(&amp;quot;hr-allinone-&amp;quot; + key, &amp;quot;b&amp;quot; + (value ? 1 : 0));&lt;br /&gt;
			else&lt;br /&gt;
				throw &amp;quot;Unexpected type for storage: &amp;quot; + typeof(value);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			alert(&amp;quot;Homestar Runner All-in-one is not supported on this platform&amp;quot;);&lt;br /&gt;
			throw &amp;quot;Couldn't find a local storage provider&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.downloadPage = function downloadPage(url, loadcb, errorcb, method)&lt;br /&gt;
	{&lt;br /&gt;
		if (!method)&lt;br /&gt;
			method = 'GET';&lt;br /&gt;
		if (typeof GM_xmlhttpRequest == 'function')&lt;br /&gt;
		{&lt;br /&gt;
			var opts = {&lt;br /&gt;
				method: method,&lt;br /&gt;
				url: url,&lt;br /&gt;
				onload: function onload(res) {loadcb(res.responseText, res.status, res.statusText, res.responseHeaders);}&lt;br /&gt;
			};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				opts.onerror = function onerror(res) {errorcb(res.status, res.statusText, res.responseHeaders);};&lt;br /&gt;
			GM_xmlhttpRequest(opts);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var xhr = new XMLHttpRequest();&lt;br /&gt;
			xhr.onload = function onload() {loadcb(xhr.responseText, xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			if (errorcb)&lt;br /&gt;
				xhr.onerror = function onerror() {errorcb(xhr.status, xhr.statusText, xhr.getAllResponseHeaders());};&lt;br /&gt;
			xhr.open(method, url);&lt;br /&gt;
			xhr.send();&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.buildWikiUrl = function buildWikiUrl(page)&lt;br /&gt;
	{&lt;br /&gt;
		var url = escape(page.replace(/ /g, '_'));&lt;br /&gt;
		return &amp;quot;http://www.hrwiki.org/w/index.php?title=&amp;quot; + url + &amp;quot;&amp;amp;action=raw&amp;amp;source=allinone&amp;amp;cachedodge=&amp;quot; + this.getPref('cachedodge', 0);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWiki = function downloadWiki(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadPage(this.buildWikiUrl(page), this.wikiPageDownloaded.bind(this, loadcb, errorcb, 0), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiPageDownloaded = function wikiPageDownloaded(loadcb, errorcb, timesredirected, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// check for redirects&lt;br /&gt;
		var matches = text.match(/^\s*#\s*REDIRECT\s*\[\[(.*)\]\]/i);&lt;br /&gt;
		if (matches)&lt;br /&gt;
		{&lt;br /&gt;
			if (timesredirected &amp;gt;= 3) // follow 3 redirects, but no more&lt;br /&gt;
			{&lt;br /&gt;
				errorcb(500, &amp;quot;Too many redirects&amp;quot;);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			// Get the page name out of the redirect text&lt;br /&gt;
			text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\|/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			if ((matches = text.match(/^(.*)\#/)))&lt;br /&gt;
				text = matches[1];&lt;br /&gt;
			text = text.replace(/^\s+|\s+$/g, '');&lt;br /&gt;
			this.downloadPage(this.buildWikiUrl(text), this.wikiPageDownloaded.bind(this, loadcb, errorcb, timesredirected + 1), errorcb);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(text, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.downloadWikiXML = function downloadWikiXML(page, loadcb, errorcb)&lt;br /&gt;
	{&lt;br /&gt;
		this.downloadWiki(page, this.wikiXMLDownloaded.bind(this, loadcb, errorcb), errorcb);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.wikiXMLDownloaded = function wikiXMLDownloaded(loadcb, errorcb, text, status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		// strip various things - templates and &amp;lt;pre&amp;gt; tags for wiki formatting, and &amp;lt;noinclude&amp;gt; sections...&lt;br /&gt;
		// &amp;lt;includeonly&amp;gt; tags are stripped (but their contents kept) for consistency.&lt;br /&gt;
		text = text.replace(/{{.*?}}/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;\/?pre[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;noinclude[^&amp;gt;]*&amp;gt;.*?&amp;lt;\/noinclude[^&amp;gt;]*&amp;gt;/g, &amp;quot;&amp;quot;);&lt;br /&gt;
		text = text.replace(/&amp;lt;includeonly[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/includeonly[^&amp;gt;]*&amp;gt;/g, &amp;quot;$1&amp;quot;);&lt;br /&gt;
		text = text.replace(/^\s+/g, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		try&lt;br /&gt;
		{&lt;br /&gt;
			var doc = parser.parseFromString(text, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		catch (e)&lt;br /&gt;
		{&lt;br /&gt;
			errorcb(500, &amp;quot;Error in XML:\n&amp;quot; + e.toString());&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		// check if returned document is an error message&lt;br /&gt;
		if (doc.getElementsByTagName('parsererror').length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var error = doc.getElementsByTagName('parsererror')[0];&lt;br /&gt;
			if (error.firstChild.nodeType == doc.TEXT_NODE &amp;amp;&amp;amp; error.lastChild.nodeType == doc.ELEMENT_NODE &amp;amp;&amp;amp; error.lastChild.nodeName == &amp;quot;sourcetext&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				// Firefox's errors look like this:&lt;br /&gt;
				// &amp;lt;parsererror&amp;gt;Error details&amp;lt;sourcetext&amp;gt;Source text&amp;lt;/sourcetext&amp;gt;&amp;lt;/parsererror&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					error.firstChild.nodeValue.replace(/Location: .*\n/, &amp;quot;&amp;quot;) + &amp;quot;\n&amp;quot; +&lt;br /&gt;
					doc.documentElement.lastChild.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else if (error.getElementsByTagName('div').length &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				// Chrome's errors look like this:&lt;br /&gt;
				// &amp;lt;someRoot&amp;gt;&amp;lt;parsererror style=&amp;quot;...&amp;quot;&amp;gt;&amp;lt;h3&amp;gt;Generic error message&amp;lt;/h3&amp;gt;&amp;lt;div style=&amp;quot;...&amp;quot;&amp;gt;Error details&amp;lt;/div&amp;gt;&amp;lt;h3&amp;gt;Generic footer&amp;lt;/h3&amp;gt;&amp;lt;attempted parsing of page/&amp;gt;&amp;lt;/someRoot&amp;gt;&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.getElementsByTagName('div')[0].textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// Try to at least return something&lt;br /&gt;
				errorcb(500,&lt;br /&gt;
					&amp;quot;Error in XML:\n&amp;quot; +&lt;br /&gt;
					error.textContent&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		loadcb(doc, status, statusText);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.currentFrame = function currentFrame(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetCurrentFrame(flashmovie, &amp;quot;/videoplayer&amp;quot;, (a) =&amp;gt; {&lt;br /&gt;
				// Keep track of whether the current frame is changing, for isPlaying()&lt;br /&gt;
				// If we stay on the same frame for more than, say, a second, guess&lt;br /&gt;
				// that we're paused.&lt;br /&gt;
				if (a != this.guessisplaying.lastframe)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.lastframe = a;&lt;br /&gt;
					this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
					this.guessisplaying.state = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (new Date() - this.guessisplaying.lastframeat &amp;gt; 1000)&lt;br /&gt;
				{&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback(a);&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.currentFrame(flashmovie, callback)&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.totalFrames = function totalFrames(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		var a;&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetTotalFrames(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.totalFrames(flashmovie, callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isPlaying = function isPlaying(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			// There isn't a telltarget version of IsPlaying, there's no flag for it in&lt;br /&gt;
			// TGetProperty, and it doesn't seem to be gettable via GetVariable (though&lt;br /&gt;
			// it's possible I just haven't tried the right thing)...&lt;br /&gt;
			// So, for puppet toons, we need to try to track whether it seems to be playing...&lt;br /&gt;
			callback(this.guessisplaying.state);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.isPlaying(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.framesLoaded = function framesLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback(false);&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/videoplayer', callback)&lt;br /&gt;
		else&lt;br /&gt;
			playercomm.targetFramesLoaded(flashmovie, '/', callback)&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.isLoaded = function isLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {callback(frame &amp;gt;= 0)}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.whenLoaded = function whenLoaded(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;gt;= 0)&lt;br /&gt;
				callback();&lt;br /&gt;
			else&lt;br /&gt;
				setTimeout(this.whenLoaded.bind(this, callback, flashmovie), 100);&lt;br /&gt;
		}, flashmovie);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.stop = function stop(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetStop(flashmovie, &amp;quot;/videoplayer&amp;quot;, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.stop(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.play = function play(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetPlay(flashmovie, &amp;quot;/videoplayer&amp;quot;, callback);&lt;br /&gt;
			this.guessisplaying.state = true;&lt;br /&gt;
			this.guessisplaying.lastframeat = new Date();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.play(flashmovie, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.goto = function goto(frame, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		if (flashmovie === globals.flashmovie &amp;amp;&amp;amp; globals.is_puppets)&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.targetGoto(flashmovie, &amp;quot;/videoplayer&amp;quot;, frame, () =&amp;gt; {&lt;br /&gt;
				// make sure this.guessisplaying.lastframe is updated so that it doesn't&lt;br /&gt;
				// go back to state=true&lt;br /&gt;
				this.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					this.guessisplaying.state = false;&lt;br /&gt;
				}, flashmovie);&lt;br /&gt;
	&lt;br /&gt;
				if (callback)&lt;br /&gt;
					callback();&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			playercomm.goto(flashmovie, frame, callback);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomOut = function zoomOut(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 * factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomIn = function zoomIn(factor, callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 100 / factor, callback);&lt;br /&gt;
	};&lt;br /&gt;
	Utils.prototype.zoomReset = function zoomReset(callback, flashmovie)&lt;br /&gt;
	{&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
			flashmovie = globals.flashmovie;&lt;br /&gt;
		if (!flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		playercomm.zoom(flashmovie, 0, callback);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Utils.prototype.insertAfter = function insertAfter(newElement, referenceElement)&lt;br /&gt;
	{&lt;br /&gt;
		if(referenceElement.nextSibling)&lt;br /&gt;
			referenceElement.parentNode.insertBefore(newElement, referenceElement.nextSibling);&lt;br /&gt;
		else&lt;br /&gt;
			referenceElement.parentNode.appendChild(newElement);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Globals()&lt;br /&gt;
	{&lt;br /&gt;
		this.whichsite = 0;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;podstar&amp;quot;) &amp;gt;= 0) this.whichsite = 1;&lt;br /&gt;
		if (location.hostname.indexOf(&amp;quot;videlectrix&amp;quot;) &amp;gt;= 0) this.whichsite = 2;&lt;br /&gt;
		if (location.pathname.indexOf(&amp;quot;/mirror/&amp;quot;) &amp;gt;= 0) this.whichsite = 3;&lt;br /&gt;
	&lt;br /&gt;
		// icons, as Base64-encoded PNG files.&lt;br /&gt;
		this.images = {&lt;br /&gt;
			close:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAm' +&lt;br /&gt;
				'JLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBRkTNhxuPxLkAAAAHX' +&lt;br /&gt;
				'RFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBUaGUgR0lNUO9kJW4AAAEKSURBVCjPhdGxSgNBFA' +&lt;br /&gt;
				'XQMzpgYWwsLEQUDBJBQgqFIChZEPR7/DA/QCGQTgQtJE1ENoWohYUgbGKQyFjErNv52nObe1' +&lt;br /&gt;
				'9wqGWg7z0l5YVgVdOu+wUt507tqIVQ4Zodp861ooELe15M5KFI6Zfr9u25MIj6Jl4cmSIPBW' +&lt;br /&gt;
				'rq2o5cufO4aOJDYSozNTa2pK4t03PtwUdMKRRykAmW0dTRcyNXpBQpI8GJDTR050zkNzK0bM' +&lt;br /&gt;
				'MZLvUNZ8yCfy6Wvbc1NVyi4dloXjqWvds6uvp41pFmpVOKJWd6bgwxkmTMIotWKpwrfBkZl7' +&lt;br /&gt;
				'uMonUHf5wSlV2+fUZrjnXdzrmyy7djD8GWTW9e51z557o1Tz85FH/WkOkaHQAAAABJRU5Erk' +&lt;br /&gt;
				'Jggg==',&lt;br /&gt;
			ffwd:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLh+v5c+DAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNcVisENAEAIwjo6ozmKI/j0YfS4hAeUIhFBJlV0M8Mudz8uno' +&lt;br /&gt;
				'a+LFiTHqCuHAU1qtJ6AAAAAElFTkSuQmCC',&lt;br /&gt;
			hrwiki:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGX' +&lt;br /&gt;
				'RFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1QTFRF////2wAzgZDJAiGNAB' +&lt;br /&gt;
				'6Lenp6ABCEABKFAAyDjp3O8gAAipjLlaPPFUixAB6OAA6C/f//fY3JABaIhJXK///50gAn//' +&lt;br /&gt;
				'/4CymXyQAaAA+DOFCm1QAmDiuX//zvnV2IfI3IQ0h7ABSFN0+qZXm9ABSG9PTxABiK2wAkuQ' +&lt;br /&gt;
				'AdSWW5WGu4cILCgYy209PZGRdjABeH0AALDiyYASGOhJTL2bi8k5OTzgAj1QAdLkilAAiDAB' +&lt;br /&gt;
				'iQIiCBzwAbyAAk//31ABSO0gAXDB95c5nZDAxeoRhHOVCp7u3lfx1W1LrCxQYtwwApQVitwA' +&lt;br /&gt;
				'QpJj2bAAyFKSODfI3GYna86urqysfL9fT0NUyXMDGGNk6cxgASy9rkAB2OQ1qzTmOzu8Pa4d' +&lt;br /&gt;
				'/b+v//58zRFEqw09XR25yrIjyh9P//g5PLAAN+foy/uRY92treh6neAASDXXC9jJvKjJvL6e' +&lt;br /&gt;
				'npiJfKDzejNk6r2wE1N0+rABKEAB6KxAAn0tPWyQAZRFuvXXfB/f392AAgKiib2QAyABaJhJ' +&lt;br /&gt;
				'TH2XeNEy+ZzgAwBiSRKUOlgI27urrP7t/iCghS0AAfk3SoyBc+iChf3vH1VWq426GvgI/Hiz' +&lt;br /&gt;
				'duboDCPEOXABCDSmu/DyeD///6P2K4OUJ/HByRlKHOAB+O8AAA2QI1hZPHg5TI9PT0ABuJiZ' +&lt;br /&gt;
				'jM1tbdf43CzgApAB2We4vD7e3rwgAseInHAyGWi5rOUme3hIuqFTGaWG25dojDd5LQ5Ki1AA' +&lt;br /&gt;
				'yMASCNcYHEAyKOABqLACSWHDeR+vr6uwAiIyBjipnJ1AIyjZvMmJyaITylAByMAB2L5wAlHD' +&lt;br /&gt;
				'eeCCaUcHCjWGy4wBQy/7AMAgAAARFJREFUeNpiONFeuLWjfL4RM1/R4tXyx5kZdrNHZ8za5D' +&lt;br /&gt;
				'jT3n/KimUtLDsZhPbFJilY14d5cC3o1dRnaWPILaucozf3DAND3DmnxqWnmRjyd+046NzJwG' +&lt;br /&gt;
				'B6dMJ6xVNHJjPIrGvq1mVgYGBlZQg9xjlxD4MKh2+wKgMILLET00mPYmCqFpctYIAAEamz3A' +&lt;br /&gt;
				'zaG4TdgmohAllpgsoMbBw5y9fshwiEW0qyM7jGbIlMjWcQCOlKMKnR8rZgyDOe3e95oErCJq' +&lt;br /&gt;
				'LOPDGQ8xBDCv8qF9tWRkb1SStPTvNTU2JgK83OrDjMaKbB0Gwgt23zdIap83h9vBZKJ4MMdZ' +&lt;br /&gt;
				'/Bs5EhwHBvz9qSBoftDAx9olbFiwACDABkK1N43Z86KwAAAABJRU5ErkJggg==',&lt;br /&gt;
			next:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLSOrp+DHAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACtJREFUCNdjULBhMLBhsLBhsLFhsLNhsAeiPQz2f8BoD4hrB5ayACtTsA' +&lt;br /&gt;
				'EA6J8JvyvoxNYAAAAASUVORK5CYII=',&lt;br /&gt;
			pause:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLS1MH83AAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAA5JREFUCNdjsLFhIAUBALQwB4FBHjsqAAAAAElFTkSuQmCC',&lt;br /&gt;
			play:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLjLqOpP2AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACdJREFUCNcdirEJAAAMg/z/qpzUAwJpG3ARRTBgyCEyxCTFVX1yN7Ejqh' +&lt;br /&gt;
				'alykITkQAAAABJRU5ErkJggg==',&lt;br /&gt;
			prefs:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAll' +&lt;br /&gt;
				'BMVEUAGQASEhIfHx8fJy8pKSk2NjZBQUFJR0ZQUE9RUVFSUlJNX3NoaGhsaWdramlycG1meY' +&lt;br /&gt;
				'98fHx+fn5wgpV0iqKKh4R4jaR9jJx8kad9kad/mbONmaWEnrmEnrqkoZy3t7fIx8bKyMHT0c' +&lt;br /&gt;
				'3S0dDU09DV1NPP1t3W1dXY2Njb2tfe29bf3tzj4uHr6+js6+r39/f5+PgAAABrL3yvAAAAAX' +&lt;br /&gt;
				'RSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfWBR' +&lt;br /&gt;
				'oFKh31UQ8DAAAAgUlEQVQY022OxxLCMAwFRSc4BEIPJZQQ08v+/8+RsTExDDpIe3ijfSJ/hx' +&lt;br /&gt;
				'9g62Dt4GaAI+8YT0t27+BxxvvE/no5pYT10lGFrE34Ja40W3g1oMGmW7YZ6hnCYexKTPVkXi' +&lt;br /&gt;
				'vuvWe1Cz1aKqPNI3N0slI2TNYZiARJX30qERc7wBPKC4WRDzWdWHfmAAAAAElFTkSuQmCC',&lt;br /&gt;
			prev:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLgFV6vLgAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAACxJREFUCNdjsGFhsOFhsJFhsLFhsKlhsPnDYPuHwR6MgAwgFyRoA1YAVM' +&lt;br /&gt;
				'YCABGLC3k4wQ8QAAAAAElFTkSuQmCC',&lt;br /&gt;
			rewind:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABl' +&lt;br /&gt;
				'BMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAA' +&lt;br /&gt;
				'sTAQCanBgAAAAHdElNRQfeCgQNLhgxgVogAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aC' +&lt;br /&gt;
				'BHSU1QV4EOFwAAAC9JREFUCNdjYGRkYGZmYGdn4OdnkJdnsLdnqK9n+P8fhIAMIBcoCJQCKg' +&lt;br /&gt;
				'AqY2QEALxwB9ke+WHMAAAAAElFTkSuQmCC',&lt;br /&gt;
			stop:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA1' +&lt;br /&gt;
				'BMVEUAAACnej3aAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9' +&lt;br /&gt;
				'4KBA0uOX3oSn4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADElEQV' +&lt;br /&gt;
				'QI12NgIA0AAAAwAAHHqoWOAAAAAElFTkSuQmCC',&lt;br /&gt;
			update:&lt;br /&gt;
				'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAMAAABG8BK2AAAC8V' +&lt;br /&gt;
				'BMVEUAAAD/AAD+AQH/AQH/AgL+AwP/AwP+BAT/BAT/BQX+Bgb/Bgb/Bwf+CAj/CAj/CQn/Cg' +&lt;br /&gt;
				'r+Cwv/Cwv+DAz/DAz/DQ3/Dg7+Dw//Dw//EBD+ERH/ERH/EhL/ExP+FBT/FRX/Fhb/Fxf+GB' +&lt;br /&gt;
				'j/GBj/GRn/Ghr/Gxv/HBz/HR3/Hh7/Hx//ICD+ISH/ISH/IiL/IyP/JCT/JSX/Jib/Jyf/KS' +&lt;br /&gt;
				'n/Kyv/LCz/LS3/Ly//MDD/MTH+MjL/MjL/MzP/NDT/NTX/Njb+Nzf/Nzf/ODj+OTn/OTn/Oj' +&lt;br /&gt;
				'r/PDz/Pj7/Pz//QUH/QkL+Q0P/RUX/Rkb/R0f/SEj/SUn/Skr/S0v/TEz/TU3/Tk7/T0//UF' +&lt;br /&gt;
				'D/UVH/UlL/VFT/VVX/Vlb/WFj/WVn/Wlr/W1v/XFz/XV3/Xl7/X1//YGD/YWH/YmL/Y2P/ZW' +&lt;br /&gt;
				'X/Zmb/Z2f/aGj/aWn/amr/a2v/bGz/bW3/bm7/b2//cHD/cXH/cnL/dHT/dnb/d3f/eHj/eX' +&lt;br /&gt;
				'n/e3v/fX3/fn7/f3//gID/gYH/goL/g4P/hIT/hob/h4f/iIj/iYn/ior/i4v/jIz/jY3/jo' +&lt;br /&gt;
				'7+kJD/kJD/kZH/kpL/lJT/lpb/l5f/mJj/mZn/mpr/m5v/nJz/nZ3/n5//oKD/oaH/oqL/o6' +&lt;br /&gt;
				'P/pqb/p6f/qKj/qan/qqr/q6v/rKz/ra3/r6//sLD/sbH/srL/s7P/tLT/tbX/trb/t7f/uL' +&lt;br /&gt;
				'j/urr/u7v/vLz/vb3/vr7/v7//wMD/wcH/wsL/w8P/xMT/xcX/xsb+x8f/x8f/yMj/ycn/ys' +&lt;br /&gt;
				'r/y8v/zMz/zc3/zs7/z8//0ND/0dH/0tL/09P+1NT/1NT/1tb/19f+2Nj/2Nj/2dn/29v/3N' +&lt;br /&gt;
				'z/3d3/39//4OD/4eH/4uL/4+P/5OT/5eX/5ub/5+f/6Oj/6en/6ur/6+v/7Oz/7e3/7u7/7+' +&lt;br /&gt;
				'/+8PD/8fH/8vL/8/P/9PT/9fX/9vb/9/f/+Pj/+fn/+vr/+/v//Pz//f3+/v7//v7////+AA' +&lt;br /&gt;
				'A5GkRyAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAADzoAAA+IAUHKF/gAAA' +&lt;br /&gt;
				'AHdElNRQfXCRYICgxGxxkcAAAEL0lEQVRYw63Xe1wURRwA8Pm1G0KcHdGBkKAYjxC0yLJITU' +&lt;br /&gt;
				'l7cr7RUjAos4AuraCH2pWCVlZaRpD5AEXDwAemQRFdmgQeCgWUPKTk4JJHomAq5PBXu/fC2z' +&lt;br /&gt;
				't2Z7fdf+Y38/nc9zPz+83M7iEQ9VBDjCNxStKGG5xJSBSjWPV+c3m0nxNFDEP/XBf3ZkPLuv' +&lt;br /&gt;
				'GOigiG2oLrhyvVJX26abdzFXKGWtrUPRXA5aasRjyD5ijkzJjd/2aMNkXqhCiKoxAzU9bg3n' +&lt;br /&gt;
				'mDdXe1V4iZJIzTBnvhH9xrpxAzKbj1cYDY2Ww8AMuOL7NTiBg6koZX2rruhFhjLJsVP5iv8b' +&lt;br /&gt;
				'FTSBj6xxo/CHqxXftwYxFTKwhY/aj9iogYOgfrRwCM/vr0qXOmpUQ0pXAVYYZa19tuymc8xq' +&lt;br /&gt;
				'vY1u0nnOXCUQQZ6vnf/p5jiibpqgOYxqcctwRwFUEmqrD/1VvMYWppjGrUE7/ghkAHRYhxy8' +&lt;br /&gt;
				'QdG6x79u2DBbru/mLHuQgyr+H9HYatCkvv2U3Hdmv9nSgCzKyW/MnBpW1HvSz9gRHsMUAiGe' +&lt;br /&gt;
				'/1OA5A9XlX/TQv7pkmZtzB/Y1UNvBMP2NIDOVTeJjpT49lJNOjXHHq/Mb7eRQe5pnavAm2W3' +&lt;br /&gt;
				'jRt33Fjw2t8C3qG3z8AWvsOnFba6YbNZTCw9yYYsg2qkfabqpZPkPOhXc2ET2bk3FpAvDXSJ' +&lt;br /&gt;
				'BxbSsZ29O1fz2BwrtvVlzSNb60vX5ruEJI4WVUxxoTISSp46hWJaA4MtSw2dlVRXlq5jy6H6' +&lt;br /&gt;
				'5hRzw+XasSUBwYOu2rC4YO/bmWM0EesPRQsGnsZiGFy9AlVbmRzG9dQrMr1NSEE1OEs+uEoX' +&lt;br /&gt;
				'bivUGW+EBrIGh3KYkUDuP7bu3JPZ7mOKSsgFr4ggeRwmE87/FfW9Pqbb74vqgOg3Ay5XqGmp' +&lt;br /&gt;
				'Re9+U7vsvL/0oybZRE9rIhU65j6Az9tZL0ffn3jdtyadNdzEAaTiZVBhn6O9y+YBxAUw64fn' +&lt;br /&gt;
				'R+hxoUVXg5qWJjqBzcFsbutYrDwwBWHvr9rUrc5E+q2JjQExceYduHruQqBgAe3NhvLBhDrN' +&lt;br /&gt;
				'iYyD79agXzTtXg98xs9CIvcsXGRPzQc7F68R23NlxZQtk+pZEohnoyBuDuqI9P99Y244rhJP' +&lt;br /&gt;
				'eLMyZQ90exJgyUU/dgfPEpKYp5UeHak83fT2Tf0pXX8hMlKMj6Znu57HIMcwjmZmCcI15BVI' +&lt;br /&gt;
				'CvWfLK7ExmKnzbPH3fJ6IV9NzZLG/LKo4Y49kmOHKUaAVB2T8h1pzGGMeLrrSVmX71iPUzaO' +&lt;br /&gt;
				'afMyRk15Lios4EixONl0hU2ErldW82O5rOORIVU8ELDZ8xDq2sPRsmUTHvm8LuyvjFr/+Kc3' +&lt;br /&gt;
				'0kKpbtt6OuC+OefSOlKrYTHqf5MNVPsoLs/2QjGZj/oSB5FCSPguRRkDwKkkdB8ihIHgXJoy' +&lt;br /&gt;
				'B5FCSPguRRkDzKf7Z6NUd33kmjAAAAAElFTkSuQmCC'&lt;br /&gt;
		};&lt;br /&gt;
	&lt;br /&gt;
		// find flash objects&lt;br /&gt;
		var objs;&lt;br /&gt;
		switch (this.whichsite)&lt;br /&gt;
		{&lt;br /&gt;
			case 0: // www.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 2)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = objs[1];&lt;br /&gt;
				}&lt;br /&gt;
				else if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				}&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				break;&lt;br /&gt;
			case 1: // podstar.homestarrunner.com&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.navbar = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.navbar = false;&lt;br /&gt;
				break;&lt;br /&gt;
			case 2: // videlectrix&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.navbar = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				else&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
				/*settings.navbar = false;*/&lt;br /&gt;
				break;&lt;br /&gt;
			case 3: // mirror&lt;br /&gt;
				objs = document.getElementsByTagName(&amp;quot;EMBED&amp;quot;);&lt;br /&gt;
				this.flashmovie = false;&lt;br /&gt;
				if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
					this.flashmovie = objs[0];&lt;br /&gt;
				if (!this.flashmovie)&lt;br /&gt;
				{&lt;br /&gt;
					objs = document.getElementsByTagName(&amp;quot;OBJECT&amp;quot;);&lt;br /&gt;
					if (objs &amp;amp;&amp;amp; objs.length &amp;gt;= 1)&lt;br /&gt;
						this.flashmovie = objs[0];&lt;br /&gt;
				}&lt;br /&gt;
				this.navbar = document.getElementById('navbar');&lt;br /&gt;
				/*if (!this.navbar)&lt;br /&gt;
					settings.navbar = false;*/&lt;br /&gt;
				var flashcontainer = document.getElementById('flash');&lt;br /&gt;
				if (flashcontainer)&lt;br /&gt;
					flashcontainer.style.width = &amp;quot;auto&amp;quot;;&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			//expose Flash plugin-added methods&lt;br /&gt;
			if (this.flashmovie.wrappedJSObject)&lt;br /&gt;
				this.flashmovie = this.flashmovie.wrappedJSObject;&lt;br /&gt;
			&lt;br /&gt;
			// confirm that this is really a flash file&lt;br /&gt;
			// and not (for example) the embedded background sound on SB's website&lt;br /&gt;
			var src = this.flashmovie.getAttribute('src');&lt;br /&gt;
			if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (src)&lt;br /&gt;
				{&lt;br /&gt;
					if (src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					var a = this.flashmovie.getElementsByTagName('param').namedItem(&amp;quot;movie&amp;quot;);&lt;br /&gt;
					if (!a || a.value.substring(a.value.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
						this.flashmovie = false;&lt;br /&gt;
					else&lt;br /&gt;
						src = a.value;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.flashmovie.nodeName.toLowerCase() == &amp;quot;embed&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (!src || src.substring(src.length - 4).toLowerCase() != &amp;quot;.swf&amp;quot;)&lt;br /&gt;
					this.flashmovie = false;&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
			// puppet_background.swf is a wrapper around the puppet stuff popup toons&lt;br /&gt;
			// This flag tells things like seekbar to control the wrapped movie clip&lt;br /&gt;
			if (src)&lt;br /&gt;
				this.is_puppets = src == &amp;quot;puppet_background.swf&amp;quot; || src.substring(src.length - 22) == &amp;quot;/puppet_background.swf&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		// Don't run large flash objects inline (gets rid of some extra padding from&lt;br /&gt;
		// having the movie sitting on the baseline)&lt;br /&gt;
		if (this.flashmovie)&lt;br /&gt;
		{&lt;br /&gt;
			this.flashmovie.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.flashmovie.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			this.navbar.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			this.navbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.filename = window.location.pathname.toLowerCase();&lt;br /&gt;
		var i = this.filename.lastIndexOf('/');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(i + 1);&lt;br /&gt;
		i = this.filename.lastIndexOf('.');&lt;br /&gt;
		if (i &amp;gt;= 0)&lt;br /&gt;
			this.filename = this.filename.substr(0,i);&lt;br /&gt;
	}&lt;br /&gt;
	Globals.prototype.initModules = function initModules()&lt;br /&gt;
	{&lt;br /&gt;
		this.modules = {};&lt;br /&gt;
		this.modules.settingspane = new SettingsPane();&lt;br /&gt;
		this.modules.fullscreen = new Fullscreen();&lt;br /&gt;
		this.modules.seekbar = new Seekbar();&lt;br /&gt;
		this.modules.wikilink = new WikiLink();&lt;br /&gt;
		this.modules.nextprev = new NextPrev();&lt;br /&gt;
		this.modules.navbar = new Navbar();&lt;br /&gt;
		this.modules.subtitles = new Subtitles();&lt;br /&gt;
		this.modules.updates = new Updates();&lt;br /&gt;
		for (var i in this.modules)&lt;br /&gt;
			this.modules[i].init();&lt;br /&gt;
		this.modules.settingspane.initComplete();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function PlayerComm()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.handlers = {};&lt;br /&gt;
	PlayerComm.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		var script = document.createElement(&amp;quot;script&amp;quot;);&lt;br /&gt;
		script.appendChild(document.createTextNode(&amp;quot;(&amp;quot; + this.inPageContext + &amp;quot;)();&amp;quot;));&lt;br /&gt;
		document.body.appendChild(script);&lt;br /&gt;
	&lt;br /&gt;
		this.origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			this.origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		this.callbacks = [];&lt;br /&gt;
		this.id_count = 0;&lt;br /&gt;
	&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, this.receiveMessage.bind(this), false);&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.inPageContext = function inPageContext()&lt;br /&gt;
	{&lt;br /&gt;
		// This code is run in the page context (which in Chrome is the only one&lt;br /&gt;
		// allowed to communicate with the Flash object) to communicate with the script&lt;br /&gt;
	&lt;br /&gt;
		var origin = document.location.protocol + &amp;quot;//&amp;quot; + document.location.hostname;&lt;br /&gt;
		var defaultport = '';&lt;br /&gt;
		if (document.location.protocol == 'http:')&lt;br /&gt;
			defaultport = '80';&lt;br /&gt;
		else if (document.location.protocol == 'https:')&lt;br /&gt;
			defaultport = '443';&lt;br /&gt;
		if (document.location.port &amp;amp;&amp;amp; document.location.port != defaultport)&lt;br /&gt;
			origin += &amp;quot;:&amp;quot; + document.location.port;&lt;br /&gt;
	&lt;br /&gt;
		var handlers = {}&lt;br /&gt;
	&lt;br /&gt;
		function receiveMessage(event)&lt;br /&gt;
		{&lt;br /&gt;
			if (event.origin !== origin)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.source !== window)&lt;br /&gt;
				return;&lt;br /&gt;
			if (event.data.message.substring(0, 8) !== 'aio_req_')&lt;br /&gt;
				return;&lt;br /&gt;
	&lt;br /&gt;
			var message = event.data.message.substring(8);&lt;br /&gt;
			handlers[message](event.data);&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener(&amp;quot;message&amp;quot;, receiveMessage, false);&lt;br /&gt;
	&lt;br /&gt;
		// Documentation for the Flash interface is really lacking...&lt;br /&gt;
		// Adobe removed the docs from their website.&lt;br /&gt;
		// Luckily, the Wayback Machine captures all&lt;br /&gt;
		// http://web.archive.org/web/20100710000820/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html&lt;br /&gt;
		// http://web.archive.org/web/20090210205955/http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_04.html&lt;br /&gt;
	&lt;br /&gt;
		handlers.currentFrame = function currentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.CurrentFrame;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.CurrentFrame();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetCurrentFrame = function targetCurrentFrame(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TCurrentFrame) == 'function')&lt;br /&gt;
				a = elem.TCurrentFrame(data.target);&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.totalFrames = function totalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.TotalFrames;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.TotalFrames();&lt;br /&gt;
			if (typeof(a) !== 'number' || a &amp;lt; 0)&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetTotalFrames = function targetTotalFrames(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 5);  // TOTAL_FRAMES&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.isPlaying = function isPlaying(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			var a = elem.IsPlaying;&lt;br /&gt;
			if (typeof(a) == 'function')&lt;br /&gt;
				a = elem.IsPlaying();&lt;br /&gt;
			if (typeof(a) == 'number')&lt;br /&gt;
				a = (a != 0);&lt;br /&gt;
			else if (typeof(a) != 'boolean')&lt;br /&gt;
				a = false;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetFramesLoaded = function targetFramesLoaded(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGetPropertyAsNumber) == 'function')&lt;br /&gt;
				a = elem.TGetPropertyAsNumber(data.target, 12);  // FRAMES_LOADED&lt;br /&gt;
			else&lt;br /&gt;
				a = -1;&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_paramCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback,&lt;br /&gt;
				val: a&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.stop = function stop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.StopPlay) == 'function')&lt;br /&gt;
				elem.StopPlay();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetStop = function targetStop(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TStopPlay) == 'function')&lt;br /&gt;
				elem.TStopPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.play = function play(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Play) == 'function')&lt;br /&gt;
				elem.Play();&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetPlay = function targetPlay(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TPlay) == 'function')&lt;br /&gt;
				elem.TPlay(data.target);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.goto = function goto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.GotoFrame) == 'function')&lt;br /&gt;
				elem.GotoFrame(data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.targetGoto = function targetGoto(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.TGotoFrame) == 'function')&lt;br /&gt;
				elem.TGotoFrame(data.target, data.frame);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.zoom = function zoom(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.Zoom) == 'function')&lt;br /&gt;
				elem.Zoom(data.zoom);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		handlers.setScaleMode = function setScaleMode(data)&lt;br /&gt;
		{&lt;br /&gt;
			var elem = document.getElementById(data.id);&lt;br /&gt;
			if (typeof(elem.SetVariable) == 'function')&lt;br /&gt;
				elem.SetVariable(&amp;quot;Stage.scaleMode&amp;quot;, data.scaleMode);&lt;br /&gt;
	&lt;br /&gt;
			window.postMessage({&lt;br /&gt;
				message: &amp;quot;aio_resp_basicCallback&amp;quot;,&lt;br /&gt;
				callback: data.callback&lt;br /&gt;
			}, origin);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.currentFrame = function currentFrame(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_currentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetCurrentFrame = function currentFrame(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetCurrentFrame&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.totalFrames = function totalFrames(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_totalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetTotalFrames = function targetTotalFrames(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetTotalFrames&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.isPlaying = function isPlaying(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_isPlaying&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetFramesLoaded = function targetFramesLoaded(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetFramesLoaded&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.stop = function stop(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_stop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetStop = function targetStop(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetStop&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.play = function play(elem, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_play&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem)&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetPlay = function targetPlay(elem, target, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetPlay&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.goto = function goto(elem, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_goto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.targetGoto = function targetGoto(elem, target, frame, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_targetGoto&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			target: target,&lt;br /&gt;
			frame: frame&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.zoom = function zoom(elem, zoom, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_zoom&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			zoom: zoom&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.setScaleMode = function setScaleMode(elem, scaleMode, callback)&lt;br /&gt;
	{&lt;br /&gt;
		window.postMessage({&lt;br /&gt;
			message: &amp;quot;aio_req_setScaleMode&amp;quot;,&lt;br /&gt;
			callback: this.storeCallback(callback),&lt;br /&gt;
			id: this.getId(elem),&lt;br /&gt;
			scaleMode: scaleMode&lt;br /&gt;
		}, this.origin)&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.receiveMessage = function receiveMessage(event)&lt;br /&gt;
	{&lt;br /&gt;
		if (event.origin !== this.origin)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.source !== window)&lt;br /&gt;
			return;&lt;br /&gt;
		if (event.data.message.substring(0, 9) !== 'aio_resp_')&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var message = event.data.message.substring(9);&lt;br /&gt;
		PlayerComm.handlers[message].call(this, event.data);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.basicCallback = function basicCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.handlers.paramCallback = function paramCallback(data)&lt;br /&gt;
	{&lt;br /&gt;
		var callback = this.getCallback(data.callback);&lt;br /&gt;
		if (callback)&lt;br /&gt;
			callback(data.val);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	PlayerComm.prototype.storeCallback = function storeCallback(callback)&lt;br /&gt;
	{&lt;br /&gt;
		if (!callback)&lt;br /&gt;
			return -1;&lt;br /&gt;
		var ix = 0;&lt;br /&gt;
		while (this.callbacks[ix] !== undefined)&lt;br /&gt;
			ix++;&lt;br /&gt;
		this.callbacks[ix] = callback;&lt;br /&gt;
		return ix;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getCallback = function getCallback(ix)&lt;br /&gt;
	{&lt;br /&gt;
		if (ix &amp;lt; 0)&lt;br /&gt;
			return undefined;&lt;br /&gt;
		var callback = this.callbacks[ix];&lt;br /&gt;
		this.callbacks[ix] = undefined;&lt;br /&gt;
		return callback;&lt;br /&gt;
	}&lt;br /&gt;
	PlayerComm.prototype.getId = function getId(elem)&lt;br /&gt;
	{&lt;br /&gt;
		if (!elem.id)&lt;br /&gt;
		{&lt;br /&gt;
			this.id_count++;&lt;br /&gt;
			elem.id = &amp;quot;aio_id_&amp;quot; + this.id_count;&lt;br /&gt;
		}&lt;br /&gt;
		return elem.id;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function SettingsPane()&lt;br /&gt;
	{&lt;br /&gt;
	}&lt;br /&gt;
	SettingsPane.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#settingsbox, #settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tborder-right: 1px solid #666;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tbackground: #EEE;\n' +&lt;br /&gt;
			'\tcolor: #000;\n' +&lt;br /&gt;
			'\tposition: fixed;\n' +&lt;br /&gt;
			'\toverflow: auto;\n' +&lt;br /&gt;
			'\tleft: 0;\n' +&lt;br /&gt;
			'\ttop: 0;\n' +&lt;br /&gt;
			'\tfont: 12px sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tz-index: 2;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\twidth: 350px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: bolder;\n' +&lt;br /&gt;
			'\tbackground: #CCC;\n' +&lt;br /&gt;
			'\tborder-bottom: 1px solid #666;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar img\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tvertical-align: text-bottom;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .prefsicon\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: left;\n' +&lt;br /&gt;
			'\tmargin-right: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage, #settingslink .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcursor: pointer;\n' +&lt;br /&gt;
			'\tdisplay: block;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingstitlebar .buttonimage\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfloat: right;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox form\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul, #settingsbox li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tlist-style: none;\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox ul ul\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-left: 2em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbox input[type=&amp;quot;checkbox&amp;quot;]\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin-right: 0.25em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingsbuttons\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#settingslink\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tpadding: 3px;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		var settingsbox = document.createElement('div');&lt;br /&gt;
		this.settingsbox = settingsbox;&lt;br /&gt;
		settingsbox.id = 'settingsbox';&lt;br /&gt;
		settingsbox.style.display = 'none';&lt;br /&gt;
		document.body.appendChild(settingsbox);&lt;br /&gt;
		var titlebar = document.createElement('div');&lt;br /&gt;
		titlebar.id = 'settingstitlebar';&lt;br /&gt;
		settingsbox.appendChild(titlebar);&lt;br /&gt;
		var closebutton = document.createElement('img');&lt;br /&gt;
		closebutton.src = globals.images.close;&lt;br /&gt;
		closebutton.title = &amp;quot;Click to hide preferences&amp;quot;;&lt;br /&gt;
		closebutton.className = 'buttonimage';&lt;br /&gt;
		closebutton.addEventListener('click', this.hidePane.bind(this), false);&lt;br /&gt;
		titlebar.appendChild(closebutton);&lt;br /&gt;
		var prefslogo = document.createElement('img');&lt;br /&gt;
		prefslogo.src = globals.images.prefs;&lt;br /&gt;
		prefslogo.className = 'prefsicon';&lt;br /&gt;
		titlebar.appendChild(prefslogo);&lt;br /&gt;
		titlebar.appendChild(document.createTextNode(&amp;quot;Preferences&amp;quot;));&lt;br /&gt;
		var settingsform = document.createElement('form');&lt;br /&gt;
		settingsbox.appendChild(settingsform);&lt;br /&gt;
		var settingslist = document.createElement('ul');&lt;br /&gt;
		this.settingslist = settingslist;&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
		settingslist.style.overflow = 'auto'; // vertical scrollbar if needed&lt;br /&gt;
		window.addEventListener('resize', this.resizeWindow.bind(this), true);&lt;br /&gt;
		settingsform.appendChild(settingslist);&lt;br /&gt;
	&lt;br /&gt;
		var div = document.createElement('div');&lt;br /&gt;
		div.id = 'settingsbuttons';&lt;br /&gt;
		settingsform.appendChild(div);&lt;br /&gt;
		var savebutton = document.createElement('input');&lt;br /&gt;
		savebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		savebutton.value = &amp;quot;Save and Apply&amp;quot;;&lt;br /&gt;
		div.appendChild(savebutton);&lt;br /&gt;
		var nocachebutton = document.createElement('input');&lt;br /&gt;
		nocachebutton.type = &amp;quot;submit&amp;quot;;&lt;br /&gt;
		nocachebutton.value = &amp;quot;Clear subtitles cache&amp;quot;;&lt;br /&gt;
		nocachebutton.addEventListener(&amp;quot;click&amp;quot;, this.cacheDodge.bind(this), false);&lt;br /&gt;
		div.appendChild(document.createTextNode(&amp;quot; &amp;quot;));&lt;br /&gt;
		div.appendChild(nocachebutton);&lt;br /&gt;
		settingsform.addEventListener(&amp;quot;submit&amp;quot;, this.saveSettings.bind(this), false);&lt;br /&gt;
		&lt;br /&gt;
		var settingslink = document.createElement('div');&lt;br /&gt;
		this.settingslink = settingslink;&lt;br /&gt;
		settingslink.id = 'settingslink';&lt;br /&gt;
		var settingslinkimage = document.createElement('img');&lt;br /&gt;
		settingslinkimage.src = globals.images.prefs;&lt;br /&gt;
		settingslinkimage.title = &amp;quot;Click to show preferences&amp;quot;;&lt;br /&gt;
		settingslinkimage.className = 'prefsicon buttonimage';&lt;br /&gt;
		settingslinkimage.addEventListener('click', this.showPane.bind(this), false);&lt;br /&gt;
		settingslink.appendChild(settingslinkimage);&lt;br /&gt;
		document.body.appendChild(settingslink);&lt;br /&gt;
		&lt;br /&gt;
		this.hidePanels = [];&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.saveSettings = function saveSettings(e)&lt;br /&gt;
	{&lt;br /&gt;
		// stop the form from actually being submitted&lt;br /&gt;
		if (e &amp;amp;&amp;amp; e.preventDefault)&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		&lt;br /&gt;
		for (var i in globals.modules)&lt;br /&gt;
			globals.modules[i].updateSettings();&lt;br /&gt;
		&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.updateSettings = function updateSettings(){};&lt;br /&gt;
	SettingsPane.prototype.showPane = function showPane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.hidePane = function hidePane()&lt;br /&gt;
	{&lt;br /&gt;
		this.settingsbox.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.settingslink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.resizeWindow = function resizeWindow()&lt;br /&gt;
	{&lt;br /&gt;
		var a = window.innerHeight - 75;&lt;br /&gt;
		if (a &amp;lt; 40) a = 40;&lt;br /&gt;
		this.settingslist.style.maxHeight = a + 'px';&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.cacheDodge = function cacheDodge()&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;cachedodge&amp;quot;, Math.random().toString());	&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.addSettingRow = function addSettingRow(parent)&lt;br /&gt;
	{&lt;br /&gt;
		if (!parent)&lt;br /&gt;
			parent = this.settingslist;&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			var checkbox = undefined;&lt;br /&gt;
			if (parent.tagName.toLowerCase() == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				checkbox = parent;&lt;br /&gt;
				parent = parent.parentNode;&lt;br /&gt;
			}&lt;br /&gt;
			var ul = parent.getElementsByTagName(&amp;quot;ul&amp;quot;);&lt;br /&gt;
			if (ul.length)&lt;br /&gt;
				parent = ul[ul.length - 1];&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				ul = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
				parent.appendChild(ul);&lt;br /&gt;
				parent = ul;&lt;br /&gt;
	&lt;br /&gt;
				if (checkbox)&lt;br /&gt;
				{&lt;br /&gt;
					this.hidePanels.push({checkbox: checkbox, panel: ul});&lt;br /&gt;
					checkbox.addEventListener(&amp;quot;click&amp;quot;, this.showHidePanel.bind(this, checkbox, ul), false);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		var settingrow = document.createElement('li');&lt;br /&gt;
		parent.appendChild(settingrow);&lt;br /&gt;
		return settingrow;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.addCheckbox = function addCheckbox(id, label, title, checked, parent)&lt;br /&gt;
	{&lt;br /&gt;
		var settingrow = this.addSettingRow(parent);&lt;br /&gt;
		var settingcheckbox = document.createElement('input');&lt;br /&gt;
		settingcheckbox.type = 'checkbox';&lt;br /&gt;
		settingcheckbox.checked = checked;&lt;br /&gt;
		settingcheckbox.title = title;&lt;br /&gt;
		settingcheckbox.id = 'setting_' + id;&lt;br /&gt;
		settingrow.appendChild(settingcheckbox);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = 'setting_' + id;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode(label));&lt;br /&gt;
		settinglabel.title = settingcheckbox.title;&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		return settingcheckbox;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	SettingsPane.prototype.showHidePanel = function showHidePanel(checkbox, panel)&lt;br /&gt;
	{&lt;br /&gt;
		panel.style.display = checkbox.checked ? &amp;quot;&amp;quot; : &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	SettingsPane.prototype.initComplete = function initComplete()&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.hidePanels.length; i++)&lt;br /&gt;
			this.showHidePanel(this.hidePanels[i].checkbox, this.hidePanels[i].panel);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Fullscreen()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = utils.getPref('resize', true);&lt;br /&gt;
		this.noscale = utils.getPref('noscale', false);&lt;br /&gt;
	}&lt;br /&gt;
	Fullscreen.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_main = globals.modules.settingspane.addCheckbox('resize', &amp;quot;Resize flash to full-screen&amp;quot;, &amp;quot;Resizes the toon so it fills the entire window&amp;quot;, this.shouldresize);&lt;br /&gt;
		this.setting_noscale = globals.modules.settingspane.addCheckbox('noscale', &amp;quot;Show behind the black&amp;quot;, &amp;quot;Lets you see what's happening beyond the frames&amp;quot;, this.noscale, this.setting_main);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.initwidth = globals.flashmovie.width;&lt;br /&gt;
		this.initheight = globals.flashmovie.height;&lt;br /&gt;
		if (this.initwidth.toString().indexOf('%') &amp;gt;= 0 || this.initwidth.toString().indexOf('%') &amp;gt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = true;&lt;br /&gt;
			this.aspect = 1.0;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.isPercentage = false;&lt;br /&gt;
			this.aspect = this.initwidth / this.initheight;&lt;br /&gt;
		}&lt;br /&gt;
		window.addEventListener('resize', this.doResize.bind(this), true);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.doResize = function doResize()&lt;br /&gt;
	{&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
		&lt;br /&gt;
		if (!this.shouldresize)&lt;br /&gt;
		{&lt;br /&gt;
			globals.flashmovie.style.width = this.initwidth + &amp;quot;px&amp;quot;;&lt;br /&gt;
			globals.flashmovie.style.height = this.initheight + &amp;quot;px&amp;quot;;&lt;br /&gt;
			if (globals.modules.seekbar.seekbar)&lt;br /&gt;
				globals.modules.seekbar.seekbar.style.width = Math.max(this.initwidth, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		var dw = window.innerWidth;&lt;br /&gt;
		var dh = window.innerHeight;&lt;br /&gt;
	&lt;br /&gt;
		var a = document.defaultView.getComputedStyle(document.body, null);&lt;br /&gt;
		// parseInt will take the number part at the start, turning eg &amp;quot;10px&amp;quot; into 10&lt;br /&gt;
		dw -= parseInt(a.marginLeft,10);&lt;br /&gt;
		dw -= parseInt(a.marginRight,10);&lt;br /&gt;
		dh -= parseInt(a.marginTop,10);&lt;br /&gt;
		dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
	&lt;br /&gt;
		if (globals.navbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.navbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.seekbar.seekbar, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.subtitleholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		if (globals.modules.subtitles.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			a = document.defaultView.getComputedStyle(globals.modules.subtitles.errorsholder, null);&lt;br /&gt;
			dh -= parseInt(a.height,10);&lt;br /&gt;
			dh -= parseInt(a.marginTop,10);&lt;br /&gt;
			dh -= parseInt(a.marginBottom,10);&lt;br /&gt;
		}&lt;br /&gt;
		// enforce a (rather small) minimum size, regardless of how much crap is squeezed below the frame&lt;br /&gt;
		if (dw &amp;lt; 100) dw = 100;&lt;br /&gt;
		if (dh &amp;lt; 100) dh = 100;&lt;br /&gt;
		// if it was a percentage size, or we're looking outside the frame, just fill the whole window.&lt;br /&gt;
		// otherwise, keep the aspect ratio correct... &amp;quot;touch inside&amp;quot; style.&lt;br /&gt;
		if (!this.isPercentage &amp;amp;&amp;amp; !this.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			if(dw &amp;lt;= dh * this.aspect)&lt;br /&gt;
				dh = Math.floor(dw / this.aspect);&lt;br /&gt;
			else&lt;br /&gt;
				dw = Math.floor(dh * this.aspect);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// set embed's size&lt;br /&gt;
		globals.flashmovie.style.width = dw + &amp;quot;px&amp;quot;;&lt;br /&gt;
		globals.flashmovie.style.height = dh + &amp;quot;px&amp;quot;;&lt;br /&gt;
		if (globals.modules.seekbar.seekbar)&lt;br /&gt;
			globals.modules.seekbar.seekbar.style.width = Math.max(dw, 450) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.setScaleMode = function setScaleMode(scaleMode)&lt;br /&gt;
	{&lt;br /&gt;
		utils.whenLoaded(() =&amp;gt; {&lt;br /&gt;
			playercomm.setScaleMode(globals.flashmovie, scaleMode);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Fullscreen.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.shouldresize = this.setting_main.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;resize&amp;quot;, this.shouldresize);&lt;br /&gt;
		var old_noscale = this.noscale;&lt;br /&gt;
		this.noscale = this.setting_noscale.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;noscale&amp;quot;, this.noscale);&lt;br /&gt;
		this.doResize();&lt;br /&gt;
		if (this.noscale &amp;amp;&amp;amp; !old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;noScale&amp;quot;);&lt;br /&gt;
		else if (!this.noscale &amp;amp;&amp;amp; old_noscale)&lt;br /&gt;
			this.setScaleMode(&amp;quot;showAll&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Seekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('seekbar', true);&lt;br /&gt;
		this.framecounter = utils.getPref('frames', false);&lt;br /&gt;
		this.zoom = utils.getPref('zoom', false);&lt;br /&gt;
	}&lt;br /&gt;
	Seekbar.prototype.init = function init() {&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('seekbar', &amp;quot;Show seek bar&amp;quot;, &amp;quot;Lets you fast forward and rewind&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_framecounter = globals.modules.settingspane.addCheckbox('framecounter', &amp;quot;Show frame counter on seek bar&amp;quot;, &amp;quot;Shows you exactly where you are&amp;quot;, this.framecounter, this.setting_enabled);&lt;br /&gt;
		this.setting_zoom = globals.modules.settingspane.addCheckbox('zoom', &amp;quot;Show zooming controls&amp;quot;, &amp;quot;Allows zooming in on the toon&amp;quot;, this.zoom, this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		if (!globals.flashmovie)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
		document.addEventListener(&amp;quot;mousemove&amp;quot;, this.dragMousemove.bind(this), false);&lt;br /&gt;
		document.addEventListener(&amp;quot;mouseup&amp;quot;, this.release.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
			this.removeSeekbar();&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;seekbar&amp;quot;, this.enabled);&lt;br /&gt;
		this.framecounter = this.setting_framecounter.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;frames&amp;quot;, this.framecounter);&lt;br /&gt;
		this.zoom = this.setting_zoom.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;zoom&amp;quot;, this.zoom);&lt;br /&gt;
		if (this.enabled &amp;amp;&amp;amp; globals.flashmovie)&lt;br /&gt;
			this.addSeekbar();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.addSeekbar = function addSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {this.paused = !playing;});&lt;br /&gt;
	&lt;br /&gt;
		this.seekbar = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase()==&amp;quot;object&amp;quot; || where.parentNode.tagName.toLowerCase()==&amp;quot;embed&amp;quot;)&lt;br /&gt;
			where=where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.seekbar, where);&lt;br /&gt;
		this.seekbar.style.width = globals.flashmovie.width;&lt;br /&gt;
		this.seekbar.style.margin = &amp;quot;0 auto&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
		var table=document.createElement(&amp;quot;table&amp;quot;);&lt;br /&gt;
		table.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.seekbar.appendChild(table);&lt;br /&gt;
		var row=table.insertRow();&lt;br /&gt;
		this.pauseButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		this.pauseButtonImg.src = globals.images.pause;&lt;br /&gt;
		this.pauseButton.appendChild(this.pauseButtonImg);&lt;br /&gt;
		var buttonCell=row.insertCell();&lt;br /&gt;
		buttonCell.appendChild(this.pauseButton);&lt;br /&gt;
		var rewindCell=row.insertCell();&lt;br /&gt;
		this.rewindButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.rewind;&lt;br /&gt;
		this.rewindButton.appendChild(img);&lt;br /&gt;
		rewindCell.appendChild(this.rewindButton);&lt;br /&gt;
		var prevCell=row.insertCell();&lt;br /&gt;
		this.prevButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.prev;&lt;br /&gt;
		this.prevButton.appendChild(img);&lt;br /&gt;
		prevCell.appendChild(this.prevButton);&lt;br /&gt;
	&lt;br /&gt;
		this.slider=row.insertCell();&lt;br /&gt;
		this.slider.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		var visibleSlider=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		visibleSlider.style.position=&amp;quot;relative&amp;quot;;&lt;br /&gt;
		visibleSlider.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.width=&amp;quot;100%&amp;quot;;&lt;br /&gt;
		visibleSlider.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		visibleSlider.style.background=&amp;quot;#333&amp;quot;;&lt;br /&gt;
		this.slider.appendChild(visibleSlider);&lt;br /&gt;
		this.loadmeter=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.loadmeter.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.top=this.loadmeter.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.height=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.width=&amp;quot;0&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.loadmeter.style.background=&amp;quot;#aaa&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.loadmeter);&lt;br /&gt;
		this.thumb=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.thumb.style.position=&amp;quot;absolute&amp;quot;;&lt;br /&gt;
		this.thumb.style.height=&amp;quot;1em&amp;quot;;&lt;br /&gt;
		this.thumb.style.width=&amp;quot;0.5em&amp;quot;;&lt;br /&gt;
		this.thumb.style.top=&amp;quot;-0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.borderRadius=&amp;quot;0.25em&amp;quot;;&lt;br /&gt;
		this.thumb.style.background=&amp;quot;#666&amp;quot;;&lt;br /&gt;
		visibleSlider.appendChild(this.thumb);&lt;br /&gt;
	&lt;br /&gt;
		var nextCell=row.insertCell();&lt;br /&gt;
		this.nextButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextButton.appendChild(img);&lt;br /&gt;
		nextCell.appendChild(this.nextButton);&lt;br /&gt;
		var ffCell=row.insertCell();&lt;br /&gt;
		this.ffButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.src = globals.images.ffwd;&lt;br /&gt;
		this.ffButton.appendChild(img);&lt;br /&gt;
		ffCell.appendChild(this.ffButton);&lt;br /&gt;
	&lt;br /&gt;
		if (this.framecounter)&lt;br /&gt;
		{&lt;br /&gt;
			var frameCell=row.insertCell();&lt;br /&gt;
			var framediv=document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			framediv.style.background=&amp;quot;#ccc&amp;quot;;&lt;br /&gt;
			framediv.style.color=&amp;quot;#000&amp;quot;;&lt;br /&gt;
			framediv.style.fontWeight=&amp;quot;bold&amp;quot;;&lt;br /&gt;
			framediv.style.padding = &amp;quot;0 5px&amp;quot;;&lt;br /&gt;
			frameCell.appendChild(framediv);&lt;br /&gt;
			this.framecountertext=document.createTextNode(&amp;quot;&amp;quot;);&lt;br /&gt;
			framediv.appendChild(this.framecountertext);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.framecountertext = false;&lt;br /&gt;
	&lt;br /&gt;
		if (this.zoom &amp;amp;&amp;amp; !globals.modules.fullscreen.noscale)&lt;br /&gt;
		{&lt;br /&gt;
			var zoomOutCell=row.insertCell();&lt;br /&gt;
			this.zoomOutButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			// \u2212 is &amp;amp;minus;&lt;br /&gt;
			this.zoomOutButton.appendChild(document.createTextNode(&amp;quot;\u2212&amp;quot;));&lt;br /&gt;
			zoomOutCell.appendChild(this.zoomOutButton);&lt;br /&gt;
			var zoomNormalCell=row.insertCell();&lt;br /&gt;
			this.zoomNormalButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomNormalButton.appendChild(document.createTextNode(&amp;quot;0&amp;quot;));&lt;br /&gt;
			zoomNormalCell.appendChild(this.zoomNormalButton);&lt;br /&gt;
			var zoomInCell=row.insertCell();&lt;br /&gt;
			this.zoomInButton=document.createElement(&amp;quot;button&amp;quot;);&lt;br /&gt;
			this.zoomInButton.appendChild(document.createTextNode(&amp;quot;+&amp;quot;));&lt;br /&gt;
			zoomInCell.appendChild(this.zoomInButton);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton = false;&lt;br /&gt;
			this.zoomNormalButton = false;&lt;br /&gt;
			this.zoomInButton = false;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.slider.addEventListener(&amp;quot;mousedown&amp;quot;, this.drag.bind(this), false);&lt;br /&gt;
		this.pauseButton.addEventListener(&amp;quot;click&amp;quot;,this.pauseUnpause.bind(this),false);&lt;br /&gt;
		this.rewindButton.addEventListener(&amp;quot;click&amp;quot;,this.rewind.bind(this),false);&lt;br /&gt;
		this.prevButton.addEventListener(&amp;quot;click&amp;quot;,this.prevFrame.bind(this),false);&lt;br /&gt;
		this.nextButton.addEventListener(&amp;quot;click&amp;quot;,this.nextFrame.bind(this),false);&lt;br /&gt;
		this.ffButton.addEventListener(&amp;quot;click&amp;quot;,this.fastforward.bind(this),false);&lt;br /&gt;
		if (this.zoomOutButton)&lt;br /&gt;
		{&lt;br /&gt;
			this.zoomOutButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomOut.bind(this),false);&lt;br /&gt;
			this.zoomNormalButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomNormal.bind(this),false);&lt;br /&gt;
			this.zoomInButton.addEventListener(&amp;quot;click&amp;quot;,this.zoomIn.bind(this),false);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.removeSeekbar = function removeSeekbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
		this.seekbar.parentNode.removeChild(this.seekbar);&lt;br /&gt;
		this.seekbar = undefined;&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.seekbar)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		var fullSliderWidth = parseInt(document.defaultView.getComputedStyle(this.slider, null).width, 10);&lt;br /&gt;
		var sliderWidth = fullSliderWidth - parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
			utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			if (tot &amp;gt; 0)&lt;br /&gt;
			{&lt;br /&gt;
				utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
					if (frame &amp;lt; 0)&lt;br /&gt;
						frame = 0;&lt;br /&gt;
					if (this.framecountertext)&lt;br /&gt;
					{&lt;br /&gt;
						var a = tot.toString();&lt;br /&gt;
						var b = (frame+1).toString();&lt;br /&gt;
						while (b.length &amp;lt; a.length)&lt;br /&gt;
							b = &amp;quot;\u2007&amp;quot; + b; // U+2007 FIGURE SPACE&lt;br /&gt;
						this.framecountertext.nodeValue = b+&amp;quot;/&amp;quot;+a;&lt;br /&gt;
					}&lt;br /&gt;
					if(!this.dragging)&lt;br /&gt;
					{&lt;br /&gt;
						if (tot &amp;gt; 1)&lt;br /&gt;
							this.thumb.style.left = (frame/(tot - 1)*sliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
						else&lt;br /&gt;
							this.thumb.style.left = &amp;quot;0&amp;quot;;&lt;br /&gt;
						utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
							this.paused = !playing;&lt;br /&gt;
							this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					utils.framesLoaded((frame) =&amp;gt; {&lt;br /&gt;
						this.loadmeter.style.width = (frame/tot*fullSliderWidth)+&amp;quot;px&amp;quot;;&lt;br /&gt;
					});&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			else if (this.framecountertext)&lt;br /&gt;
			{&lt;br /&gt;
				this.framecountertext.nodeValue = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.pauseUnpause = function pauseUnpause()&lt;br /&gt;
	{&lt;br /&gt;
		utils.isPlaying((playing) =&amp;gt; {&lt;br /&gt;
			this.paused = playing;&lt;br /&gt;
			this.pauseButtonImg.src = this.paused ? globals.images.play : globals.images.pause;&lt;br /&gt;
			if (this.paused)&lt;br /&gt;
				utils.stop();&lt;br /&gt;
			else&lt;br /&gt;
				utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.rewind = function rewind()&lt;br /&gt;
	{&lt;br /&gt;
		utils.goto(0, () =&amp;gt; {&lt;br /&gt;
			utils.play();&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.fastforward = function fastforward()&lt;br /&gt;
	{&lt;br /&gt;
		utils.totalFrames((tot) =&amp;gt; {&lt;br /&gt;
			utils.goto(tot - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.prevFrame = function prevFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame - 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.nextFrame = function nextFrame()&lt;br /&gt;
	{&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			utils.goto(frame + 1);&lt;br /&gt;
		})&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomIn = function zoomIn()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomIn(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomOut = function zoomOut()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomOut(1.5);&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.zoomNormal = function zoomNormal()&lt;br /&gt;
	{&lt;br /&gt;
		utils.zoomReset();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Seekbar.prototype.drag = function drag(e)&lt;br /&gt;
	{&lt;br /&gt;
		this.dragging=true;&lt;br /&gt;
		this.dragMousemove(e);&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		return false;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.dragMousemove = function dragMousemove(e)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		var pageX = e.clientX + document.body.scrollLeft;&lt;br /&gt;
		var rect = this.slider.getBoundingClientRect();&lt;br /&gt;
		var thumbWidth = parseInt(document.defaultView.getComputedStyle(this.thumb, null).width, 10);&lt;br /&gt;
		var width = rect.right - rect.left - thumbWidth;&lt;br /&gt;
		var pos = (pageX - rect.left - thumbWidth/2) / width;&lt;br /&gt;
		if (pos &amp;lt; 0)&lt;br /&gt;
			pos = 0;&lt;br /&gt;
		if (pos &amp;gt; 1)&lt;br /&gt;
			pos = 1;&lt;br /&gt;
		utils.totalFrames((t) =&amp;gt; {&lt;br /&gt;
			if (t &amp;gt; 1)&lt;br /&gt;
			{&lt;br /&gt;
				var frame = Math.round(t * pos);&lt;br /&gt;
				utils.goto(frame);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		this.thumb.style.left = (pos * width) + &amp;quot;px&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Seekbar.prototype.release = function release()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.dragging) return;&lt;br /&gt;
		if (!this.paused)&lt;br /&gt;
			utils.play();&lt;br /&gt;
		this.dragging = false;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function WikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('hrwiki', true);&lt;br /&gt;
	}&lt;br /&gt;
	WikiLink.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('hrwiki', &amp;quot;Add HRWiki link&amp;quot;, &amp;quot;Adds a link to the appropriate page on the Homestar Runner Wiki&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.buildWikiLink();&lt;br /&gt;
		this.showWikiLink();&lt;br /&gt;
	};&lt;br /&gt;
	WikiLink.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;hrwiki&amp;quot;, this.enabled);&lt;br /&gt;
		// This is called before Subtitles.updateSettings, so delay until after that happens&lt;br /&gt;
		// so we can update the subtitles link as appropriate&lt;br /&gt;
		window.setTimeout(this.showWikiLink.bind(this), 0);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.buildWikiLink = function buildWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		// many pages on the mirror have an &amp;quot;info&amp;quot; link in the navbar (thanks Tom!)... use that&lt;br /&gt;
		if (globals.whichsite === 3)&lt;br /&gt;
		{&lt;br /&gt;
			var navbar;&lt;br /&gt;
			if (globals.modules.navbar &amp;amp;&amp;amp; globals.modules.navbar.originalnavbar)&lt;br /&gt;
				navbar = globals.modules.navbar.originalnavbar;&lt;br /&gt;
			else&lt;br /&gt;
				navbar = globals.navbar;&lt;br /&gt;
			if (navbar)&lt;br /&gt;
			{&lt;br /&gt;
				var a = navbar.getElementsByTagName(&amp;quot;a&amp;quot;);&lt;br /&gt;
				for (var i = 0; i &amp;lt; a.length; i++)&lt;br /&gt;
				{&lt;br /&gt;
					if (a[i].firstChild.nodeType === 3 &amp;amp;&amp;amp; a[i].firstChild.nodeValue === &amp;quot;info&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						this.addHRWikiLink(a[i].href, true);&lt;br /&gt;
						return;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// pull the filename from the url, use it as a link to HRWiki&lt;br /&gt;
		// all the filenames except a couple of special-cases are&lt;br /&gt;
		//  redirects to their articles&lt;br /&gt;
		// don't link to certain pages, they aren't redirects, but already existing pages&lt;br /&gt;
		// also detect a 404 error and special-case Strong Sad's Lament&lt;br /&gt;
		     if (document.title === &amp;quot;Oops! You bwoke it.&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;404'd&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;interview&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;The_Interview&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fhqwhgads&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Everybody_to_the_Limit&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;trogdor&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;TROGDOR!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;marshie&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Meet_Marshie&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;eggs&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Eggs_(toon)&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;fireworks&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Happy_Fireworks&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail100&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Not_the_100th_Email!!!&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbemail200&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Page_Load_Error&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;sbcg4ap&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Bad's_Cool_Game_for_Attractive_People_Advertisement&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;dangeresque&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Dangeresque_Roomisode_1:_Behind_the_Dangerdesque&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0, 12) === &amp;quot;/sadjournal/&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;wonderyears&amp;quot; &amp;amp;&amp;amp; globals.filename != &amp;quot;super8&amp;quot;)&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Strong_Sad's_Lament&amp;quot;);&lt;br /&gt;
		else if (location.pathname.substr(0,5) === &amp;quot;/vii/&amp;quot; &amp;amp;&amp;amp; (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;))&lt;br /&gt;
			this.addHRWikiLink(&amp;quot;Viidelectrix&amp;quot;);&lt;br /&gt;
		else if (globals.filename === &amp;quot;&amp;quot; || globals.filename === &amp;quot;index&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			if (document.location.pathname === &amp;quot;/slash/slash/&amp;quot;)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Screenland_-_24_Apr_2017&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 0)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 1)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Podstar_Runner&amp;quot;);&lt;br /&gt;
			else if (globals.whichsite === 2)&lt;br /&gt;
				this.addHRWikiLink(&amp;quot;Videlectrix&amp;quot;);&lt;br /&gt;
			//else if (globals.whichsite === 3)&lt;br /&gt;
			//	; // this will be a 403 page - do nothing.&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.addHRWikiLink(globals.filename);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.addHRWikiLink = function addHRWikiLink(pagename, isurl)&lt;br /&gt;
	{&lt;br /&gt;
		this.linkdiv = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		this.linkdiv.style.borderLeft = this.linkdiv.style.borderBottom = '1px solid #666';&lt;br /&gt;
		this.linkdiv.style.background = '#EEE';&lt;br /&gt;
		this.linkdiv.style.position = &amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.overflow = 'auto';&lt;br /&gt;
		this.linkdiv.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.linkdiv.style.padding = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		if (isurl)&lt;br /&gt;
			link.href = pagename;&lt;br /&gt;
		else&lt;br /&gt;
			link.href = &amp;quot;http://www.hrwiki.org/wiki/&amp;quot; + escape(pagename.replace(/ /g, '_'));&lt;br /&gt;
		link.title = &amp;quot;See the HRWiki article for this page&amp;quot;;&lt;br /&gt;
		link.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		link.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(link);&lt;br /&gt;
		var img=document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		img.style.display=&amp;quot;block&amp;quot;;&lt;br /&gt;
		img.src=globals.images.hrwiki;&lt;br /&gt;
		link.appendChild(img);&lt;br /&gt;
		this.sublink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.sublink.title = &amp;quot;See the HRWiki article for this page's subtitles&amp;quot;;&lt;br /&gt;
		this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		this.sublink.style.textDecoration = &amp;quot;none&amp;quot;;&lt;br /&gt;
		this.sublink.style.textAlign = &amp;quot;center&amp;quot;;&lt;br /&gt;
		this.sublink.style.fontSize = this.sublink.style.lineHeight = &amp;quot;16px&amp;quot;;&lt;br /&gt;
		this.sublink.style.marginTop = &amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.linkdiv.appendChild(this.sublink);&lt;br /&gt;
		this.sublink.appendChild(document.createTextNode('S'));&lt;br /&gt;
		document.body.appendChild(this.linkdiv);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	WikiLink.prototype.showWikiLink = function showWikiLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (globals.modules.subtitles &amp;amp;&amp;amp; globals.modules.subtitles.enabled)&lt;br /&gt;
			{&lt;br /&gt;
				this.sublink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				this.sublink.href = &amp;quot;http://www.hrwiki.org/wiki/Subtitles:&amp;quot; + escape(globals.filename.replace(/ /g, '_')) + &amp;quot;/&amp;quot; + escape(globals.modules.subtitles.language);&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
				this.sublink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.linkdiv.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function NextPrev()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('prevnext', true);&lt;br /&gt;
		this.docheck = utils.getPref('checknext', true);&lt;br /&gt;
	}&lt;br /&gt;
	NextPrev.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('prevnext', &amp;quot;Show previous/next buttons&amp;quot;, &amp;quot;Lets you easily move through SBEmails, TGS, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_docheck = globals.modules.settingspane.addCheckbox('checknext', &amp;quot;Check if next exists&amp;quot;, 'Doesn\'t add a &amp;quot;next&amp;quot; link on the latest SBEmail, etc', this.docheck, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.createPrevNext();&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;prevnext&amp;quot;, this.enabled);&lt;br /&gt;
		this.docheck = this.setting_docheck.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;checknext&amp;quot;, this.docheck);&lt;br /&gt;
		this.showPrevNext();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.createPrevNext = function createPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		// this is coded like this instead of just looking for /(\d+)/ so that it&lt;br /&gt;
		// doesn't find pages like commandos3 or xmas04&lt;br /&gt;
		var result;&lt;br /&gt;
		if ((result = globals.filename.match(/^(sbemail|tgs|answer|bizcasfri|puppetjam|main)(\d+)$/)))&lt;br /&gt;
		{&lt;br /&gt;
			// sbemail100 and sbemail200 aren't actually sbemails&lt;br /&gt;
			if (!(result[1] == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; (result[2] == &amp;quot;100&amp;quot; || result[2] == &amp;quot;200&amp;quot;)))&lt;br /&gt;
				this.addPrevNextlinks(result[1],parseInt(result[2],10));&lt;br /&gt;
		}&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailahundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 100);&lt;br /&gt;
		else if (globals.filename == &amp;quot;kotpoptoon&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 151);&lt;br /&gt;
		else if (globals.filename == &amp;quot;sbemailtwohundred&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 200);&lt;br /&gt;
		else if (globals.filename == &amp;quot;hremail3184&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;sbemail&amp;quot;, 201);&lt;br /&gt;
		else if (globals.filename == &amp;quot;dween_tgs&amp;quot;)&lt;br /&gt;
			this.addPrevNextlinks(&amp;quot;tgs&amp;quot;, 6);&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.addPrevNextlinks = function addPrevNextlinks(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (num &amp;gt; 1)&lt;br /&gt;
		{&lt;br /&gt;
			this.prevlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
			this.prevlink.href = this.makeLink(series, num - 1);&lt;br /&gt;
			this.prevlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
			this.prevlink.style.left=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
			this.prevlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
			this.prevlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
			this.prevlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
			this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			var img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
			img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
			img.src = globals.images.prev;&lt;br /&gt;
			this.prevlink.appendChild(img);&lt;br /&gt;
			document.body.appendChild(this.prevlink);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.nextlink = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		this.nextlink.href = this.makeLink(series, num + 1);&lt;br /&gt;
		this.nextlink.style.position=&amp;quot;fixed&amp;quot;;&lt;br /&gt;
		this.nextlink.style.right=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.bottom=&amp;quot;0px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.padding=&amp;quot;3px&amp;quot;;&lt;br /&gt;
		this.nextlink.style.background=&amp;quot;white&amp;quot;;&lt;br /&gt;
		this.nextlink.style.border=&amp;quot;1px solid black&amp;quot;;&lt;br /&gt;
		this.nextlink.style.textDecoration=&amp;quot;none&amp;quot;;&lt;br /&gt;
		this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img = document.createElement(&amp;quot;img&amp;quot;);&lt;br /&gt;
		img.style.border = &amp;quot;none&amp;quot;;&lt;br /&gt;
		img.src = globals.images.next;&lt;br /&gt;
		this.nextlink.appendChild(img);&lt;br /&gt;
		document.body.appendChild(this.nextlink);&lt;br /&gt;
	&lt;br /&gt;
		this.checkedNext = false;&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.makeLink = function makeLink(series, num)&lt;br /&gt;
	{&lt;br /&gt;
		if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 100)&lt;br /&gt;
			return &amp;quot;sbemailahundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 151)&lt;br /&gt;
			return &amp;quot;kotpoptoon.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 200)&lt;br /&gt;
			return &amp;quot;sbemailtwohundred.html&amp;quot;;&lt;br /&gt;
		else if (series == &amp;quot;sbemail&amp;quot; &amp;amp;&amp;amp; num == 201)&lt;br /&gt;
			return &amp;quot;hremail3184.html&amp;quot;;&lt;br /&gt;
		else&lt;br /&gt;
			return series + num + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	NextPrev.prototype.showPrevNext = function showPrevNext()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
			if (this.docheck &amp;amp;&amp;amp; !this.checkedNext &amp;amp;&amp;amp; this.nextlink)&lt;br /&gt;
				utils.downloadPage(this.nextlink.href + &amp;quot;?cachedodge=&amp;quot; + GM_getValue('cachedodge', 0), this.onCheckLoad.bind(this), this.onCheckError.bind(this), &amp;quot;HEAD&amp;quot;);&lt;br /&gt;
			else if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.prevlink)&lt;br /&gt;
				this.prevlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			if (this.nextlink)&lt;br /&gt;
				this.nextlink.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckLoad = function onCheckLoad(text, status, statustext, headers)&lt;br /&gt;
	{&lt;br /&gt;
		if (status == 200 &amp;amp;&amp;amp; headers.indexOf(&amp;quot;404error.html&amp;quot;) &amp;lt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			this.checkedNext = true;&lt;br /&gt;
			this.showPrevNext();&lt;br /&gt;
		}&lt;br /&gt;
		else if (this.nextlink)&lt;br /&gt;
		{&lt;br /&gt;
			this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
			this.nextlink = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	NextPrev.prototype.onCheckError = function onCheckError()&lt;br /&gt;
	{&lt;br /&gt;
		this.nextlink.parentNode.removeChild(this.nextlink);&lt;br /&gt;
		this.nextlink = undefined;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Navbar()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('navbar', false);&lt;br /&gt;
		this.rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.rando[i] = utils.getPref('rando' + i, true);&lt;br /&gt;
	}&lt;br /&gt;
	Navbar.prototype.SECTIONS = {&lt;br /&gt;
		t: &amp;quot;Big Toons&amp;quot;,&lt;br /&gt;
		sh: &amp;quot;Shorts&amp;quot;,&lt;br /&gt;
		ho: &amp;quot;Holday Toons&amp;quot;,&lt;br /&gt;
		p: &amp;quot;Puppet Stuff&amp;quot;,&lt;br /&gt;
		teh: &amp;quot;Powered by The Cheat&amp;quot;,&lt;br /&gt;
		sb: &amp;quot;Strong Bad Emails&amp;quot;,&lt;br /&gt;
		am: &amp;quot;Marzipan's Answering Machine&amp;quot;,&lt;br /&gt;
		tgs: &amp;quot;Teen Girl Squad&amp;quot;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.MAIN_COUNT = 26;&lt;br /&gt;
	Navbar.prototype.init = function init() {&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'#newnavbar\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'\ttext-transform: lowercase;\n' +&lt;br /&gt;
			'\theight: 10px;\n' +&lt;br /&gt;
			'\tfont: 10px/10px sans-serif;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar li\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tmargin: 0;\n' +&lt;br /&gt;
			'\tpadding: 0;\n' +&lt;br /&gt;
			'\tdisplay: inline;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #666;\n' +&lt;br /&gt;
			'\tfont-family: sans-serif;\n' +&lt;br /&gt;
			'\ttext-decoration: none;\n' +&lt;br /&gt;
			'\tpadding: 0 1em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tcolor: #999;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			&amp;quot;/* for overriding podstar's settings: */\n&amp;quot; +&lt;br /&gt;
			'#newnavbar :link, #newnavbar :visited\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'#newnavbar :link:hover, #newnavbar :visited:hover\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: transparent;\n' +&lt;br /&gt;
			'\tfont-weight: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('navbar', &amp;quot;Plain HTML navbar&amp;quot;, &amp;quot;Replaces the flash navbar with normal links, so you can open in tabs, etc&amp;quot;, this.enabled);&lt;br /&gt;
		this.setting_rando = {};&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
			this.setting_rando[i] = globals.modules.settingspane.addCheckbox('rando' + i, &amp;quot;Include &amp;quot; + this.SECTIONS[i] + &amp;quot; in rando&amp;quot;, 'Limit the &amp;quot;rando&amp;quot; function to what you like to watch', this.rando[i], this.setting_enabled);&lt;br /&gt;
		&lt;br /&gt;
		this.allrandourls = false;&lt;br /&gt;
		this.randourls = false;&lt;br /&gt;
	&lt;br /&gt;
		this.originalnavbar = globals.navbar;&lt;br /&gt;
		this.newnavbar = this.buildNavbar(this.originalnavbar);&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;navbar&amp;quot;, this.enabled);&lt;br /&gt;
		for (var i in this.SECTIONS)&lt;br /&gt;
		{&lt;br /&gt;
			this.rando[i] = this.setting_rando[i].checked;&lt;br /&gt;
			utils.setPref(&amp;quot;rando&amp;quot; + i, this.rando[i]);&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
		this.showNavbar();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.showNavbar = function showNavbar()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.enabled)&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.marginTop = (globals.modules.seekbar.enabled ? &amp;quot;0&amp;quot; : &amp;quot;10px&amp;quot;);&lt;br /&gt;
			globals.navbar = this.newnavbar;&lt;br /&gt;
			this.loadRandoXML();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			if (this.originalnavbar)&lt;br /&gt;
				this.originalnavbar.style.display = &amp;quot;&amp;quot;;&lt;br /&gt;
			this.newnavbar.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
			globals.navbar = this.originalnavbar;&lt;br /&gt;
		}&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.buildNavbar = function buildNavbar(where)&lt;br /&gt;
	{&lt;br /&gt;
		var newnavbar = document.createElement(&amp;quot;ul&amp;quot;);&lt;br /&gt;
		newnavbar.id = &amp;quot;newnavbar&amp;quot;;&lt;br /&gt;
		if (where)&lt;br /&gt;
		{&lt;br /&gt;
			while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
				where = where.parentNode;&lt;br /&gt;
			utils.insertAfter(newnavbar, where);&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			document.body.appendChild(newnavbar);&lt;br /&gt;
	&lt;br /&gt;
		this.mainlink = this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;, &amp;quot;Main&amp;quot;);&lt;br /&gt;
		// just for fun, re-randomise on each mouse-over (for the status bar)&lt;br /&gt;
		this.mainlink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newMainLink.bind(this), false);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/homester.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/store.html&amp;quot;, &amp;quot;Store&amp;quot;, &amp;quot;storelink&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://feeds.feedburner.com/HomestarRunner&amp;quot;, &amp;quot;Subscribe&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;https://www.youtube.com/user/homestarrunnerdotcom&amp;quot;, &amp;quot;YouTube&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
		//this.addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podcast&amp;quot;);&lt;br /&gt;
		this.addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
		this.randolink = this.addnavbarlink(newnavbar, &amp;quot;javascript:void(alert('rando.xml not loaded yet... be patient'))&amp;quot;, &amp;quot;Rando&amp;quot;);&lt;br /&gt;
		this.randolink.addEventListener(&amp;quot;mouseout&amp;quot;, this.newRandoLink.bind(this), false);&lt;br /&gt;
	&lt;br /&gt;
		return newnavbar;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.addnavbarlink = function addnavbarlink(ul, href, title, extraclass)&lt;br /&gt;
	{&lt;br /&gt;
		var li = document.createElement(&amp;quot;li&amp;quot;);&lt;br /&gt;
		var link = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
		link.href = href;&lt;br /&gt;
		link.appendChild(document.createTextNode(title));&lt;br /&gt;
		if (extraclass)&lt;br /&gt;
			link.className = extraclass;&lt;br /&gt;
		li.appendChild(link);&lt;br /&gt;
		ul.appendChild(li);&lt;br /&gt;
		return link;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.newMainLink = function newMainLink()&lt;br /&gt;
	{&lt;br /&gt;
		this.mainlink.href=&amp;quot;http://www.homestarrunner.com/main&amp;quot; + Math.floor(Math.random() * this.MAIN_COUNT + 1) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.newRandoLink = function newRandoLink()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.randourls)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		if (this.randourls.length &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.randourls[Math.floor(Math.random() * this.randourls.length)];&lt;br /&gt;
			this.randolink.href = r.u;&lt;br /&gt;
			this.randolink.title = r.n;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			this.randolink.href = &amp;quot;javascript:void(alert('Nothing to choose from'))&amp;quot;;&lt;br /&gt;
			this.randolink.title = &amp;quot;Nothing to choose from&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Navbar.prototype.loadRandoXML = function loadRandoXML()&lt;br /&gt;
	{&lt;br /&gt;
		// Only run this once&lt;br /&gt;
		if (this.haveLoadedXML)&lt;br /&gt;
			return;&lt;br /&gt;
		this.haveLoadedXML = true;&lt;br /&gt;
	&lt;br /&gt;
		utils.downloadPage(&lt;br /&gt;
			&amp;quot;http://www.homestarrunner.com/rando.xml?cachedodge=&amp;quot; + utils.getPref('cachedodge', 0),&lt;br /&gt;
			this.randoXMLLoaded.bind(this),&lt;br /&gt;
			this.randoXMLError.bind(this)&lt;br /&gt;
		);&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLLoaded = function randoXMLLoaded(responseText)&lt;br /&gt;
	{&lt;br /&gt;
		var parser = new DOMParser();&lt;br /&gt;
		// fix invalid XML...&lt;br /&gt;
		// add missing root element&lt;br /&gt;
		var doc = responseText.replace(/&amp;lt;\?xml.*?\?&amp;gt;/g, &amp;quot;&amp;quot;); // strip &amp;lt;?xml ?&amp;gt; tag&lt;br /&gt;
		doc = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;iso-8859-1\&amp;quot;?&amp;gt;\n&amp;lt;rando&amp;gt;&amp;quot; + doc + &amp;quot;&amp;lt;/rando&amp;gt;&amp;quot;;&lt;br /&gt;
		// fix bad ampersands&lt;br /&gt;
		doc = doc.replace(/&amp;amp;(?!\w*;)/g, &amp;quot;&amp;amp;amp;&amp;quot;);&lt;br /&gt;
		doc = parser.parseFromString(doc, &amp;quot;application/xml&amp;quot;);&lt;br /&gt;
		var sbemailcounter = 0;&lt;br /&gt;
		this.allrandourls = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; doc.documentElement.childNodes.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = doc.documentElement.childNodes[i];&lt;br /&gt;
			if (node.nodeType == 1)&lt;br /&gt;
			{&lt;br /&gt;
				var type = node.nodeName.toLowerCase();&lt;br /&gt;
				var u = node.getAttribute('u');&lt;br /&gt;
				var n = node.getAttribute('n');&lt;br /&gt;
				if (!n) n = &amp;quot;Untitled&amp;quot;;&lt;br /&gt;
				if (type == &amp;quot;sb&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					sbemailcounter++;&lt;br /&gt;
					n = &amp;quot;SBEmail: &amp;quot; + n;&lt;br /&gt;
				}&lt;br /&gt;
				if (u)&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/&amp;quot; + u, n: n, type: type});&lt;br /&gt;
				else&lt;br /&gt;
					this.allrandourls.push({u: &amp;quot;http://www.homestarrunner.com/sbemail&amp;quot; + sbemailcounter + &amp;quot;.html&amp;quot;, n: n, type: type});&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.filterRando();&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.randoXMLError = function randoXMLError()&lt;br /&gt;
	{&lt;br /&gt;
		this.randolink.href = &amp;quot;javascript:void(alert('Error loading rando.xml... try refreshing'))&amp;quot;;&lt;br /&gt;
	};&lt;br /&gt;
	Navbar.prototype.filterRando = function filterRando()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.allrandourls)&lt;br /&gt;
			return;&lt;br /&gt;
		this.randourls = [];&lt;br /&gt;
		for (var i in this.allrandourls)&lt;br /&gt;
		{&lt;br /&gt;
			var r = this.allrandourls[i];&lt;br /&gt;
			if (this.rando[r.type] === false) // === false so that it's considered &amp;quot;true&amp;quot; for undefined... if they add a new toon type&lt;br /&gt;
				continue;&lt;br /&gt;
			this.randourls.push(r);&lt;br /&gt;
		}&lt;br /&gt;
		this.newRandoLink();&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function Subtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('subtitles', false);&lt;br /&gt;
		this.captions = utils.getPref('captions', true);&lt;br /&gt;
		this.colours = utils.getPref('colours', true);&lt;br /&gt;
		this.testsubs = utils.getPref('testsubs', false);&lt;br /&gt;
		this.language = utils.getPref('language', &amp;quot;en&amp;quot;);&lt;br /&gt;
		this.testsubsdata = unescape(utils.getPref('testsubsdata', this.DEFAULTXML));&lt;br /&gt;
		this.names = utils.getPref('names', 0);&lt;br /&gt;
	}&lt;br /&gt;
	Subtitles.prototype.DEFAULTXML = escape('&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;\n&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot;&amp;gt;\n&amp;lt;line start=&amp;quot;&amp;quot; end=&amp;quot;&amp;quot; speaker=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/line&amp;gt;\n&amp;lt;/transcript&amp;gt;');&lt;br /&gt;
	Subtitles.prototype.NAMES_OPTS = [&amp;quot;Never&amp;quot;, &amp;quot;Voiceovers&amp;quot;, &amp;quot;Always&amp;quot;];&lt;br /&gt;
	Subtitles.prototype.NO_SUBTITLES = document.createComment(&amp;quot;&amp;quot;);&lt;br /&gt;
	Subtitles.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		utils.addGlobalStyle(&lt;br /&gt;
			'.subtitles\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: white;\n' +&lt;br /&gt;
			'\tfont: 20px/25px sans-serif;\n' +&lt;br /&gt;
			'\theight: 100px;\n' +&lt;br /&gt;
			'\ttext-align: center;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitle_errors\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tbackground: black;\n' +&lt;br /&gt;
			'\tcolor: red;\n' +&lt;br /&gt;
			'\tfont: 12pt sans-serif;\n' +&lt;br /&gt;
			'\ttext-align: left;\n' +&lt;br /&gt;
			'\tmargin: 0.5em;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'\n' +&lt;br /&gt;
			'.subtitles .italic\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: italic;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			'.subtitles .italic em, .subtitles .italic cite, .subtitles .italic i\n' +&lt;br /&gt;
			'{\n' +&lt;br /&gt;
			'\tfont-style: normal;\n' +&lt;br /&gt;
			'}\n' +&lt;br /&gt;
			&amp;quot;&amp;quot;&lt;br /&gt;
		);&lt;br /&gt;
		&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('subtitles', &amp;quot;Show subtitles&amp;quot;, &amp;quot;Shows subtitles or captions below the toon, if any are available&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		var settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		var settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Subtitle Language: '));&lt;br /&gt;
		settinglabel.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_language = document.createElement('select');&lt;br /&gt;
		this.setting_language.title = 'Display subtitles in this language, if any';&lt;br /&gt;
		this.setting_language.id = &amp;quot;setting_language&amp;quot;;&lt;br /&gt;
		this.setting_language.disabled = true;&lt;br /&gt;
		settingrow.appendChild(this.setting_language);&lt;br /&gt;
	&lt;br /&gt;
		this.language_populated = false;&lt;br /&gt;
		this.populateLanguage();&lt;br /&gt;
	&lt;br /&gt;
		this.setting_captions = globals.modules.settingspane.addCheckbox('captions', &amp;quot;Show captions&amp;quot;, &amp;quot;Include sound effects in the subtitles&amp;quot;, this.captions, this.setting_enabled);&lt;br /&gt;
		this.setting_colours = globals.modules.settingspane.addCheckbox('colours', &amp;quot;Use colours&amp;quot;, &amp;quot;Distinguish characters by colour effects (turn off if colourblind)&amp;quot;, this.colours, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_enabled);&lt;br /&gt;
		settinglabel = document.createElement('label');&lt;br /&gt;
		settinglabel.htmlFor = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settinglabel.appendChild(document.createTextNode('Show speakers\' names: '));&lt;br /&gt;
		settinglabel.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		settingrow.appendChild(settinglabel);&lt;br /&gt;
		this.setting_names = document.createElement('select');&lt;br /&gt;
		this.setting_names.title = 'Show the speakers\' names before their lines';&lt;br /&gt;
		this.setting_names.id = &amp;quot;setting_names&amp;quot;;&lt;br /&gt;
		settingrow.appendChild(this.setting_names);&lt;br /&gt;
		for (var i = 0; i &amp;lt; this.NAMES_OPTS.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var option = document.createElement('option');&lt;br /&gt;
			option.value = i;&lt;br /&gt;
			option.appendChild(document.createTextNode(this.NAMES_OPTS[i]));&lt;br /&gt;
			if (this.names == i)&lt;br /&gt;
				option.selected = true;&lt;br /&gt;
			this.setting_names.appendChild(option);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_testsubs = globals.modules.settingspane.addCheckbox('testsubs', &amp;quot;Test subtitles script&amp;quot;, &amp;quot;Use this to test a subtitles script (copy/paste into a text box)&amp;quot;, this.testsubs, this.setting_enabled);&lt;br /&gt;
	&lt;br /&gt;
		settingrow = globals.modules.settingspane.addSettingRow(this.setting_testsubs);&lt;br /&gt;
		this.setting_testsubsdata = document.createElement('textarea');&lt;br /&gt;
		this.setting_testsubsdata.title = 'Paste your XML data here';&lt;br /&gt;
		this.setting_testsubsdata.id = &amp;quot;setting_testsubsdata&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.width = &amp;quot;100%&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.height = &amp;quot;10em&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.fontSize = &amp;quot;8px&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.style.textAlign = &amp;quot;left&amp;quot;;&lt;br /&gt;
		this.setting_testsubsdata.appendChild(document.createTextNode(this.testsubsdata));&lt;br /&gt;
		settingrow.appendChild(this.setting_testsubsdata);&lt;br /&gt;
	&lt;br /&gt;
		this.charsready = false;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		window.setInterval(this.update.bind(this), 50);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref('subtitles', this.enabled);&lt;br /&gt;
		if (this.language_populated)&lt;br /&gt;
		{&lt;br /&gt;
			this.language = this.setting_language.value;&lt;br /&gt;
			utils.setPref('language', this.language);&lt;br /&gt;
		}&lt;br /&gt;
		this.captions = this.setting_captions.checked;&lt;br /&gt;
		utils.setPref('captions', this.captions);&lt;br /&gt;
		this.colours = this.setting_colours.checked;&lt;br /&gt;
		utils.setPref('colours', this.colours);&lt;br /&gt;
		this.names = this.setting_names.value;&lt;br /&gt;
		utils.setPref('names', this.names);&lt;br /&gt;
		this.testsubs = this.setting_testsubs.checked;&lt;br /&gt;
		utils.setPref('testsubs', this.testsubs);&lt;br /&gt;
		this.testsubsdata = this.setting_testsubsdata.value;&lt;br /&gt;
		utils.setPref('testsubsdata', escape(this.testsubsdata));&lt;br /&gt;
	&lt;br /&gt;
		this.setupSubtitles();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.populateLanguage = function populateLanguage()&lt;br /&gt;
	{&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Loading...&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
		utils.downloadWikiXML(&amp;quot;Subtitles:Languages&amp;quot;, this.languageListDownloaded.bind(this), this.languageListError.bind(this));&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListDownloaded = function languageListDownloaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
	&lt;br /&gt;
		var languages = xml.getElementsByTagName('language');&lt;br /&gt;
		for (var i = 0; i &amp;lt; languages.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var node = languages[i];&lt;br /&gt;
			// sanity-check the node&lt;br /&gt;
			if (node.hasAttribute('xml:lang') &amp;amp;&amp;amp; node.firstChild &amp;amp;&amp;amp; (node.firstChild.nodeType == xml.TEXT_NODE || node.firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
			{&lt;br /&gt;
				var option = document.createElement('option');&lt;br /&gt;
				option.appendChild(document.createTextNode(node.firstChild.nodeValue));&lt;br /&gt;
				option.lang = option.value = node.getAttribute('xml:lang');&lt;br /&gt;
				if (option.lang == this.language)&lt;br /&gt;
					option.selected = true;&lt;br /&gt;
				option.dir = &amp;quot;ltr&amp;quot;;&lt;br /&gt;
				if (node.hasAttribute('dir'))&lt;br /&gt;
					option.dir = node.getAttribute('dir');&lt;br /&gt;
				this.setting_language.appendChild(option);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		this.setting_language.disabled = false;&lt;br /&gt;
		this.language_populated = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.languageListError = function languageListError()&lt;br /&gt;
	{&lt;br /&gt;
		while (this.setting_language.firstChild)&lt;br /&gt;
			this.setting_language.removeChild(this.setting_language.firstChild);&lt;br /&gt;
		var option = document.createElement('option');&lt;br /&gt;
		option.appendChild(document.createTextNode(&amp;quot;Error loading languages&amp;quot;));&lt;br /&gt;
		option.selected = true;&lt;br /&gt;
		this.setting_language.appendChild(option);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.removeSubtitles = function removeSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.subtitleholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.parentNode.removeChild(this.subtitleholder);&lt;br /&gt;
			this.subtitleholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
		if (this.errorsholder)&lt;br /&gt;
		{&lt;br /&gt;
			this.errorsholder.parentNode.removeChild(this.errorsholder);&lt;br /&gt;
			this.errorsholder = undefined;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createSubtitleHolder = function createSubtitleHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.subtitleholder = document.createElement('div');&lt;br /&gt;
		this.subtitleholder.className = &amp;quot;subtitles&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.subtitleholder, where);&lt;br /&gt;
		this.subtitleholder.appendChild(this.NO_SUBTITLES);&lt;br /&gt;
		this.currentsubtitles = this.NO_SUBTITLES;&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.createErrorsHolder = function createErrorsHolder()&lt;br /&gt;
	{&lt;br /&gt;
		this.errorsholder = document.createElement('div');&lt;br /&gt;
		this.errorsholder.className = &amp;quot;subtitle_errors&amp;quot;;&lt;br /&gt;
		var where = globals.flashmovie;&lt;br /&gt;
		if (globals.modules.seekbar &amp;amp;&amp;amp; globals.modules.seekbar.seekbar)&lt;br /&gt;
			where = globals.modules.seekbar.seekbar;&lt;br /&gt;
		while(where.parentNode.tagName.toLowerCase() == &amp;quot;object&amp;quot;)&lt;br /&gt;
			where = where.parentNode;&lt;br /&gt;
		utils.insertAfter(this.errorsholder, where);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.transcriptError = function transcriptError(message)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.errorsholder)&lt;br /&gt;
			this.createErrorsHolder();&lt;br /&gt;
		var div = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
		div.appendChild(document.createTextNode(message));&lt;br /&gt;
		this.errorsholder.appendChild(div);&lt;br /&gt;
	&lt;br /&gt;
		globals.modules.fullscreen.doResize();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setupSubtitles = function setupSubtitles()&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
	&lt;br /&gt;
		if (!this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
		&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:Characters', this.charactersLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.charactersLoaded = function charactersLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		var speakers = xml.getElementsByTagName(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
		this.characters = {&lt;br /&gt;
			sfx: {&lt;br /&gt;
				color: &amp;quot;#FFF&amp;quot;,&lt;br /&gt;
				sfx: true,&lt;br /&gt;
				name: {en: &amp;quot;&amp;quot;}&lt;br /&gt;
			}&lt;br /&gt;
		};&lt;br /&gt;
		for (var i = 0; i &amp;lt; speakers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var speakername = speakers[i].getAttribute(&amp;quot;id&amp;quot;);&lt;br /&gt;
			this.characters[speakername] = {color: speakers[i].getAttribute(&amp;quot;color&amp;quot;), sfx: speakers[i].hasAttribute(&amp;quot;sfx&amp;quot;), name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			var names = speakers[i].getElementsByTagName(&amp;quot;name&amp;quot;);&lt;br /&gt;
			for (var j = 0; j &amp;lt; names.length; j++)&lt;br /&gt;
			{&lt;br /&gt;
				var lang = names[j].getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
				if (names[j].firstChild &amp;amp;&amp;amp; (names[j].firstChild.nodeType == xml.TEXT_NODE || names[j].firstChild.nodeType == xml.CDATA_SECTION_NODE))&lt;br /&gt;
					this.characters[speakername].name[lang] = names[j].firstChild.nodeValue;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		this.charsready = true;&lt;br /&gt;
		this.reloadSubs();&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.downloadSubsError = function downloadSubsError(status, statusText)&lt;br /&gt;
	{&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		if (this.testsubs)&lt;br /&gt;
			this.transcriptError(statusText);&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.reloadSubs = function reloadSubs()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.charsready)&lt;br /&gt;
			return;&lt;br /&gt;
		this.subsready = false;&lt;br /&gt;
	&lt;br /&gt;
		this.removeSubtitles();&lt;br /&gt;
		this.createSubtitleHolder();&lt;br /&gt;
		this.setSubtitles(document.createTextNode(&amp;quot;Loading subtitles...&amp;quot;));&lt;br /&gt;
	&lt;br /&gt;
		if (!this.testsubs)&lt;br /&gt;
			utils.downloadWikiXML('Subtitles:' + globals.filename + '/' + this.language, this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this));&lt;br /&gt;
		else&lt;br /&gt;
			utils.wikiXMLDownloaded(this.transcriptLoaded.bind(this), this.downloadSubsError.bind(this), this.testsubsdata, 200, &amp;quot;OK&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.transcriptLoaded = function transcriptLoaded(xml)&lt;br /&gt;
	{&lt;br /&gt;
		// set some defaults&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;xml:lang&amp;quot;)) xml.documentElement.setAttribute(&amp;quot;xml:lang&amp;quot;, this.language);&lt;br /&gt;
		if (!xml.documentElement.getAttribute(&amp;quot;dir&amp;quot;))      xml.documentElement.setAttribute(&amp;quot;dir&amp;quot;,      &amp;quot;ltr&amp;quot;);&lt;br /&gt;
		// inherit languages to all subnodes&lt;br /&gt;
		this.inheritLanguages(xml.documentElement);&lt;br /&gt;
		// now parse the lines into divs and get start and end frames&lt;br /&gt;
		var lines = xml.getElementsByTagName(&amp;quot;line&amp;quot;);&lt;br /&gt;
		var previousEnd = NaN;&lt;br /&gt;
		this.transcript = [];&lt;br /&gt;
		for (var i = 0; i &amp;lt; lines.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var line = {};&lt;br /&gt;
			// ignore lines with missing start/end values&lt;br /&gt;
			// so you can add all the lines and not worry about timing them until later&lt;br /&gt;
			if (!lines[i].getAttribute(&amp;quot;start&amp;quot;) || !lines[i].getAttribute(&amp;quot;end&amp;quot;))&lt;br /&gt;
				continue;&lt;br /&gt;
			line.start = parseInt(lines[i].getAttribute(&amp;quot;start&amp;quot;), 10);&lt;br /&gt;
			line.end = parseInt(lines[i].getAttribute(&amp;quot;end&amp;quot;), 10);&lt;br /&gt;
			if (this.testsubs)&lt;br /&gt;
			{&lt;br /&gt;
				if (isNaN(line.start))&lt;br /&gt;
					this.transcriptError(&amp;quot;Start value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;start&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (isNaN(line.end))&lt;br /&gt;
					this.transcriptError(&amp;quot;End value \&amp;quot;&amp;quot; + lines[i].getAttribute(&amp;quot;end&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
				if (line.end &amp;lt; line.start)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; ends before it begins.&amp;quot;);&lt;br /&gt;
				if (line.start &amp;lt; previousEnd)&lt;br /&gt;
					this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.start + &amp;quot; starts before the previous frame ends.&amp;quot;);&lt;br /&gt;
				previousEnd = line.end;&lt;br /&gt;
			}&lt;br /&gt;
			line.text = this.importNodes(lines[i]);&lt;br /&gt;
			this.transcript.push(line);&lt;br /&gt;
		}&lt;br /&gt;
		this.subsready = true;&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.inheritLanguages = function inheritLanguages(node)&lt;br /&gt;
	{&lt;br /&gt;
		for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
		{&lt;br /&gt;
			if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
			{&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;xml:lang&amp;quot;)) i.setAttribute(&amp;quot;xml:lang&amp;quot;, node.getAttribute(&amp;quot;xml:lang&amp;quot;));&lt;br /&gt;
				if (!i.hasAttribute(&amp;quot;dir&amp;quot;))      i.setAttribute(&amp;quot;dir&amp;quot;,      node.getAttribute(&amp;quot;dir&amp;quot;));&lt;br /&gt;
				this.inheritLanguages(i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	Subtitles.prototype.importNodes = function importNodes(node)&lt;br /&gt;
	{&lt;br /&gt;
		var name = node.nodeName.toLowerCase();&lt;br /&gt;
		if (this.characters[name])&lt;br /&gt;
		{&lt;br /&gt;
			node.setAttribute(&amp;quot;speaker&amp;quot;, name);&lt;br /&gt;
			name = &amp;quot;speaker&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		if (name == &amp;quot;line&amp;quot; || name == &amp;quot;speaker&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
			// format the speaker appropriately as a div&lt;br /&gt;
			var speaker = node.getAttribute(&amp;quot;speaker&amp;quot;);&lt;br /&gt;
			if (!this.captions &amp;amp;&amp;amp; (speaker == &amp;quot;sfx&amp;quot; || node.hasAttribute(&amp;quot;sfx&amp;quot;)))&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			newNode = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			var char = this.characters[speaker];&lt;br /&gt;
			if (!char)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs &amp;amp;&amp;amp; speaker)&lt;br /&gt;
				{&lt;br /&gt;
					var line = node;&lt;br /&gt;
					while (line &amp;amp;&amp;amp; line.nodeName != &amp;quot;line&amp;quot;)&lt;br /&gt;
						line = line.parentNode;&lt;br /&gt;
					if (line)&lt;br /&gt;
						this.transcriptError(&amp;quot;Line beginning frame &amp;quot; + line.getAttribute(&amp;quot;start&amp;quot;) + &amp;quot; has an unrecognised speaker name \&amp;quot;&amp;quot; + speaker + '&amp;quot;');&lt;br /&gt;
				}&lt;br /&gt;
				char = {color: &amp;quot;#FFF&amp;quot;, name: {en: &amp;quot;&amp;quot;}};&lt;br /&gt;
			}&lt;br /&gt;
			if (this.colours)&lt;br /&gt;
				newNode.style.color = char.color;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;voiceover&amp;quot;))&lt;br /&gt;
				newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
			if (node.hasAttribute(&amp;quot;volume&amp;quot;))&lt;br /&gt;
			{&lt;br /&gt;
				newNode.style.fontSize = (node.getAttribute(&amp;quot;volume&amp;quot;) * 100) + &amp;quot;%&amp;quot;;&lt;br /&gt;
				newNode.style.lineHeight = &amp;quot;1.25em&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			newNode.lang = node.getAttribute(&amp;quot;xml:lang&amp;quot;);&lt;br /&gt;
			newNode.dir = node.getAttribute(&amp;quot;dir&amp;quot;);&lt;br /&gt;
			var hasSpeakerChildren = false;&lt;br /&gt;
			for (var i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
				{&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
					var a = i.nodeName.toLowerCase();&lt;br /&gt;
					if (a == &amp;quot;line&amp;quot; || a == &amp;quot;speaker&amp;quot; || this.characters[a])&lt;br /&gt;
						hasSpeakerChildren = true;&lt;br /&gt;
				}&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			if (!hasSpeakerChildren)&lt;br /&gt;
			{&lt;br /&gt;
				// this is a normal text node - do some extra text stuff&lt;br /&gt;
				if (char.sfx || node.hasAttribute(&amp;quot;sfx&amp;quot;))&lt;br /&gt;
				{&lt;br /&gt;
					newNode.insertBefore(document.createTextNode('('), newNode.firstChild);&lt;br /&gt;
					newNode.appendChild(document.createTextNode(')'));&lt;br /&gt;
					newNode.className = &amp;quot;italic&amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if (this.names == 2 || (node.hasAttribute(&amp;quot;voiceover&amp;quot;) &amp;amp;&amp;amp; this.names == 1))&lt;br /&gt;
				{&lt;br /&gt;
					// find the language with the longest prefix match&lt;br /&gt;
					// fall back to &amp;quot;en&amp;quot; if none found&lt;br /&gt;
					var bestmatch = &amp;quot;en&amp;quot;;&lt;br /&gt;
					var langbits = node.getAttribute(&amp;quot;xml:lang&amp;quot;).split(&amp;quot;-&amp;quot;);&lt;br /&gt;
					for (i = langbits.length; i &amp;gt;= 1; i--)&lt;br /&gt;
					{&lt;br /&gt;
						var lang = langbits.slice(0, i).join(&amp;quot;-&amp;quot;);&lt;br /&gt;
						if (char.name[lang])&lt;br /&gt;
						{&lt;br /&gt;
							bestmatch = lang;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					if (char.name[bestmatch] != '')&lt;br /&gt;
						newNode.insertBefore(document.createTextNode(char.name[bestmatch] + &amp;quot;: &amp;quot;), newNode.firstChild);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			// check element blacklist&lt;br /&gt;
			if (name == &amp;quot;script&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;style&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;object&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;param&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;embed&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;a&amp;quot;      ||&lt;br /&gt;
			    name == &amp;quot;img&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;applet&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;map&amp;quot;    ||&lt;br /&gt;
			    name == &amp;quot;frame&amp;quot;  ||&lt;br /&gt;
			    name == &amp;quot;iframe&amp;quot; ||&lt;br /&gt;
			    name == &amp;quot;meta&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;link&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;form&amp;quot;   ||&lt;br /&gt;
			    name == &amp;quot;input&amp;quot;)&lt;br /&gt;
			{&lt;br /&gt;
				if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted element \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
				return document.createComment(&amp;quot;&amp;quot;); // return nothing&lt;br /&gt;
			}&lt;br /&gt;
			var newNode = document.createElement(name);&lt;br /&gt;
			// copy across attributes&lt;br /&gt;
			for (i = 0; i &amp;lt; node.attributes.length; i++)&lt;br /&gt;
			{&lt;br /&gt;
				name = node.attributes[i].nodeName.toLowerCase();&lt;br /&gt;
				// check attribute blacklist&lt;br /&gt;
				// javascript, and anything that might load stuff from offsite&lt;br /&gt;
				if (name != &amp;quot;href&amp;quot; &amp;amp;&amp;amp; name != &amp;quot;src&amp;quot; &amp;amp;&amp;amp; name.substring(0, 2) != &amp;quot;on&amp;quot;)&lt;br /&gt;
				{&lt;br /&gt;
					if (name == &amp;quot;style&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						// regex taken from MediaWiki Sanitizer.php&lt;br /&gt;
						if (!node.attributes[i].value.match(/(expression|tps*:\/\/|url\\s*\()/i))&lt;br /&gt;
							newNode.setAttribute(&amp;quot;style&amp;quot;, node.attributes[i].value);&lt;br /&gt;
					}&lt;br /&gt;
					else if (name == &amp;quot;xml:lang&amp;quot;)&lt;br /&gt;
					{&lt;br /&gt;
						newNode.lang = node.attributes[i].value;&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						newNode.setAttribute(node.attributes[i].nodeName, node.attributes[i].value);&lt;br /&gt;
				}&lt;br /&gt;
				else if (this.testsubs)&lt;br /&gt;
					this.transcriptError(&amp;quot;Blacklisted attribute \&amp;quot;&amp;quot; + name + &amp;quot;\&amp;quot; stripped.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			// copy across children&lt;br /&gt;
			for (i = node.firstChild; i; i = i.nextSibling)&lt;br /&gt;
			{&lt;br /&gt;
				if (i.nodeType == i.ELEMENT_NODE)&lt;br /&gt;
					newNode.appendChild(this.importNodes(i));&lt;br /&gt;
				else if (i.nodeType == i.TEXT_NODE || i.nodeType == i.CDATA_SECTION_NODE)&lt;br /&gt;
					newNode.appendChild(document.importNode(i, true));&lt;br /&gt;
			}&lt;br /&gt;
			return newNode;&lt;br /&gt;
		}&lt;br /&gt;
		return document.createComment(&amp;quot;&amp;quot;); // fallthrough&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.update = function update()&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.enabled || !this.charsready || !this.subsready || !this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
	&lt;br /&gt;
		utils.currentFrame((frame) =&amp;gt; {&lt;br /&gt;
			if (frame &amp;lt; 0)&lt;br /&gt;
				return;&lt;br /&gt;
			frame++; // Make 1-based&lt;br /&gt;
			// binary search to find the right transcript line&lt;br /&gt;
			var first = 0;&lt;br /&gt;
			var last = this.transcript.length;&lt;br /&gt;
			while(first &amp;lt; (last - 1))&lt;br /&gt;
			{&lt;br /&gt;
				var mid = (first + last) &amp;gt;&amp;gt; 1;&lt;br /&gt;
				if (frame &amp;gt;= this.transcript[mid].start)&lt;br /&gt;
				{&lt;br /&gt;
					first = mid;&lt;br /&gt;
					if (frame &amp;lt;= this.transcript[mid].end)&lt;br /&gt;
						break;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					last = mid;&lt;br /&gt;
			}&lt;br /&gt;
			// should we actually show the line?&lt;br /&gt;
			if(this.transcript[first] &amp;amp;&amp;amp; this.transcript[first].start &amp;lt;= frame &amp;amp;&amp;amp; this.transcript[first].end &amp;gt;= frame)&lt;br /&gt;
				this.setSubtitles(this.transcript[first].text);&lt;br /&gt;
			else&lt;br /&gt;
				this.setSubtitles(false);&lt;br /&gt;
		});&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Subtitles.prototype.setSubtitles = function setSubtitles(node)&lt;br /&gt;
	{&lt;br /&gt;
		if (!this.subtitleholder)&lt;br /&gt;
			return;&lt;br /&gt;
		if (!node)&lt;br /&gt;
			node = this.NO_SUBTITLES;&lt;br /&gt;
		if (this.currentsubtitles != node)&lt;br /&gt;
		{&lt;br /&gt;
			this.subtitleholder.replaceChild(node, this.subtitleholder.firstChild);&lt;br /&gt;
			this.currentsubtitles = node;&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Returned by Special:Getversion&lt;br /&gt;
	// &amp;lt;versionstring&amp;gt;4.1.72=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js&amp;lt;/versionstring&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	function Updates()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = utils.getPref('updates', true);&lt;br /&gt;
	}&lt;br /&gt;
	Updates.CURRENT_VERSION = [4, 1, 72];&lt;br /&gt;
	Updates.prototype.init = function init()&lt;br /&gt;
	{&lt;br /&gt;
		// We don't need to do this update checking on Chrome - the Chrome Web Store&lt;br /&gt;
		// will handle that for us&lt;br /&gt;
		if (!utils.useGMFunctions)&lt;br /&gt;
		{&lt;br /&gt;
			delete globals.modules.updates;&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		this.setting_enabled = globals.modules.settingspane.addCheckbox('updates', &amp;quot;Check for updates&amp;quot;, &amp;quot;Regularly check for updates to the All-in-one script&amp;quot;, this.enabled);&lt;br /&gt;
	&lt;br /&gt;
		this.havechecked = false;&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.updateSettings = function updateSettings()&lt;br /&gt;
	{&lt;br /&gt;
		this.enabled = this.setting_enabled.checked;&lt;br /&gt;
		utils.setPref(&amp;quot;updates&amp;quot;, this.enabled);&lt;br /&gt;
		this.doCheck();&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	Updates.prototype.doCheck = function doCheck()&lt;br /&gt;
	{&lt;br /&gt;
		if (this.havechecked || !this.enabled)&lt;br /&gt;
			return;&lt;br /&gt;
		this.havechecked = true;&lt;br /&gt;
	&lt;br /&gt;
		if (Date.now() - utils.getPref(&amp;quot;lastchecktime&amp;quot;, 0) &amp;gt; 86400000)&lt;br /&gt;
		{&lt;br /&gt;
			utils.downloadPage(&amp;quot;http://www.hrwiki.org/wiki/Special:Getversion/User:Phlip/Greasemonkey?cachedodge=&amp;quot; + Math.random(), this.onLoad.bind(this));&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			this.handleUpdateString(utils.getPref(&amp;quot;lastcheckstring&amp;quot;, &amp;quot;&amp;quot;));&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.onLoad = function onLoad(textcontent)&lt;br /&gt;
	{&lt;br /&gt;
		utils.setPref(&amp;quot;lastchecktime&amp;quot;, Date.now());&lt;br /&gt;
		utils.setPref(&amp;quot;lastcheckstring&amp;quot;, textcontent);&lt;br /&gt;
		this.handleUpdateString(textcontent);&lt;br /&gt;
	};&lt;br /&gt;
	Updates.prototype.handleUpdateString = function handleUpdateString(str)&lt;br /&gt;
	{&lt;br /&gt;
		var parts = str.split(&amp;quot;@@&amp;quot;);&lt;br /&gt;
		for (var i = 0; i &amp;lt; parts.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			var matches = parts[i].match(/^(\d+)\.(\d+)\.(\d+)=(.*)$/);&lt;br /&gt;
			if (!matches) continue;&lt;br /&gt;
			if (matches[1] &amp;gt; Updates.CURRENT_VERSION[0] ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] &amp;gt; Updates.CURRENT_VERSION[1]) ||&lt;br /&gt;
			    (matches[1] == Updates.CURRENT_VERSION[0] &amp;amp;&amp;amp; matches[2] == Updates.CURRENT_VERSION[1] &amp;amp;&amp;amp; matches[3] &amp;gt; Updates.CURRENT_VERSION[2]))&lt;br /&gt;
			{&lt;br /&gt;
				var updatelink = document.createElement('a');&lt;br /&gt;
				updatelink.href=matches[4];&lt;br /&gt;
				updatelink.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelink.style.position = 'fixed';&lt;br /&gt;
				updatelink.style.left = '0px';&lt;br /&gt;
				updatelink.style.top = '0px';&lt;br /&gt;
				updatelink.style.border = 'none';&lt;br /&gt;
				updatelink.style.zIndex = 1;&lt;br /&gt;
				var updatelinkimage = document.createElement('img');&lt;br /&gt;
				updatelinkimage.src = globals.images.update;&lt;br /&gt;
				var oldversionstr = Updates.CURRENT_VERSION[0] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[1] + &amp;quot;.&amp;quot; + Updates.CURRENT_VERSION[2];&lt;br /&gt;
				var newversionstr = matches[1] + &amp;quot;.&amp;quot; + matches[2] + &amp;quot;.&amp;quot; + matches[3];&lt;br /&gt;
				updatelinkimage.title = &amp;quot;Click here to update from script version &amp;quot; + oldversionstr + &amp;quot; to &amp;quot; + newversionstr;&lt;br /&gt;
				updatelinkimage.style.display = &amp;quot;block&amp;quot;;&lt;br /&gt;
				updatelinkimage.style.border = 'none';&lt;br /&gt;
				updatelink.appendChild(updatelinkimage);&lt;br /&gt;
				document.body.appendChild(updatelink);&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	// Podstar/Videlectrix (stock IIS), HRWiki and stock Apache error pages, respectively. Don't do anything on those pages.&lt;br /&gt;
	if (document.title == &amp;quot;The page cannot be found&amp;quot; || document.title == &amp;quot;Homestar Runner Wiki - 404 Not Found&amp;quot; || document.title == &amp;quot;404 Not Found&amp;quot;)&lt;br /&gt;
		return;&lt;br /&gt;
	&lt;br /&gt;
	var utils = new Utils();&lt;br /&gt;
	var globals = new Globals();&lt;br /&gt;
	var playercomm = new PlayerComm();&lt;br /&gt;
	playercomm.init();&lt;br /&gt;
	globals.initModules();&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/HRWiki_talk:Subtitles</id>
		<title>HRWiki talk:Subtitles</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/HRWiki_talk:Subtitles"/>
				<updated>2017-10-01T12:42:46Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Subtitles have lost their gumption */ reply&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-family: georgia; border: 1px dashed #06f; background: #eef; padding: 0.5em; margin: 0.5em 0.5em 1em; text-align: center; font-size: 20px; line-height: 30px&amp;quot;&amp;gt;[[#Language requests|Request a subtitles language.]]&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Subtitles Talk Archive}}&lt;br /&gt;
&lt;br /&gt;
== Language requests ==&lt;br /&gt;
=== Dutch (NL) ===&lt;br /&gt;
&lt;br /&gt;
Would you please add NL to [[Subtitles:Languages]]? --[[User:Pdedecker|Pdedecker]] 11:18, 4 February 2007 (UTC)&lt;br /&gt;
:I just saw that NL has been added, thanks! --[[User:Pdedecker|Pdedecker]] 18:46, 6 February 2007 (UTC)&lt;br /&gt;
::Oh yes, I forgot to post in this thread. You're welcome! Cheers! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:21, 8 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Finnish (FI) ===&lt;br /&gt;
&lt;br /&gt;
I would be quite eager to start out with Finnish subtitling cartoons, as I have absolutely nothing to do after I get home from college (weird, huh?). So if someone would add Finnish there, it'd be much obliged. --[[User:Sysrq868|Sysrq868]] 16:58, 28 August 2007 (UTC)&lt;br /&gt;
:You should be all set. Go crazy go nuts! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:35, 29 August 2007 (UTC)&lt;br /&gt;
=== Polish (PL) ===&lt;br /&gt;
&lt;br /&gt;
What I said. [[User:JudgeDeadd|JudgeDeadd]] 04:34, 29 August 2007 (UTC)&lt;br /&gt;
:You should be good to go. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 20:06, 29 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Turkish (TR) ===&lt;br /&gt;
&lt;br /&gt;
Could you add Turkish language to the subtitles, please? Peace at Home, Peace in the World [[User:85.107.249.107|85.107.249.107]] 11:05, 15 October 2007 (UTC)&lt;br /&gt;
:I would be happy to, but tell me a little bit about yourself first. Do you intend to write the subtitles pages yourself, or do you just wish that Turkish was already available? If you mean that you're going to help write them, then why not [[Special:Userlogin|sign up for an account]]? It's free and has many benefits. On the other hand, if you just want to be able to read the site in Turkish, then we'll need to find a translator first. Please let me know. Talk atcha later! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:21, 20 October 2007 (UTC)&lt;br /&gt;
::Hello, do you remember me? Or an IP starts with 85? Don't remember? Then, look at subtitles requests and choose Turkish(TR) from the navigation menu? Yeah, I did what you say, and it passed some time, but I was looking continually the page whether a reply comes before you reply. And, that's your answer: I'm Turkish, and so, I can read and write Turkish subtitles. I know English, of course, but not all Turks. (Or some of them are know at least). Anyway, I want Turkish subtitles add to the list, and my goal is that HR cartoons have loved by Turkish kids, adults, and everyone. Is this wrong? Say if it is. Anymore, I already tested a SB Email cartoon. Look if you want. [http://subtitles.hrwiki.org/sbemail167/tr Here comes.] OK, I think it (my reply) is long enough. I talked you and if you want, you talk atcha later, too. Thanx. [[User:Homesturk|Homesturk]] 16:57, 27 November 2007 (UTC)&lt;br /&gt;
:::Of course I remember you. Glad to see you created an account! I will enable the Turkish subtitles just as soon as I get a chance. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:11, 27 November 2007 (UTC)&lt;br /&gt;
::Turkish is now enabled. Start tranglin'! &amp;amp;mdash; [[User:It's dot com|It's dot com]] 07:51, 29 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Italian (IT) ===&lt;br /&gt;
&lt;br /&gt;
Italian is one of the most well-known languages in the world. I think it deserves subtitles. [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:See below. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Japanese (JP) ===&lt;br /&gt;
&lt;br /&gt;
This language is infamous for its bad translations into English - I think it deserves subtitles as well. I am also a fluent Japanese speaker. [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:See below. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
::I am currently studying the Japanese language, and once I am fluent in it I would be happy to translate and transcribe japanese subtitles -- [[User:McArbys|The McArby!]] 21:45, 25 November 2009 (UTC)&lt;br /&gt;
:::There is a difference though, are you planning to write Japanese as characters, or as the English pronunciation as many anime shows do? {{User:ColdReactive/sig}} 01:54, 26 November 2009 (UTC)&lt;br /&gt;
:::: Well, if I can find some sort of keyboard for Japanese characters I can switch my system language to the Kanji, but If (and probably) not, I would go for the Romanized, they would be the japanese words for sure. [[User:McArbys|The McArby!]] 02:21, 26 November 2009 (UTC)&lt;br /&gt;
:::::Romanized Japanese is not how Japanese is written in everyday contexts, so Romanized Japanese is not going to do here. It needs to be in kanji and kana or it isn't worth doing. Just a reminder also that we need a high degree of fluency here before you're ready to do this (I consider myself fluent in German, yet I don't write subtitles very much just because it's really hard to reflect H*R's colloquialism in German), so it'll probably take a lot of study before you're ready to do this. Don't want to discourage you, though; in fact, I hope you'll study hard and learn Japanese really well soon. {{User:Heimstern Läufer/sig}} 02:26, 26 November 2009 (UTC)&lt;br /&gt;
::::::Not discouraged at all, this is just going to get me to work even harder, Learn the Kanji, which will be really hard, and Once I am really good at it, I will volunteer to do Japanese, talk to me again about this in a couple of years. I'm taking as much as I can to figure it out, some iPhone Apps, Rosetta Stone (dosent work to well) Hoping to get a textbook. -- [[User:McArbys|The McArby!]] 02:44, 26 November 2009 (UTC)&lt;br /&gt;
:::::::That's not what I meant at all. I meant something like this: &amp;quot;nani?!&amp;quot; or like that, not the characters. I think it would be better to do it this way than to fudge up the characters. {{User:ColdReactive/sig}} 19:59, 26 November 2009 (UTC)&lt;br /&gt;
::::::::Personal Pronouns:&lt;br /&gt;
Homestar - Boku&lt;br /&gt;
Strong Bad - Ore or Ore-sama&lt;br /&gt;
Strong Mad - Oira&lt;br /&gt;
Strong Sad - Watakushi&lt;br /&gt;
Coach Z - Washi (A good way to preserve the mispronunciations.)&lt;br /&gt;
Bubs - Oira&lt;br /&gt;
The Cheat - (uses own language.)&lt;br /&gt;
The Poopsmith - (The Poopsmith has token a vow of silence)&lt;br /&gt;
King of Town - Washi&lt;br /&gt;
Homsar - Boku&lt;br /&gt;
Stinkoman - Ore&lt;br /&gt;
&lt;br /&gt;
=== Chinese (ZH) ===&lt;br /&gt;
&lt;br /&gt;
Another popular language! [[User:124.176.190.64|124.176.190.64]] 08:19, 27 November 2007 (UTC)&lt;br /&gt;
:We don't enable languages just because they're there. We have to have someone demonstrate that they're committed to working on translation. Why don't you [[Special:Userlogin|create an account]] and let us know what kind of input you can give and then we'll talk again. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:49, 27 November 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Norwegian (Bokmål), code: NO-NB ===&lt;br /&gt;
&lt;br /&gt;
I am Norwegian, and a huge fan of both H*R and H*R Wiki (for real, they are both on my [[Wikipedia:Russ|Russ]] card!)! I was hoping you could add Norwegian Bokmål (there are two official written languages in Norway). But you must know that my intention is to only translate, like, three to five of my favourite toons, just for fun. I honestly believe that as good as all Norwegian H*R fans know English well enough to make extensive site translation unnecessary (primarily because I would guess they are all in their late teens or older). But if you would rather prefer more serious contributions, I respect that. --[[User:WP CEO|WP CEO]] 08:23, 19 January 2008 (UTC)&lt;br /&gt;
:Hmm, if you know going in that you're only going to do three to five toons, then it's not really worth all the things we have to do behind the scenes to set it up. If someday you think you could add a more substantial number of subtitles (or if someone else would be willing to help out), then let me know and I'll be happy to enable them. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:35, 19 January 2008 (UTC)&lt;br /&gt;
::Oh, I was not aware it was a big job for you, sorry! I will keep this in mind, and mention it to the H*R fans I know. Perhaps I will change my mind about it, we will see. Thanks a lot! --[[User:WP CEO|WP CEO]] 03:13, 20 January 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Russian (Русский) (Ru) ===&lt;br /&gt;
&lt;br /&gt;
Although I am not anywhere near Russian ethnicly or have fluent knowlage of the language, I still think Russian should be added to the subtitles thing, for a hopefully better international success. {{unsigned|67.172.24.191|01:57, 9 July 2008 (UTC)}}&lt;br /&gt;
:Well, it would be nice to have Russian, but I'm not going to add it unless a native or near-native speaker commits to doing a substantial number of transcripts in the language. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:24, 17 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Arabic (ar) ===&lt;br /&gt;
&lt;br /&gt;
Hi! I'll request language again! My Arabic knowledge is basic, but I am upgrading it! What will you say about?&amp;lt;br /&amp;gt;&lt;br /&gt;
Talk atcha later! {{User:Homesturk/sig}} 12:25, 29 September 2008 (UTC)&lt;br /&gt;
:We tend not to add languages unless there's someone fluent in the language willing to spend the time to make the subtitles... we [[HRWiki:Subtitles#Translating Subtitles|ask that]] people still learning a language don't write the translations &amp;amp;ndash; they tend sound odd (often using the wrong words, since the translator hasn't learned the right ones), or the jokes fall flat (if the translator doesn't have enough real-world experience with the language to know, say, what idioms and expressions are often used by the speakers of that language, that would be a good replacement for the ones used in the toons). But don't let that discourage you... keep plugging away at learning the language, and when you're fluent, come back and we'll be happy to set it all up for you :D {{User:Phlip/sig}} 13:39, 29 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Serbian (SR) ===&lt;br /&gt;
&lt;br /&gt;
Please add this. [[User:RocketMasterZ|RocketMasterZ]] 21:16, 19 April 2009 (UTC)&lt;br /&gt;
:Unless someone makes a really strong case for why we should add another language, I think we've enabled all that we're going to for now. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:54, 7 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Esperanto (eo) ===&lt;br /&gt;
&lt;br /&gt;
I don't know how much business I have requesting Esperanto when I'm still a beginner, but it's (relatively) quickly learned. If this request hasn't sparked someone's initiative by the time I know the language better, I'll be more able to help with it myself at that point. --atimholt 02:21, 7 April 2010 (UTC)&lt;br /&gt;
:Ha ha, no. No made-up languages, please. We also have a rule that someone must be fluent in a language before we add it (see also the above thread). &amp;amp;mdash; [[User:It's dot com|It's dot com]] 02:54, 7 April 2010 (UTC)&lt;br /&gt;
::I agree with you that we shouldn't add Esperanto since we don't have a native speaker in our hands, but made-up language or not, according to Wikipedia: &amp;quot;Esperanto has between 100,000 and 2 million speakers in about 115 countries, and approximately one thousand native speakers&amp;quot;. {{User:Elcool/sig}} 05:42, 7 April 2010 (UTC)&lt;br /&gt;
:::How many of those do you suppose are Homestar Runner fans who will help with the translating? How many of them would be fans if only we offered Esperanto subtitles? I strongly suspect both numbers are close enough to zero not to be able to justify the overhead of adding another language. We don't add languages just because we ''can''. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 07:21, 7 April 2010 (UTC)&lt;br /&gt;
::::Well... I'm not sayin' we should... :P. {{User:Elcool/sig}} 10:03, 7 April 2010 (UTC)&lt;br /&gt;
::::I could translate some toons into esperanto. I know esperanto pretty well. Unless you really think it's a complete waste of time. [[User:Barton|Barton]]&amp;lt;sup&amp;gt;[[User talk:Barton|talk]]&amp;lt;/sup&amp;gt; 17:08, 25 September 2010 (UTC)&lt;br /&gt;
:::::Well, not to put too fine a point on it, but I think it's a complete waste of time. We don't have an Esperanto audience, so it would be translation for its own sake. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:51, 25 September 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Icelandic (IS) ===&lt;br /&gt;
&lt;br /&gt;
I'd really like to see some of the cartoons translated into Icelandic. I don't know all that much, as I'm still learning. I just think it's an interesting language and that it would be nice to see some Icelandic Homestar. --[[User:PikaSka|PikaSka]] 03:00, 30 May 2016 (UTC)&lt;br /&gt;
:We tend not to add languages unless there's someone fluent in the language willing to spend the time to make the subtitles, and even then we're unlikely to add this specific language because there really isn't a wide audience for it. Currently I think we've enabled all that we're going to for the foreseeable future. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:34, 30 May 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Where are all the Preeeeeow!s? ==&lt;br /&gt;
&lt;br /&gt;
Hey, I was looking at a few pages, and it seems not every email with [The Paper] has a &amp;lt;sfx&amp;gt;Preeeeow!&amp;lt;/sfx&amp;gt; near the end.  In light of this, I propose a Preeeeow project to add the appropriate &amp;lt;sfx&amp;gt; to the SBemail subtitles.  If I end up being the only one doing this, that's ok, but are there any objections/why the subtitles shouldn't include this?  Thanks for feedback, [[User:Dutchscout|Dutchscout]] 21:06, 11 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Quoting ==&lt;br /&gt;
&lt;br /&gt;
I'm thinking we should expand on the current sbemail quoting standard. Earlier subtitles have them in a usual quote, e.g.:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Dear Strong Bad,&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Do you take you mask and boxing gloves off before you go to bed?&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Sincerely, Abdi LaRue San Diego, California&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
However, the ones [[User:Rexy|Rexy]] has been doing recently in a paragraph-spanning form, e.g.:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Dear Strong Bad,&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Do you take you mask and boxing gloves off before you go to bed?&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;Sincerely, Abdi LaRue San Diego, California&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
I find the way Rexy does it more suitable than the way we've been doing it previously. Should we add this to the standards? --[[Special:Contributions/75.5.176.233|75.5.176.233]] 22:11, 12 December 2008 (UTC)&lt;br /&gt;
:It really ends up differing depending on who made the subtitles; for instance, when I write subtitles, I tend to do the latter (though I haven't written any in a while). Would be nice if we had some standards, but while the second way is technically more correct, it's not the most well-known grammatical rule. --{{User:Jay/sig}} 23:21, 12 December 2008 (UTC)&lt;br /&gt;
:Indeed, I just noticed that some of the earlier subtitles that I wrote were ''&amp;quot;corrected&amp;quot;'' to the former (end quotes after every line) some time after I had written them. Thanks, Shwoo! 9_9 (Well, okay, like I said, it's not the most well-known grammatical rule.) --{{User:Jay/sig}} 23:24, 12 December 2008 (UTC)&lt;br /&gt;
::What (with the &amp;quot;Shwoo! 9_9&amp;quot;)? --[[Special:Contributions/75.5.176.233|75.5.176.233]] 23:37, 12 December 2008 (UTC)&lt;br /&gt;
:::Shwoo was the user who &amp;quot;corrected&amp;quot; my already-correct quotation mark usage. --{{User:Jay/sig}} 00:00, 13 December 2008 (UTC)&lt;br /&gt;
::::Those are rolling eyes. Shwoo changed something that Jay had specifically intended to be another way, although she was doing what she saw fit since we haven't discussed this before. Jay wasn't ''really'' thanking her. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:03, 13 December 2008 (UTC)&lt;br /&gt;
:::::I totally missed the &amp;quot;Thanks,&amp;quot;. Oops. --[[Special:Contributions/75.5.176.233|75.5.176.233]] 00:05, 13 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Translating into italian ==&lt;br /&gt;
&lt;br /&gt;
Hi, I'm an italian H*R fan and I'm willing to translate the subtitles into italian, what do you think?&lt;br /&gt;
&lt;br /&gt;
== Subtitles Not Working? ==&lt;br /&gt;
&lt;br /&gt;
In Greasemonkey, none of the subtitles are displaying for me anymore. Does anyone else have this problem? I checked my preferences, cleared both the caches, and re-installed it. {{User:MichaelXX2/sig}} 21:07, 12 May 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Works for me.  Is it a specific toon, or did you try several different ones?  Just for kicks, what versions of things do you has?  I've got FF 3.0.10 and Greasemonkey 0.8.20090123.1  {{User:GreenHelmet/sig}} 21:38, 12 May 2009 (UTC)&lt;br /&gt;
:PS: Oh, do you have an adblocker installed?  If so, try disabling it for both homestarrunner and hrwiki (or just disable it entirely temporarily). {{User:GreenHelmet/sig}} 21:51, 12 May 2009 (UTC)&lt;br /&gt;
::It works fine at my house, it's at my dad's office that it doesn't work. I don't have adblock on that computer and all of my software is up-to-date. {{User:MichaelXX2/sig}} 01:59, 13 May 2009 (UTC)&lt;br /&gt;
:::And you're sure Phlip's script is installed as well as greasemonkey? {{User:DeFender1031/sig}} 02:19, 13 May 2009 (UTC)&lt;br /&gt;
::::Well, I can't check now, as I'm not home. Maybe I uninstalled it somewhere along the line by accident. {{User:MichaelXX2/sig}} 02:23, 13 May 2009 (UTC)&lt;br /&gt;
I'm having this problem too.  I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]].  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Philip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;? --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:09, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:28, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitle List ==&lt;br /&gt;
[[Special:Subtitleslist]] ''really'' needs updated. And it's a good list too. {{User:Theycallmefree/sig}} 12:36, 11 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== French doing awesome! ==&lt;br /&gt;
&lt;br /&gt;
Just wanted to mention what a truly remarkable job all the French subtitleers &amp;lt;!--Like &amp;quot;musketeers&amp;quot;? get it? It's lame, I know...--&amp;gt;are doing. There a total of 482 subtitles in English, and 230 in French. That's so close to half, I can smell the baguette! And new one's a being made every day! [http://www.hrwiki.org/w/index.php?title=Special:RecentChanges&amp;amp;to=20100113043529&amp;amp;namespace=102] So all you people working hard translating unintelligible speech into an unintelligible language - Pour yourself a glass of the finest wine cooler and nom on that rotten cheese. You deserve it! {{User:Elcool/sig}} 04:39, 13 January 2010 (UTC)&lt;br /&gt;
:I second that!{{User:Loafing/sig}} 06:02, 13 January 2010 (UTC)&lt;br /&gt;
::Hey, thanks for the support! I have recently taken upon myself to do one toon's French subtitles per day. If I keep this up, and assuming I do it alone (which isn't always the case, thankfully), hmm...482 - 230 = 252 days. Ooh, maths. That makes 8 months and 8 days. Hooray? Ah, whatever, goold ol' Homestar is worth it.&lt;br /&gt;
::Anyway, I haven't done my subtitles for the day, so here goes. I might have some rotten cheese in the fridge to celebrate. Oh, and thanks again! --[[User:Meuhcoin|Meuhcoin]] 21:32, 14 January 2010 (UTC)&lt;br /&gt;
:::Nice job. I hope you reach your goals faster then you predicted :). {{User:Elcool/sig}} 22:29, 14 January 2010 (UTC)&lt;br /&gt;
::::I'm learning French now because my fiancee is from Quebec. So in a few years, I'll be able to help you out - if you don't finish in 252 days ;-){{User:Loafing/sig}} 21:20, 15 January 2010 (UTC)&lt;br /&gt;
:::::And now we've hit the 300 mark! (THIS IS SPARTA!) {{User:RickTommy/sig}} 06:35, 8 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Removal ==&lt;br /&gt;
&lt;br /&gt;
Can we request for the removal of languages? [[User:RickTommy|RickTommy]] 01:59, 30 January 2010 (UTC)&lt;br /&gt;
:Why? What languages do you want to remove?--{{User:Record307/sig}} 02:17, 30 January 2010 (UTC)&lt;br /&gt;
::Well, so far, only four toons have been translated into Polish. And there are quite a few Portuguese scripts that have only had a small fraction translated. [[User:RickTommy|RickTommy]] 02:22, 30 January 2010 (UTC)&lt;br /&gt;
:::So? This is here for convenience. There maybe users joining that may know how to translate Polish and Portuguese.--{{User:Record307/sig}} 02:39, 30 January 2010 (UTC)&lt;br /&gt;
::::And on a side note, why haven't Videography and DTotM been added to [[Special:Subtitleslist]]? [[User:RickTommy|RickTommy]] 02:45, 30 January 2010 (UTC)&lt;br /&gt;
:::::Once we've added a language, it probably won't be removed. If anything is missing from the list of subtitles pages, it's because it needs to be added to [[HRWiki:Subtitles/Data]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:46, 30 January 2010 (UTC)&lt;br /&gt;
::::::And anyways, if another Polish user comes along and see the red links, he'll be more encouraged to contribute, then going over the process of adding a new language again. {{User:Elcool/sig}} 08:59, 30 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles list ==&lt;br /&gt;
&lt;br /&gt;
[[Special:Subtitleslist]] and [[HRwiki:Subtitles/Data]] are ''still'' outdated. Can they please be updated? {{User:RickTommy/sig}} 09:54, 17 April 2010 (UTC)&lt;br /&gt;
:Yes, you can totally update them.{{User:Loafing/sig}} 10:17, 17 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The new subtitles I made won't work ==&lt;br /&gt;
&lt;br /&gt;
With the help of someone fluent in the language, I have recently made [[Subtitles:sbemail119/es|Spanish subtitles]] for [[animal]]. Only problem is, when I use the local viewer, they don't show up. Are there extra steps I have to take to install them, or did I do something wrong? {{User:Power Pie/sig}}&lt;br /&gt;
&lt;br /&gt;
::You made [http://www.hrwiki.org/w/index.php?title=Subtitles:sbemail119/es&amp;amp;diff=prev&amp;amp;oldid=702434 an error] with the markup, as you forgot to close one of the tags. This kind of syntax error breaks everything, that's why the subtitles weren't showing up. If you're going to make more subtitles, I suggest you use the [[User:Phlip/Greasemonkey|Greasemonkey script]]. It has the ability to preview subtitles, and throws a warning when you make a syntax error (instead of not doing anything). Hope that helped! [[User:Meuhcoin|Meuhcoin]] 14:52, 19 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Discouragement ==&lt;br /&gt;
&lt;br /&gt;
Is it bad form to discourage others from creating a particular subtitles script? {{User:RickTommy/sig}} 02:35, 26 June 2010 (UTC)&lt;br /&gt;
:The proper method is to put one of our {{t|inprogress}} templates on the page as you work. Read the section addressed &amp;quot;to the person working&amp;quot; for more info. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 15:34, 26 June 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Local viewer has PHP errors ==&lt;br /&gt;
&lt;br /&gt;
I was attempting to view [[User:20eric06|20eric06]]'s recent overhaul to [[Subtitles:xmas10/pt-br]] in the [http://subtitles.hrwiki.org/xmas10/pt-br local viewer] just for kicks, but the subtitles weren't showing up. Then I opened up the source code and here's what I get starting on line 11 (Line-wrapped to prevent an ugly mess and preserve the HTML. MediaWiki and its silly whitespace treatment. Pssh.):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;white-space:pre-wrap;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Specification mandate value for attribute voiceove in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: attributes construct error in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Couldn't find end of Start Tag line line 148 in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Warning&amp;lt;/b&amp;gt;:  DOMDocument::loadXML() [&amp;lt;a href='function.DOMDocument-loadXML'&amp;gt;function.DOMDocument-loadXML&amp;lt;/a&amp;gt;]: Premature end of data in tag transcript line 2 in Entity, line: 148 in &amp;lt;b&amp;gt;/home/hrwiki/public_html/subtitles/createSubJS.php&amp;lt;/b&amp;gt; on line &amp;lt;b&amp;gt;85&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{User:Soiled Bargains/sig}} 19:11, 9 January 2011 (UTC)&lt;br /&gt;
:There was a missing closing &amp;lt;code&amp;gt;&amp;amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt; tag. The tag was added and it worked. In addition, the script has been updated to handle the error more gracefully. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 03:19, 12 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not sure if this is interesting or not... ==&lt;br /&gt;
&lt;br /&gt;
...but we finally have [[500 The Cheats|a toon]] that has been subtitled into every supported language. {{User:RickTommy/sig}} 07:00, 18 December 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitling Emails ==&lt;br /&gt;
Should subtitles be completely grammatically correct (for things like capitalization, spacing, spelling, not pronunciation), in sbemails? (They are already being typed out on his computer) {{User:Broncotroll/sig}} 22:15, 16 March 2013 (UTC)&lt;br /&gt;
:Give an example or two where the subtitles would differ from the text on the screen. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:26, 16 March 2013 (UTC)&lt;br /&gt;
::Like in [[duck pond]], where Strong Bad pronounces unfortunately normally but spells it wrong. Or in the grillions of emails like [[the facts]] where he doesn't space after an ellipsis or types email &amp;quot;e-mail&amp;quot;. Basically, anything with a &amp;lt;sic&amp;gt; in it. {{User:Broncotroll/sig}} 22:38, 16 March 2013 (UTC)&lt;br /&gt;
:::The subtitles should be a record of what we hear. If he says &amp;quot;unfortunately&amp;quot; correctly even if he mistypes it, then we should not misspell it in the subtitles. If we put &amp;quot;unfortunatley&amp;quot;, it gives the impression that he intentionally mispronounced it (which is a common enough running gag of his that it would be confusing). As for punctuation, I don't have a problem with adding a space here or there, but generally I think we should mimic Strong Bad's typing unless there's a really compelling reason to change something (a hyphen would not qualify in this case), because otherwise we're just putting doubt in the mind of the reader as to why the two differ. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:51, 16 March 2013 (UTC)&lt;br /&gt;
:::: Thanks, Mr. Dot Net! So would this [http://www.hrwiki.org/w/index.php?title=Subtitles:sbemail114/en&amp;amp;action=edit&amp;amp;undoafter=702467&amp;amp;undo=735146 this revision] be fine (cause email was dehyphenated)?  {{User:Broncotroll/sig}} 23:21, 16 March 2013 (UTC)&lt;br /&gt;
::::: That's not really an example of what you were talking about, because those words don't appear on the screen in the toon itself. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:31, 16 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Idea for a language, and it's just for laughs ==&lt;br /&gt;
&lt;br /&gt;
This would be just for laughs, but we all know about YouTube's terrible auto-captions, right? I guess we could take that a tiny bit further. So, we I came up with (Strong) Bad Translator Language! Now for your laughter needs. I really think this'd be funny. Any takers on this ridiculous project? --[[User:Camwoodstock|Camwoodstock]] 19:59, 21 July 2013 (UTC)&lt;br /&gt;
:HRWiki is an encyclopedia, not a playground; and we don't condone such ridiculous projects. In other words, we don't do things like this &amp;quot;just for laughs&amp;quot;. It wouldn't be helpful. It might start out being funny, but it would quickly turn into an annoyance. Besides, most of the cartoons can already be found on YouTube, and the bad subtitles can already be applied there. So if you want the bad subtitles, go ahead and watch them on YouTube. {{User:The Knights Who Say Ni/sig}} 20:50, 21 July 2013 (UTC)&lt;br /&gt;
::HRWiki is an encyclopedia, but it's one based on dumb animal characters. We do plenty of things just for laughs if the joke is funny enough. That said, I don't see the potential humor here as being enough to outweigh the technical expense. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:35, 21 July 2013 (UTC)&lt;br /&gt;
:::&amp;lt;small&amp;gt;&amp;lt;font color=#808080&amp;gt;I was hoping I wouldn't sound like I was coming across too harshly. I don't think I succeeded.&amp;lt;/font&amp;gt;&amp;lt;/small&amp;gt; Yes, we do tend to have fun around here. We definitely want to keep an enjoyable atmosphere, so there certainly are some things that happen just for laughs. I'm not suggesting otherwise. But I think I said &amp;quot;things like this&amp;quot;. I think it would be harder to come to an agreement on what belongs in the articles (in this case, on which word of Mangled English wasn't said, but should go in the caption anyway), thus making it not worth the time. {{User:The Knights Who Say Ni/sig}} 01:32, 22 July 2013 (UTC)&lt;br /&gt;
I can understand, but I would still like to see this done. If there can be support for custom subtitles, without having languages, I would like that at least.&lt;br /&gt;
:Using the &amp;quot;test subtitles script&amp;quot; feature in [[User:Phlip/Greasemonkey|Phlip's greasemonkey plugin]], you can input whatever subtitles you want. Feel free to do so in your own browser any time you wish. Just don't expect the wiki to store your custom subtitles for you. {{User:DeFender1031/sig}} 22:43, 22 July 2013 (UTC)&lt;br /&gt;
::Oh, thanks. Sorry, new to subtitles. :/ --[[User:Camwoodstock|Camwoodstock]] 18:21, 23 July 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Local viewer broken on IE 11, Flash 15 ==&lt;br /&gt;
&lt;br /&gt;
I just tried viewing the Fish Eye Lens video with subtitles, and unfortunately the subtitles do not update.&lt;br /&gt;
&lt;br /&gt;
Looking at the code, this appears to be because the script is expected a function named CurrentFrame to be part of the flash movie object, but this is apparently not the case anymore - I don't know when that changed.&lt;br /&gt;
&lt;br /&gt;
Instead, however, there is a FrameNum property which has the same effect, and running this code in the developer console makes everything work:&lt;br /&gt;
&lt;br /&gt;
 flashmovie.CurrentFrame = function() { return flashmovie.FrameNum; }&lt;br /&gt;
&lt;br /&gt;
In the interest of making sure this doesn't disrupt other browsers, I would suggest only running it if the normal function doesn't exist:&lt;br /&gt;
&lt;br /&gt;
 if (flashmovie.CurrentFrame === undefined &amp;amp;&amp;amp; flashmovie.FrameNum !== undefined) {&lt;br /&gt;
   flashmovie.CurrentFrame = function() { return flashmovie.FrameNum; }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Adding those lines to the end of the setup() function seemed to work fine. [[User:Pidgeot|Pidgeot]] &amp;lt;small&amp;gt;[[User_talk:Pidgeot|(t)]] [[Special:Contributions/Pidgeot|(c)]] [[Special:Emailuser/Pidgeot|(e)]]&amp;lt;/small&amp;gt; 00:34, 19 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flash File Subs ==&lt;br /&gt;
&lt;br /&gt;
I've noticed while viewing flash files the subtitles now work there although they hadn't previously. This means that secret toons that only have .swf file remaining such as &amp;quot;Non-Sequitur Champion&amp;quot;, &amp;quot;Strong Bad is a bad guy&amp;quot; and even &amp;quot;Happy T&amp;quot; and the Limozeen Thanksgiving cards can most likely now be subtitled. --[[User:Happypasta|Happypasta]] 00:33, 21 November 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Translating names in the subtitles ==&lt;br /&gt;
&lt;br /&gt;
What is the standard for translating the characters' names into the various languages vs. not doing so? I just saw an anonny take perfectly good Spanish names on a Spanish subtitles page and translate them back into English. I've seen several pages which retained the English names though, so I thought I'd ask. {{User:The Knights Who Say Ni/sig}} 15:15, 24 August 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hiding then appearing words or phrases ==&lt;br /&gt;
&lt;br /&gt;
In a recent [http://www.hrwiki.org/w/index.php?title=Subtitles:recordstoreday/en&amp;amp;diff=prev&amp;amp;oldid=752227 edit,] I removed the effect of hiding certain words or phrases and then showing them at a later moment. This trend has bothered me for a very long time, as the effect is often unnecessary. I especially oppose it when the effect gets in the way of somebody actually reading the dialog, as there have been many instances where certain words only appear for 20 frames or less. A common argument is that hiding a punchline will allow a soundless viewer to enjoy the punchline in a similar fashion that one of the hearing-persuasion would, but in the case of the Record Store Day reversion, there were no punchlines that were enhanced or prevented from spoilery by hiding the word. I believe the purpose of subtitles in any medium is to allow someone to easily and effortlessly follow the story where sound is present, and it is in my opinion that obstructing words in situations where it is unnecessary is an effort against accessibility. What do you guys think? {{User:MichaelXX2/sig}} 21:16, 15 October 2015 (UTC)&lt;br /&gt;
: I agree, as it happens, and I think DeFender was hasty in reverting you. I think the &amp;quot;hidden&amp;quot; text can be used well, but it is ''far'' overused by many people, and that &amp;quot;one letter at a time&amp;quot; thing you removed from Record Day (twice!) really doesn't improve anything. --{{User:Jay/sig}} 22:02, 15 October 2015 (UTC)&lt;br /&gt;
:: Yeah, in the case of that toon revealing one word/letter at a time really hindered readability. I admit sometimes it can be used to good effect but there it didn't do anything to enhance the humor. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 17:59, 29 October 2015 (UTC)&lt;br /&gt;
::: Honestly, I think it'd be best to keep the one about the &amp;quot;Cassette Maxi Single of their 7th Final Reunion Tour Brunch.&amp;quot; would probably be better, since the humour is in the length and the ridiculousness of the release. (Also the bait-and-switch that it's a brunch at the end) - {{User:Catjaz63/sig}} 04:38, 14 November 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitle fix ==&lt;br /&gt;
&lt;br /&gt;
Okay, I've got a serious problem with the subtitles. Can you fix the subtitle errors? --[[Special:Contributions/76.177.17.164|76.177.17.164]] 21:24, 6 June 2016 (UTC)&lt;br /&gt;
:I'm not having any problems. I've tried multiple toons and both the Greasemonkey and local player. What problems are you having? &amp;amp;mdash; [[User:It's dot com|It's dot com]] 21:40, 6 June 2016 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles have lost their gumption ==&lt;br /&gt;
&lt;br /&gt;
Ever since the release of [[Characters from Yonder Website]], the subtitles have ceased to work for me (it's the only reason I haven't created the English subtitles for it yet). Any toon that I view with the extension gets stuck on &amp;quot;Loading subtitles&amp;quot; eternally, and nothing on the seek bar works either. Is anyone &amp;lt;s&amp;gt;and/or everyone&amp;lt;/s&amp;gt; else experiencing this problem? What could be causing this? {{User:SRMX12/sig}} 14:11, 30 September 2017 (UTC)&lt;br /&gt;
:The local viewer works for me in several browsers using different operating systems. The Greasemonkey script works in Firefox. Have you tried turning it off and on again? &amp;amp;mdash; [[User:It's dot com|It's dot com]] 22:40, 30 September 2017 (UTC)&lt;br /&gt;
::It works fine for me too. {{User:Gfdgsgxgzgdrc/sig‎}} 22:53, 30 September 2017 (UTC)&lt;br /&gt;
:::I did try turning it off and on again, if by that you mean uninstalling and reinstalling it. If this has any relevance, I'm using the All-In-One extension for Chrome&amp;amp;mdash; I haven't tried the Greasemonkey script, since I don't have Firefox (though I might consider getting it if this persists). I notice a couple of recent reports on the Chrome extension from other users who seem to be having the same problem, so I'm guessing it's an issue with the extension, which is a little worrying. (I just checked and the local viewer works fine.) Is the extension working for anyone else? {{User:SRMX12/sig}} 00:51, 1 October 2017 (UTC)&lt;br /&gt;
::::Update: I got Firefox for the heck of it, and the Greasemonkey script works fine. I think I prefer Chrome still, so I'm hoping this issue can be resolved, but this will let me create the subtitles at least. {{User:SRMX12/sig}} 01:49, 1 October 2017 (UTC)&lt;br /&gt;
:::::Okay, subtitles in the All-in-One script aren't working in Chrome for me. We'll look into it. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 04:14, 1 October 2017 (UTC)&lt;br /&gt;
::::::The Chrome extension is still working fine for me. Including you guys and the people on [https://www.reddit.com/r/HomestarRunner/comments/732q02/hr_chrome_extension_not_working_anymore/ the Homestar Reddit], that's six people who have noticed it stop working recently. I seem to be the only person with no problems. I'm not really sure what to do. (Nice ween sig styles, by the way, SRMX12!) {{User:Gfdgsgxgzgdrc/sig‎}} 05:24, 1 October 2017 (UTC)&lt;br /&gt;
:::::::OK, I can see the problem, but the fix isn't trivial, it requires reworking a bunch of stuff with how the script talks to the flash object. I'm working on it, but no promises as to when it will be ready... {{User:Phlip/sig}} 12:42, 1 October 2017 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Template:whatsnew</id>
		<title>Template:whatsnew</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Template:whatsnew"/>
				<updated>2017-08-15T09:26:29Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;2017&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;iconlist&amp;quot;&amp;gt;__NOTOC__&amp;lt;div style=&amp;quot;float:right; margin:0 0 0.5em 1em;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border:1px solid #1C58A3; background: #FFF; text-align:center; padding:0; margin-bottom: 12px&amp;quot;&amp;gt;[[File:too cool.png|&amp;quot;It's clearly state-of-the-art&amp;quot;|180px]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!--Don't forget to add the update to the current H*R.com updates page.--&amp;gt;&lt;br /&gt;
====August 14, 2017====&lt;br /&gt;
*{{u|sb}} [[Strong Bad Email]] #207: [[too cool]] {{watch|sbemail207.html}} {{linkbox|UpelIgwoUKw|watch|YouTube}}&lt;br /&gt;
&lt;br /&gt;
====April 24, 2017====&lt;br /&gt;
*{{u|interview}} [[Interviews and Public Appearances]]: [[Screenland - 24 Apr 2017|Screenland - Cult Classics Redux]] {{inlinecontentwarning|content warning|minor swearing}} {{externallinkbox|l=https://www.redbull.tv/video/AP-1MSW6H3A11W11/cult-classics-redux|t=watch}}&lt;br /&gt;
*{{u|interview}} [[Interviews and Public Appearances]]: [[Screenland - 24 Apr 2017|Screenland - Homestar Plays Himself]] {{externallinkbox|l=https://www.redbull.tv/video/AP-1QP4CPXQN1W11/homestar-plays-himself|t=watch}}&lt;br /&gt;
*{{u|misc}} [[Secret Page]]: [[Screenland - 24 Apr 2017|Slash slash slash!]] {{linkbox|slash/slash|watch}}&lt;br /&gt;
&lt;br /&gt;
====January 24, 2017====&lt;br /&gt;
*{{u|interview}} [[Interviews and Public Appearances]]: [[Gizmodo Interview - 24 Jan 2017|An Oral History of Homestar Runner, the Internet's Favorite Cartoon]] {{externallinkbox|l=http://io9.gizmodo.com/an-oral-history-of-homestar-runner-the-internets-favor-1791519879|t=read}}&lt;br /&gt;
&lt;br /&gt;
====December 24, 2016====&lt;br /&gt;
*{{u|hr}} [[Toons|Toon]]: [[Homestar Runner Goes For the Gold]] {{watch|goes4gold.html}} {{linkbox|l5prB1agTOA|watch|YouTube}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Please don't remove these lines when updating this page--&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Main Page Templates|{{PAGENAME}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Running_Gags</id>
		<title>Running Gags</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Running_Gags"/>
				<updated>2017-06-28T10:37:38Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by Man-o-man&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Yeflaskdeniss gags.PNG|thumb|200px|The gags are running. Along.]]&lt;br /&gt;
A '''[[Wikipedia:running gag|running gag]]''' is an amusing situation or line that constantly reappears throughout the site. Often the frequent repetition of the running gag is what makes it so humorous. &lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*List of all [[:Category:Running Gags|Running Gags]]&lt;br /&gt;
*[[Inside Jokes]]&lt;br /&gt;
*[[Glossary]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Running Gags|*]][[Category: Lists]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Links</id>
		<title>Links</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Links"/>
				<updated>2017-06-28T10:37:37Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by DorianGray&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Links to other [[Homestar Runner (body of work)|Homestar Runner]] related websites.&lt;br /&gt;
&lt;br /&gt;
== Official Sites ==&lt;br /&gt;
Sites created by [[The Brothers Chaps]] listed in order of their relevance to Homestar Runner.&lt;br /&gt;
&lt;br /&gt;
*[[hr:|Homestar Runner]] ([[homestarrunner.com|article]]) &amp;amp;mdash; The official site.&lt;br /&gt;
*[https://homestore-runner.myshopify.com/ Homestar Runner Store] ([[Store|article]]) &amp;amp;mdash; The online homestar store&lt;br /&gt;
*[[videlectrix:|Videlectrix]] ([[Videlectrix|article]]) &amp;amp;mdash; The official site for [[Games]] released by [[The Brothers Chaps]] under the Videlectrix banner.&lt;br /&gt;
*[[thorax:|Thorax Corporation]] ([[Thorax Corporation|article]]) &amp;amp;mdash; A fake business created by The Brothers Chaps.&lt;br /&gt;
&lt;br /&gt;
== Mirrors ==&lt;br /&gt;
Mirrors to some of the content from the official site listed in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
*[http://homestarrunner.kitkorp.com/ Kitkorp Mirror] &amp;amp;mdash; This mirror has different incarnations of the various pages saved all in one place, as well as the error message from the old [[Strong Bad's Message Bored]].&lt;br /&gt;
*[http://www.freewebs.com/hsrquotes/index.htm Old Quote of the Week mirror] (broken) &amp;amp;mdash; This mirror has a large collection of quotes, and has previous quotes neat and orderly. Only goes from Jul. 2004 &amp;amp;ndash; Feb. 2005 (with many past ones)&lt;br /&gt;
**[http://www.freewebs.com/hsrquotes2/index.htm Quote of the Week mirror] (broken) &amp;amp;mdash; A sequel to the original site. See the final update on the original site for the reason. From March 2005 &amp;amp;ndash; present, and with a collection of old ones.&lt;br /&gt;
*[http://web.archive.org/web/*/http://homestarrunner.com Wayback Machine] &amp;amp;mdash; contains versions of the site from years ago to months ago.&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
Articles about Homestar Runner or The Brothers Chaps listed in reverse chronological order (newest at the top).&lt;br /&gt;
*[http://media.www.dailyemerald.com/media/storage/paper859/news/2006/02/08/Pulse/Ask-Strong.Bad-1965093.shtml Ask Strong Bad] The Oregon Daily Emerald, February 2006&lt;br /&gt;
*[http://www.tucsonweekly.com/gbase/music/Content?oid=oid:59640 Tucson Weekly TMBG Interview] &amp;amp;mdash; [[They Might Be Giants]] talk about their collaboration, 19 August 2004&lt;br /&gt;
*[http://www.wired.com/wired/archive/12.07/play.html Wired They Might Be Giants Interview] &amp;amp;mdash; July 2004&lt;br /&gt;
*[http://www.nytimes.com/2003/08/28/arts/music/28POPL.html?ex=1377403200&amp;amp;en=f7d422e653648f25&amp;amp;ei=5007&amp;amp;partner=USERLAND Kindred World in Animation] &amp;amp;mdash; New York Times, 28 August 2003&lt;br /&gt;
*[http://www.nationalreview.com/comment/comment-wood082703.asp Everybody to the Limit] &amp;amp;mdash; National Review Online, 27 August 2003&lt;br /&gt;
*[http://tinyurl.com/3mngj Run to the Hills] (Internet Archive) &amp;amp;mdash; Long Island Press, April 2003&lt;br /&gt;
*[http://www.livejournal.com/community/homestar_runner/899307.html Wonkavision Magazine Feature] &amp;amp;mdash; Scans of the 5-page feature from [http://www.wonkavisionmagazine.com/store/backissues.html Issue #21], Spring 2003&lt;br /&gt;
&lt;br /&gt;
== Interviews with the Creators ==&lt;br /&gt;
*See [[Interviews and Public Appearances]]&lt;br /&gt;
&lt;br /&gt;
== Fan Sites ==&lt;br /&gt;
Fan-created sites listed in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
*[http://www.blurty.com/community/fhqwhgads/ Fhqwhgads: A Homestar Runner Community] &amp;amp;mdash; A [http://www.blurty.com/ Blurty] community for Homestar-themed animated and still icons.&lt;br /&gt;
*[http://hsr.boourns.net/ Homestar Runner Fanlisting] &amp;amp;mdash; A list of Homestar fans around the world.&lt;br /&gt;
*[http://fanstuff2.referata.com/wiki/Main_Page Homestar Runner Fanstuff Wiki 2] &amp;amp;mdash; A wiki for creating Homestar Runner fanstuff.&lt;br /&gt;
*[http://s13.zetaboards.com/HR_Fanstuff_Wiki_2/index/ Homestar Runner Fanstuff Wiki 2 Forums] &amp;amp;mdash; The forum for the Homestar Runner Fanstuff Wiki 2 listed above.&lt;br /&gt;
*[http://homestar.meetup.com/ Homestar Runner Meetup Groups] &amp;amp;mdash; Meet other Homestar Runner fans in your area.&lt;br /&gt;
*[http://homestarrerunner.blogspot.ca/ Homestar Rerunner] &amp;amp;mdash; A blog that reviews Homestar Runner [[Toons|toons]] for people that are new to the site.&lt;br /&gt;
*[http://www.livejournal.com/community/homestar_runner/518052.html LiveJournal List] &amp;amp;mdash; A LiveJournal post with hundreds of Homestar-related links.&lt;br /&gt;
*[http://www.freewebs.com/quotestarrunner/ Quotestar Runner] &amp;amp;mdash; A website featuring quotes, music, and [[Marzipan's Answering Machine|Marzipan's Answering Machines]] in WAV format.&lt;br /&gt;
*[http://strongbadsforum.webs.com/ Strong Bad's Message Bored] A fledgling fan site with its own forum and wiki.&lt;br /&gt;
*[http://www.virtualpizz.biz/ Virtual Pizz] &amp;amp;mdash; This fan-site replicates [[pizza joint|The Pizz]]'s online log-in screen, with the log-in button linking to the email itself.&lt;br /&gt;
&lt;br /&gt;
=== Former fan sites ===&lt;br /&gt;
These were once popular fan sites that are not maintained or have been taken down.&lt;br /&gt;
&lt;br /&gt;
* [[hrfwiki:|Homestar Runner Fanstuff Wiki]]&lt;br /&gt;
*[http://www.cgnuonline-eniversity.com/ CGNU Online E-niversity] &amp;amp;mdash; A recreation of the e-niversity welcome screen from [[theme song]] (with .com in the URL instead of .edu, as the latter is only available to actual educational institutions). The exclamation point is an Easter egg, which links to the list of degrees from the same email.&lt;br /&gt;
*[http://hekima.lionking.org/thestick The Stick] &amp;amp;mdash; Has Homestar Runner stories and downloads.&lt;br /&gt;
*[https://web.archive.org/web/20120108062100/http://www.freewebs.com/hrencyclopedia/ Aich-Star-Arr Compendium] &amp;amp;mdash; An encylopedia of Homestar Runner characters.&lt;br /&gt;
*[http://www.burninghorizon.com/strongbad/ Strong Bad Email Secrets]&lt;br /&gt;
*[http://www.tompkins.tv/ tompkins.tv] &amp;amp;mdash; A website based on Tompkins's website seen in [[4 Gregs]].&lt;br /&gt;
*[http://www.fyrebug.com/displaygame.php?gameid=413 Trogdor the Burninator - the game] &amp;amp;mdash; A [[Trogdor]]-themed game, containing burnination.&lt;br /&gt;
&lt;br /&gt;
== Fan Forums  ==&lt;br /&gt;
Bulletin board sites listed in order of membership total.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;!-- as of 3 April 2015: 19,484 subscribers --&amp;gt; [https://www.reddit.com/r/HomestarRunner /r/Homestar Runner Subreddit]&lt;br /&gt;
* &amp;lt;!-- as of 3 April 2015: 9,015 members --&amp;gt; [http://forum.hrwiki.org/ Homestar Runner Wiki Forum]&lt;br /&gt;
* &amp;lt;!-- as of 3 April 2015: 3812 members --&amp;gt; [http://www.burninghorizon.com/hsrforum/ Burning Horizon's H*R Fan-Forum]&lt;br /&gt;
* &amp;lt;!-- as of 15 Oct 2010: 1,158 members --&amp;gt; [http://www.usshomestarrunner.com/ USS Homestar Runner Forum]  '''(No longer active)'''&lt;br /&gt;
* &amp;lt;!-- as of 15 Oct 2010:    50 members --&amp;gt; [http://strongbadiathefree.forumotion.com/ Strong Badia the Free]&lt;br /&gt;
* &amp;lt;!-- as of 15 Oct 2010:    14 members --&amp;gt; [http://com1.runboard.com/bhomestarfreaks Homestar Freaks]&lt;br /&gt;
* &amp;lt;!-- as of 15 Oct 2010:    10 members --&amp;gt; [http://community.livejournal.com/thehomestarmy/ The Homestarmy]&lt;br /&gt;
&amp;lt;!-- Please do not delete The Homestarmy. It has a unique feature unlike other boards where you can join an army and compete against other armies. Just because it has 10 members doesn't mean that it won't get more. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Sites ==&lt;br /&gt;
Listed in alphabetical order.&lt;br /&gt;
*[http://www.answers.com/topic/homestar-runner Answers.com entry for Homestar Runner] &amp;amp;mdash; The main text is from the Wikipedia entry, but there is some additional information here.&lt;br /&gt;
*[https://addons.mozilla.org/extensions/moreinfo.php?id=1696&amp;amp;application=firefox Full Screen Homestar Runner - Firefox Extension]  &amp;amp;mdash; An extension for Mozilla Firefox that makes the cartoons on the official site fill the browser window.&lt;br /&gt;
*[http://dirkcrimson.keenspace.com/pics/homestarswitch.html Homestar Runner Switch Ad] &amp;amp;mdash; A Homestar-themed parody of the Apple &amp;quot;Switch&amp;quot; ads. Click and hold the Homestar icon at the end for a surprise.&lt;br /&gt;
*[http://www.interglacial.com/rss/homestar.rss Interglacial H*R RSS Feed] &amp;amp;mdash; Syndicated updates polled 3 times a day. [http://interglacial.com/rss/homestar.html Shut down on July 7, 2012].&lt;br /&gt;
*[http://www.suave.net/~dave/trogdor.cgi LEGO Trogdor] &amp;amp;mdash; Part of the [[dragon]] email redone with LEGO bricks.&lt;br /&gt;
*[http://highscoreonline.cartoonsdammit.com/homstray.html Not Without My Application] (also known as &amp;quot;Jorbs a Plenti&amp;quot;) &amp;amp;mdash; A Homestar Runner cartoon created by Matt Wilson, the creator of the [http://www.bonusstages.com Bonus Stage] and [http://www.highscoreonline.adiversions.com High Score] series.&lt;br /&gt;
*[http://feeds.feedburner.com/podstartopod Podstartopod] &amp;amp;mdash; A [[Podstar Runner]] RSS feed.&lt;br /&gt;
*[https://addons.mozilla.org/en-US/firefox/addon/1695 StrongBad Emails: Prev and Next - Firefox Extension] &amp;amp;mdash; An extension for Mozilla Firefox that adds the words &amp;quot;previous&amp;quot; and &amp;quot;next&amp;quot; to the left and right sides of the navbar (respectively) when watching an email. The buttons link to the email before and after the one being viewed (respectively, again).&lt;br /&gt;
*[http://strongbadjibblies.ytmnd.com/ Strong Bad Jibblies] &amp;amp;mdash; Strong Bad having the [[Jibblies]].&lt;br /&gt;
*[http://www.angelfire.com/hi5/redcards/ Tim's Homestar Runner Redemption Cards] &amp;amp;mdash; Homestar-themed cards for a Christian collectible card game.&lt;br /&gt;
*[http://www.urbandictionary.com/define.php?term=Homestar+Runner Urban Dictionary entry for Homestar Runner] &amp;amp;mdash; User submitted definitions for &amp;quot;Homestar Runner&amp;quot;.&lt;br /&gt;
*[[Wikipedia:Homestar Runner|Wikipedia entry for Homestar Runner]] &amp;amp;mdash; Homestar Runner on the free encyclopedia.&lt;br /&gt;
*[[TVTropes:WebAnimation/HomestarRunner|TvTropes entry for Homestar Runner]] &amp;amp;mdash; A list of tropes named after Homestar Runner, and a list of ones used in it.&lt;br /&gt;
&lt;br /&gt;
== Redirects not owned by The Brothers Chaps ==&lt;br /&gt;
Listed in alphabetical order.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Website is down *[http://www.jomama.com jomama.com] &amp;amp;mdash; Links directly to [[The System is Down]] --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Website is down *[http://www.peasantsquest.com peasantsquest.com] &amp;amp;mdash; Links directly to [[Peasant's Quest]]. --&amp;gt;&lt;br /&gt;
*[http://www.strong-bad.com/ strong-bad.com] &amp;amp;mdash; Links directly to [[Strong Bad Email]].&lt;br /&gt;
*[http://www.strongsad.com StrongSad.com] Links directly to [[Strong Sad's Lament]].&lt;br /&gt;
&amp;lt;!-- Link down or done? *[http://www.thnikkaman.com/ thnikkaman.com] &amp;amp;mdash; Links directly to [[monument]]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Want to link to this Wiki? ==&lt;br /&gt;
&lt;br /&gt;
=== From your own website ===&lt;br /&gt;
&lt;br /&gt;
Use this code to link to us from your website:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;http://www.hrwiki.org&amp;quot;&amp;gt;The Homestar Runner Wiki&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or use these images:&lt;br /&gt;
&lt;br /&gt;
[[Image:linkbanner1.PNG]]&lt;br /&gt;
&lt;br /&gt;
[[Image:HRWiki_banner1.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:HRWiki_banner2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:HRBanner_We_have_a_wiki.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:HRBanner_Hrwiki.gif]]&lt;br /&gt;
&lt;br /&gt;
=== From other wikis ===&lt;br /&gt;
&lt;br /&gt;
Most wikis that use the [[Wikipedia:MediaWiki|MediaWiki]] wiki software can easily link to the Homestar Runner Wiki if they properly use the [[MetaWikipedia:Interwiki map|Interwiki Map]].  This can be done using the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[[HRWiki:Main Page|The Homestar Runner Wiki]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the above method isn't available, use this code instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;[http://www.hrwiki.org The Homestar Runner Wiki]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Special Pages]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Songs</id>
		<title>Songs</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Songs"/>
				<updated>2017-06-28T10:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by DorianGray&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Strong Bad in the studio.png|thumb|Strong Bad recording a number one jam.]]&lt;br /&gt;
&lt;br /&gt;
{{redirects|Music}} {{for-nothe|[[sightings]] in popular music|Musical Sightings}} {{for-nothe|references to popular music|Popular Music References}}&lt;br /&gt;
&lt;br /&gt;
'''Songs''' in the [[Homestar Runner (body of work)|Homestar Runner]] body of work range greatly from the amateur musical stylings of [[Strong Bad]] to the occasional collaboration with [[They Might Be Giants]]. Here is a general listing of the songs and the toons they appear in.&lt;br /&gt;
&lt;br /&gt;
== Songs by [[The Brothers Chaps]] (and/or [[Missy Palmer]]) ==&lt;br /&gt;
=== from Toons ===&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Toon !! Songs&lt;br /&gt;
|- &lt;br /&gt;
| [[Bug In Mouth Disease]] || Homestar Runner Theme Song Reprise&lt;br /&gt;
|-&lt;br /&gt;
| [[Cheat Commandos (toon)|Cheat Commandos]] || Cheat Commandos Theme ([[Mirror:cc_theme.zip|PC]] [[mirror:cc_theme.sit|MAC]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Cool Things]] || Cool Tapes ([[Mirror:marzy_cooltapes.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[Decemberween In July]] || [[Seasonal Sweaters]] ([[videlectrix:xmas08/SeasonalSweaters.zip|Download]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Decemberween Short Shorts]] || Cheer up Coach Z ([[mirror:hs_cheerupcz.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[Ever and More!]] || Ever and More&lt;br /&gt;
|-&lt;br /&gt;
| [[Everybody Knows It]] || Everybody Knows It &lt;br /&gt;
|-&lt;br /&gt;
| [[Everybody to the Limit]] || [[Everybody to the Limit (Live)|Everybody to the Limit]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Fan Costume Commentary]] || People With Too Much Time On Their Hands&lt;br /&gt;
|-&lt;br /&gt;
| [[Fish Eye Lens]] || Fish Eye Lens&lt;br /&gt;
|-&lt;br /&gt;
| [[A Folky Tale]] || Gonna Have a Good Time Tonight&lt;br /&gt;
|-&lt;br /&gt;
| [[Halloween Potion-ma-jig]] || Backyard Peaches&lt;br /&gt;
|-&lt;br /&gt;
| [[Happy Dethemberween]] || The Dethemberween [[Thnikkaman]]&lt;br /&gt;
|-&lt;br /&gt;
| [[A Holiday Greeting]] || Everybody Everybody (Decemberween Mix) ([[HR:xmas.mp3|Download]])&lt;br /&gt;
|-&lt;br /&gt;
| [[Hooked on Decemberween]] || Homestar Runner Presents: Presents &amp;lt;br&amp;gt;&lt;br /&gt;
If I don't get Video Games for Decemberween&lt;br /&gt;
|-&lt;br /&gt;
| [[An Important Rap Song]] || Too Many Knives ([http://www.homestarrunner.com/songs/Too%20Many%20Knives.mp3 Download])&lt;br /&gt;
|-&lt;br /&gt;
| [[Intro]] || Everybody Everybody&lt;br /&gt;
|-&lt;br /&gt;
| [[A Jumping Jack Contest]] || Who's the Guy Who Wins All the Contests?&lt;br /&gt;
|-&lt;br /&gt;
| [[Labor Dabor]] || Labor Day Song ([[Mirror:labordaysong_hs.zip|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[Let us give TANKS!]] || No One Understands Me&lt;br /&gt;
|-&lt;br /&gt;
| [[The Li'l Brudder Show]] || The Li'l Brudder Show Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[labor day]] || Everybody Knows It &lt;br /&gt;
|-&lt;br /&gt;
| [[Lookin at a Thing in a Bag]] || T-TV, TV Show&lt;br /&gt;
|-&lt;br /&gt;
| [[The Luau]] || [[Poot-Slap]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Loading Screens]] || Loading screens&lt;br /&gt;
|-&lt;br /&gt;
| [[Malloween Commercial]] || They're Orange, They're Black&lt;br /&gt;
|-&lt;br /&gt;
| [[Marzipan's Answering Machine Version 5.0]] || Leave me a message&lt;br /&gt;
|-&lt;br /&gt;
| [[Marzipan's Answering Machine Version 12.2]] || You Said You'd Bake Us A Cake!&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Marzipan's Answering Machine Version 13.2]] || Not Talkin' 'bout Butter&amp;lt;br&amp;gt;Not Talkin' 'bout Butter Remix&lt;br /&gt;
|-&lt;br /&gt;
| [[New Boots]] || Hip Hop Dance&lt;br /&gt;
|-&lt;br /&gt;
| [[One Two, One Two]] || Independent Girl&lt;br /&gt;
|-&lt;br /&gt;
| [[Rap Song]] || Rap Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Record Store Day]] || The B-est of B-sides&lt;br /&gt;
|-&lt;br /&gt;
| [[Senor Mortgage]] || Mortgage Jingle&lt;br /&gt;
|-&lt;br /&gt;
| [[Sing Along]] || Once I knew this guy&lt;br /&gt;
|-&lt;br /&gt;
| [[Some Stupid Turkey]] || Some Stupid Turkey&lt;br /&gt;
|-&lt;br /&gt;
| [[Strong Bad is a Bad Guy]] || Strong Bad is a Bad Guy&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Strong Bad Sings]] || I Can't Believe How Awesome I Am&amp;lt;br&amp;gt;Let's Make Believe That We're In Love (So I Can Break Up With You)&amp;lt;br&amp;gt;[[You've got an Ugly &amp;amp; Stupid Butt]]&amp;lt;br&amp;gt;[[Somebody Told Me (Now I Believe Them)]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Strong Bad Main Page]] || [[Poot-Slap]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Summer Short Shorts]] || Brain Sister&lt;br /&gt;
|-&lt;br /&gt;
| [[Super NES]] || Homestar Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 3]] || Teen Girl Squad Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 7]] || Mrs. Commanderson (Easter egg)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Teen Girl Squad Issue 8]] || Ooncha Ooncha!&amp;lt;br&amp;gt;It's Over (Kissyboots)&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 9]] || &amp;quot;Best Friends Squad&amp;quot; Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 11]] || The Chumbly Wumbly Bear&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 13]] || [[Quote of the Week#QW-2007-06-21|Garbage Disposal]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 14]] || It's Over (Tite Rolled)&lt;br /&gt;
|-&lt;br /&gt;
| [[Teen Girl Squad Issue 15]] || Light Purple Cummerbund&lt;br /&gt;
|-&lt;br /&gt;
| [[The Cheatar]] || Run Away (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[Theme Song Video]] || Homestar Runner Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Trudgemank]] || Collaboration between [[Peacey P]] and [[Taranchula]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Weclome Back]] || Cool Tapes 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Where U Goin' 2]] || Where U Goin' 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Workin' on the Game]] || Good Graphics Song&lt;br /&gt;
|-&lt;br /&gt;
| [[Trogday 08]] || The S is for Sucks (children's version)&lt;br /&gt;
|-&lt;br /&gt;
| [[Trogday 08]] || The S is for Sucks (heavy metal version)&lt;br /&gt;
|-&lt;br /&gt;
| [[Xeriouxly Forxe]] || The Xeriouxly Forxe theme song&lt;br /&gt;
|-&lt;br /&gt;
| [[Marzipan's Answering Machine Version 17.2]] || Let's Fhqwhgads Again&amp;lt;br&amp;gt;Phoning This One In&amp;lt;br&amp;gt;Let's Nite Mamas Again&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== from [[Strong Bad Email]]s ===&lt;br /&gt;
This list does not include the original opening songs Strong Bad sings in most [[Strong Bad Email Intros]]. See [[#Songs partly by The Brothers Chaps|Songs partly by The Brothers Chaps]] and [[#Songs not by The Brothers Chaps|Songs not by The Brothers Chaps]] for non-original email intro songs.&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Email !! Songs&lt;br /&gt;
|-&lt;br /&gt;
| [[flag day]] || [[Strong Badia National Anthem]]&lt;br /&gt;
|-&lt;br /&gt;
| [[helium]] || The &amp;quot;High Voice Crew&amp;quot; song&lt;br /&gt;
|-&lt;br /&gt;
| [[vacation]] || It's That Clock&lt;br /&gt;
|-&lt;br /&gt;
| [[lures &amp;amp; jigs]] || The Fish Jig (Come on and get in the Boat)&lt;br /&gt;
|-&lt;br /&gt;
| [[techno]] || [[The System Is Down (song)|The System Is Down]]&lt;br /&gt;
|-&lt;br /&gt;
| [[new hands]] || [[These peoples try to fade me]]&lt;br /&gt;
|-&lt;br /&gt;
| [[theme party]] || [[Circles]] ([[HR:songs/Circles.zip|PC]] [[HR:songs/Circles.sit|Mac]])&lt;br /&gt;
|-&lt;br /&gt;
| [[dragon]] || [[Trogdor (song)|Trogdor]]&lt;br /&gt;
|-&lt;br /&gt;
| [[marzipan]] || [[Oh Yeah Yeah]] ([[HR:ohyeahyeah.mp3|Download]])&lt;br /&gt;
|-&lt;br /&gt;
| [[monster truck]] || [[Because, It's Midnite]] (Download [[HR:midnight.swf|CD Version Excerpt]])&lt;br /&gt;
|-&lt;br /&gt;
| [[fingers]] || [[Moving Very Slowly]]&lt;br /&gt;
|-&lt;br /&gt;
| [[caper]] || [[The Cheat is Not Dead]] (Download [[HR:cheatnotdead.swf|CD Version Excerpt]])&lt;br /&gt;
|-&lt;br /&gt;
| [[mascot]] || CGNU Fight Song&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[sibbie]] || Song about Sibbie&amp;lt;br&amp;gt;I freakin' hate Sibbie&lt;br /&gt;
|-&lt;br /&gt;
| [[stunt double]] || [[The theme from DANGERESQUE II: This time, it's not Dangeresque I|Dangeresque II Theme Song]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[local news]] || It's Just ITS ([[Mirror:sb_itsits.mp3|Download]] mirror)&amp;lt;br&amp;gt;Whatever Happened to Capitalization?&amp;lt;br&amp;gt;Don't Forget to Spellcheck&amp;lt;br&amp;gt;YOUR/YOU'RE&amp;lt;br&amp;gt;I Don't Care How They Spell Things on the Internet&amp;lt;br&amp;gt;([[local_news#Easter_Eggs|lyrics]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[kind of cool]] || You smell like pea soup&lt;br /&gt;
|-&lt;br /&gt;
| [[monument]] || Here Comes [[the Thnikkaman]] (Download Homestar's [[Mirror:hs_thnikkaman.mp3|version]]. Mirror)&amp;lt;br&amp;gt;Technochocolate&lt;br /&gt;
|-&lt;br /&gt;
| [[stupid stuff]] || [[The Cheatcakes]] advert jingle (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[lunch special]] || Chickenshine (Download for [[Mirror:bubs_chickenshine.zip|PC]] [[Mirror:bubs_chickenshine.sit|Mac]] mirrors)&lt;br /&gt;
|-&lt;br /&gt;
| [[haircut]] || [[Cardboard Boxes|Box]] (Easter Egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[dangeresque 3]] || Today is All Right 4 2 Nite&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[cheatday]] || The Day of Birth Song&amp;lt;br&amp;gt;the two-o duo (Easter egg)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[for kids]] || &amp;quot;Whaddaya Know, Haddi-man?&amp;quot; Theme Song&amp;lt;br&amp;gt;The Count To Three song&amp;lt;br&amp;gt;[[All Is On]] song (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[old comics]] || &amp;quot;She Partied Without Dancing&amp;quot; (by [[West Is Lip]])&lt;br /&gt;
|-&lt;br /&gt;
| [[pizzaz]] || Here Comes the Strong Bad&lt;br /&gt;
|-&lt;br /&gt;
| [[the facts]] || Homestar's &amp;quot;We'll be right back&amp;quot; jingle (Easter egg)   &lt;br /&gt;
|-&lt;br /&gt;
| [[time capsule]] || Strong Bad's #1 Future Jam:  &amp;quot;Grumblecakes&amp;quot;  (Easter egg)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[extra plug]] || All Is On&amp;lt;br&amp;gt;I really gotta pee&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[montage]] || [[Mirror:youreagirl.zip|You're A Girl]] (mirror)&amp;lt;br&amp;gt;Ain't That a Drag?&amp;lt;br&amp;gt;[[Showdown]]&amp;lt;br&amp;gt;It's the Weekend (Party Party Party)&amp;lt;br&amp;gt;I'm The Best Around (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[radio]] || The Portly Washboy Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[part-time job]] || When All My Dreams Come True (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[origins]] || Homestar's Bread Sing Alongs&lt;br /&gt;
|-&lt;br /&gt;
| [[rock opera]] || SBEMAIL!&lt;br /&gt;
|-&lt;br /&gt;
| [[best thing]] || [[Limozeen: &amp;quot;but they're in space!&amp;quot;]] Theme Song&lt;br /&gt;
|-&lt;br /&gt;
| [[rampage]] || &amp;quot;I'm On A Rampage&amp;quot; by Strong Bad and Coach Z&lt;br /&gt;
|-&lt;br /&gt;
| [[do over]] || &amp;quot;Big Ol' Red Head&amp;quot; by Strong Bad&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[bottom 10]] || &amp;quot;Feed the Childrens&amp;quot; by Limozeen&amp;lt;br&amp;gt;Buttdance Again&lt;br /&gt;
|-&lt;br /&gt;
| [[record book]] || The &amp;quot;I'm Just Me&amp;quot; Song&lt;br /&gt;
|-&lt;br /&gt;
| [[lady...ing]] || Laserdisc&lt;br /&gt;
|-&lt;br /&gt;
| [[geddup noise]] || [[The Cheat|DJ Teh Cheat]]'s Indie-Tronic remix of &amp;quot;The Geddup Noise&amp;quot; ([[Mirror:geddupnoise.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[bedtime story]] || Bran Muffin&lt;br /&gt;
|-&lt;br /&gt;
| [[space program]] || [[Space Captainface]]: &amp;quot;Pretender of the Galaxy&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[highschool]] || Havin' Fun With My Friends&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[death metal]] || &amp;quot;The Decoupage&amp;quot; by [[Taranchula]]&amp;lt;br&amp;gt;plus brief clips of songs by [[Larry Palaroncini]], [[Minor Teen Girl Squad Characters#Brainkrieg|Brainkrieg]], and [[Strong Mad]].&lt;br /&gt;
|-&lt;br /&gt;
| [[lady fan]] || Homestar's &amp;quot;Tweesercize&amp;quot; song&lt;br /&gt;
|-&lt;br /&gt;
| [[candy product]] || SBlounskched theme song ([[Mirror:sblounskched.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[alternate universe]] || Save The Last Email For Strong Bad&lt;br /&gt;
|-&lt;br /&gt;
| [[senior prom]] || &amp;quot;The King of Town's Very Own Quite Popular Cartoon Show&amp;quot; theme song&lt;br /&gt;
|-&lt;br /&gt;
| [[isp]] || The Hold Music&lt;br /&gt;
|-&lt;br /&gt;
| [[theme song]] || &amp;quot;Strong Bad Email Show&amp;quot; theme songs&lt;br /&gt;
|-&lt;br /&gt;
| [[road trip]] || Jammin' Tunes&lt;br /&gt;
|-&lt;br /&gt;
| [[coloring]] || Limozeen's &amp;quot;Coloring (Outside the Lines)&amp;quot; and &amp;quot;Pressed Bunson&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[your funeral]] || Taranchula's &amp;quot;Brother in a Jar&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[concert]] || [[sloshy]]'s &amp;quot;we don't even really care about you&amp;quot; ([[Mirror:sloshy_wedont.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[pizza joint]] || Pizza Party (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[slumber party]] || Slumber Party (Easter egg)&lt;br /&gt;
|-&lt;br /&gt;
| [[nightlife]] || Smart Drinks ([[Mirror:smartdrinks.mp3|Download]] mirror)&lt;br /&gt;
|-&lt;br /&gt;
| [[love poems]] || The &amp;quot;Mo'nin&amp;quot; song&amp;lt;br&amp;gt;&amp;quot;A Sweaty, Overweight Jam&amp;quot; by [[Tenerence Love]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== from Games ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Game !! Songs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Audition with Marzipan]] || Thoughts on a Bird&amp;lt;br&amp;gt;Your Own Medicine&amp;lt;br&amp;gt;Summertime is Here&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Dancin' Bubs]] || Everybody Everybody&amp;lt;br&amp;gt;[[The System Is Down (song)|The System Is Down]]&amp;lt;br&amp;gt;[[Everybody to the Limit]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Homestar Quiz]] || Stupidest Guy&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Homestar Ruiner]] || [[Please Stop Trying to Handle My Style]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Strong Badia the Free]] || [[Protest Song]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Baddest of the Bands]] || [[Food-Related Love]]&amp;lt;br&amp;gt;Stealin' Stuff from My Own Dang Store&amp;lt;br&amp;gt;Left Shift-Alt-Delete&amp;lt;br&amp;gt;Slide to the Right Y'all Bridesmaids&amp;lt;br&amp;gt;[[Songs from SBCG4AP|Doin' the Wigglie]]&amp;lt;br&amp;gt;Roll Wit' 'Da Punches&amp;lt;br&amp;gt;Hugo Left Me Miserable&amp;lt;br&amp;gt;The Three O'Clock Twist&amp;lt;br&amp;gt;[[Songs from SBCG4AP|My Face (Please Don't Put Needles In It)]]&amp;lt;br&amp;gt;Boys, Boys, Boys&amp;lt;br&amp;gt;Throwing Rocks through Old Man Marzipan's Window&amp;lt;br&amp;gt;[[Songs from SBCG4AP|Limozeen is Not Very Nice]]&amp;lt;br&amp;gt;The Same Riff for Several Minutes&amp;lt;br&amp;gt;Smooth Charade&amp;lt;br&amp;gt;[[Songs from SBCG4AP|Kick the Chort]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- Note: &amp;quot;Wheat Grows Sweet&amp;quot; and the various Stinkoman music are not properly songs. They, and wordless things like them, should be linked from their respective source pages, or from some imagined future &amp;quot;Music&amp;quot; page which does not yet exist. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== from &amp;quot;[[Strong Bad Sings and Other Type Hits]]&amp;quot; ===&lt;br /&gt;
These songs originated on the &amp;quot;Strong Bad Sings and Other Type Hits&amp;quot; CD.&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Track !! Songs&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[Let's get started on doing all those awesome things I suggested]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[Sweet Cuppin' Cakes Theme Song]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[i think i have a chance with this guy]] (by [[What's Her Face]])&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[It's like it was meant to be]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[Nite Mamas]] (by [[Limozeen]])&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[Sensitive To Bees]] (by [[Marzipan]])&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[The ladies in my town all know my name]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 (end) || [[Secret Song]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== from [[strongbad_email.exe]] ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Toon !! Songs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[sugarbob]] (hidden commentary) || Sugarpie, Sugarbob (by Marzipan)&amp;lt;br&amp;gt;The Saddest Song (by Marzipan)&lt;br /&gt;
|-&lt;br /&gt;
| [[long pants]] (hidden commentary) || Fangle Jangle (by Marzipan)&amp;lt;br&amp;gt;Jingle Jangle (by Marzipan)&lt;br /&gt;
|-&lt;br /&gt;
|[[secret identity]] (hidden commentary) || &amp;quot;This Time It's You (This Time It's Me)&amp;quot; (by Homestar)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== from Other Sources ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! From !! Songs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Quote of the Week]], 06 July 2006 || Cool Tapes 3&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Quote of the Week]], 18 August 2006 || When Email Comes To Town&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[They Might Be Giants]] Podcast37A || [[Crystal Fortress]] &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Quote of the Week]], 25 July 2009 || Stinkoman 20X6 level 1 fanmade heavy metal remix &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== [[TMBG Concert - 3 May 2006]] ===&lt;br /&gt;
*Everybody To The Limit (by TBC, performed by Strong Bad and TMBG)&lt;br /&gt;
&lt;br /&gt;
== Songs partly by The Brothers Chaps ==&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;from_Toons-p&amp;quot;&amp;gt;from Toons&amp;lt;/h3&amp;gt;&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Toon !! Songs&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[A Holiday Greeting]] || Oh Holy Crap (based on &amp;quot;O Holy Night&amp;quot;, music by [[Wikipedia:Adolphe Adam|Adolphe Adam]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Ever and More!]] || DuckTales by Mark Mueller (Parody lyrics sung by Homestar)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Puppet Jam: Bad Jokes]] || Bad Jokes (collaborative effort with TBC and TMBG)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Puppet Jam: Tropical Lazor Beams]] || Tropical Lazor Beams (collaborative effort with TBC and TMBG)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Puppet Jam: Vitamins/Celebrities]] || Vitamins (collaborative effort with TBC and TMBG)&amp;lt;br&amp;gt;Celebrities (collaborative effort with TBC and TMBG)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[The Best Decemberween Ever]] || Decemberween, Decemberween (based on &amp;quot;O Tannenbaum&amp;quot;/&amp;quot;O Christmas Tree&amp;quot;, composer unknown)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[The House That Gave Sucky Treats]] || [[Wikipedia:Blitzkrieg Bop|Blitzkrieg Bop]] by [[Wikipedia:The Ramones|The Ramones]] (Parody lyrics sung by Marzipan)&amp;lt;br&amp;gt;Believe It Or Not (&amp;quot;Theme From [[Wikipedia:The Greatest American Hero|The Greatest American Hero]]&amp;quot;), by Stephen Geyer and [[Wikipedia:Mike Post|Mike Post]] (Parody lyrics sung by Homestar Runner)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;from_Strong_Bad_Emails-p&amp;quot;&amp;gt;from [[Strong Bad Email|Strong Bad Emails]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Email !! Songs&lt;br /&gt;
|-&lt;br /&gt;
| [[japanese cartoon]] || Rad Racer/Stinkoman Theme Song (Music by [[Wikipedia:Nobuo Uematsu|Nobuo Uematsu]], lyrics by The Brothers Chaps)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[anything]] || [[Wikipedia:The NeverEnding Story (film)#Music|The NeverEnding Story]] (music by [[Wikipedia:Giorgio Moroder|Giorgio Moroder]]), parody lyrics sung by Homestar Runner&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[colonization]] || O Shanama (based on &amp;quot;O Canada!&amp;quot;, music by [[Wikipedia:Calixa Lavall&amp;amp;eacute;e|Calixa Lavall&amp;amp;eacute;e]])&amp;lt;br&amp;gt;Shanama! (based on &amp;quot;[[Wikipedia:Panama (song)|Panama]]&amp;quot; by [[Wikipedia:Van Halen|Van Halen]])&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[different town]] || email intro song, new lyrics to &amp;quot;[[TMBW: Ana Ng|Ana Ng]]&amp;quot; by They Might Be Giants&amp;lt;br&amp;gt;Different Town (music by They Might Be Giants, lyrics by The Brothers Chaps)&lt;br /&gt;
|-&lt;br /&gt;
| [[Videro Games]] || email intro song based on &amp;quot;[[Wikipedia:We Are the World|We Are the World]]&amp;quot; by [[Wikipedia:Michael Jackson|Michael Jackson]] and [[Wikipedia:Lionel Richie|Lionel Richie]]&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[strong badathlon]] || &amp;quot;[[Wikipedia:Old Time Rock and Roll|Old Time Rock and Roll]]&amp;quot; by [[Wikipedia:Bob Seger|Bob Seger]], parody lyrics sung by Homestar Runner&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[the paper]] || [[Wikipedia:The NeverEnding Story (film)#Music|The NeverEnding Story]] (music by [[Wikipedia:Giorgio Moroder|Giorgio Moroder]]), parody lyrics sung by Homestar Runner&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== [[TMBG Concert - 25 Sep 2004]] ===&lt;br /&gt;
[[Image:TMBG Marshie closeup 20040925.jpg|thumb|Marshie on stage]]&lt;br /&gt;
*[[TMBG Concert - 25 Sep 2004#Marshy.27s_Song|Marshy's Song]] (collaborative effort with TBC and TMBG)&lt;br /&gt;
*[[TMBG Concert - 25 Sep 2004#With_a_Little_Help_From_My_Friends|With a Little Help From My Friends]] (song by [[Wikipedia:Lennon-McCartney|Lennon-McCartney]], collaborative effort with TBC and TMBG)&lt;br /&gt;
**Also as [[TMBG Concert - 25 Sep 2004#Soundcheck_-_Homestar_and_Friends|Homestar and Friends]]&lt;br /&gt;
*[[TMBG Concert - 25 Sep 2004#Soundcheck_-_Marshy_Make-Up|Marshy Make-Up]] (collaborative effort with TBC and TMBG)&lt;br /&gt;
&lt;br /&gt;
== Songs not by The Brothers Chaps ==&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;from_Toons-n&amp;quot;&amp;gt;from Toons&amp;lt;/h3&amp;gt;&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Toon !! Songs&lt;br /&gt;
|-&lt;br /&gt;
| [[Ballad of The Sneak]] || &amp;quot;The Ballad of The Sneak&amp;quot;, written and sung by members of [[DaVinci's Notebook]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Experimental Film]] || &amp;quot;[[Wikipedia:Experimental Film (song)|Experimental Film]]&amp;quot; by [[They Might Be Giants]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Kick the Can]] || &amp;quot;[[Wikipedia:The Entertainer (rag)|The Entertainer]]&amp;quot; by [[Wikipedia:Scott Joplin|Scott Joplin]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Main Page 4]] || &amp;quot;Renegade Master&amp;quot; by [[Wikipedia:Fatboy Slim|Fatboy Slim]] (Note: Only on older version of [[Main Page 4]]. See [[Secret Pages]].)&lt;br /&gt;
|-&lt;br /&gt;
| [[Main Page 6]] || &amp;quot;[[Wikipedia:Knockin' on Heaven's Door|Knockin' On Heaven's Door]]&amp;quot; by [[Wikipedia:Bob Dylan|Bob Dylan]] (Sung by Strong Bad)&lt;br /&gt;
|-&lt;br /&gt;
| [[Main Page 8]] || &amp;quot;[[Wikipedia:Up, Up and Away|Up, Up and Away]]&amp;quot; by [[Wikipedia:The Fifth Dimension|The Fifth Dimension]] (Sung by Strong Bad)&lt;br /&gt;
|-&lt;br /&gt;
| [[Malloween Commercial]] || &amp;quot;[[Wikipedia:Toccata and Fugue in D Minor|Toccata and Fugue in D Minor]]&amp;quot; (BWV 565) by [[Wikipedia:Johann Sebastian Bach|Johann Sebastian Bach]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Marshmallow's Last Stand]] || &amp;quot;[[Wikipedia:Tropicalia (Beck song)|Tropicalia]]&amp;quot; by [[Wikipedia:Beck|Beck]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Marzipan's Answering Machine Version 7.0]] || &amp;quot;[[Wikipedia:Back in Black (song)|Back In Black]]&amp;quot; by [[Wikipedia:AC/DC|AC/DC]] (sung by Homestar Runner)&lt;br /&gt;
|-&lt;br /&gt;
| [[Marzipan's Answering Machine Version 14.2]] || &amp;quot;[[Wikipedia:An American Tail#Soundtrack|Somewhere Out There]]&amp;quot; by [[Wikipedia:James Horner|James Horner]], [[Wikipedia:Barry Mann|Barry Mann]] and [[Wikipedia:Cynthia Weil|Cynthia Weil]] (sung by Homestar Runner)&lt;br /&gt;
|-&lt;br /&gt;
| [[Sing Along]] || &amp;quot;[[Wikipedia:The Rose (song)|The Rose]]&amp;quot; by [[IMDB:nm0564389|Amanda McBroom]] (sung by Homestar Runner)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| [[Strong Bad Sings]] || (web version) &amp;quot;[[Wikipedia:Happy Birthday to You|Happy Birthday to You]]&amp;quot;, music by Patty and Mildred Hill, lyricist anonymous (Barely sung by Strong Mad)&amp;lt;br&amp;gt;(DVD version) &amp;quot;[[Wikipedia:Hot cross bun#Music|Hot Cross Buns]]&amp;quot;, traditional (Barely sung by Strong Mad)&lt;br /&gt;
|-&lt;br /&gt;
| [[Strong Bad Main Page]] || &amp;quot;[[Wikipedia:Do You Feel Like We Do|Do You Feel Like We Do]]&amp;quot; by [[Wikipedia:Peter Frampton|Peter Frampton]]&lt;br /&gt;
|-&lt;br /&gt;
| [[The Cheat Theme Song]] || &amp;quot;The Cheat Theme Song&amp;quot; by [[The Skate Party]]&lt;br /&gt;
|-&lt;br /&gt;
| [[On Break]] || &amp;quot;[[Wikipedia:Yakety Sax|Yakety Sax]]&amp;quot; by [[Wikipedia:Boots Randolph|Boots Randolph]] and James Q. &amp;quot;Spider&amp;quot; Rich (sung by [[The Brothers Chaps]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;from_Strong_Bad_Emails-n&amp;quot;&amp;gt;from [[Strong Bad Email|Strong Bad Emails]]&amp;lt;/h3&amp;gt;&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=4 style=&amp;quot;border-collapse:collapse&amp;quot; &lt;br /&gt;
|- bgcolor=#eeeeee&lt;br /&gt;
! Toon !! Songs&lt;br /&gt;
|-&lt;br /&gt;
| [[ghosts#Easter_Eggs|ghosts]] || &amp;quot;Ghost of John&amp;quot; (traditional, sung by Strong Sad)&lt;br /&gt;
|-&lt;br /&gt;
| [[lunch special]] || &amp;quot;[[Wikipedia:Aloha 'Oe|Aloha 'Oe]]&amp;quot; (sung by [[The Brothers Chaps]])&lt;br /&gt;
|-&lt;br /&gt;
| [[car]] || &amp;quot;Theme from [[Wikipedia:Night Court|Night Court]]&amp;quot; by [[Wikipedia:Jack Elliot|Jack Elliot]] (sung by Homestar Runner)&lt;br /&gt;
|-&lt;br /&gt;
| [[strong badathlon]] || &amp;quot;[[Wikipedia:Old Time Rock and Roll|Old Time Rock and Roll]]&amp;quot; by [[Wikipedia:Bob Seger|Bob Seger]] (sung by [[Homestar Runner]])&lt;br /&gt;
|-&lt;br /&gt;
| [[your funeral]] || [[Wikipedia:Piano Sonata No. 2 (Chopin)|Piano Sonata No. 2 in B flat minor, op. 35]] (Movement 3, main theme) by [[Wikipedia:Fr&amp;amp;eacute;d&amp;amp;eacute;ric Chopin|Fr&amp;amp;eacute;d&amp;amp;eacute;ric Chopin]] (sung by Strong Bad)&lt;br /&gt;
|-&lt;br /&gt;
| [[email thunder]] || &amp;quot;200 sbemails&amp;quot; by They Might Be Giants (sung by John Linnell as [[The Poopsmith]])  (later featured on the TMBG's &amp;quot;Album Raises New And Troubling Questions&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Songs by [[Matt Chapman]] from Sealab 2021 ==&lt;br /&gt;
*[[The Brothers Chaps' Side Projects#Television|Respek Knuckles]]&lt;br /&gt;
*[[The Brothers Chaps' Side Projects#Television|The Knowledge Hat]]&lt;br /&gt;
&lt;br /&gt;
{{Songs}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Lists]][[Category:Songs| ]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Glossary</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Glossary"/>
				<updated>2017-06-28T10:37:35Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by DorianGray&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{about|terms regarding the [[:Homestar Runner (body of work)|Homestar Runner]] body of work}} {{for|terms regarding the wiki|HRWiki:Glossary}}&lt;br /&gt;
[[File:dictionary.png|thumb|Everything from ab-abber to zawesome]]&lt;br /&gt;
The [[Homestar Runner (body of work)|Homestar Runner]] body of work uses many confusing terms that someone new to the series might not understand. Here is a compilation of such words to be used as a reference.&lt;br /&gt;
&lt;br /&gt;
If a word is linked (in blue), click on the link to find out more information about the topic.&lt;br /&gt;
&lt;br /&gt;
Note: Most of these are not real words and exist only in the H*R universe.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{{compactTOC3}}&lt;br /&gt;
== # ==&lt;br /&gt;
'''[[20X6]]''' ''(n.)'': Pronounced ''twenty-exty-six'', this is possibly the eventual future of [[Free Country, USA]]. It's the time period that [[Stinkoman]] and company live in. 20X6 is also [[The Brothers Chaps]]' way of parodying the Megaman series, which takes place during the year 20XX, as well as anime in general.  &lt;br /&gt;
&lt;br /&gt;
'''[[404'd | 404'd!]]''' ''(v.)'':  A message that pops up when one types a homestarrunner.com address that doesn't exist into one's browser. See [[-'d]].&lt;br /&gt;
&lt;br /&gt;
== A ==&lt;br /&gt;
'''[[ab-abber]]''' ''(prop. n.)'': A product invented by Strong Bad which lets you create abs like the professionals in &amp;quot;minutes — nay, seconds!&amp;quot; Consists of one permanent marker (permanent marker not included).&lt;br /&gt;
&lt;br /&gt;
'''[[Wikipedia:Adobe Flash|Adobe Flash]]''' ''(prop. n.)'': The software formerly known as &amp;quot;Macromedia Flash&amp;quot; that the [[The Brothers Chaps]] use to make the Homestar Runner cartoons. &lt;br /&gt;
&lt;br /&gt;
'''[[all up ons]]''' ''(adj. phrase)'': Into, interested in, or attracted to. Example, &amp;quot;The ladies are 'all up ons.'&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''anonny''' ''(n.)'': &amp;quot;[[Anonymous Contributor]].&amp;quot; Example: &amp;quot;Hey, Anonny! Why don't ya, um, write a poem or something and not attribute it to yourself!&amp;quot; First used in [[rock opera]]. ''See also: [[HRWiki:Glossary#A|HRWiki:Glossary]].''&lt;br /&gt;
&lt;br /&gt;
'''ARROWED!''' ''(v.)'': Causing injury, usually to any member of the [[Teen Girl Squad]], in which [[Arrow'd Guy]] spits arrows out of his mouth at [[The Ugly One]]. It also happens to Trogdor in the [[TROGDOR!]] game. You also get ARROWED in [[Peasant's Quest]] if you walk in front of the archer in the hidden glen, and the [[Kerrek]] gets ARROWED when you shoot him. (See also: [[#S|SWORDED!]])&lt;br /&gt;
&lt;br /&gt;
'''awexome''' ''(adj.)'': Similar to awesome, but even more so. See [[Awexome Cross]].&lt;br /&gt;
&lt;br /&gt;
== B ==&lt;br /&gt;
'''[[50 emails#Homestar's attempts at DELETED|BALEETED!]]''' ''(v.)'': Another way to say &amp;quot;deleted&amp;quot;. From [[50 emails]], in which Homestar has trouble recollecting the word &amp;quot;deleted&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[Bennedetto]]''', Frank ''(prop. n.)'': The Presto Air Popper (popcorn popper) that serves in the [[Homestarmy]].&lt;br /&gt;
&lt;br /&gt;
'''boat take''', ''(n.)'': As seen in the email [[environment]], Strong Bad includes this term in his list of ways to say &amp;quot;butt&amp;quot; that is &amp;quot;Okay for Mom&amp;quot;.  He repeats it throughout the email.&lt;br /&gt;
&lt;br /&gt;
'''boodroscotch''' ''(n.)'' : A sweet, boodro-based sauce that that doubles as a kudrow-based adhesive. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
'''Brothers Strong''' ''(prop. n.)'': Brothers [[Strong Bad]], [[Strong Mad]] and [[Strong Sad]], collectively.&lt;br /&gt;
&lt;br /&gt;
'''burninate''' ''(v.)'': To burn up with fire, as by [[Trogdor]] in the [[TROGDOR!]] video game and elsewhere.&lt;br /&gt;
&lt;br /&gt;
'''burnination''' ''(n.)'': Utter burned ruin; the aftermath when [[Trogdor]] breathes fire at (burninates) something. This expression is first seen in the [[Strong Bad Email]] [[interview]].&lt;br /&gt;
&lt;br /&gt;
'''[[Spin My Buzzer|buzzer]]''' ''(n.)'': The propeller on Homestar's beanie cap.&lt;br /&gt;
&lt;br /&gt;
'''bwathom''' ''(n.)'': First used in [[isp]]; re-used in [[environment]] as a way to say &amp;quot;butt&amp;quot; that is &amp;quot;Okay for Mom&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== C ==&lt;br /&gt;
'''carp for brains''' : A variant of crap for brains. &amp;quot;Now spell: Carp for Brains.&amp;quot; See also &amp;quot;brain for brains&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''CGNU''' ''(prop. n.)'': [[Crazy Go Nuts University]]. A school that [[Strong Bad]] created. Visually pronounced &amp;quot;see gee in you&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[challenge]]''' ''(n.)'': A favorite word (and pastime) of Stinkoman.&lt;br /&gt;
&lt;br /&gt;
'''[[The Cheatcakes|cheatcakes]]''' ''(n.)'': Small cakes made of steam and sugar by The Cheat as a substitute for Grumblecakes in the [[Strong Bad Email|email]] [[stupid stuff]].&lt;br /&gt;
&lt;br /&gt;
The '''Chekt''' ''(prop. n.)'': An animal invented by Strong Bad. Strong Bad's poopaw supposedly has a recipe for &amp;quot;Chicken-fried the CHEKT&amp;quot;. In reality, Strong Bad has a secret family recipe for cooking The Cheat. See [[secret recipes]].&lt;br /&gt;
&lt;br /&gt;
'''chonk''' ''(v.)'': A synonym for &amp;quot;hate&amp;quot; that Marzipan uses in [[Homestar Ruiner]].&lt;br /&gt;
&lt;br /&gt;
'''[[Coach Zed]]''' ''(prop. n.)'': The Canadian pronunciation of [[Coach Z]] as seen in [[do over]].&lt;br /&gt;
&lt;br /&gt;
'''combolations''' ''(n.)'': [[Senor Cardgage]]'s way of saying &amp;quot;Congratulations.&amp;quot; See [[flashback]] (Easter egg) and [[japanese cartoon]].&lt;br /&gt;
&lt;br /&gt;
'''congraturation''' ''(n.)'': A misspelling of &amp;quot;Congratulations&amp;quot; that is shown in a video game when the end boss has been beaten, or a food looking similar to a muffin. See [[Videro Games]].&lt;br /&gt;
&lt;br /&gt;
'''[[crap]]''' ''(interjection)'': Strong Bad's favorite exclamation. Other forms of the word include &amp;quot;Crap for Brains&amp;quot;, &amp;quot;Crap for Crap&amp;quot;, etc.  See also &amp;quot;Holy Crap&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[Crap for Brains]]''' ''(n.)'': A favorite insult of Strong Bad's. A combination of the [[crap]] and [[x for brains]] running gags. See also &amp;quot;carp for brains&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== D ==&lt;br /&gt;
'''[[-'d|-'D!]]'''; '''[[-'d|-ED!]]''' ''(suffix)'': Popular ending to attacks, etc. See ARROWED!, CHILDREN'D!, MSG'D!, CEREBELLUM'D!, LATE 360 SHOVE-IT TO BONELESS'D!, TWO'D!, FLOOR TOMMED!, STEP-MOMMED!, POM-POMMED?, TWELVE-SIDED DIE'D!, SWORDED!, etc.&lt;br /&gt;
&lt;br /&gt;
'''Dag, yo''' ''(interjection)'': The equivalent of saying &amp;quot;Dang, man&amp;quot; or something close to that.  Used in [[comic]]/[[Teen Girl Squad Issue 1]] by [[What's Her Face]].&lt;br /&gt;
&lt;br /&gt;
'''[[Decemberween]]''' ''(prop. n.)'': A holiday celebrated like Christmas. Gifts are exchanged and it is on the 25th of December. In [[Homestar Presents: Presents]] Bubs sells Homestar last-minute discount gifts.&lt;br /&gt;
&lt;br /&gt;
'''[[DELETED]]!!!''' ''(adj.)'': [[Strong Bad]]'s preferred method of dealing with emails unworthy of his attention, or ones he wishes to make examples of.&lt;br /&gt;
&lt;br /&gt;
'''[[DELETED#Fun Facts and Abnormalities|DELORTED]]!!!''' ''(adj.)'': [[Coach Z]]'s Pronunciation of 'DELETED!!!'. Seen in [[replacement]]. Screen turns dark gold, as opposed to the usual blue.&lt;br /&gt;
&lt;br /&gt;
'''[[Dennis]]''' ''(prop. n.)'': In [[Thy Dungeonman]], &amp;quot;Dennis&amp;quot; is first an &amp;quot;obvious exit&amp;quot; from the initial room, in addition to North and South. If you choose it, the game shifts to talking about Dennis as a character in a &amp;quot;sporty frock coat and a long jimberjam.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Denny's Menu''' ''(n.)'': This is the title of the [[Strong Bad Email]] menu page, where [[Strong Bad]] (occasionally accompanied by another character) does his scroll button songs. The title is a play on the kind of restaurant menu you would find at [http://www.dennys.com Denny's].&lt;br /&gt;
&lt;br /&gt;
'''doodle memory''' ''(n.)'': First coined in the email [[highschool]], this is known as Strong Bad's  poor, unphotographic memory. Oftentimes, the content of any of Strong Bad's reminiscences is considered debatable because of this (see [[History according to Strong Bad]]).  &lt;br /&gt;
&lt;br /&gt;
'''doppy''' ''(adj.)'': According to TV Time Magazine, Homestar and Company eat [[pie]] and get doppy. The term is never fully explained, although it may be a misspelling of &amp;quot;dopey&amp;quot;. Also, it is unclear whether &amp;quot;getting doppy&amp;quot; is a result of eating pie or a separate activity. See [[TV Time Toons Menu]].&lt;br /&gt;
&lt;br /&gt;
'''dribble-drabble''' ''(v.)'' : To make frozen cheescake appear delicious by scribbling raspberry sauce over it. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
'''[[dumb animal characters]]''' ''(n.)'': The term used as an inside joke by [[The Brothers Chaps]] in various interviews, etc., to describe the [[Characters#Main characters|main characters]].&lt;br /&gt;
&lt;br /&gt;
'''Dumples''' ''(prop. n.)'': The name of [[Crazy Go Nuts University]]'s sports teams. The CGNU mascot is [[The Jolly Dumple]].&lt;br /&gt;
&lt;br /&gt;
== E ==&lt;br /&gt;
'''[[Easter egg]]''' ''(n.)'': A hidden feature in a website (they also appear elsewhere, such as DVDs and games). Authors put them in as inside jokes, or to reward especially dedicated visitors/viewers/players (or just the ones with the most spare time). Most [[Strong Bad Email|Strong Bad Emails]] have at least one Easter egg, as do other parts of the site.&lt;br /&gt;
&lt;br /&gt;
'''Engsmsplode''' ''(v.)'': A variant of &amp;quot;explode&amp;quot;, used in [[fan club]]. Example: &amp;quot;Suddenly, an eight-foot sub sandwich constrictor eng...sm...sploded out of nowhere!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Entrangled''' ''(adj.)'': Strong Bad's word for being hypnotized/entranced.  A combination of entranced/entangled. Seen in [[what I want]].&lt;br /&gt;
&lt;br /&gt;
== F ==&lt;br /&gt;
'''fangoriously''' ''(adv.)'': A way to describe being devoured and subsequently digested, often by a gelatinous monster or by something with fangs, first seen in [[kids' book]].&lt;br /&gt;
&lt;br /&gt;
'''[[Fhqwhgads]]''' ''(prop. n.)'': A shortened version of the name of the fan who sent the email [[i love you]]. It was later used in the #1 summer jam [[Everybody to the Limit]].&lt;br /&gt;
&lt;br /&gt;
'''[[Fluffy Puff Marshmallows]]''' ''(prop. n.)'': A popular brand of marshmallow in the [[Homestar Runner universe]].&lt;br /&gt;
&lt;br /&gt;
'''[[Free Country, USA]]''' ''(prop. n.)'': The town in which the [[Homestar Runner universe]] is centered.&lt;br /&gt;
&lt;br /&gt;
== G ==&lt;br /&gt;
'''gelatinous''' ''(adj.)'': Having a jelly-like consistency. Kids will learn this word when reading [[Strong Bad]]'s [[kids' book|children's book]], along with &amp;quot;fangoriously&amp;quot; and &amp;quot;linebacker&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''GEWD''' ''(adj.)'': Exceptionally good. Was spelled out by Strong Bad to describe [[Suudsu]] in [[bedtime story]].&lt;br /&gt;
&lt;br /&gt;
'''good prize''' ''(n.)'': An award for high-quality work. See [[Pumpkin Carve-nival]].&lt;br /&gt;
&lt;br /&gt;
'''grodalated''' ''(adj.)'': Grungy; dirty. First used to describe [[The Denzel]] in [[bedtime story]].&lt;br /&gt;
&lt;br /&gt;
'''Graw Mad''' ''(prop. n.)'': A nickname for Strong Mad. Used by Strong Bad in [[the facts]] and various toons onward.&lt;br /&gt;
&lt;br /&gt;
'''Gron Sad''' ''(prop n.)'': A nickname for Strong Sad. Used by Strong Bad in [[car]].&lt;br /&gt;
&lt;br /&gt;
'''grood''' ''(adj.)'': A term [[Portmanteaus|meaning both great and good]]. Used by [[Cheerleader]] in [[Teen Girl Squad Issue 4]].&lt;br /&gt;
&lt;br /&gt;
'''[[Grumblecakes]]''' ''(n.)'': A snack food made from steam and sugar, desired by Strong Bad and Homestar in [[stupid stuff]].  In an Easter egg from that email, an advertisement for [[The Cheatcakes]] claims, &amp;quot;Only liars and thieves eat Grumblecakes, and those people go to prison.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''gutterances''' ''(n.)'' : Low growly noises made to express utter disdain at another person's very existence. A [[portmanteau]] of guttural and utterances. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
== H ==&lt;br /&gt;
'''H*R''', also '''HSR''' ''(abbrev; n.)'': [[Homestar Runner]], often used to refer to the [[Homestar Runner (body of work)|body of work]] as well.&lt;br /&gt;
&lt;br /&gt;
'''[[holy crap]]''' ''(interjection)'': A common term used by [[Strong Bad]]. It is usually said when Strong Bad is angry, annoyed, upset, or surprised.&lt;br /&gt;
&lt;br /&gt;
'''[[Homestar Runner universe]]''' ''(n.)'': The fictional realm in which [[Homestar Runner]] and the rest of the [[characters]] live.&lt;br /&gt;
&lt;br /&gt;
'''[[Da Huuuuuudge]]''' ''(prop. n.)'': A yellow translucent blob-like creature that [[Strong Bad]] imagined for himself to be in [[animal]]. See &amp;quot;[[Made-Up Strong Bad Animals]].&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''hwimswelf''' ''(n.)'' : The Cheat's carpet &amp;amp; couch and satin sheets ruining owndangself. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
== I ==&lt;br /&gt;
&lt;br /&gt;
== J ==&lt;br /&gt;
'''[[jibblies]]''' ''(n.)'': A condition that is fairly equivalent to &amp;quot;the creeps&amp;quot; (e.g. the thought of getting a root canal gives me the creeps; that moldy hamster gives me the jibblies). [[Jibblies Painting|That horrible painting]] in Strong Mad's closet also gives characters the jibblies after saying &amp;quot;Come on in here!&amp;quot; in a creepy voice, which was seen in [[bottom 10]], and [[Jibblies 2]].&lt;br /&gt;
&lt;br /&gt;
'''jillion''' ''(n.)'': A very large imaginary number.&lt;br /&gt;
&lt;br /&gt;
'''jimmies''' ''(n.)'': What [[The Ugly One]] received on the surface of her yogurt from [[Teen Girl Squad Locations#TCYBCBY|TCYBCBY]]. They consist of small particles of chocolate or flavored candy sprinkled on ice cream as a topping. A more common name for them is &amp;quot;sprinkles&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''jorb''' ''(n.)'': How [[Coach Z]] used to pronounce job. Other versions include adding syllables to the same word, drawing it out. See [[A Jorb Well Done]].&lt;br /&gt;
&lt;br /&gt;
'''jumbo/LARGE''' ''(adj.)'': A [[#M|maxymoron]] used to describe the size of something.&lt;br /&gt;
&lt;br /&gt;
'''Jorjyfruits, Jerjyfrorts, Georgie Frorgie, [[Wikipedia:George Foreman|George Foreman]]''': ''(n.)'' Coach Z's attempts to pronounce &amp;quot;[[Wikipedia:Jujyfruits|Jujyfruits]]&amp;quot; in [[The House That Gave Sucky Treats]].&lt;br /&gt;
&lt;br /&gt;
== K ==&lt;br /&gt;
'''keep on tranglin'''' ''(idiom)'': See &amp;quot;[[#T|tranglin']]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[Kerrek]]''' ''(prop. n.)'': A big smelly troll that likes to pound things, such as peasants. See [[Peasant's Quest]].&lt;br /&gt;
&lt;br /&gt;
== L ==&lt;br /&gt;
'''LTWFTW''' ''(abbrev.)'': Long Time Watcher, First Time Writer.  Said of a fan in [[stunt double]].&lt;br /&gt;
&lt;br /&gt;
== M ==&lt;br /&gt;
&lt;br /&gt;
'''[[mans]]''' ''(n.)'': The term used to denote how many lives/chances you have remaining in games where such is applicable.&lt;br /&gt;
&lt;br /&gt;
'''[[Mashing|mash]]''' ''(v.)'': To press a button, as in &amp;quot;mash go&amp;quot; or &amp;quot;mash play&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''maxymoron''' ''(n.)'': A portmanteau of the words &amp;quot;maximum&amp;quot; and &amp;quot;oxymoron&amp;quot;. Used by Strong Bad to refer to the inside joke &amp;quot;[[#J|jumbo/LARGE]]&amp;quot; in [[road trip]].&lt;br /&gt;
&lt;br /&gt;
'''[[melonade]]''' ''(n.)'': A drink that [[Homestar Runner|Homestar]] consumes in large quantities. Presumably made from melons.&lt;br /&gt;
&lt;br /&gt;
'''meh''' ''(interjection)'': An expression commonly used by The Cheat.&lt;br /&gt;
&lt;br /&gt;
== N ==&lt;br /&gt;
&lt;br /&gt;
'''nudule''' ''(noun)'': Presumably a variant of nodule, found on Space Whales. Said by Strong Bad in [[from work]].&lt;br /&gt;
&lt;br /&gt;
== O ==&lt;br /&gt;
&lt;br /&gt;
'''overling''' ''(noun)'': A person of a higher rank than oneself. Superior to an underling. Used in [[the chair]].&lt;br /&gt;
&lt;br /&gt;
== P ==&lt;br /&gt;
'''PBTC''' ''(abbrev; n.; adj.)'': [[Powered by The Cheat]].&lt;br /&gt;
&lt;br /&gt;
'''peasant''' ''(n.)'': In order to be classified as a peasant in [[Peasant's Quest]], you must stink like a peasant, dress like a peasant (that is, wear a robe), and be on fire like a peasant.&lt;br /&gt;
&lt;br /&gt;
'''pfargtl''' ''(n.)'' ''(puh-FARG-tuhl)'': A word created by [[Coach Z]] in [[Sbemail 169 Deleted Scene]]. It is supposedly the name of his favorite animal that he had as a pet when he was younger. It is also used as a [[swear]] by Homestar.&lt;br /&gt;
&lt;br /&gt;
'''[[piemonade]]''' ''(n.)'': A beverage that appears to be lemonade with a slice of [[pie]] in it. Around [[the office]], it's known as p-nade. Seen in [[other days]].&lt;br /&gt;
&lt;br /&gt;
'''poopaw''' ''(n.)'': Some sort of relative of Strong Bad's. No one is quite sure what a poopaw is. Referred to in [[secret recipes]], he is the keeper of the secret recipe for &amp;quot;Chicken-fried [[#C|the CHEKT]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[preeeeow]]''' ''(interjection; n.)'': An [[onomatopoeia]] used to describe [[The Paper]]'s sound effect.&lt;br /&gt;
&lt;br /&gt;
'''pretendicitis''' ''(n.)'': A disease involving the made up organ &amp;quot;pretendix&amp;quot;. Its symptoms include high fevers, uncontrollable shaking, and inability to understand language.&lt;br /&gt;
&lt;br /&gt;
'''pretendix''' ''(n.)'': A organ made up by Strong Sad in [[Strong Badia the Free]], probably similar to the appendix.&lt;br /&gt;
&lt;br /&gt;
'''pretendous''' ''(adj.)'': &amp;quot;Outrageous&amp;quot;. Possibly formed by a blend of &amp;quot;pretend&amp;quot; and &amp;quot;tremendous&amp;quot; or a mispronunciation of the word &amp;quot;pretentious&amp;quot;. Used thus far in regard to things like money and bills. See [[extra plug]] and [[Fan Costume Commentary]].&lt;br /&gt;
&lt;br /&gt;
'''prinicpal''' ''(n.)'': Strong Bad's job at both [[Crazy Go Nuts University]] and at [[Tompkins]]'s school.&lt;br /&gt;
&lt;br /&gt;
'''probalo''' ''(n.)'': &amp;quot;Problem&amp;quot;. Usually used by [[Senor Cardgage]] in the phrase &amp;quot;no probalo&amp;quot;,  which is a mangling of &amp;quot;no problemo&amp;quot;, which itself is pseudo-[[Spanish]] for &amp;quot;no problem&amp;quot;. See [[Senor Mortgage]].&lt;br /&gt;
&lt;br /&gt;
'''prooty''' ''(adj.)'': A mispronunciation of &amp;quot;pretty&amp;quot;. EX: &amp;quot;You're looking prooty hot.&amp;quot; See [[Lappy 486#Female Lappy 486|Female Lappy 486]].&lt;br /&gt;
&lt;br /&gt;
== Q ==&lt;br /&gt;
&lt;br /&gt;
== R ==&lt;br /&gt;
'''Red Steckled Elbermung''' ''(prop. n.)'': A creature that [[Strong Bad]] imagined for himself to be in [[animal]]. See &amp;quot;[[Made-Up Strong Bad Animals]].&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== S ==&lt;br /&gt;
'''sammich''' ''(n.)'': Sandwich. Said in [[Weclome Back]] and [[The Baloneyman]].&lt;br /&gt;
&lt;br /&gt;
'''sawesome''' ''(adj.)'' : Not unlike having the qualities of an awesome sauce. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
'''[[SBLOUNSKCHED! Bar|SBLOUNSKCHED!]]''' ''(prop. n.; v.)'': (from email [[candy product]]), a candy bar consisting of such products as marshmallow vapor, rich creamy pepperoni, and tiny bowls of crispy-puffed-rice cereal. Its name is described as 50% Strong Bad, 50% tooth rot, and 50% ta-dah! (adding up to 150%). This is a parody of extreme marketing, which makes nauseatingly gratuitous use of exclamation points and dangerous-sounding names.&lt;br /&gt;
&lt;br /&gt;
'''Sibbie''' ''(prop. n.)'': Someone who asked [[Strong Bad]] to write a song about him/her after he made one about [[fhqwhgads]]. Strong Bad refused, but somehow he made two songs: &amp;quot;Song About Sibbie&amp;quot; and &amp;quot;I Freakin' Hate Sibbie&amp;quot;.  See [[sibbie]].&lt;br /&gt;
&lt;br /&gt;
'''skillet-nap''' ''(n.)'': A state of unconsciousness following a hit to the face with a skillet. Homestar seems to enjoy them, as seen in [[Bug In Mouth Disease]].&lt;br /&gt;
&lt;br /&gt;
'''smunderling''' ''(n.)'': A smelly [[#U|underling]]. &lt;br /&gt;
&lt;br /&gt;
'''someteen''' ''(adj.)'': An unspecified number; used by [[Strong Bad]] in [[Teen Girl Squad Issue 10]] and [[strong badathlon]].&lt;br /&gt;
&lt;br /&gt;
'''[[soolnds]]''' ''(n.)'': The term Strong Sad coined for his distinct feet, and also what he wants others to call them (instead of &amp;quot;elephant feet&amp;quot;), as seen in his [[Strong Sad's Lament|blog]].&lt;br /&gt;
&lt;br /&gt;
'''SOOO GOOD!''' ''(interjection)'': Usually at the beginning of an issue of [[Teen Girl Squad]], the girls will allude to looking &amp;quot;Sooooooooo Good!&amp;quot; Also said when [[Strong Mad]] was eating [[pasta salad]] from his underdrawer drawer.&lt;br /&gt;
&lt;br /&gt;
'''SWORDED!''' ''(v.)'': This is what happens to [[Trogdor]] in the [[TROGDOR!|Trogdor game]] when he touches a knight.&lt;br /&gt;
&lt;br /&gt;
'''[[Sterrance]]''' ''(prop. n.)'': A creature that Strong Bad imagined for himself to be in [[animal]].&lt;br /&gt;
&lt;br /&gt;
'''[[stnank]]''' ''(n.)'': A [[Made-Up Strong Bad Animals|made-up animal]] seen in the [[Sketchbook 2004#SK-2004-12-02|Sketchbook for December 2, 2004]]. Also, the equivalent of a Strong Bad induced mistake, as seen in email [[do over]].&lt;br /&gt;
&lt;br /&gt;
'''stummy''' ''(n.)'': What [[Stinkoman]] calls his stomach, as seen in [[Stinkoman 20X6]].&lt;br /&gt;
&lt;br /&gt;
'''[[suudsu]]''' ''(n.)'': (From email [[bedtime story]]), a beverage consisting of skim milk and gummy bears which Strong Bad deems &amp;quot;pure genius&amp;quot;. Along with a &amp;quot;[[#G|grodalated]]&amp;quot; [[The Denzel|security &amp;quot;item&amp;quot;]] and a manic lullaby, it aids in helping The Cheat fall asleep. Its name is written like a mock-[[wikipedia:Romanji|Romanji]] spelling of an English-to-Japanese loanword (this one being suds), common for modern products.&lt;br /&gt;
&lt;br /&gt;
== T ==&lt;br /&gt;
&lt;br /&gt;
'''[[Teen Girl Squad|TGS]]''' ''(abbrev; n.)'': Teen Girl Squad.&lt;br /&gt;
&lt;br /&gt;
'''tranglin'''': ''(intr. v.)'': To carry on in a stable yet easygoing manner; ''(idiom)'' &amp;quot;[[#K|keep on tranglin]]&amp;quot; (like &amp;quot;keep on trucking&amp;quot;). Used by Strong Bad in [[lunch special]].&lt;br /&gt;
&lt;br /&gt;
'''Transitive Butt Property''' ''(n.)'':  A mathematic property devised by [[Strong Bad]]. It states that the &amp;quot;stupidity&amp;quot; of somebody's butt is greater than or equal to the &amp;quot;stupidity&amp;quot; of that person's head. See [[butt IQ]].&lt;br /&gt;
&lt;br /&gt;
'''twees''' ''(abbrev; n.)'': &amp;quot;Buttweesimo&amp;quot; (meaning simply &amp;quot;butt&amp;quot;), used in [[lady fan]] and [[Homestar Ruiner]].&lt;br /&gt;
&lt;br /&gt;
== U ==&lt;br /&gt;
'''underling''' ''(n.)'': A person of lower rank than oneself. Inferior to an overling. Used in [[the chair]] and [[underlings]].&lt;br /&gt;
&lt;br /&gt;
== V ==&lt;br /&gt;
'''videro''' ''(n.)'': a misspelling of &amp;quot;video&amp;quot; that appears in [[Strong Bad is in Jail Cartoon]], in the bonus Strong Bad Email [[Videro Games]], in [[Coach Z's 110%]], and in [[Fish Eye Lens]]. In addition, the first frame of the song [[Experimental Film]] is labeled &amp;quot;viderostart&amp;quot; internally. Bubs and Homestar Runner sometimes say &amp;quot;videro game&amp;quot; in the game [[8 Bit Is Enough]].&lt;br /&gt;
&lt;br /&gt;
== W ==&lt;br /&gt;
'''[[whatsit]]''' ''(n.)'':  Whatever it is that [[The Poopsmith]] shovels.&lt;br /&gt;
&lt;br /&gt;
'''whoozit''' ''(n.)'':  Euphemism for puke, upchuck. Used in [[Dangeresque Roomisode 1: Behind the Dangerdesque]].&lt;br /&gt;
&lt;br /&gt;
'''wing-a-ling''' ''(adj.)'':  Having wings.  Routinely used by Strong Bad in place of ''[[Wiktionary:winged|winged]]''. See [[dragon]], [[pop-up]].&lt;br /&gt;
&lt;br /&gt;
'''[[witches' brew]]''' ''(n.)'': Something [[Homestar Runner|Homestar]] Runner likes to say. Seen as an object in [[Halloween Fairstival]].&lt;br /&gt;
&lt;br /&gt;
'''wight''' ''(adj)'': [[Homestar Runner]]'s mispronunciation of the word &amp;quot;right&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''[[wood-daver]]''' ''(n.)'': An arts and crafts activity, invented by [[Strong Sad]] in [[caffeine]], involving pine cones and peanut butter.&lt;br /&gt;
&lt;br /&gt;
'''[[wrestleman]]''' ''(n.)'': A term sometimes used to describe [[Strong Bad]].&lt;br /&gt;
&lt;br /&gt;
'''w00t''' ''(interjection)'': Pronounced like it looks, it is an exclamation of joy. This is used sometimes in [[Teen Girl Squad]].&lt;br /&gt;
&lt;br /&gt;
== X ==&lt;br /&gt;
&lt;br /&gt;
'''X''' (Also known as '''Xty''', '''X-T''', '''XT''', '''Exty''', '''X0''') ''(n.)'': Used in year names referring to [[Stinkoman]], such as [[20X6]]. It is read as a number would be read. In the Tens place, it is said &amp;quot;Exty&amp;quot; (like Twenty). If it were in the Ones place, it would simply be said &amp;quot;Ex&amp;quot;.  Also heard in the [[Strong Bad Email]] [[time capsule]], and other places around the site.&lt;br /&gt;
&lt;br /&gt;
== Y ==&lt;br /&gt;
&lt;br /&gt;
== Z ==&lt;br /&gt;
'''Zawesome''' ''(adj)'' : see crap-for-brains. See [[dictionary]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Inside Jokes]] &lt;br /&gt;
*[[Running Gags]]&lt;br /&gt;
*[[Portmanteaus]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Special Pages]][[Category:Word running gags]][[Category:Lists]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Places</id>
		<title>Places</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Places"/>
				<updated>2017-06-28T10:37:35Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by DorianGray&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a list of the many '''places''' in the [[Homestar Runner universe]], from [[Toons]] to [[Strong Bad Email]]s. &lt;br /&gt;
&lt;br /&gt;
== Main Places ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Bubs Last Stand.PNG|&amp;lt;center&amp;gt;'''[[Bubs' Concession Stand]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:FCUSAMaybe.PNG|&amp;lt;center&amp;gt;'''[[Free Country, USA]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strongbadia.png|&amp;lt;center&amp;gt;'''[[Strong Badia]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Modern The Field.png|&amp;lt;center&amp;gt;'''[[The Field]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TheStick.png|&amp;lt;center&amp;gt;'''[[The Stick]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==[[House of the Brothers Strong]]==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:SB_bathroom.PNG|&amp;lt;center&amp;gt;'''[[Bathroom of the Brothers Strong]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ComputerRoomFull.PNG|&amp;lt;center&amp;gt;'''[[Computer Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:email processing room.png|&amp;lt;center&amp;gt;'''[[Email Processing Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Brothers_Strong_Living_Room.png|&amp;lt;center&amp;gt;'''[[Living Room of the Brothers Strong]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The Basement.PNG|&amp;lt;center&amp;gt;'''[[Basement of the Brothers Strong]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:LaundryRoom.PNG|&amp;lt;center&amp;gt;'''[[Laundry Room of the Brothers Strong]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:BrothersStrongKitchen.png|&amp;lt;center&amp;gt;'''[[Kitchen of the Brothers Strong]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sb room.png|&amp;lt;center&amp;gt;'''[[Strong Bad's Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:origami.png|&amp;lt;center&amp;gt;'''[[Strong Mad's Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail6.PNG|&amp;lt;center&amp;gt;'''[[Strong Sad's Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Houses ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:lockerroom.png|&amp;lt;center&amp;gt;'''[[Coach Z's Locker Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:halloween2001.png|&amp;lt;center&amp;gt;'''[[The Halloween House]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestar_house_interior.png|&amp;lt;center&amp;gt;'''[[Homestar Runner's House]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:marzipanscouch.PNG|&amp;lt;center&amp;gt;'''[[Marzipan's House]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Stinkoman house.png|&amp;lt;center&amp;gt;'''[[Stinkoman Headquarters]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strong_badman's_appartment_outside.PNG|&amp;lt;center&amp;gt;'''[[Strong Badman's Apartment]]'''&lt;br /&gt;
Image:The KoTs Castle Grand.PNG|&amp;lt;center&amp;gt;'''[[The King of Town's Castle]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:grill.PNG|&amp;lt;center&amp;gt;'''[[The King of Town's Grill|The Cheat's House/The King of Town's Grill]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail142.png|&amp;lt;center&amp;gt;'''[[Trailer Home]]'''/Broiter Grove&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Places ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Airplane.png|&amp;lt;center&amp;gt;'''[[Airplane]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Candy product alley.png|&amp;lt;center&amp;gt;'''[[Alleyway]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:the_arctic.png|&amp;lt;center&amp;gt;'''[[The Arctic]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Arena 2.png|&amp;lt;center&amp;gt;'''[[Arena]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sbemail139.png|&amp;lt;center&amp;gt;'''[[Art Museum]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:thefootballfield.png|&amp;lt;center&amp;gt;'''[[The Athletic Field]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Thank_You_5.PNG|&amp;lt;center&amp;gt;'''[[Store Thank You Messages#Back Door Message|Back Door]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Barscene_badguy.png|&amp;lt;center&amp;gt;'''[[The Bar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:main3.PNG|&amp;lt;center&amp;gt;'''[[Beaches|The Beach]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:behindfence.png|&amp;lt;center&amp;gt;'''[[Behind the Fence]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The_Black_Market.PNG|&amp;lt;center&amp;gt;'''[[Black Market]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blubb-OsCommercial.png|&amp;lt;center&amp;gt;'''[[Blubb-O's]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:twinkie.PNG|&amp;lt;center&amp;gt;'''[[Where the Crap Are We?|Blue Fadey Land]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:trogdorcon.PNG|&amp;lt;center&amp;gt;'''[[Booth 101]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bestdecemberween.PNG|&amp;lt;center&amp;gt;'''[[The Brick Wall]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Comedy Club 5.png|&amp;lt;center&amp;gt;'''[[Bubs' Ha-Ha-Halloween Comedy Club]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Missing_Lappy.PNG|&amp;lt;center&amp;gt;'''[[Bulletin Board]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Carnival tent.png|&amp;lt;center&amp;gt;'''[[Carnival Tent]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:cheatroom.png|&amp;lt;center&amp;gt;'''[[The Cheat's Computer Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail158.png|&amp;lt;center&amp;gt;'''The [[Cliff]] in [[cliffhangers]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail136.PNG|&amp;lt;center&amp;gt;'''[[Club Technochocolate]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:SB Classroom.PNG|&amp;lt;center&amp;gt;'''[[The Classroom]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Coches.PNG|&amp;lt;center&amp;gt;'''[[Coches Mountains]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Contest.PNG|&amp;lt;center&amp;gt;'''[[Contest Area]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:CGNU Crest.png|&amp;lt;center&amp;gt;'''[[Crazy Go Nuts University]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ween05.png|&amp;lt;center&amp;gt;'''[[Cliffs#Creepy Cliff|Creepy Cliff]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestarquiz.PNG|&amp;lt;center&amp;gt;'''[[CGNU Prinicpal's Office]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:dining room.png|&amp;lt;center&amp;gt;'''[[The Dining Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Do-Not_shop.PNG|&amp;lt;center&amp;gt;'''[[Do-Nots]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:systemisdown.png|&amp;lt;center&amp;gt;'''[[Error Page]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Forest.png|&amp;lt;center&amp;gt;'''[[The Forest]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:garage.png|&amp;lt;center&amp;gt;'''[[The Garage]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:graffiti wall.png|&amp;lt;center&amp;gt;'''[[Graffiti Wall]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Graveyard.png|&amp;lt;center&amp;gt;'''[[Graveyard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Groupulon.png|&amp;lt;center&amp;gt;'''[[Groupulon 5]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Gymnasium.png|&amp;lt;center&amp;gt;'''[[Gymnasium]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Holiday_Set.png|&amp;lt;center&amp;gt;'''[[Holiday-Themed Set]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Twenty_THANXty_Six.png|&amp;lt;center&amp;gt;'''[[Innards]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The Jail.png|&amp;lt;center&amp;gt;'''[[Jail]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Build-a-deck.png|&amp;lt;center&amp;gt;'''[[Marshmallow's Last Stand (place)|Marshmallow's Last Stand]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Marzipansgazebo.PNG|&amp;lt;center&amp;gt;'''[[Marzipan's Gazebo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:cinema.png|&amp;lt;center&amp;gt;'''[[The Movie Theater]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:mud bath.png|&amp;lt;center&amp;gt;'''[[Mud Baths]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:theoffice.png|&amp;lt;center&amp;gt;'''[[The Office]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Papa_cardgages_puddin_patch.png|&amp;lt;center&amp;gt;'''[[Papa Cardgage's Puddin' Patch]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail110.png|&amp;lt;center&amp;gt;'''[[Paper Background]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail44.PNG|&amp;lt;center&amp;gt;'''[[The Pond]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:racetrack.png|&amp;lt;center&amp;gt;'''[[Race Track]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The Red Radish Patch.PNG|&amp;lt;center&amp;gt;'''[[The Radish Patch]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Riverquest_BearShark.PNG|&amp;lt;center&amp;gt;'''[[Riverquest Safariventure]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Just_chill..._till_the_next_Epi-snowed.PNG|&amp;lt;center&amp;gt;'''[[Recording Studio]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ShoppingshowFinal.PNG|&amp;lt;center&amp;gt;'''[[Shopping Network Studio]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail66.PNG|&amp;lt;center&amp;gt;'''[[The Show]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:skatetownusa.png|&amp;lt;center&amp;gt;'''[[Skatetown, USA]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Smokyoffice.png|&amp;lt;center&amp;gt;'''[[Smoky Office]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:SnapShakExterior.png|&amp;lt;center&amp;gt;'''[[Snap Shak]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Spooky Forest.PNG|&amp;lt;center&amp;gt;'''[[Spooky Woods]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:thestage.PNG|&amp;lt;center&amp;gt;'''[[Stages|The Stage]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Steepdeep.png|&amp;lt;center&amp;gt;'''[[Steep Deep]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail69.PNG|&amp;lt;center&amp;gt;'''[[The Stone Bridge]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemailahundred.png|&amp;lt;center&amp;gt;'''[[Storybook World]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Keep_cool.PNG|&amp;lt;center&amp;gt;'''[[Swimming Pool]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cheat_song_signs.PNG|&amp;lt;center&amp;gt;'''[[Telephone Pole]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Videlectrix_Office.png|&amp;lt;center&amp;gt;'''[[Videlectrix Office]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:SenorCardgageShrub.png|&amp;lt;center&amp;gt;'''[[Weird Shrub]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Made-Up Places]] ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Cubeland.PNG|&amp;lt;center&amp;gt;'''[[Cubeland]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Da Huuuuuudge.png|&amp;lt;center&amp;gt;'''[[Da Huuuuuudge|Da Huuuuuudge's Enclosure]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Saddy Dumpington 2.PNG|&amp;lt;center&amp;gt;'''[[Folk Tale World]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:junkyard.PNG|&amp;lt;center&amp;gt;'''[[The Junkyard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:MosesMaloneLand.PNG|&amp;lt;center&amp;gt;'''[[Moses MaloneLand]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail122.png|&amp;lt;center&amp;gt;'''[[Nuclear Class Submarine &amp;quot;Soccermom&amp;quot;]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Peasantry Map.png|&amp;lt;center&amp;gt;'''[[Peasantry]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Place Postcard.PNG|&amp;lt;center&amp;gt;'''[[Made-up Places#Place|Place]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:rottenegglund.png|&amp;lt;center&amp;gt;'''[[Rotten Egglünd]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:scalding-lake-close.gif|&amp;lt;center&amp;gt;'''[[Scalding Lake]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:themepark.png|&amp;lt;center&amp;gt;'''[[Strong Bad's Mount RidesPlace! USA]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:scc.png|&amp;lt;center&amp;gt;'''[[Sweet Cuppin' Cakes Land]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TCYBCBY.PNG|&amp;lt;center&amp;gt;'''[[Teen Girl Squad Locations]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Trogdor_VS_Rather_Dashing.PNG|&amp;lt;center&amp;gt;'''[[Trog-Cave]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
File:Prehistoric land.png|&amp;lt;center&amp;gt;'''[[Prehistoric land]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
File:morguetuary.png|&amp;lt;center&amp;gt;'''[[St. Cadaverstump's totally not just an old furniture warehouse Morgue-tuary]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [[Cheat Commandos]] Places ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:CheatCommando6.PNG|&amp;lt;center&amp;gt;'''[[Arctic Playset]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:nanasbackyard.png|&amp;lt;center&amp;gt;'''[[Blue Laser Commander's Nana's Backyard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Bluelasercottage.PNG|&amp;lt;center&amp;gt;'''[[Blue Laser Cottage]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blue Laser HQ.png|&amp;lt;center&amp;gt;'''[[Blue Laser HQ]]'''&lt;br /&gt;
Image:CC HQ Screenshot.png|&amp;lt;center&amp;gt;'''[[Cheat Commandos HQ]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bluelaserdesert.png|&amp;lt;center&amp;gt;'''[[The Desert]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:2 Part Episode- Part 1.png|&amp;lt;center&amp;gt;'''[[Jaded Teen Pizza]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:KitchenCommandos.png|&amp;lt;center&amp;gt;'''[[Kitchen Commandos]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:price style screenshot.png|&amp;lt;center&amp;gt;'''[[Price Style]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:reynolds office.png|&amp;lt;center&amp;gt;'''[[Reynold's Office]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Reynoldhouse.png|&amp;lt;center&amp;gt;'''[[Reynold's Parents' House]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Picture 113.png|&amp;lt;center&amp;gt;'''[[Topplegangers' Hideout]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Old-Timey]] Places ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:cholera acres.PNG|&amp;lt;center&amp;gt;'''[[Cholera Acres Cemetary]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:the cliff.png|&amp;lt;center&amp;gt;'''[[Cliffs#Old-Timey Cliff|The Cliff]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:hell.png|&amp;lt;center&amp;gt;'''[[Hell]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:kickthecan.png|&amp;lt;center&amp;gt;'''[[The Old Movie Reel Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:pietimer place.PNG|&amp;lt;center&amp;gt;'''[[The Old Pietimer Place]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:1936field.png|&amp;lt;center&amp;gt;'''The Factory/Circus District&amp;lt;br&amp;gt;([[The Field#Old-Timey Appearances|Old-Timey Field]])'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:parsnipdepot.png|&amp;lt;center&amp;gt;'''[[Parsnip Depot]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:punkin patch.PNG|&amp;lt;center&amp;gt;'''[[Punkin Patch]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:oldtimeystage.png|&amp;lt;center&amp;gt;'''[[Stages#Old-Timey Stage|The Stage]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:telegramroom.png|&amp;lt;center&amp;gt;'''[[Telegraph Room]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Far Off Lands|Foreign Lands]] ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Main6.PNG|&amp;lt;center&amp;gt;'''[[Heaven]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail52.PNG|&amp;lt;center&amp;gt;'''[[The Island]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The Moon.PNG|&amp;lt;center&amp;gt;'''[[The Moon]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Mundelow address.png|&amp;lt;center&amp;gt;'''[[Mundelow]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Neuconsin.PNG|&amp;lt;center&amp;gt;'''[[Neuconsin]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:COTAS.PNG|&amp;lt;center&amp;gt;'''[[Outer Space]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:planetk.png|&amp;lt;center&amp;gt;'''[[Planet K]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:far off lands map.png|&amp;lt;center&amp;gt;'''[[Prance]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:SB Vacation spots.png|&amp;lt;center&amp;gt;'''[[Strong Bad's Vacation Spots]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Main21.PNG|&amp;lt;center&amp;gt;'''[[Vector Field]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Videlectrix_Mainframe.png|&amp;lt;center&amp;gt;'''[[Videlectrix Mainframe]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Rekjavik.jpg|&amp;lt;center&amp;gt;'''[[West Rekjavik]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:wburg.png|&amp;lt;center&amp;gt;'''[[Westerburg]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
[[Category: Places|*]][[Category: Lists]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Items</id>
		<title>Items</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Items"/>
				<updated>2017-06-28T10:37:34Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by DorianGray&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a gallery of '''items''' seen and/or used by the [[characters]]. Some are used frequently while others are seldom seen.&lt;br /&gt;
&lt;br /&gt;
== Clothing ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:AirCardgage.png|&amp;lt;center&amp;gt;'''[[Air Cardgage]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:blue ones.PNG|&amp;lt;center&amp;gt;'''[[The Blue Ones]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail82.png|&amp;lt;center&amp;gt;'''[[Berets]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bowler derby.PNG|&amp;lt;center&amp;gt;'''[[Bowler Hats]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:s capitain hat.png|&amp;lt;center&amp;gt;'''[[Captain's Hat]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Shades.png|&amp;lt;center&amp;gt;'''[[Cool Shades]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:littlestrongbaddirtiestdiapey.png|&amp;lt;center&amp;gt;'''[[Diapers]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:DuckieShirtHomestar.png|&amp;lt;center&amp;gt;'''[[Duckie Shirt]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:pinner marshmallows.PNG|&amp;lt;center&amp;gt;'''[[Eyepatches]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:strong sad tuxedo.png|&amp;lt;center&amp;gt;'''[[Fancy Suits]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Gross old wig.png|&amp;lt;center&amp;gt;'''[[Gross Old Wig]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:FairstivalCostumes.PNG|&amp;lt;center&amp;gt;'''[[Halloween Costumes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Kotseatshirt.PNG|&amp;lt;center&amp;gt;'''[[Headbands]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestar.PNG|&amp;lt;center&amp;gt;'''[[Homestar Runner#Homestar's Clothing|Homestar Runner's Clothing]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestardukes.PNG|&amp;lt;center&amp;gt;'''[[Homestar Runner's Daisy Dukes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestarpants.PNG|&amp;lt;center&amp;gt;'''[[Homestar Runner's Pants]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:HRwearingbunnyslippers.png|&amp;lt;center&amp;gt;'''[[Homestar Runner's Sleepwear]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Dolph Haudhagen The Instruct-TOR.PNG|&amp;lt;center&amp;gt;'''[[Horned Helmet]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Lotionman.PNG|&amp;lt;center&amp;gt;'''[[Lotionman]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Mascots.png|&amp;lt;center&amp;gt;'''[[Mascot Costumes ]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strongs Decemberween card.png|&amp;lt;center&amp;gt;'''[[Other Costumes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Ovenmitts.PNG|&amp;lt;center&amp;gt;'''[[Oven Mitts]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:You Reek-a Shirt.PNG|&amp;lt;center&amp;gt;'''[[T-Shirts]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestar Trenchcoat.PNG|&amp;lt;center&amp;gt;'''Trench Coats'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homely boy brand huge tube socks.PNG|&amp;lt;center&amp;gt;'''[[Tube Socks]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:USA underwear.PNG|&amp;lt;center&amp;gt;'''[[Underwear]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Computers ==&lt;br /&gt;
=== Strong Bad's Computers ===&lt;br /&gt;
The computers [[Strong Bad]] has used for his [[Strong Bad Email|emails]], and some more obscure ones.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:sbemail1.PNG|&amp;lt;center&amp;gt;'''[[Tandy 400]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail.png|&amp;lt;center&amp;gt;'''[[Compy 386]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail119.PNG|&amp;lt;center&amp;gt;'''[[Lappy 486]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Compé with SB.png|&amp;lt;center&amp;gt;'''[[Compé]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail206.png|&amp;lt;center&amp;gt;'''[[Lappier]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:block computer.PNG|&amp;lt;center&amp;gt;'''[[Block]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Corpy NT6.png|&amp;lt;center&amp;gt;'''[[Corpy NT6]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ZappyXT6.png|&amp;lt;center&amp;gt;'''[[Zappy XT6]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Terminal D6.png|&amp;lt;center&amp;gt;'''[[Terminal D6]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Computers ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Arturo 9000.PNG|&amp;lt;center&amp;gt;'''[[Arturo 9000]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blue Laser Supercomputer.PNG|&amp;lt;center&amp;gt;'''[[Blue Laser Supercomputer]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Datum Center.PNG|&amp;lt;center&amp;gt;'''[[Datum Center Computers]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Grampy Aught-Six.png|&amp;lt;center&amp;gt;'''[[Grampy Aught-Six]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Happy8600.png|&amp;lt;center&amp;gt;'''[[Happy 8600]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:New iMac.png|&amp;lt;center&amp;gt;'''[[Monosodium Dreams]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:pompilot.PNG|&amp;lt;center&amp;gt;'''[[Pom Pilot]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Compy Catalog.png|&amp;lt;center&amp;gt;'''[[Roomy-Vac]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sfd.png|&amp;lt;center&amp;gt;'''[[The Screen]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Snacky.png|&amp;lt;center&amp;gt;'''[[Snacky 186]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Box Computer.PNG|&amp;lt;center&amp;gt;'''[[Strong Mad's Computer]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:tangerine dreams.PNG|&amp;lt;center&amp;gt;'''[[Tangerine Dreams]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strong Bad's Kitchen Appliances ===&lt;br /&gt;
The &amp;quot;computers&amp;quot; Strong Bad used during the time between [[videography]] and [[sbemail206]] which he used to &amp;quot;check e-mails&amp;quot;.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Econowave.png|&amp;lt;center&amp;gt;'''Econowave 4761-V Microwave'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:BlenderComputer.png|&amp;lt;center&amp;gt;'''Blender'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:toastysmalls.png|&amp;lt;center&amp;gt;'''Toaster'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:dearcrushedice.png|&amp;lt;center&amp;gt;'''Ice Crusher'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Food/Drinks ==&lt;br /&gt;
&lt;br /&gt;
=== Fluffy Puff ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:fluffy puff air-puffed sugar delights.PNG|&amp;lt;center&amp;gt;'''[[Fluffy Puff Air-Puffed Sugar Delights|Air-Puffed Sugar Delights]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Fluffy Puff Bitesize Nibblers.png|&amp;lt;center&amp;gt;'''[[Fluffy Puff Bite-Size Nibblers|Bite-Size Nibblers]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:fluffypuffmalloweens.png|&amp;lt;center&amp;gt;'''[[Fluffy Puff Malloweens|Malloweens]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:fpmarsh.png|&amp;lt;center&amp;gt;'''[[Fluffy Puff Marshmallows|Marshmallows]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:fp mayo.png|&amp;lt;center&amp;gt;'''[[Fluffy Puff Mayo|Mayo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Redflavoredfluffypuff.png|&amp;lt;center&amp;gt;'''[[Fluffy Puff Translucent Dessert Related Substance|Translucent Dessert Related Substance]]'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Foods ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Bacon pic.png|&amp;lt;center&amp;gt;'''[[Bacon]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:breadsingalong.png|&amp;lt;center&amp;gt;'''[[Bread]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bronco t.PNG|&amp;lt;center&amp;gt;'''[[Bronco Trolleys]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Thick_N_Nasty.PNG |&amp;lt;center&amp;gt;'''[[Burgers]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:50cake.PNG|&amp;lt;center&amp;gt;'''[[Cake]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TheCheatCakes.png|&amp;lt;center&amp;gt;'''[[Cheatcakes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cloitsterizer.PNG|&amp;lt;center&amp;gt;'''[[Cheese]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:The King of Town as Colonel Sanders.png|&amp;lt;center&amp;gt;'''[[Chicken]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Other SBLOUNSKCHED bar.png|&amp;lt;center&amp;gt;'''[[Chocolate]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homsar shirt logo back.PNG|&amp;lt;center&amp;gt;'''[[Coffee]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cold Cuts.png|&amp;lt;center&amp;gt;'''[[Cold Cuts]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail39.PNG|&amp;lt;center&amp;gt;'''[[Cold One]]s'''&lt;br /&gt;
Image:Crispyrice.png|&amp;lt;center&amp;gt;'''[[Crispy Puffed Rice]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ryansterrit and sb.JPG|&amp;lt;center&amp;gt;'''[[Croissants]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Stuffinged Ham and Gravied Yams.png|&amp;lt;center&amp;gt;'''[[Decemberween Food]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail54.PNG|&amp;lt;center&amp;gt;'''[[Eggs]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:French Fries.png|&amp;lt;center&amp;gt;'''[[French Fries]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Tao Chicken.PNG|&amp;lt;center&amp;gt;'''[[General Tso's Chicken]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:PBTC Grumblecake.png|&amp;lt;center&amp;gt;'''[[Grumblecakes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Ham.png|&amp;lt;center&amp;gt;'''[[Ham]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestarjr2.PNG|&amp;lt;center&amp;gt;'''[[Homestar Jr.]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strongbad actionfigure.png|&amp;lt;center&amp;gt;'''[[Hotcakes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestar ice cream.jpg|&amp;lt;center&amp;gt;'''[[Ice Cream]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Armystyle.png|&amp;lt;center&amp;gt;'''[[Mayonnaise]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cannedmelonade.PNG|&amp;lt;center&amp;gt;'''[[Melonade]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:AmbrosiaSalad.png|&amp;lt;center&amp;gt;'''[[Minor Foods]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Mountain Dew.png|&amp;lt;center&amp;gt;'''[[Mountain Dew]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blueberry_Muffin.png|&amp;lt;center&amp;gt;'''[[Muffins]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:pastasalad.png|&amp;lt;center&amp;gt;'''[[Pasta Salad]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Pea-Buried.PNG|&amp;lt;center&amp;gt;'''[[Peas]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ceiling pizza.png|&amp;lt;center&amp;gt;'''[[Pizza]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
File:Just Popcorn.PNG|&amp;lt;center&amp;gt;'''[[Popcorn]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Potate bag.png|&amp;lt;center&amp;gt;'''[[Potate]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Potatoes.png|&amp;lt;center&amp;gt;'''[[Potatoes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:GreenAppleSnowCone.png|&amp;lt;center&amp;gt;'''[[Snow Cones]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Steak.PNG|&amp;lt;center&amp;gt;'''[[Steak]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sugebrown.png|&amp;lt;center&amp;gt;'''[[Sugar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Swiss Cake Rolls.PNG|&amp;lt;center&amp;gt;'''[[Swiss Cake Rolls]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TeddyGraham.PNG|&amp;lt;center&amp;gt;'''[[Teddy Grahams]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:awpotatoes.PNG|&amp;lt;center&amp;gt;'''[[The King of Town's Food]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instruments ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Bubs with Keytar.png|&amp;lt;center&amp;gt;'''[[Bubs's keytar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:carol.PNG|&amp;lt;center&amp;gt;'''[[Carol]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Marzipanmohawk.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Electric Guitar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestar floor tom.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Homestar's Floor Tom]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:yahoo_guitar.png|&amp;lt;center&amp;gt;'''[[Instruments|Homestar's Electric Guitar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestar,_Piano_Player.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Homestar's Piano]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homsar_theremin.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Theremin]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:keyswordtar in action.PNG|&amp;lt;center&amp;gt;'''[[Keyswordtar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Ukulele and Poetry.png|&amp;lt;center&amp;gt;'''[[Marzipan's Ukulele]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:SMBass.PNG|&amp;lt;center&amp;gt;'''[[Strong Mad's Bass]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ssguitar.png|&amp;lt;center&amp;gt;'''[[Instruments|Strong Sad's Guitar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strong Sad Violin.PNG|&amp;lt;center&amp;gt;'''[[Strong Sad's Violin]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cheatdrum.PNG|&amp;lt;center&amp;gt;'''[[Characters' Instruments#The Cheat's Instruments|The Cheat's Drums]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:cheat keyboard.png|&amp;lt;center&amp;gt;'''[[The Cheat's keyboard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cheatflute.png|&amp;lt;center&amp;gt;'''[[Instruments|The Cheat's Flute]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
File:Limozeen vs Sloshy.png|&amp;lt;center&amp;gt;'''[[The Cheat's Record Player]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:djcheatequipment.png|&amp;lt;center&amp;gt;'''[[Instruments|The Cheat's DJ Equipment]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Pom Pom keyboard.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Pom Pom's Keyboard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:KoT Guitar.PNG|&amp;lt;center&amp;gt;'''[[Instruments|The King of Town's Guitar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Hornblower Buisine.png|&amp;lt;center&amp;gt;'''[[Instruments|The Hornblower's Buisine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Hornblower Saxophone.png|&amp;lt;center&amp;gt;'''[[Instruments|The Hornblower's Saxophone]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Poopsmith Cymbals.png|&amp;lt;center&amp;gt;'''[[Instruments|The Poopsmith's Cymbals]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Knight Bass Drum.png|&amp;lt;center&amp;gt;'''[[Instruments|The Knight's Bass Drum]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Knight Acoustic Guitar.png|&amp;lt;center&amp;gt;'''[[Instruments|The Knight's Guitar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Knight Stand-up Bass.png|&amp;lt;center&amp;gt;'''[[Instruments|The Knight's Stand-Up Bass]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blacksmith Drums.png|&amp;lt;center&amp;gt;'''[[Instruments|The Blacksmith's Drums]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Blacksmith Maracas.png|&amp;lt;center&amp;gt;'''[[Instruments|The Blacksmith's Maracas]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:old_timey_banjo.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Old-Timey Banjo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:old_timey_piano.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Old-Timey Piano]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ss_dumpington.PNG|&amp;lt;center&amp;gt;'''[[Instruments|Saddy Dumpington's Washboard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Fisheye Trumpet.png|&amp;lt;center&amp;gt;'''[[Instruments|Trumpet]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Fisheye Banjo.png|&amp;lt;center&amp;gt;'''[[Instruments|Banjo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Worshboard.PNG|&amp;lt;center&amp;gt;'''[[Washboard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Toys ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Aunt gert doll.PNG|&amp;lt;center&amp;gt;'''[[Aunt Gert]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Capsela 2.png|&amp;lt;center&amp;gt;'''[[The Strongs' Capsela|Capsela Set]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:qod 25 - Doreauxgard.PNG|&amp;lt;center&amp;gt;'''[[Doreauxgard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Gooblies Pet Lobster.PNG|&amp;lt;center&amp;gt;'''[[Gooblies]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:grabbo arm.png|&amp;lt;center&amp;gt;'''[[Grabbo Arm]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Lord Quackingstick.PNG|&amp;lt;center&amp;gt;'''[[Lord Quackingstick]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:donkis.png|&amp;lt;center&amp;gt;'''[[Poodonkis]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Santaman.png|&amp;lt;center&amp;gt;'''[[Santaman]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sbrocket.PNG|&amp;lt;center&amp;gt;'''[[Strong Bad's Rocket]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Thedenzel.png|&amp;lt;center&amp;gt;'''[[The Denzel]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Tony Stony 2.png|&amp;lt;center&amp;gt;'''[[Tony Stony]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Media ==&lt;br /&gt;
&lt;br /&gt;
=== Books ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:BooksinRampageEmail.PNG|&amp;lt;center&amp;gt;'''[[Authorless Books]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Beverlybooks.png|&amp;lt;center&amp;gt;'''Books authored by [[Beverly Sportsinterviews]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:worldly record book.png|&amp;lt;center&amp;gt;'''[[Count Longardeaux's Book]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
File:dictionary.png|&amp;lt;center&amp;gt;'''[[Count Longardeaux's Jerktionary]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail84.png|&amp;lt;center&amp;gt;'''[[kids' book|Everyone is Different]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Limozeen coloringbook.png|&amp;lt;center&amp;gt;'''[[Limozeen Coloring Book]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Little jakey pleasanthanks.png|&amp;lt;center&amp;gt;'''[[Little Jakey Pleasenthanks]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Comeback.PNG|&amp;lt;center&amp;gt;'''[[More Like You Write A Book About Come-back Jokes, NERD!!]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sbemail146.png|&amp;lt;center&amp;gt;'''Strong Bad [[pop-up]] book'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:That time of year.png|&amp;lt;center&amp;gt;'''[[That Time of Year]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Fishwasdelish.PNG|&amp;lt;center&amp;gt;'''[[The Fish was Delish and it made Quite a Dish!]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:lemcover.jpg|&amp;lt;center&amp;gt;'''[[Bookazon.com|This Book is Better Than 1st, 2nd, and Quite Possibly Even 3rd Base]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TTOM One.PNG|&amp;lt;center&amp;gt;'''How to play [[Three-to-One Marny]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Magazines ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Fretmagic magazine.PNG|&amp;lt;center&amp;gt;'''[[Fretmagic]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:huskyheadedboysback2school.PNG|&amp;lt;center&amp;gt;'''[[Husky Headed Boys Back 2 School Catalog]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:nerdularnerdence.png|&amp;lt;center&amp;gt;'''[[Nerdular Nerdence]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Scarfgirl.PNG|&amp;lt;center&amp;gt;'''[[Scarfgirl]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Hundredaire Socialite.png|&amp;lt;center&amp;gt;'''[[Stookley's Hundredaire Socialite]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:stupidcoincidencemagazine.PNG|&amp;lt;center&amp;gt;'''[[Stupid Coincidence Magazine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Strong Mad and The Cheat TV Time Cover 4.png|&amp;lt;center&amp;gt;'''[[TV Time]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:HaveEdgeTimes.png|&amp;lt;center&amp;gt;'''Have Edge Times Magazine'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Music Players ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:boom box.png|&amp;lt;center&amp;gt;'''[[booOOMbox]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestar clock radio.png|&amp;lt;center&amp;gt;'''[[Clock Radio]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:djcheatequipment.png|&amp;lt;center&amp;gt;'''[[DJ Teh C.'s Equipment]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ghettoblastro.png|&amp;lt;center&amp;gt;'''[[Ghetto Blastro]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:FlashbackJamBox.PNG|&amp;lt;center&amp;gt;'''[[Jam Box]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Old Timey Radio.png|&amp;lt;center&amp;gt;'''[[Old Timey Radio]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Ray-Jo.png|&amp;lt;center&amp;gt;'''[[Ray-Jo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Seedees.PNG|&amp;lt;center&amp;gt;'''[[SeeDees]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sports Use.png|&amp;lt;center&amp;gt;'''[[Sports Use]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:strongsads ipod screenshot.png|&amp;lt;center&amp;gt;'''[[Strong Sad's iPod]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:StrongSadTapePlayer.PNG|&amp;lt;center&amp;gt;'''[[Strong Sad's Tape Player]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Limozeen vs Sloshy.png|&amp;lt;center&amp;gt;'''[[The Cheat's Record Player]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Electronics ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:AWFy.PNG|&amp;lt;center&amp;gt;'''[[Animatronic Strong Bad]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Old Answering Machine.png|&amp;lt;center&amp;gt;'''[[Answering Machine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:atm.png|&amp;lt;center&amp;gt;'''[[ATM]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TheBlender.PNG|&amp;lt;center&amp;gt;'''[[Blender]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Video Camera.PNG|&amp;lt;center&amp;gt;'''[[Cameras]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:cellphone.png|&amp;lt;center&amp;gt;'''[[Cell Phones|Cell Phone]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cow Lamp.PNG|&amp;lt;center&amp;gt;'''[[Cow Lamp]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:fiendish freddys.png|&amp;lt;center&amp;gt;'''[[Floppy Disk Container]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Frank Bennedetto.PNG|&amp;lt;center&amp;gt;'''[[Frank Bennedetto]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:FunMachine.PNG|&amp;lt;center&amp;gt;'''[[FunMachine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:gn robot.png|&amp;lt;center&amp;gt;'''[[Grape-Nuts Robot]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:homestarclock.png|&amp;lt;center&amp;gt;'''[[Homestar's Clock]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:InflatablePumpkin.png|&amp;lt;center&amp;gt;'''[[Inflatable Pumpkin]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:lectric boots2.png|&amp;lt;center&amp;gt;'''[['Lectric Boots]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:mrsbenedetto.png|&amp;lt;center&amp;gt;'''[[Mrs. Bennedetto]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Marzipans Answering Machine.png|&amp;lt;center&amp;gt;'''[[PhoneTime XL8]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Telebision Remote.PNG|&amp;lt;center&amp;gt;'''[[Remote Control]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Smoke Detector.png|&amp;lt;center&amp;gt;'''[[Living Room of the Brothers Strong|Smoke Detector]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail81.png|&amp;lt;center&amp;gt;'''[[Strong Bad's Security Monitor]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Telegraph.PNG|&amp;lt;center&amp;gt;'''[[Supra Modern Telegram]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Taranchlua Metal Detector.png|&amp;lt;center&amp;gt;'''[[Taranchula Black Metal Detector]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:teebee.PNG|&amp;lt;center&amp;gt;'''[[TeeBee]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:teebee remote.PNG|&amp;lt;center&amp;gt;'''TeeBee Remote'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Caleb Rentpayer.png|&amp;lt;center&amp;gt;'''[[Telebision]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:ArcadeGame.png|&amp;lt;center&amp;gt;'''[[TROGDOR! Arcade Machine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:KoT Typing.PNG|&amp;lt;center&amp;gt;'''[[Typing Tutor Turbo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:VCR.PNG|&amp;lt;center&amp;gt;'''[[The VCR]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Power Tools ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Strong Mad Chainsaw.PNG|&amp;lt;center&amp;gt;'''[[Strong Mad's Chainsaw|Chainsaw]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Compress-OR.png|&amp;lt;center&amp;gt;'''[[CompressOR]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bellybutton.PNG|&amp;lt;center&amp;gt;'''[[Strong Bad's Drill|Drill]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Jack Hamma.PNG|&amp;lt;center&amp;gt;'''[[Jack Hamma!]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:111cheatsolderingiron.png|&amp;lt;center&amp;gt;'''[[Laser Lemon#The Cheat's soldering iron|The Cheat's soldering iron]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Products ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Ab-Abber 2000.png|&amp;lt;center&amp;gt;'''[[Ab-Abber 2000]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:BUBRUB!.png|&amp;lt;center&amp;gt;'''[[BUBRUB!]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cloitsterizer.PNG|&amp;lt;center&amp;gt;'''[[The Cloitsterizer]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:C'mon It's FOG!.PNG|&amp;lt;center&amp;gt;'''[[C'mon! It's FOG!]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Ethicalchick'nbeaks.PNG|&amp;lt;center&amp;gt;'''[[Ethical Chick'n Beaks]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:s shoe box.png|&amp;lt;center&amp;gt;'''[[Freshley's]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:r Menu.PNG|&amp;lt;center&amp;gt;'''[[Grout Clean'r]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:hamburger shampoo.png|&amp;lt;center&amp;gt;'''[[Hamburger Shampoo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Jimmyshobbykit.PNG|&amp;lt;center&amp;gt;'''[[Hollerin' Jimmy's Hobby Kit]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:jobars headache medicine.PNG|&amp;lt;center&amp;gt;'''[[Jobar's Big Ol' Headache Medicine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:pencil moistener.png|&amp;lt;center&amp;gt;'''[[King Castlefunny Pencil Moistener]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Listerine item.png|&amp;lt;center&amp;gt;'''[[Listerine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:lite em up dan.png|&amp;lt;center&amp;gt;'''[[Lite Em Up Dan]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:1ohnoyoudent.png|&amp;lt;center&amp;gt;'''[[Oh No You Dent! Denture Tablets]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:yella paint.png|&amp;lt;center&amp;gt;'''[[Paint]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Portly Washboy.gif|&amp;lt;center&amp;gt;'''[[Portly Washboy Fancy Laundry Paste]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Rhinestone jazzler.png|&amp;lt;center&amp;gt;'''[[Rhinestone Jazzler]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Roach killa.png|&amp;lt;center&amp;gt;'''[[Roach Killa!]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Other SBLOUNSKCHED bar.png|&amp;lt;center&amp;gt;'''[[SBLOUNSKCHED! Bar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:School Paste.PNG|&amp;lt;center&amp;gt;'''[[School Paste]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Super mud.png|&amp;lt;center&amp;gt;'''[[Super Mud]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:bigknife.png|&amp;lt;center&amp;gt;'''[[Big Knives]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:bubs shotgun.png|&amp;lt;center&amp;gt;'''[[Bubs's shotgun]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Guillotine.PNG|&amp;lt;center&amp;gt;'''[[Guillotine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Gunhaver'sGun.PNG|&amp;lt;center&amp;gt;'''[[Gunhaver's Gun]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:heavy lourde.png|&amp;lt;center&amp;gt;'''[[Heavy Lourde]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:JRBRR.PNG|&amp;lt;center&amp;gt;'''[[Justice Rocket Backpack Rocket Rocket]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:keyswordtar in action.PNG|&amp;lt;center&amp;gt;'''[[Keyswordtar]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:OldTimeyMarzipanWeapon.PNG|&amp;lt;center&amp;gt;'''[[Old-Timey Marzipan's Contraption]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:StalkerSpray.png|&amp;lt;center&amp;gt;'''[[Stalker Spray]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Bazooka.PNG|&amp;lt;center&amp;gt;'''[[Strong Bad's Bazooka]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Nunchuck Action.PNG|&amp;lt;center&amp;gt;'''[[Strong Bad's Nunchucks]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Misc. ==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:aldi bag.png|&amp;lt;center&amp;gt;'''[[Aldi Bag]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Baloneytruck.PNG|&amp;lt;center&amp;gt;'''[[Baloney Sammich Truck]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:lighter1.png|&amp;lt;center&amp;gt;'''[[BMW Lighter]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:watersoupcans.png|&amp;lt;center&amp;gt;'''[[Can of Water Soup]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cinderblock.png|&amp;lt;center&amp;gt;'''[[Cinder Block]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Clapperboard.PNG|&amp;lt;center&amp;gt;'''[[Clapperboard]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Cow clip.PNG|&amp;lt;center&amp;gt;'''Cow Clips'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Credenza.png|&amp;lt;center&amp;gt;'''[[Credenza]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Crisperdrawer.PNG|&amp;lt;center&amp;gt;'''[[Crisper Drawer]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:LetterPaper.png|&amp;lt;center&amp;gt;'''[[Envelope Paper]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Gardenhose.PNG|&amp;lt;center&amp;gt;'''[[Garden Hose]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:gremlin homestarloween.png|&amp;lt;center&amp;gt;'''[[Gremlin]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Homestarposter.PNG|&amp;lt;center&amp;gt;'''[[Hanging Objects]]&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Le Restige.png|&amp;lt;center&amp;gt;'''[[Le Restige]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Marzipaint.PNG|&amp;lt;center&amp;gt;'''[[Marzipan's Painting Tools]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Nametag.png|&amp;lt;center&amp;gt;'''[[Name Tags]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:New Paper.png|&amp;lt;center&amp;gt;'''[[New Paper]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:No Loafing Sign.png|&amp;lt;center&amp;gt;'''[[No Loafing Sign]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:spoon.png|&amp;lt;center&amp;gt;'''[[Orange Bowl and Spoon]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:finetimepermamarker.png|&amp;lt;center&amp;gt;'''[[Permanent Marker]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:minerthecheat.PNG|&amp;lt;center&amp;gt;'''[[Pickaxe]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Deckhandbill.png|&amp;lt;center&amp;gt;'''[[Playbills]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Polymascot.PNG|&amp;lt;center&amp;gt;'''[[Polymascotfoamalate]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sbemail138.PNG|&amp;lt;center&amp;gt;'''[[The Proud Anselmo]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Redwhiteandbanana.PNG|&amp;lt;center&amp;gt;'''[[Red, White, and Banana]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Drexperimento.PNG|&amp;lt;center&amp;gt;'''[[Ruby Powered Rocket]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Space Machine.PNG|&amp;lt;center&amp;gt;'''[[The Space Machine]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:stopsign.png|&amp;lt;center&amp;gt;'''[[Stop Sign]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:fondue pot.PNG|&amp;lt;center&amp;gt;'''[[Strong Bad's Fondue Pot]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Sbtowel.png|&amp;lt;center&amp;gt;'''Strong Bad's [[Towel]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Styleronecochair.PNG|&amp;lt;center&amp;gt;'''[[Styleron Ecochair]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Glowstick.PNG|&amp;lt;center&amp;gt;'''[[The Cheat's Glowsticks]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:grill.PNG|&amp;lt;center&amp;gt;'''[[The King of Town's Grill]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Thepaper.png|&amp;lt;center&amp;gt;'''[[The Paper]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:TheStick.png|&amp;lt;center&amp;gt;'''[[The Stick]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail115.png|&amp;lt;center&amp;gt;'''[[The Time Capsule]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:trivia time jar.PNG|&amp;lt;center&amp;gt;'''[[Rejected Characters#Trivia Time|Trivia Time]]''' cookie jar&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Uss flirtini.PNG|&amp;lt;center&amp;gt;'''[[USS Flirtini]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:wagon fulla pancakes.PNG|&amp;lt;center&amp;gt;'''[[Wagon Fulla Pancakes]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:WaterCooler.PNG|&amp;lt;center&amp;gt;'''[[Water Cooler]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:Whatsit Blob.PNG|&amp;lt;center&amp;gt;'''[[Whatsit]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:X-Pensive White.PNG|&amp;lt;center&amp;gt;'''[[X-Pensive White]]'''&amp;lt;/center&amp;gt;&lt;br /&gt;
Image:sbemail59picture.png|&amp;lt;center&amp;gt;'''[[Marzipan's Chalkboard]]'''&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[Electronic Media and Film]]&lt;br /&gt;
*[[Action Figure Character Variations]]&lt;br /&gt;
*[[Store]]&lt;br /&gt;
*[[Pseudocharacters]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Lists]][[Category: Items|*]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Homestar_Runner</id>
		<title>Homestar Runner</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Homestar_Runner"/>
				<updated>2017-06-28T10:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 37.35.148.60 (Talk) to last revision by The Cheatbot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{charnav|Homestar Runner|hs|Homsar|Strong Bad}}&lt;br /&gt;
[[Image:NewerestHomestar.png|thumb|&amp;quot;Everybody loves [[Strongest Man in the World|the me!]] I'm a terrific athlete!&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
{{aboutcharacter}} {{for|world where the characters exist|Homestar Runner universe}} {{for|entire body of work|Homestar Runner (body of work)}} {{for|website itself|homestarrunner.com}}&lt;br /&gt;
&lt;br /&gt;
== Biography ==&lt;br /&gt;
'''Homestar Runner''' is the star of his namesake website.  He is mainly colored white, with black [[comma]]-shaped eyes and a prominent [[Wikipedia:Prognathism|underbite]].  Usually, he wears a [[#Homestar's Clothing|red shirt with a white star]] and a [[#Homestar Runner's Hat|blue beanie with a red brim and a white spinner]].  His legs are quite long in relation to the rest of his body.  Though he [[Lack of Visible Arms|lacks a visible pair of arms]], he is still able to function as though he has them, being able to carry and throw things and even type proficiently. It's generally accepted that either he ''does'' have arms, but for reasons that are never explained, they are invisible, or that he has limited telekinetic powers. According to the toon [[Marshmallow's Last Stand]], he weighs one hundred pounds. While his middle name was said to be Michael by [[Marzipan]] in [[Halloween Potion-ma-jig]] and by himself in [[Flash is Dead!]], it may also be Hal, as heard in the DVD commentary for [[time capsule#Commentary Transcript|time capsule]], though it was also suggested that Hal is Marzipan's pet name for him.&lt;br /&gt;
&lt;br /&gt;
The subject of jokes and the recipient of [[Nicknames#Homestar Runner|nicknames]], Homestar is an earnest character with a pure heart and nothing but love for the rest of mankind. Unfortunately, his absolute cluelessness and clumsiness keep him from realizing his full potential. As Strong Bad stated in [[TrogdorCon '97]], he has an &amp;quot;unbelievably loose grasp on the world around [him]&amp;quot;. He's not ''completely'' stupid (he once correctly stated [[Wikipedia:Coulomb's law|Coulomb's law]], albeit [[4 branches|after being asked]] what two plus two is) and has proven to be remarkably clever in the past, though [[stupid stuff|such occurrences]] are few and far between. He and most of the other residents of [[Free Country, USA]] speak English, but as seen in his [[First Time Here?|welcome speech to homestarrunner.com]], he is also able to speak [[Spanish]], though it is unknown exactly how much. He frequently uses two-syllable exclamations, like [[montage|&amp;quot;Hi-Ya!&amp;quot;]], [[radio|&amp;quot;Highball!&amp;quot;]], and [[Homestar Presents: Presents|&amp;quot;Ahct-poo!&amp;quot;]]. Also, Homestar has the strange habit of flicking his head in the opposite direction while talking, only to flick it right back, almost like a tic. If he is annunciating several syllables in a word, he will usually flick his head of each of the emphasized parts, such as in [[A Death-Defying Decemberween]], he says, &amp;quot;No way, dog! No way, Bubs!&amp;quot;, his head twitching at both the 'no's.&lt;br /&gt;
&lt;br /&gt;
Homestar is the star athlete on an unspecified sports team led by [[Coach Z]] and keeps it that way via vigorous workouts, as revealed in the [[Strong Bad Email]] [[dullard]].  He is also the colonel (which is always pronounced phonetically) of the [[Homestarmy]] and  the supreme overlord of [[Broternal Order of Different Helmets]] in [[Ever and More!]]. His [[Homestar Runner and Pom Pom's Relationship|best friend]] remains [[Pom Pom]]. He has some [[Wikipedia:Rhotacism|speech impediments]] (as he says, he has &amp;quot;[[Puppet Jam: Vitamins/Celebrities|twouble with [his] aw's]]&amp;quot;), and appears to have [[Homestar Runner and Homestar Runner's Relationship|short-term memory problems]], as he frequently forgets things he has just done or said (for examples, see the [[Marzipan's Answering Machine Version 12.2|12th Answering Machine]] or [[Homestar Presents: Presents]]). Homestar has also shown an incredible ability to sleep, which has been known to get him into trouble. The most extreme example of this oversleeping is the toon [[Weclome Back]], where he slept through June, and possibly the better half of May as well. He also tends to &amp;quot;borrow&amp;quot; things from (and return things to) [[Strong Bad]], for example, [[Strong Bad's fondue pot]].&lt;br /&gt;
&lt;br /&gt;
Although he is often the target of pranks by Strong Bad, Homestar believes that he is friends with the &amp;quot;[[wrestleman]]&amp;quot; and tries to win his favor, often with bad results that Homestar completely misunderstands. Occasionally, he and Strong Bad will be on pleasant terms, usually participating together in a Strong Bad Email or watching TV at Homestar's house. As a whole, Homestar seems to be too dim to realize when people are being mean to him, or when he's being mean to other people. He often unintentionally insults his friends or steps on their feelings and is unable to understand their resulting feelings of anger. Another quirk of Homestar's is his ability to be easily outsmarted at his own game, but still be completely oblivious and even happy. As Strong Bad put it in [[secret recipes]], &amp;quot;It's like, even when we win, he wins.&amp;quot; It should also be noted that Homestar's psychology may account for his sleepwalking behavior, as exhibited in the Strong Bad Email [[nightlife]].&lt;br /&gt;
&lt;br /&gt;
[[Image:Homestar 3d variation.PNG|thumb|140px|&amp;quot;Hey, Strong Bad. I've got a low polygon count.&amp;quot;]]&lt;br /&gt;
[[Image:Homestarteeth.png|thumb|left|130px|Yes, he does have teeth.]]&lt;br /&gt;
&lt;br /&gt;
Homestar has behaved indignantly at various times, often due to discussions of tender subjects, misunderstanding the topic at-hand or his general ignorance of the present situation. While in this state he acts single-mindedly, and in extreme instances violently. This side of his character, not often shown on the website, is often followed by his coming down into an upset and exhausted state, such as in [[Happy Fireworks]], when he refuses to acknowledge Marzipan's absence, or in [[long pants]], when he adamantly rejects the suggestion that he doesn't wear long pants. In [[email thunder]], he claims that on this occasion he had accidentally taken some of Strong Sad's pills.&lt;br /&gt;
&lt;br /&gt;
At present, Homestar works on the [[isp|help desk]] at an [[The Office|unnamed tech company]] with Strong Bad and [[The Cheat]], but has frequently dabbled in the entertainment industry. He made several [[Fluffy Puff Commercial|commercials]] for [[Fluffy Puff Marshmallows]] along with the product's mascot, [[Marshie]]. He was paid for his work in the commercials with a lifetime supply of &amp;quot;[[Color flavored|Red Flavored]] [[Fluffy Puff Translucent Dessert Related Substance]]&amp;quot;. He is also the host of an obscure talk/game show named &amp;quot;[[The Show]]&amp;quot;, has co-starred in at least three ''[[Dangeresque (film series)|Dangeresque]]'' movies, has sung seven hit singles and 1 Double Jam such as &amp;quot;[[Everybody Knows It]]&amp;quot;, &amp;quot;[[Puppet Jam: Bad Jokes|Bad Jokes]]&amp;quot; and 5 other jams with [[They Might Be Giants]], has revealed that he is considering a career in [[crying|male modeling]], and also has guest starred in an episode of [[Caleb Rentpayer]] (in which he shot Caleb). He enjoys running, breaking into Strong Bad's house, singing, and finding the perfect [[Decemberween]] present. He also seems to really like [[bread]], as seen in [[origins]] and [[disconnected]]. Other favored foods are [[Fluffy Puff Marshmallows|marshmallows]], [[Bronco Trolleys]], [[melonade]], and supposedly [[Wikipedia:Hot Pockets|Hot Pockets]], according to the email [[dullard]]. His most prized possession is his propeller-cap and its [[Spin My Buzzer|&amp;quot;buzzer&amp;quot;]]. He might be a fan of the [[Wikipedia:NHL|NHL]]'s [[Wikipedia:Boston Bruins|Boston Bruins]], as he is seen wearing a Bruins shirt in [[Superbowl Dealie]].&lt;br /&gt;
&lt;br /&gt;
He, [[Coach Z]], [[Bubs]], and [[Pom Pom]], appear to be the current law enforcement in [[Free Country, USA]], as seen in [[Strong Bad is in Jail Cartoon]] and [[road trip]]. The King of Town calls upon his and Pom Pom's assistance in [[The King of Town DVD]], suggesting higher authority and/or credibility. However, he is also seen as a thief in [[candy product]], stealing a pair of half-eaten &amp;quot;choco-pants&amp;quot;. In the October 2007 special [[Jibblies 2]], he saves his friends by agreeing to stay inside the [[Jibblies Painting]] for &amp;quot;eternity&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*'''Domicile:''' [[Homestar Runner's House]] &lt;br /&gt;
*'''Debut:''' [[Original Book|&amp;quot;The Homestar Runner Enters The Strongest Man in the World Contest&amp;quot;]]&lt;br /&gt;
*[[:Category:Homestar Runner Filmography|Complete Filmography]]&lt;br /&gt;
&lt;br /&gt;
{{Character Video Transcript}}&lt;br /&gt;
&lt;br /&gt;
== Homestar's Eyes ==&lt;br /&gt;
[[Image:Straighton.png|thumb|Cartoon straight-on]]&lt;br /&gt;
[[Image:TMBG_Homestar_closeup_20040925.jpg|thumb|right|Puppet Stuff straight-on]]&lt;br /&gt;
Homestar's eyes are quite strange.&lt;br /&gt;
*Sometimes they seem to move around his head. Most of the time they're like a flounder's eyes, but they switch sides of his face whenever he turns. In the [[Old Intro 2]], Homestar's eyes seem to move as the camera circles around him. Also, in [[Theme Song Video]], the currently absent toon [[Marshmallow's Last Stand]], the old version of [[In Search Of The Yello Dello DVD|In Search of the Yello Dello]], the [[Homestar Runner and Strong Bad Screensaver|Homestar Screensaver]], [[action figure]], [[Eggs (toon)|Eggs toon]], [[Costume Commercial]], and [[Hremail 7]] he faces to the front, which further lends credence to this theory.&lt;br /&gt;
**It is possible that Homestar's eyes are in fact on the front of his head, but his generally accepted stature always has him facing slightly to the side.  Because he is a cartoon character, the three-dimensional shape of his head and face are not shown, so the viewer is left to infer the eyes' correct positions based on which direction Homestar appears to be facing.&lt;br /&gt;
&lt;br /&gt;
*His puppet and his two figurines, on the other hand, have eyes stuck on one side of his head. Occasionally the other side of Puppet Homestar's face can be seen.&lt;br /&gt;
**[[The Brothers Chaps]] actually made the eyes detachable, so that they can be switched if necessary.&lt;br /&gt;
&lt;br /&gt;
*Homestar's eyes almost always blink at regular intervals (once every approximately 3.9 seconds), even when the cartoon is paused or has stopped, and in some special cases such as where he appears on a magazine cover (as seen in the email [[modeling]]).  This is explained by the fact that his eyes are animated as a Flash movie clip, which generally animates continuously.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Homestar Runner's Hat==&lt;br /&gt;
{{seemain|Homestar Runner's Hat}}&lt;br /&gt;
[[Image:Homestarhat.png|thumb|200px|Spin my buzzer!]]&lt;br /&gt;
Homestar Runner usually wears a blue and red propeller cap, commonly called a beanie. He calls the propeller a &amp;quot;buzzer.&amp;quot; In an interview with [[Wonkavision Magazine Interview|Wonkavision Magazine]], he claimed that he was born with his hat on.  He is occasionally seen without it.  He had lost his hat in [[Where My Hat is At?]] and apparently [[Marshmallow's Last Stand]] (according to the DVD commentary) as well.  In the email [[super powers]], Strong Bad managed to make the hat pop off of Homestar's head.  In the email [[car]], Homestar had his hat &amp;quot;tricked out&amp;quot; with features such as hydraulics and underglow neon.  He also claimed that if Strong Bad [[Spin My Buzzer|spun his &amp;quot;buzzer&amp;quot;]], it would play the theme from ''[[Wikipedia:Night Court|Night Court]]'', but it was obvious Homestar hummed it himself.  Homestar dressed as himself in [[TrogdorCon '97]], and wore two hats as a result.&lt;br /&gt;
&lt;br /&gt;
== Homestar's Clothing ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Homestar's Legs and shirt in the middle.PNG|50px|thumb|In the middle]]&lt;br /&gt;
[[Image:Onetwo_hrfoot.PNG|50px|thumb|left|The bottom of his feet]]&lt;br /&gt;
&lt;br /&gt;
Homestar's shirt seems to most resemble a red skirt with a white star on it. [[Strong Bad]] stole the star in [[Marshmallow's Last Stand]] and used it to coax Homestar and [[Pom Pom]] into wrestling [[Strong Mad]] and himself. Despite the brothers' loss to Homestar and Pom Pom, Strong Bad tore up the star, and only by kicking Strong Bad and taking one of the stars floating around his head was Homestar able to return his shirt to its original glory. The only other times Homestar's star has been removed were in [[different town]], in which Strong Bad imagined Homestar angrily tearing the star off his shirt and stamping on it when he &amp;quot;called it quits&amp;quot;, and [[hygiene]], when he takes it off and blows his nose in it as John. Clearly, the star is a mark of pride to Homestar Runner.  In [[Hremail 62]], Homestar shows off some of his apparently older stars, which he calls &amp;quot;Homestars.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In the original script for [[flashback]], Strong Bad wore a similar shirt until Marzipan gave one to Homestar (to replace his Duckie Shirt). After this point, Strong Bad would have ripped off his shirt, explaining why he never wore one to this day. [[The Homestar Runner Gets Something Stuck In His Craw]] offered the alternative explanation that the star shirt somehow became stuck in his craw while he somersaulted around the world fifty times. &lt;br /&gt;
&lt;br /&gt;
A real-life version of the shirt is available for purchase in the [[Store]].&lt;br /&gt;
&lt;br /&gt;
Other than his propeller cap, Homestar's shirt appears to be his only piece of clothing, as his questionable [[Homestar Runner's Pants|pants]] are a mystery. However, a Homestar costume is available in [[SBCG4AP]] as separate shirt, white pants, and white shoes with blue soles.  He wore a gray version of his shirt in [[impression]] while doing a bad imitation of [[Strong Sad]]. In [[Costume Commercial]], Homestar is seen wearing pants when trick-or-treating as Bubs at Strong Bad's house.&lt;br /&gt;
&lt;br /&gt;
In [[long pants]], Strong Bad claims that Homestar doesn't have shoes, but has blue soles glued to the bottom of his feet. Several times, however, this has been disproven, as in [[New Boots]] [[The Cheat]] [[Powered by The Cheat|animated]] Homestar's shoes being unambiguous objects. This was confirmed in [[Hremail 2000]], where he was shown holding his shoe, though the same hremail shows a close up of his foot with warts and hair, and no clear distinction between shoe and foot.  He also has two larger shoe sizes; sizes 18 and [[Strong Mad]].&lt;br /&gt;
&lt;br /&gt;
Note that the shirt is also straight compared to the eyes on the unfinished toon, [[Tis True, Pom Pom, Tis True]].&lt;br /&gt;
&lt;br /&gt;
==Homestar &amp;amp; Marzipan==&lt;br /&gt;
&amp;lt;!-- Please keep this section as brief as possible. Only very important information directly related to basic gameplay should be added. Any other information may be added to the Homestar and Marzipan Relationship article in the first instance. --&amp;gt;&lt;br /&gt;
[[Image:marzipan.png|thumb|Homestar's favorite hippie.]]&lt;br /&gt;
&lt;br /&gt;
:''Main article: [[Homestar Runner and Marzipan's Relationship]]'' &lt;br /&gt;
Homestar's relationship with Marzipan seems tenuous at best, and it has appeared to deteriorate over time.  Although Homestar frequently (and usually inadvertently) insults Marzipan, and she claims to have broken up with him several times, the two still seem to stick together. It is unclear how their relationship started, but the fact that their relationship is never truly broken suggests that they really do love each other.&lt;br /&gt;
&lt;br /&gt;
Homestar appears to greatly value their relationship; on the ''rare'' occasion that he realizes that their relationship is in jeopardy, he will spring into a desperate ploy to patch things up. He also seems to miss and need Marzipan's badgering every once in a while. When she was out of town in [[Happy Fireworks|July of 2005]], he carried around a [[Cardboard Marzipan|cardboard cutout]] version of her and provided a voice for it. The cardboard version still made similar comments about violence and Homestar's poor grammar that the actual Marzipan would have, providing Homestar with the presumably cathartic opportunity to say &amp;quot;Shut up, Marzipan.&amp;quot; Even then, Homestar's relationship with the &amp;quot;Cardboard Marzi&amp;quot; appeared to be tenuous, as he voiced her flirting with other men. Cardboard Marzipan returned in [[No Hands on Deck|August of 2006]], when she was slightly more positive with Homestar, and said she was proud of his unusually-constructed deck.&lt;br /&gt;
&lt;br /&gt;
In [[Date Nite]], Marzipan went out with The Cheat, much to Homestar's dismay. Though the date went well, Marzipan did not stay with The Cheat. She later went out with Bubs, to Coach Z's dismay.&lt;br /&gt;
&lt;br /&gt;
In [[Donut Unto Others]], it was revealed that Homestar and Marzipan have broken up at least 17 times, and that the 17th break-up had reached its 16th anniversary.&lt;br /&gt;
&lt;br /&gt;
== Relationships ==&lt;br /&gt;
:''Main article: [[Character Relationships]]''&lt;br /&gt;
*[[Homestar Runner and Homestar Runner's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Bad's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Pom Pom's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Marzipan's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Coach Z's Relationship]]&lt;br /&gt;
*[[Homestar Runner and The Cheat's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Bubs's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Sad's Relationship]]&lt;br /&gt;
*[[Homestar Runner and Strong Mad's Relationship]]&lt;br /&gt;
&lt;br /&gt;
== Variations ==&lt;br /&gt;
*[[The Homestar Runner]] ([[Old-Timey]])&lt;br /&gt;
*[[1-Up]] ([[20X6]])&lt;br /&gt;
*[[Dangeresque Too]] ([[Dangeresque (film series)|Dangeresque]])&lt;br /&gt;
*[[Uzi Bazooka]] ([[Dangeresque (film series)|Dangeresque]])&lt;br /&gt;
*[[The King of Town (Decemberween)|The King of Town]] ([[Decemberween]])&lt;br /&gt;
*[[The Homestar Runner (storybook)]]&lt;br /&gt;
*[[Tofu Homestar]]&lt;br /&gt;
*[[Atari Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Vector Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Bad Graphics Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Compy 386-emulated Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Handheld Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Dating Sim Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Melee Homestar]]&lt;br /&gt;
*[[Retro Gaming Character Variations|Kid Speedy Homestar]]&lt;br /&gt;
*[[Other Character Variations|Freaky Marzipan]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Other Character Variations|Suave Homestar]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Other Character Variations|One-eyed Homestar]] ([[Halloween Potion-ma-jig]])&lt;br /&gt;
*[[Teenage Variation#Teenage Homestar Runner|Teenage Homestar]]&lt;br /&gt;
*[[Free Petry Dish, USA Variation#Homestarmecium|Homestarmecium]] ([[highschool]])&lt;br /&gt;
*[[The Castlefunnies|The Castlefunnies Homestar Runner]] ([[old comics]])&lt;br /&gt;
*[[Cardboard Homestar]]&lt;br /&gt;
*[[3D Character Variations|3D Homestar]]&lt;br /&gt;
*[[Puppet Character Variations|Puppet Homestar]]&lt;br /&gt;
*[[The Exact Same]]&lt;br /&gt;
*[[Powered by The Cheat Character Variations|Powered by The Cheat Homestar]]&lt;br /&gt;
*[[Mario Paint Character Variations|Mario Paint Homestar]]&lt;br /&gt;
*[[Other Character Variations|Ornament Homestar]]&lt;br /&gt;
*[[Other Character Variations|Egg Homestar]]&lt;br /&gt;
*[[Other Character Variations|John]] ([[hygiene]])&lt;br /&gt;
*[[Other Character Variations|Shadow Homestar]]&lt;br /&gt;
*[[H. Star]] ([[Xeriouxly Forxe]])&lt;br /&gt;
&lt;br /&gt;
=== [[Halloween Costumes]] ===&lt;br /&gt;
*[[Wikipedia:Kurt Cobain|Kurt Cobain]] in [[Homestarloween Party]].&lt;br /&gt;
*[[Wikipedia:The Greatest American Hero|The Greatest American Hero]] in [[The House That Gave Sucky Treats]].&lt;br /&gt;
*[[Wikipedia:Angus Young|Angus Young]] in [[Pumpkin Carve-nival]].&lt;br /&gt;
*[[John McEnroe]] in [[3 Times Halloween Funjob]].&lt;br /&gt;
*Carl Spackler (played by [[Wikipedia:Bill Murray|Bill Murray]] in [[IMDb:tt0080487|Caddyshack]]) in [[Halloween Fairstival]].&lt;br /&gt;
*Moocher from [[IMDb:tt0078902|Breaking Away]] in [[Halloween Potion-ma-jig]].&lt;br /&gt;
*[[Wikipedia:Teen Wolf|Teen Wolf]] in [[Happy Hallow-day]].&lt;br /&gt;
*[[Wikipedia:Artie, the Strongest Man in the World|Artie, the Strongest Man in the World]] in [[Jibblies 2]]&lt;br /&gt;
*[[Wikipedia:Yahoo Serious|Yahoo Serious]]([[Seriously|ly]]) in [[Most in the Graveyard]].&lt;br /&gt;
*[[Wikipedia:Rubin and Ed|Crispin Glover as Rubin Farr]] in [[Doomy Tales of the Macabre]].&lt;br /&gt;
*[[Wikipedia:Tobias Fünke|Tobias Fünke]] in [[I Killed Pom Pom]].&lt;br /&gt;
*[[Wikipedia:Raising Arizona|H.I. McDunnough]] in [[The House That Gave Sucky Tricks]].&lt;br /&gt;
*[[Wikipedia:Mr. B Natural|Mr. B. Natural]] in [[Later That Night...]].&lt;br /&gt;
&lt;br /&gt;
==Quotes of the Week==&lt;br /&gt;
{{qotwstart}}&lt;br /&gt;
*{{qotw|&amp;quot;Now you guys are sure this won't emancipate me from my ridiculous striped pants?&amp;quot;|[[highschool]]|Mirror:hs_emancipate.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Doodle doodle loot doot doot doot doodoo. Boodle oodle oot doot doo! And so forth.&amp;quot; ''{Inspector Gadget theme continues}''|[[Donut Unto Others]] extended take|Mirror:hs_gadget.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Don't you remember? That's how you got Darryl Strawbry on your team back then.&amp;quot;|[[Kick-A-Ball]] outtake|Mirror:hs_strawbry.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I know how 'em duckie goes! Wack wack.&amp;quot;|possible [[Career Day]] outtake|Mirror:hs_duckie.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Roundy here is from back when I was known as the Popcorn Lumpou.&amp;quot; ''{Without his usual speech impediment}'' &amp;quot;Lumper.&amp;quot; '''[[Matt Chapman|Matt]]:''' &amp;quot;Lumper.&amp;quot;|[[Hremail 62]] outtake|Mirror:hs_lumper.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;'''[[Matt Chapman|Matt]]:''' &amp;quot;Try and sound like Homestar too.&amp;quot; '''[[Mike Chapman|Mike]]:''' &amp;quot;I'll do it.&amp;quot; *BURP!* '''Matt''': &amp;quot;Sounds like a moth comin' out!&amp;quot;|[[hygiene]] outtake|Mirror:hs_mikeburp.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;We are just talkin' about Bubs with a piece of paper stapled to his face, right?&amp;quot;|[[Happy Dethemberween]] outtake|Mirror:hs_bubstaple.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;No, HERE'S my grocery list: Amazing thing, amazing thing, amazing thing, amazing thing.&amp;quot;|[[love poems]]|Mirror:hs_amazing.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;So what are you saying? That you -GULP- want his bod?&amp;quot;|[[Date Nite]]|Mirror:hs_wanthisbod.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Oh, hello guys! This is my talk and mouth move. Great times!&amp;quot;|Quote of the Week exclusive|Mirror:hs_greatimes.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Drinko some Malinko! Malinko flavored water! Crystal clear like domestic beer!&amp;quot;|[[rough copy]]|Mirror:hs_drinko.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I wonder how you spell tabasco. TABASCOooo!&amp;quot;|[[the movies]]|Mirror:hstabasco.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;A-listen to me now. Cheer up, Coach Z. It doesn't have to be creepy and depressing all the time...&amp;quot;|[[Decemberween Short Shorts]]|Mirror:hs_cheerupcz.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Doo doot. Tch. Doo doo dit. Tch. Doot doo doot. Tch. It's the hold music...&amp;quot;|[[isp]]|Mirror:hs_holdmusic.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Hey guys! H'whatcha teekenbot?&amp;quot;|[[Strong Bad is a Bad Guy]]|Mirror:hs_heyguys.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;You're doing great! Now shoulders down! One and two! Feel the burn and go to bed! Make some breakfast, talk to me!&amp;quot;|[[lady fan]]|Mirror:hs_doingreat.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;The good times are over!!&amp;quot;|[[Bug in Mouth Disease]]|Mirror:hs_goodtimes.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;What in Pete Sampras is going on here?!?&amp;quot;|[[Cool Things]]|Mirror:hs_petesampras.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Buttdance again, like the rhythm's down your pants now!&amp;quot;|[[bottom 10]]|Mirror:hs_buttdance2.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;A wagon full of pamcakes? In the Champeenship?! I'd like to see ya try!&amp;quot;|[[montage]]|Mirror:hs_champeenship.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;THE GOOD TIMES ARE OVER!!!&amp;quot;|[[Bug In Mouth Disease]]|Mirror:hs_goodtimesover.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Li'l Brudder! I—I don't know what I'm doing with my life!&amp;quot;|[[crying]]|Mirror:hs_lilbrudder.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Let me in, da da da. Let me in!&amp;quot;|[[3 Times Halloween Funjob]]|Mirror:hs_letmein.zip}}&lt;br /&gt;
*{{qotw|&amp;quot;That's bupkis!&amp;quot;|[[the facts]]|Mirror:hs_thatsbupkis.zip}}&lt;br /&gt;
*{{qotw|'''[[Little Girl]]:''' &amp;quot;That sounds like funny!&amp;quot; '''Homestar Runner:''' &amp;quot;It ''sounds'' like funny, but it's not.&amp;quot;|[[Homestar vs. Little Girl]]|Mirror:hsgirl_likefunny.zip}}&lt;br /&gt;
*{{qotw|Todayborday is Labor Day song|[[Labor Dabor]]|Mirror:labordaysong_hs.zip}}&lt;br /&gt;
*{{qotw|&amp;quot;Here comes [[The Thnikkaman]]!&amp;quot;|[[monument]] Easter egg|Mirror:hs_thnikkaman.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;And somebody's a-ga-wabbin' a-my butt.&amp;quot;|[[3 Times Halloween Funjob]]|Mirror:hs_grabbinbutt.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;Let's do this like Brutus.&amp;quot;|[[monster truck]]|Mirror:hs_brutus.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I could go for a few [[Cold One|cold ones]] right about now.&amp;quot;|[[Where My Hat Is At?]]|Mirror:hs_coldones.mp3}}&lt;br /&gt;
*{{qotw|&amp;quot;I'm a belle!&amp;quot;|[[halloweener]]|Mirror:hs_imabelle.wav}}&lt;br /&gt;
*{{qotw|&amp;quot;Seriously, [[Pom Pom]], I'm about to [[pee]] my [[Homestar Runner's Pants|pants]].&amp;quot;|[[A Jumping Jack Contest]]|Mirror:hs_peepants.mp3}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
*[[Homestar Runner Evolution]]&lt;br /&gt;
*[[Homestar Runner Other Costumes|Other Costumes]]&lt;br /&gt;
*[[Nicknames#Homestar Runner|Nicknames]]&lt;br /&gt;
*[[Homestar Runner's Pants]]&lt;br /&gt;
*[[Homestar Runner's Daisy Dukes]]&lt;br /&gt;
*[[Homestar Runner Left Behind]]&lt;br /&gt;
*[[Homestar Runner Peeking]]&lt;br /&gt;
*[[Buttdance]]&lt;br /&gt;
*[[Prancing]]&lt;br /&gt;
*[[Seriously]]&lt;br /&gt;
*[[Spin My Buzzer]]&lt;br /&gt;
*[[Witch's Brew]]&lt;br /&gt;
*[[Homestar Runner's Fashion Sense]]&lt;br /&gt;
*[[Naked Homestar Runner]]&lt;br /&gt;
*[[Homestar Runner's Sleepwear]]&lt;br /&gt;
*[[Homestar Runner Without his Speech Impediment]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[[HR:vcr_hs.html|watch Homestar Runner's character video]]&lt;br /&gt;
*[[HR:vcr_hs.swf|view the Flash file for Homestar Runner's character video]]&lt;br /&gt;
&lt;br /&gt;
{{Characters|Homestar Runner}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Homestarmy]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip</id>
		<title>User talk:Phlip</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip"/>
				<updated>2015-09-05T14:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 62.63.238.24 (Talk) to last revision by Catjaz63&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{/Archives}}&lt;br /&gt;
&lt;br /&gt;
== #hrwiki-fanstuff-rc ==&lt;br /&gt;
&lt;br /&gt;
Hi. Is it possible at all to create a fanstuff recent change IRC channel? I know it would certainly not be as active as this here RC, but it would still be quite helpful. Please? --TheDenzel (not logged in)&lt;br /&gt;
:It would be theoretically possible, but I don't think there's any plans for it at the moment... it's been quite a while since the RC channel for this wiki was set up, I've forgotten most of it... I'd have to figure out most of how I did it from scratch again... and I've got other things to do that are more important. {{User:Phlip/sig}} 14:34, 2 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Homestar video player? ==&lt;br /&gt;
&lt;br /&gt;
Hi there Phlip, I was wondering if you still had that Greasemonkey version of the homestarrunner.com video player thingy that enabled it to play/pause and fast forward and such.  I downloaded it a while ago and loved it, but I accidentally uninstalled Greasemonkey (Long story) and it's been lost.  Can I get a link for the script or whatever it's called?  Thanks!  {{User:GuardDuck/sig}} 07:37, 23 December 2008 (UTC)&lt;br /&gt;
:You mean the fabulous [[User:Phlip/Greasemonkey|all-in-one Homestar script]].{{User:Loafing/sig}} 10:59, 23 December 2008 (UTC)&lt;br /&gt;
::Ah, indeed I did.  Thank you very much, Loafing!  It works wonders for all my homestar-watchingness.  {{User:GuardDuck/sig}} 01:34, 24 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Stinkoman 20X6 Cheat version ==&lt;br /&gt;
&lt;br /&gt;
Can you send me a link to it? I can't find it anywhere after the fanstuff wiki went down.--{{User:AWMPSCE/sig}} 17:02, 10 January 2009 (UTC)&lt;br /&gt;
:[http://www.mrphlip.com/stinkoman/ Here]. {{User:Phlip/sig}} 01:31, 11 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Hey! ==&lt;br /&gt;
&lt;br /&gt;
Hey! You live in Australia? That's so cool! I wanna live there! I have a question: does it snow there?&lt;br /&gt;
Shmank you! [[User:Stark Traurig|Stark Traurig]] 18:59, 25 January 2009 (UTC)&lt;br /&gt;
:In order: Hi! Yep. Not really, it's the middle of summer right now, and it's seriously hot. Yes, you do. Depends where you are... most of the country's pretty snow-free, but the [[Wikipedia:Great Dividing Range|mountains]] tend to get a some snow... Where I grew up in the mountains, it would snow a little each year, but rarely settled... just melted when it hit the ground. I know there are some places in the southern mountains that consistently get snow every year. I think Tasmania gets snowy too... I haven't really been down there in the winter. {{User:Phlip/sig}} 02:18, 26 January 2009 (UTC)&lt;br /&gt;
::Hehe, yeah. We're in the middle of winter right now. I shoveled snow for like 2 hours the other day. I was just lucky it was the light, fluffy kind and not the wet, heavy stuff. [[User:Stark Traurig|Stark Traurig]] 21:13, 26 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Deleted Theme Song Video subtitles ==&lt;br /&gt;
&lt;br /&gt;
Hey man, I was watching HR today and noticed there are no subtitles for [http://www.homestarrunner.com/video.html| http://www.homestarrunner.com/video.html].  I considered creating them and then noticed you deleted the original page with the entry:&lt;br /&gt;
&lt;br /&gt;
05:32, 19 August 2008 Phlip (Talk | contribs) deleted &amp;quot;Subtitles:video/en&amp;quot; ‎ (nonsense)&lt;br /&gt;
&lt;br /&gt;
Is there a reason for this page to not exist?  I would think the theme song should have subtitles too...&lt;br /&gt;
Thanks -[[User:Dutchscout|Dutchscout]] 08:57, 21 February 2009 (UTC)&lt;br /&gt;
:I've already mentioned why there aren't subtitles at [[Subtitles talk:video/en]]... As for that deletion, it's because some anonny made the page with gibberish. There was never any actual subtitles on that page. {{User:Phlip/sig}} 09:00, 21 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HELP! ==&lt;br /&gt;
I tried to set up a new email account but I ended up needing a password which I don't know.  And that was after I changed my email on the forum.  Since I can't check my email, I can't reactivate my account, so I can't access the forum.  Could you work your sysop magic and activate my account for me? {{User:Coach z's cool/sig}} 18:55, 1 March 2009 (UTC)&lt;br /&gt;
:I changed the email address of your forum account to match the one listed in your wiki preferences. You should be able to reactivate it from there. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 05:30, 2 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
==  Homestar Persona ==&lt;br /&gt;
This is sort of a strange question, but you seem to be the techie here. You know that new add-on for Firefox called Personas? I think it would be cool to have a Homestar Persona on there.  So if you ever have any free time too work on it, Firefox would be even cooler. I'd make it myself, but as you know, I'm no techie. Later! {{User:Coach z's cool/sig}} 17:39, 31 March 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== DS Homebrew ==&lt;br /&gt;
&lt;br /&gt;
Hey, fellow Aussie!  I was wondering, with the Homebrew Games, did you get the flash file and just change the extention to .nds or something, or did youu have to put it through a program?  This is because I want to know if it is possible to change a .wad version of [[Homestar Ruiner]] into one that can be played on the DS, preferably as a .nds file.  I tired just changing the extention, but that just gives me a white screen.  If you could respond, that would be great.  {{User:Open Source Greg/sig}} 08:40, 11 May 2009 (UTC)&lt;br /&gt;
:Neither. Converting those games to the DS wasn't some simple process... I had to rebuild the game from scratch. I did decompile the originals to get at the sprites and the code... but in both cases that's only so I could use them as a reference when re-creating it. (The sounds I could decompile and pull across directly... the music in pop_tire I had to recreate, though, otherwise it would've been too big.) Converting any of the SBCG4AP games is probably impossible... even if you did manage to port them, the DS probably isn't powerful enough to run them (the advantage of the Videlectrix games is that they are, by design, simple enough to run on the lower-power hardware... since that's what they're imitating). But if you want to give it a try, go ahead... the toolchain can be downloaded [http://www.devkitpro.org/ here]... that's designed for C, and works fine in C++ (which is what I used to make my two games)... but you should be able to use any language GCC can compile. [http://nocash.emubase.de/gbatek.htm This] is also a very useful page... once you understand all of that, writing DS games is pretty straightforward. Feel free to ask me if you want a hand with any of the specifics. {{User:Phlip/sig}} 09:11, 11 May 2009 (UTC)&lt;br /&gt;
::Wow, thanks a bunch.  I think I might try first off with recreating RhinoFeeder for DS, to make sure I can do it.  Do I just need the flash file, and run it through that?  Also, is it possible for a 15 year old with no computer programming experience at all to do this?  Just wondering...{{User:Open Source Greg/sig}} 09:33, 11 May 2009 (UTC)&lt;br /&gt;
:::In short? No and no. {{User:Phlip/sig}} 09:41, 11 May 2009 (UTC)&lt;br /&gt;
::::Well, I'm going to try anyway.  I hope I can do it.  If not, I'll leave it to the professionals.  But, it can't help to try.  Also, about how long do you spend trying to make a ds game from the Videlectrix game?  I want to know how much effort I'm up against.  {{User:Open Source Greg/sig}} 10:14, 11 May 2009 (UTC)&lt;br /&gt;
:::::It was a while ago, so I don't remember the exact timeframes... but from experienced programmer who'd never written for the DS to finished was probably about a month or so. Much of which was spent learning how the DS worked... the actual game itself was maybe a week or two (but I got lucky, the pop_tire Flash file decompiled really cleanly, so it was a really good reference to work from... also, I didn't have a job at the time, so I was working pretty much full-time on the game). But that was mostly thanks to the fact that I already knew C inside out, and had worked on embedded systems before (so I already knew what, say, a memory-mapped register is... which is handy, since the DS is full of them). If I had to learn all of that from scratch, it would've taken much longer. And for someone who hasn't done any programming before... I'd very much not recommend the DS as a starting platform. If you really want to learn how to program, I'd suggest Python (on a full computer, not a games console) to start with... much easier to learn. Once you get good at programming in general, then learn C, and how stuff works on the low level. And when you get good at ''that'', ''then'' consider switching to an embedded platform, like the DS (or whatever new handheld is out by then). Really, it'll make it much easier in the long run. {{User:Phlip/sig}} 12:18, 11 May 2009 (UTC)&lt;br /&gt;
::::::Yeah, I gave up.  I don't have a clue how to do this.  I'll leave it to you.  Speaking of which, why don't you try and do another one?  I have Pop:Tire and Secret Collect on my CycloDS, but another one would be awexome.  Sorry if I seem pushy or used up your time with this FAIL!  Oh, and my cousin is a computer programmer (he is making a game for EA along with his friend at the moment), but I doubt he could help me... {{User:Open Source Greg/sig}} 12:37, 11 May 2009 (UTC)&lt;br /&gt;
:::::::Yeah, I don't really have the time to start a new major project any time soon... being a full-time professional programmer means I do a lot less just coding for fun... rather spend my time away from work doing [[not]] exactly the same thing as at work, y'know? I do want to remake some more Videlectrix games at some point (people are always asking for Stinkoman 20X6) but don't hold your breath (unless your able to hold your breath for several years, in which case ''do'' hold it, and impress people). {{User:Phlip/sig}} 12:57, 11 May 2009 (UTC)&lt;br /&gt;
::::::::Yeah.  Stinkoman would be too gard, though.  You have to be able to use the several different buttons at the same time, and even the invisable ones.  Thanks neway, and i will hold my breath...for several years...and probably die.&lt;br /&gt;
&lt;br /&gt;
== hey ==&lt;br /&gt;
&lt;br /&gt;
hey man, how do i make a new page very quick for a new toon? (like next week) {{unsigned|Deesejaiman|13:32, 1 June 2009 (UTC)}}&lt;br /&gt;
:Easiest way I know of is to just copy the page of an earlier toon, and remove all the stuff... leaving basically just the headers and the formatting templates. I know there was a [[:Template:newsbemail|template]] to quickly set up pages for SBEmails, but I don't think there is a similar template for the other toon types. Maybe we should have one. {{User:Phlip/sig}} 14:26, 1 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== subtitles ==&lt;br /&gt;
&lt;br /&gt;
Hey, I'm having a weird XML error and I was wondering if you could help me. (I know you're probably busy right now... :B) - {{User:Catjaz63/sig}} 23:45, 29 April 2015 (UTC) &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;Error in XML: error on line 231 at column 14: Opening and ending tag mismatch: line line 0 and transcript&amp;quot;&lt;br /&gt;
:Catjaz63: While I cannot help you with the issue itself, I am pretty sure that Phlip would ask for more information about your issue, such as: what page/toon were you on?  what tool were you using? (the greasemonkey script or the old php subtitles tool -- the latter is no longer maintained)  and what browser and version you are using.  Good luck! --[[User:Stux|Stux]] 23:50, 29 April 2015 (UTC)&lt;br /&gt;
::I'm using Google Chrome and the Homestar-all-in-one. The page I'm on is [[I Killed Pom Pom]] and I'm using my own subtitles, which can be found [http://pastebin.com/uL5yd3JP here]. - {{User:Catjaz63/sig}} 00:03, 30 April 2015 (UTC)&lt;br /&gt;
:::Ah! I see! That makes a lot more sense now.  And looking again at the error message I would suggest that you carefully look through your transcript XML and make sure that all your XML tags are matched (so each &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;line&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag has a matching &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/line&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tag, and same for tags like sfx, strongbad, etc.)  Unlike HTML, XML is very unforgiving. --[[User:Stux|Stux]] 00:56, 30 April 2015 (UTC)&lt;br /&gt;
::::''uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuugh'' &amp;lt;nowiki&amp;gt;222 &amp;lt;line start...&amp;gt;s and 229 &amp;lt;/line&amp;gt;s.&amp;lt;/nowiki&amp;gt; Fridge. -{{User:Catjaz63/sig}} 01:02, 30 April 2015 (UTC)&lt;br /&gt;
:::::Fixed it! Sorry for posting on the talk page. :B - {{User:Catjaz63/sig}} 01:22, 30 April 2015 (UTC)&lt;br /&gt;
::::::Sweet! Excellent news! I don't think Phlip would mind too much.  Glad you got it fixed and thanks for your hard work! :) --[[User:Stux|Stux]] 01:47, 30 April 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User:Phlip</id>
		<title>User:Phlip</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User:Phlip"/>
				<updated>2015-09-05T14:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Reverted edits by 62.63.238.24 (Talk) to last revision by Phlip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border-left: 2px solid #CCC;border-top: 2px solid #CCC;border-right: 2px solid #666;border-bottom: 2px solid #666;background:#999;padding:3px;-moz-border-radius:20px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;border-left: 2px solid #666;border-top: 2px solid #666;border-right: 2px solid #CCC;border-bottom: 2px solid #CCC;background:#EEE;padding:0;text-align:center;-moz-border-radius:17px&amp;quot;&amp;gt;&lt;br /&gt;
This page is best viewed in a [[Wikipedia:web browser|web browser]] at a [[Wikipedia:screen resolution|screen resolution]]. Attempts to do otherwise may fail miserably. [http://www.anybrowser.org/campaign/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{User:Phlip/tower}}&lt;br /&gt;
==Profile==&lt;br /&gt;
;Name:Phillip Bradbury&lt;br /&gt;
;Age:{{yearssince|5 March 1985 +1100}}&lt;br /&gt;
;Location:Gosford, NSW, Australia&lt;br /&gt;
;Inner left thigh measurement:31cm&lt;br /&gt;
;Currently:A professional computer programmer.&lt;br /&gt;
;How I found Homestar Runner:A couple of people were talking about it in a chat channel once, and someone posted a link to [[crazy cartoon]]. I watched it, and was both amused and confused... then I watched the latest [[Strong Bad Email]], which at the time was [[mile]] - having seen two [[PbTC]] toons in a row, I thought they just couldn't do flash well, even though it was kinda funny at times (though I didn't really get [[mile]] of course). Then I saw [[First Time Here?]], and watched [[A Jorb Well Done]] as it said to, another toon with relatively bad graphics, and which to this day I still don't find very funny. But then I watched all the [[Character Videos]], and some other SBEmails, and got hooked.&lt;br /&gt;
;How I found HRWiki:I was actually planning to make my own site very similar to this one (except not a wiki) - Transcripts, Inside References, etc... Then, on one 1 April 2005, I thought &amp;quot;Come on, this is the Internet, someone's surely done this already&amp;quot;, hit Google and found this site. I signed up immediately.&lt;br /&gt;
;Shiny website:http://www.mrphlip.com/ &amp;amp;ndash; Hosted by [http://www.fellowsites.org/ FellowSites]... cheap, friendly, and I'm helping (in an admittedly small way) to keep the wiki alive. On the downside, I sound like an advertisement when I talk about it...&lt;br /&gt;
;Use [[Wikipedia:Firefox|Firefox]] and [[Wikipedia:Greasemonkey|Greasemonkey]]?:Get my [[User:Phlip/Greasemonkey|all-in-one Homestar script]]!&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Tenerence_Love</id>
		<title>Tenerence Love</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Tenerence_Love"/>
				<updated>2015-04-27T11:55:08Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;This mathematical diversion is best left for the talk page...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:TenerenceLove.png|thumb|&amp;quot;Remainder three!&amp;quot;]]&lt;br /&gt;
'''Tenerence Love''' is an R&amp;amp;B singer whose lyrics primarily consist of introducing himself. He is bald, sweaty, overweight and has a [[green tongue]] and an orange goatee. He wears a dark purple suit, a black tie and [[Cool Shades|shades]]. In one part of the [[Powered by The Cheat]] video [[Rap Song]], he is seen riding a flying donut, and the email [[love poems]] features his &amp;quot;sweaty overweight jam&amp;quot;. He is also mentioned in [[Teen Girl Squad Issue 13]] as a guest star on [[Peacey P]]'s new album ''Deliberance''.&lt;br /&gt;
&lt;br /&gt;
==Songs==&lt;br /&gt;
:'''Rap Song (guest star, with [[Peacey P]])'''&lt;br /&gt;
*'''Director:''' The Cheat&lt;br /&gt;
*'''Record label:''' [[Crample-O Stow Records]]&lt;br /&gt;
*'''Record:''' &amp;quot;The Lyricbolical Coach Z&amp;quot;&lt;br /&gt;
*'''Lyrics (Tenerence Love's part):'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
My name is Tenerence Love,&amp;lt;br/&amp;gt;&lt;br /&gt;
Plus my name is Tenerence Love,&amp;lt;br/&amp;gt;&lt;br /&gt;
Divided by my name is Tenerence Love,&amp;lt;br/&amp;gt;&lt;br /&gt;
Equals my name is Tenaaay-erence Love!&amp;lt;br/&amp;gt;&lt;br /&gt;
Remainder three!&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
:'''A Sweaty, Overweight Jam: Simma Down Girl'''&lt;br /&gt;
*'''Director:''' The Cheat&lt;br /&gt;
*'''Lyrics:'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
This is Tenerence Love with a sweaty overweight jam!&amp;lt;br/&amp;gt;&lt;br /&gt;
My name is Tenerence Love with a sweaty overweight ham!&amp;lt;br/&amp;gt;&lt;br /&gt;
It may be five pounds, ten pounds, twenty pounds,&amp;lt;br/&amp;gt;&lt;br /&gt;
just a little bit overweight, now welcome, girl, to sweaty town!&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
:'''Light Purple Cummerbund''' (sung by a [[cardboard]] cutout of Tenerence Love)&lt;br /&gt;
*'''Lyrics:'''&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Light purple cummerbund,&amp;lt;br/&amp;gt;&lt;br /&gt;
You know you're my only one!&amp;lt;br/&amp;gt;&lt;br /&gt;
Don't need no date to the prom&amp;lt;br/&amp;gt;&lt;br /&gt;
'Cause I got a light purple cummerbund on &amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Appearances==&lt;br /&gt;
*'''Debut:''' [[Teen Girl Squad Issue 13]] (mentioned in Easter egg)&lt;br /&gt;
*[[Rap Song]]&lt;br /&gt;
*Email [[love poems]]&lt;br /&gt;
*[[Teen Girl Squad Issue 15]] (voice and cardboard cut out shown)&lt;br /&gt;
&lt;br /&gt;
==Quotes of the Week==&lt;br /&gt;
{{qotwstart}}&lt;br /&gt;
*{{qotw|&amp;quot;Coach Z, R-A-P. Accidentally featuring Peacey P...&amp;quot; ''{entire &amp;quot;Rap Song&amp;quot;}''|[[Rap Song]]|Mirror:rapsong.mp3}}&lt;br /&gt;
|}&lt;br /&gt;
[[Category:Characters]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Subtitles:sbemail206/en</id>
		<title>Subtitles:sbemail206/en</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Subtitles:sbemail206/en"/>
				<updated>2015-04-02T15:07:47Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Oops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{subtitles|sbemail206}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot; file=&amp;quot;sbemail206.swf&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;21&amp;quot; end=&amp;quot;45&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Emails are like Hot Pockets,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;45&amp;quot; end=&amp;quot;77&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;They're full of garbage and cheese.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;86&amp;quot; end=&amp;quot;90&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;90&amp;quot; end=&amp;quot;98&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;98&amp;quot; end=&amp;quot;105&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;105&amp;quot; end=&amp;quot;110&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;110&amp;quot; end=&amp;quot;114&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;114&amp;quot; end=&amp;quot;120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;120&amp;quot; end=&amp;quot;125&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;125&amp;quot; end=&amp;quot;130&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;130&amp;quot; end=&amp;quot;136&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;136&amp;quot; end=&amp;quot;140&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;140&amp;quot; end=&amp;quot;148&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;148&amp;quot; end=&amp;quot;153&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;153&amp;quot; end=&amp;quot;160&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;160&amp;quot; end=&amp;quot;166&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;166&amp;quot; end=&amp;quot;176&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;176&amp;quot; end=&amp;quot;200&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;200&amp;quot; end=&amp;quot;252&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Wait a minute, have I not always checked my email on kitchen appliances?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;257&amp;quot; end=&amp;quot;281&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;281&amp;quot; end=&amp;quot;296&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;296&amp;quot; end=&amp;quot;313&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;313&amp;quot; end=&amp;quot;328&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;328&amp;quot; end=&amp;quot;367&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Oh, yeah! Computers!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;367&amp;quot; end=&amp;quot;398&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Let's go see how that old Compé is doing!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;405&amp;quot; end=&amp;quot;457&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;…Ooh. That is… that is some dust.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;457&amp;quot; end=&amp;quot;486&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Well, I'd best get to blowin'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;486&amp;quot; end=&amp;quot;540&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I said a-FWWWWWWWWWWWW…&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;550&amp;quot; end=&amp;quot;560&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whoa!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;560&amp;quot; end=&amp;quot;620&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;All that dust compressed my old computer into a newer, even better computer!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;620&amp;quot; end=&amp;quot;644&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Like coal to a diamond!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;644&amp;quot; end=&amp;quot;692&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ah, Compé, we hardly knew yé.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;692&amp;quot; end=&amp;quot;704&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whup!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;704&amp;quot; end=&amp;quot;733&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Startup music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;733&amp;quot; end=&amp;quot;753&amp;quot;&amp;gt;&amp;lt;sfx&amp;gt;Startup music&amp;lt;/sfx&amp;gt;&amp;lt;strongbad&amp;gt;The Lappier.&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;753&amp;quot; end=&amp;quot;795&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Just like the previous model, only crappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;795&amp;quot; end=&amp;quot;817&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I mean, more expensive.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;817&amp;quot; end=&amp;quot;839&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I–I mean, lappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;839&amp;quot; end=&amp;quot;849&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;849&amp;quot; end=&amp;quot;880&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;What?! April First?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;880&amp;quot; end=&amp;quot;915&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Aw, man, I can't check my email today!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;915&amp;quot; end=&amp;quot;953&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Here it comes, here it comes! Brace myself!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;953&amp;quot; end=&amp;quot;981&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, what are you doing here?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;981&amp;quot; end=&amp;quot;1032&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Just waiting for you to drop that April Foo'Day bomb, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1032&amp;quot; end=&amp;quot;1066&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Our website always has the best pranks!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1066&amp;quot; end=&amp;quot;1120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, everybody knows the Internet already ruined April Fools' Day.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1120&amp;quot; end=&amp;quot;1155&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;On February 7, 2008, ironically enough.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1155&amp;quot; end=&amp;quot;1216&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;But it's the day the Internet gets on the Internet to make inside jokes about the Internet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1216&amp;quot; end=&amp;quot;1317&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Exactly. And I can't wait to be &amp;lt;em&amp;gt;soooo&amp;lt;/em&amp;gt; fooled when my favorite website looks like it's from another &amp;lt;em&amp;gt;time&amp;lt;/em&amp;gt; period!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1317&amp;quot; end=&amp;quot;1388&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh. Man. This looks just like one of them Flash-y cartoon websites from 2002!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1388&amp;quot; end=&amp;quot;1414&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;No! Shut up! I haven't done it yet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1414&amp;quot; end=&amp;quot;1440&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;Boo-da-ling…&amp;lt;/strongbad&amp;gt;&amp;lt;sfx&amp;gt;Mechanical clunking&amp;lt;/sfx&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1440&amp;quot; end=&amp;quot;1483&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;What happened to my wedsize? It's gone Old Time Jones!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1483&amp;quot; end=&amp;quot;1513&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;E'erybody, e'erybody.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1513&amp;quot; end=&amp;quot;1555&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Insert one pence for tomfoolery!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1555&amp;quot; end=&amp;quot;1581&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;Insert a baby.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1581&amp;quot; end=&amp;quot;1615&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh, no, I'm not falling for &amp;lt;em&amp;gt;that&amp;lt;/em&amp;gt; prank again.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1615&amp;quot; end=&amp;quot;1656&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Strong Bad, let's move on to the next thing you're gonna make fun of.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1656&amp;quot; end=&amp;quot;1704&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And don't forget all the great fake movie trailers we get to suffer through.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1712&amp;quot; end=&amp;quot;1817&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Sometimes, a cruel, cruel world needs a man with cool, cool glasses.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1817&amp;quot; end=&amp;quot;1868&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Dangeresque theme&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1868&amp;quot; end=&amp;quot;1898&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1898&amp;quot; end=&amp;quot;1935&amp;quot;&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1935&amp;quot; end=&amp;quot;1955&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;But that equals…!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1965&amp;quot; end=&amp;quot;1995&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Divided by Two Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1995&amp;quot; end=&amp;quot;2027&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2027&amp;quot; end=&amp;quot;2060&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two Equals Six!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2067&amp;quot; end=&amp;quot;2092&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;…I, I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2092&amp;quot; end=&amp;quot;2099&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2099&amp;quot; end=&amp;quot;2104&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2104&amp;quot; end=&amp;quot;2109&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2109&amp;quot; end=&amp;quot;2113&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2113&amp;quot; end=&amp;quot;2122&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, I?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2144&amp;quot; end=&amp;quot;2165&amp;quot; speaker=&amp;quot;strongbad&amp;quot; volume=&amp;quot;0.8&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Is that— is that six?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2169&amp;quot; end=&amp;quot;2175&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2177&amp;quot; end=&amp;quot;2201&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;When's it coming out?! When's it coming out?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2201&amp;quot; end=&amp;quot;2235&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I gotta forward this to all my peeps on Google Buzz!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2235&amp;quot; end=&amp;quot;2303&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, hang on, we don't want to forget about the fake ads for nerd culture products that don't really exist.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2303&amp;quot; end=&amp;quot;2335&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Did someone say, &amp;quot;nerd cultures&amp;quot;?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2335&amp;quot; end=&amp;quot;2354&amp;quot; speaker=&amp;quot;strongsad&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Choking&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2354&amp;quot; end=&amp;quot;2363&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/strongbad&amp;gt;&amp;lt;homestar voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2368&amp;quot; end=&amp;quot;2422&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Burninate back-to-school with the Trogdor Beefy Arm Backpack.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2422&amp;quot; end=&amp;quot;2459&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Two straps! One beefy arm!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2459&amp;quot; end=&amp;quot;2508&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Secret com-pockt-ments for all your consummate V's.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2508&amp;quot; end=&amp;quot;2575&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And you'll look &amp;quot;rather dashing&amp;quot; in this Burninated Peasant Zip-up Trench Hoodie.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2575&amp;quot; end=&amp;quot;2604&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;It's only fake, unless enough of you say you'll buy one,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2604&amp;quot; end=&amp;quot;2636&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;in which case, support my crowdfunding campaign!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2636&amp;quot; end=&amp;quot;2676&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I want one! Imagine me with three arms!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2676&amp;quot; end=&amp;quot;2728&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Oooooooh! I gotta send this to all my Google Wavebirds!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2728&amp;quot; end=&amp;quot;2750&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Forget all that mess!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2750&amp;quot; end=&amp;quot;2804&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I'm yanking April Fools' off the Internet and back into the real world!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2804&amp;quot; end=&amp;quot;2833&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Where it can physically hurt people!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2833&amp;quot; end=&amp;quot;2869&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Nobody falls for that stuff no more, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2869&amp;quot; end=&amp;quot;2925&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, Homestar! I'd like you to meet your long-lost twin brother!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2925&amp;quot; end=&amp;quot;2960&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Chauncey! Give us a three-arm hug!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2973&amp;quot; end=&amp;quot;3000&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ha! April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3009&amp;quot; end=&amp;quot;3047&amp;quot; speaker=&amp;quot;marzipan&amp;quot;&amp;gt;Are you sure this is gluten-free?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3047&amp;quot; end=&amp;quot;3067&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3067&amp;quot; end=&amp;quot;3127&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, King of Town, I'd like you to eat… your long lost twin brother.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3127&amp;quot; end=&amp;quot;3141&amp;quot; speaker=&amp;quot;kingoftown&amp;quot;&amp;gt;Okay!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3153&amp;quot; end=&amp;quot;3173&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;GET ME DOWN!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3173&amp;quot; end=&amp;quot;3187&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;A-tee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3187&amp;quot; end=&amp;quot;3217&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;I'M SCARED OF HEIGHTS!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3217&amp;quot; end=&amp;quot;3230&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;And a-tee hee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3235&amp;quot; end=&amp;quot;3241&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3246&amp;quot; end=&amp;quot;3284&amp;quot; speaker=&amp;quot;bubs&amp;quot;&amp;gt;How am I supposed to get inside my car?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3284&amp;quot; end=&amp;quot;3324&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;How am I supposed to get outside my apratment?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3348&amp;quot; end=&amp;quot;3381&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, that's how you April Fools' a body.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3381&amp;quot; end=&amp;quot;3440&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Pain and suffering. Not… inconvenient web browsing.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3440&amp;quot; end=&amp;quot;3446&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3446&amp;quot; end=&amp;quot;3495&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey! Look at that! Now I can check my email.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3495&amp;quot; end=&amp;quot;3555&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Alright boxing gloves, get ready to work your inexplicable magic.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3555&amp;quot; end=&amp;quot;3596&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I check my email on computers, huh-HA! Uh, no toast!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3675&amp;quot; end=&amp;quot;3694&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;C-G-eowwww!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3701&amp;quot; end=&amp;quot;3750&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3919&amp;quot; end=&amp;quot;3956&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Old Time Jones Drug-filled Tonic!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3956&amp;quot; end=&amp;quot;3977&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;&amp;quot;It's for children, you!&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
&amp;lt;/transcript&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/sbemail_206</id>
		<title>sbemail 206</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/sbemail_206"/>
				<updated>2015-04-02T13:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Transcript */ Some formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{sbenav|206}}&lt;br /&gt;
[[Image:sbemail206.png|thumb|&amp;quot;Just like the previous model, only crappier. I mean, more expensive. I mean, lappier.&amp;quot;]]&lt;br /&gt;
After years of checking his email on kitchen appliances, Strong Bad gives April Fools' Day on the Internet a piece of his mind.&lt;br /&gt;
&lt;br /&gt;
'''Cast (in order of appearance):''' {{Film|Strong Bad}}, {{Film|Homestar Runner}}, {{film|The Homestar Runner}}, {{Film|Old Timey Strong Bad}}, {{Film|Dangeresque (character)|Dangeresque}}, {{Film|Dangeresque Too}}, {{Film|Renaldo}}, {{Film|The Stunt Double}}, {{Film|Coach Z}}, {{Film|Strong Sad}}, {{Film|Marzipan}}, {{Film|The Cheat}}, {{Film|Strong Mad}}, {{Film|The King of Town}}, {{Film|Bubs}}&lt;br /&gt;
&lt;br /&gt;
'''Places:''' [[Kitchen of The Brothers Strong]], [[Computer Room]], [[Bubs' Concession Stand]], [[The Field]], [[King of Town's Castle]]&lt;br /&gt;
&lt;br /&gt;
{{Comp|Lappier}}&lt;br /&gt;
&lt;br /&gt;
'''Date:''' Wednesday, April 1, 2015&lt;br /&gt;
&lt;br /&gt;
'''Running Time:''' 4:47 (official), 5:12 (actual)&lt;br /&gt;
&lt;br /&gt;
'''Page Title:''' Econowave 4761-V&lt;br /&gt;
&lt;br /&gt;
==Transcript==&lt;br /&gt;
''{Strong Bad is in front of a microwave on a kitchen counter.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{singing}'' Emails are like Hot Pockets, they're full of garbage and cheese.&lt;br /&gt;
&lt;br /&gt;
''{The microwave beeps and turns on. Text scrolls from right to left on the small screen.}''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Text: font-family:LcdD--&amp;gt;&lt;br /&gt;
'''DEAR STRONG BAD, WHEN ARE YOU GONNA DUST OFF THE COMPÉ AND ANSWER AN EMAIL? -MATT MACRO PIKA'''&lt;br /&gt;
&amp;lt;!--End text--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''{Strong Bad reads the words haltingly as they appear. Reads sender's name as &amp;quot;Matt Massapequa&amp;quot;. The microwave beeps, and &amp;quot;DONE.&amp;quot; scrolls down from above.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Wait a minute, have I not always checked my email on kitchen appliances?!&lt;br /&gt;
&lt;br /&gt;
''{Cut to Strong Bad in front of a running blender. &amp;quot;DEAR STRONG BAD&amp;quot; scrolls across a tiny screen.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' &amp;quot;Dear Strong Bad...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{Cut to Strong Bad in front of a toaster. Toast pops up with &amp;quot;DEAR STRONG BAD&amp;quot; burned onto the side.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' &amp;quot;Dear Strong Bad...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{Cut to Strong Bad in front of a fridge. He pushes a glass into the ice dispenser.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' &amp;quot;Dear crushed ice...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{Cut to Strong Bad in front of the Compé. The screen says:}''&lt;br /&gt;
&lt;br /&gt;
{{compeemail}}&lt;br /&gt;
Dear Strong Bad,&amp;lt;br /&amp;gt;&lt;br /&gt;
Do you enloy reasing?&amp;lt;br /&amp;gt;&lt;br /&gt;
I do two! How 'bou?&amp;lt;br /&amp;gt;&lt;br /&gt;
-The Tawdry Man&lt;br /&gt;
{{compeemailend}}&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' &amp;quot;Dear Strong Bad...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
''{Cut back to Strong Bad at the counter. He turns away from the microwave.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Oh, yeah! ''Computers!'' ''{He hops down from his stool}'' Let's go see how that old Compé is doing!&lt;br /&gt;
&lt;br /&gt;
''{Cut to Strong Bad in front of his computer table. The Compé appears to be buried in a huge mound of dust, with only its top-right corner poking out.}}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ...Ooh. That is... that is some dust. ''{Close up of the desk. Strong Bad steps closer}'' Well, I'd best get to blowin'! I said a-FWWWWWWWWWWWW...&lt;br /&gt;
&lt;br /&gt;
''{He blows into the mound, creating a cloud of dust that envelopes the room. When it clears, there is a different computer, resembling the [[Lappy 486]] and called the Lappier, sitting where the Compé was. The top-right corner of the Compé's monitor is balanced on the top of the Lappier for a few seconds, then falls onto the desk and clatters.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Whoa! All that dust compressed my old computer into a newer, even ''better'' computer! Like coal to a diamond!&lt;br /&gt;
&lt;br /&gt;
''{Rear view of the Lappier. Strong Bad picks up the Compé corner.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Ah, Compé, we hardly knew yé. Whup! ''{He tosses the Compé corner off to the side}''&lt;br /&gt;
&lt;br /&gt;
''{Cut back to the front of the Lappier. It boots up with a jingle and a 3D model resembling the Lappy logo that zooms and in rotates twice. &amp;quot;Lapp''ier''&amp;quot; appears on-screen.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' The Lappier. Just like the previous model, only crappier. I mean, more expensive. I&amp;amp;ndash;I mean, lappier.&lt;br /&gt;
&lt;br /&gt;
''{The Lappier dings. A notice appears with the text &amp;quot;Today's date is April 1&amp;quot; and the Lappier logo.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' What?! April First?! Aw, man, I can't check my email today!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' ''{excited}'' Here it comes, ''{Cut to wide shot. Homestar is sitting on the computer table to the right of the Lappier, knees tucked in and feet drumming on the table.}'' here it comes! ''{He stops drumming his feet}'' Brace myself! ''{He holds his breath.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Homestar, what are you doing here?&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Just waiting for you to drop that April Foo'Day bomb, Strong Bad! ''{He hops off the table}'' Our website ''always'' has the best pranks!&lt;br /&gt;
&lt;br /&gt;
''{Close up of Strong Bad.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Homestar, everybody knows the Internet already ruined April Fools' Day. ...On February 7, 2008, ironically enough.&lt;br /&gt;
&lt;br /&gt;
''{Close up of Homestar.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' But it's the day the Internet gets on the Internet to make inside jokes about the Internet!&lt;br /&gt;
&lt;br /&gt;
''{Wide shot of the two of them.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Exactly. ''{sarcastic}'' And I can't wait to be ''soooo'' fooled when ''{Cut to the welcome screen. Strong Bad and Homestar continue talking as voiceovers.}'' my favorite website looks like it's from another ''time'' period!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Oh. Man. ''{A cursor enters the screen and waggles back and forth.}'' This looks just like one of them Flash-y cartoon websites ''{The cursor stops over &amp;quot;watch intro&amp;quot; and a Flash Player Settings popup appears over Homestar's face.}'' from 2002!&lt;br /&gt;
&lt;br /&gt;
''{The cursor moves to the update button and clicks a few times. It starts waggling again as Strong Bad speaks.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' No! Shut up! I haven't done it yet! Boo-da-ling...&lt;br /&gt;
&lt;br /&gt;
''{The welcome screen transforms into an Old-Timey version with a mechanical version of The Homestar Runner. Buttons labeled &amp;quot;WEB&amp;quot;, &amp;quot;SITE&amp;quot;, and &amp;quot;COM&amp;quot; appear on the bottom of the screen, while a coin slot appears on the left side of the screen. As Homestar speaks, the cursor moves to click on &amp;quot;WEB&amp;quot;.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' What happened to my wedsize? It's gone Old Time Jones!&lt;br /&gt;
&lt;br /&gt;
''{The cursor clicks on &amp;quot;SITE&amp;quot;. A sign comes down from the top of the screen.}''&lt;br /&gt;
&lt;br /&gt;
'''ANIMATRONIC THE HOMESTAR RUNNER:''' E'erybody, e'erybody.&lt;br /&gt;
&lt;br /&gt;
''{Animatronic The Homestar Runner rotates counterclockwise out of the screen, and a mechanical Old Timey Strong Bad rotates into the screen in the same direction.}''&lt;br /&gt;
&lt;br /&gt;
'''ANIMATRONIC OLD TIMEY STRONG BAD:''' Insert one pence for tomfoolery!&lt;br /&gt;
&lt;br /&gt;
''{Animatronic Old Timey Strong Bad rotates back out of the screen, replaced by The Homestar Runner.}''&lt;br /&gt;
&lt;br /&gt;
'''ANIMATRONIC THE HOMESTAR RUNNER:''' Insert a baby. ''{opens his mouth.}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Oh, no, I'm not falling for ''that'' prank again. Strong Bad, let's move on to the next thing you're gonna make fun of.&lt;br /&gt;
&lt;br /&gt;
''{Cut to a green rating card.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' And don't forget all the great fake movie trailers we get to suffer through.&lt;br /&gt;
&lt;br /&gt;
''{As the voiceover speaks, extreme closeups of Dangeresque's sunglasses.}''&lt;br /&gt;
&lt;br /&gt;
'''VOICEOVER:''' Sometimes, a cruel, cruel world needs a man with cool, cool glasses.&lt;br /&gt;
&lt;br /&gt;
''{Shot of Dangeresque's glasses in a spotlight. The theme from ''Dangeresque 2, This Time It's Not Dangeresque 1'' plays. Cut to two Dangeresques facing off on top of Bubs' Concession Stand, each holding a nunchuck-gun. One of them is holding his gun by the nunchuck.}''&lt;br /&gt;
&lt;br /&gt;
'''BOTH DANGERESQUES:''' Two Dangeresques?!&lt;br /&gt;
&lt;br /&gt;
''{Wider shot, now including two Dangeresque Toos. One has a mustached face drawn on his star.}''&lt;br /&gt;
&lt;br /&gt;
'''BOTH DANGERESQUE TOOS:''' And two Dangeresque Toos?!&lt;br /&gt;
&lt;br /&gt;
''{Renaldo pops up front and center.}''&lt;br /&gt;
&lt;br /&gt;
'''RENALDO:''' But that equals...!&lt;br /&gt;
&lt;br /&gt;
''{Cut to black screen. &amp;quot;Dangeresque&amp;quot; scrolls upwards in the background while a &amp;quot;4&amp;quot; scrolls approaches in the foreground.}''&lt;br /&gt;
&lt;br /&gt;
'''VOICEOVER:''' Dangeresque Four... ''{The &amp;quot;4&amp;quot; is replaced with &amp;quot;÷ 2&amp;quot;...}'' Divided by Two... ''{...followed by &amp;quot;= 6&amp;quot;.}'' Equals Six!&lt;br /&gt;
&lt;br /&gt;
''{As the theme ends, the full title appears: &amp;quot;Dangeresque 4 ÷ 2 = 6&amp;quot;. Cut to a closeup of Dangeresque.}''&lt;br /&gt;
&lt;br /&gt;
'''DANGERESQUE:''' Or did I? ''{&amp;quot;Or did I?&amp;quot; appears below his face. Additional I's appear as he adds}'' ...I, I, I, I, I? ''{Musical sting with a cut to a six-lens'd pair of Dangeresque sunglasses.}'' ...Is that&amp;amp;mdash; is that six?&lt;br /&gt;
&lt;br /&gt;
''{Cut to shot of Dangeresque and the Stunt Double as Dangeresque on top of Bubs' Concession Stand as the Stunt Double is hit by a microwave.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG SAD:''' Ugh!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' When's it coming out?! ''When's it coming out?!'' I gotta forward this to all my peeps on Google Buzz!&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Now, hang on, we don't want to forget about the fake ads for nerd culture products that don't really exist.&lt;br /&gt;
&lt;br /&gt;
''{Cut to shot of Strong Sad with a Petri dish and a Q-Tip}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG SAD:''' Did someone say, &amp;quot;nerd cultures&amp;quot;? Ahh! ''{Strong Sad sticks the Q-Tip into his mouth as gagging sounds play}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD AND HOMESTAR RUNNER:''' No!&lt;br /&gt;
&lt;br /&gt;
'''ANNOUNCER:''' Burninate back-to-school with the Trogdor Beefy Arm Backpack. Two straps! One beefy arm! Secret com-pockt-ments for all your consummate V's. And you'll look &amp;quot;rather dashing&amp;quot; in this Burninated Peasant Zip-up Trench Hoodie.&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' It's only fake, unless enough of you say you'll buy one, in which case, ''support my crowdfunding campaign!''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' I want one! Imagine me with three arms! ''Oooooooh!'' I gotta send this to all my Google Wavebirds!&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Forget all that mess! I'm yanking April Fools' off the Internet and back into the real world! Where it can physically hurt people!&lt;br /&gt;
&lt;br /&gt;
''{Shot zooms in onto Homestar's face}''&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Nobody falls for that stuff no more, Strong Bad!&lt;br /&gt;
&lt;br /&gt;
''{Shot pans back out to show Strong Bad holding a mirror with a mustache applied to the top-center to resemble Mustached Homestar.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Hey, Homestar! I'd like you to meet your long-lost twin brother!&lt;br /&gt;
&lt;br /&gt;
'''HOMESTAR RUNNER:''' Chauncey! Give us a three-arm hug!&lt;br /&gt;
&lt;br /&gt;
''{Homestar runs into the mirror as it shatters and he falls onto the floor with shards in his face.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Ha! April Fools'!&lt;br /&gt;
&lt;br /&gt;
''{Shot cuts to Strong Bad and Marzipan in the field with Marzipan having a very The Cheat-like shape in her throat}''&lt;br /&gt;
&lt;br /&gt;
'''MARZIPAN:''' ''{slightly muffled}'' Are you sure this is gluten-free?&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' April Fools'!&lt;br /&gt;
&lt;br /&gt;
''{Shot cuts to The King of Town's table with Strong Bad and the King of Town}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Hey, King of Town, I'd like you to eat... ''{Holds up hand mirror in front of King of Town}'' your long lost twin brother.&lt;br /&gt;
&lt;br /&gt;
'''KING OF TOWN:''' Okay! ''{King of Town takes a bite out of hand mirror}''&lt;br /&gt;
&lt;br /&gt;
''{Cut to shot of Strong Mad and a turtle upside down in The Field}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG MAD:''' GET ME DOWN!&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{Peeks from the left side}'' A-tee hee.&lt;br /&gt;
&lt;br /&gt;
'''STRONG MAD:''' ''{bouncing around}'' I'M SCARED OF HEIGHTS!&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' ''{Peeks from the right side}'' And a-tee hee hee.&lt;br /&gt;
&lt;br /&gt;
''{Cut back to shot of Dangeresque and the Stunt Double as Dangeresque on top of Bubs' Concession Stand as the Stunt Double is hit by a microwave.}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG SAD:''' Ugh!&lt;br /&gt;
&lt;br /&gt;
''{Cut to shot of Bubs' in the field at night, looking at the [[Gremlin]] wrapped in [[duct tape]].}''&lt;br /&gt;
&lt;br /&gt;
'''BUBS:''' How am I supposed to get inside my car?&lt;br /&gt;
&lt;br /&gt;
''{Shot zooms into the windshield as Coach Z sits up from the driver seat inside the car}''&lt;br /&gt;
&lt;br /&gt;
'''COACH Z:''' How am ''I'' supposed to get outside my apratment? ''{Coach Z places a card with the printing &amp;quot;Apt. Z&amp;quot; onto the dashboard and dances for the last 3 notes of the background music}''&lt;br /&gt;
&lt;br /&gt;
''{Cut to the behind of the Lappier as Strong Bad is sitting at the desk}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Now, ''that's'' how you April Fools' a body. Pain and suffering. Not... inconvenient web browsing. ''{The Lappier plays a notification sound}'' Hey!&lt;br /&gt;
&lt;br /&gt;
''{Cut to front of the Lappier with Strong Bad's head as the Lappier displays &amp;quot;Time is 12:00 am. It is now April 2&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' Look at that! Now I can check my email. Alright boxing gloves, get ready to work your inexplicable magic. I check my email on computers, huh-HA! Uh, no toast!&lt;br /&gt;
&lt;br /&gt;
''{Strong Bad hits enter as a &amp;quot;Flash Player Settings&amp;quot; pop-up appears with the message &amp;quot;April Fools'!}''&lt;br /&gt;
&lt;br /&gt;
''{After a few seconds, a 3-D the Paper with the message &amp;quot;&amp;gt;tweet here to email strong bad @StrongBadActual&amp;quot;}''&lt;br /&gt;
&lt;br /&gt;
'''STRONG BAD:''' C-G-eowwww!&lt;br /&gt;
&lt;br /&gt;
''{The CGI paper begins to move, twist itself around as Strong Bad beatboxes in the background.}''&lt;br /&gt;
&lt;br /&gt;
==Easter Eggs==&lt;br /&gt;
*Click on &amp;quot;Update?&amp;quot; at the end to access another [[Old-Timey]] style [[Index Page]] scene.&lt;br /&gt;
*:''{Animatronic The Homestar Runner can be seen briefly, before an animatronic Old-Timey Strong Bad appears in his place.}''&lt;br /&gt;
*:'''ANIMATRONIC OLD-TIMEY STRONG BAD:''' ''{his words appear in frames as he speaks them}'' Olde Time Jones! Drug Filled Tonic! It's for children, you!&lt;br /&gt;
&lt;br /&gt;
==Fun Facts==&lt;br /&gt;
&lt;br /&gt;
===Trivia===&lt;br /&gt;
[[Image:sbemail206_teaser.jpg|thumb|Someday, when you least expect it...]]&lt;br /&gt;
*This email was previously teased by the closed Twitter account [[@ronginald]] on February 27, 2012, in a Tweet that read &amp;quot;Someday, when you least expect it...&amp;quot;. Attached was part of a script (which has since been changed heavily).&lt;br /&gt;
*This is the first Strong Bad Email to be uploaded since [[videography]] on October 5, 2009, ending its longest [[hiatus]] to date (approximately five-and-a-half years).&lt;br /&gt;
*The Lappier is based on Strong Bad's third computer, the [[Lappy 486]].&lt;br /&gt;
*The disk in the [[Floppy Disk Container]] reads &amp;quot;level 10&amp;quot;, very likely a reference to [[Stinkoman 20X6]].&lt;br /&gt;
**That may also be a reference to how it's been 5 years since the [[videography|previous sbemail]], and almost 10 years since Level 9 of Stinkoman 20X6.&lt;br /&gt;
*The fake merchandise shown is worn by [[Mike Chapman]].&lt;br /&gt;
&lt;br /&gt;
===Remarks===&lt;br /&gt;
*Before Strong Bad dusts off the Compé, its gray plug is clearly visible. However, after the Lappier is revealed, it becomes a beige plug.&lt;br /&gt;
*Strong Bad's pants have no reflection when Marzipan is seen with The Cheat in her throat.&lt;br /&gt;
*Strong Bad is able to activate the microwave without pressing the Start button.&lt;br /&gt;
&lt;br /&gt;
===Goofs===&lt;br /&gt;
*When Coach Z appears as [[Renaldo]], his arms are a paler shade of green than his body.&lt;br /&gt;
*During the rear-view shot of the Lappier, a section of the table is missing on the bottom-right corner.&lt;br /&gt;
&lt;br /&gt;
===Inside References===&lt;br /&gt;
*The fake merchandise shown is based on the characters [[Trogdor]] and [[Rather Dashing]].&lt;br /&gt;
*Homestar wants a Trogdor backpack (which includes a beefy arm) so he can have &amp;quot;[[Lack of Visible Arms|three arms]]&amp;quot;.&lt;br /&gt;
*Homestar mistakes his reflection for his &amp;quot;[[Homestar Runner and Homestar Runner's Relationship|twin brother 'Chauncey']]&amp;quot;.&lt;br /&gt;
**In [[hygiene]], Homestar (as John) called a moth that lived in his mouth by this name.&lt;br /&gt;
*When Homestar breaks the mirror, he gets shards of broken glass in his face, which previously occurred in [[licensed]].&lt;br /&gt;
**The mirror shown has an appropriately placed [[Mustachioed Homestar Runner|mustache]] on it.&lt;br /&gt;
*Marzipan is standing behind a cinder block with a [[Marzipan's Chalkboard|chalkboard]] reading &amp;quot;[[marzipan|gluten-free concert for birds]]&amp;quot;.&lt;br /&gt;
*In this email, both [[Strong Bad Smiling|Strong Bad]] and [[Strong Sad Smiling|Strong Sad]] smile.&lt;br /&gt;
*The King of Town [[The King of Town's Food|takes a bite]] from a mirror.&lt;br /&gt;
*The upside-down turtle next to Strong Mad was previously seen getting [[oatmeal]] dumped on it in [[new hands]].&lt;br /&gt;
*There is another mention of [[Jones]].&lt;br /&gt;
*Strong Bad was previously asked if he happens to &amp;quot;enloy reasing&amp;quot; in an Easter egg email in [[unused emails]].&lt;br /&gt;
*The ''Dangeresque 4'' promo has [[duplicate characters]].&lt;br /&gt;
*Homestar says &amp;quot;When's it coming out? When's it coming out?&amp;quot; in the same rhythm as &amp;quot;Stick it to the man! Stick it to the man!&amp;quot; from [[the theme from DANGERESQUE II: This time, it's not Dangeresque I]].&lt;br /&gt;
*Strong Bad's tune at the end of the email is similar to [[The Brothers Chaps]]' imitation of the CBS &amp;quot;Special&amp;quot; logo music in the DVD versions of [[A Holiday Greeting]] and [[The Best Decemberween Ever]].&lt;br /&gt;
&lt;br /&gt;
===Real-World References===&lt;br /&gt;
*[[wikipedia:Google Buzz|Google Buzz]] was a social network launched in February 2010, and discontinued in December 2011 when it was replaced by [[wikipedia:Google+|Google+]].&lt;br /&gt;
*[[wikipedia:Google Wave|Google Wave]] was collaborative, real-time editing web service launched by Google in September 2009. It has since been discontinued.&lt;br /&gt;
*&amp;quot;Olde Time Jones Drug Filled Tonic&amp;quot; being marketed towards children is a reference to how children's medicines of the past contained ingredients that today would be questionable at best, including opium and cocaine.&lt;br /&gt;
*&amp;quot;Kickcheater&amp;quot; is a pun on the crowdfunding website [[wikipedia:Kickstarter|Kickstarter]], as well as a reference to [[Kicking The Cheat]].&lt;br /&gt;
*[[wikipedia:Massapequa, New York|Massapequa]] is a hamlet on Long Island in New York state.&lt;br /&gt;
*[[Wikipedia:Hot Pockets|Hot Pockets]] are a brand of frozen food consisting of meat, cheese, and sauce inside a pastry crust. They were previously mentioned in [[dullard]].&lt;br /&gt;
*The [[Wikipedia:WaveBird Wireless Controller|Wavebird]] is a wireless controller for the [[Nintendo]] [[wikipedia:GameCube|GameCube]].&lt;br /&gt;
&lt;br /&gt;
== YouTube Version ==&lt;br /&gt;
*The [[YouTube]] version is entitled &amp;quot;sbemail206 - April 1st&amp;quot;.&lt;br /&gt;
* As with the YouTube versions of [[Fish Eye Lens]] and [[Halloween Safety]], a group of nine thumbnails appears at the end of the cartoon, parodying YouTube's related video thumbnails. Almost all of them have been reused from the previous toons; however, in the upper-left hand corner, the thumbnail of Marzipan and Pom Pom now displays Marzipan with The Cheat in her throat.&lt;br /&gt;
** Marzipan's eyes in the middle-right thumbnail blink once.&lt;br /&gt;
** She has two mouths, one in the correct position and one where The Cheat's eyes should be. Both are frowning.&lt;br /&gt;
** Her hair is now misaligned from her head.&lt;br /&gt;
* The text in the Lappier logo is [[Wikipedia:Image scaling#Scaling methods|resampled]] and appears smooth, whereas it is resized and appears pixelated in the Flash version.&lt;br /&gt;
* After the thumbnails, the animatronic Easter egg plays automatically.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
{{sbemailextlinks|206|37766|youtube=NhfHM3jlKnU}}&lt;br /&gt;
{{Strong Bad Email}}&lt;br /&gt;
[[Category: April Fools]]&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Subtitles:sbemail206/en</id>
		<title>Subtitles:sbemail206/en</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Subtitles:sbemail206/en"/>
				<updated>2015-04-02T13:22:55Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Add some emphasis&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{subtitles|videography}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot; file=&amp;quot;sbemail205.swf&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;21&amp;quot; end=&amp;quot;45&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Emails are like Hot Pockets,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;45&amp;quot; end=&amp;quot;77&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;They're full of garbage and cheese.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;86&amp;quot; end=&amp;quot;90&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;90&amp;quot; end=&amp;quot;98&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;98&amp;quot; end=&amp;quot;105&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;105&amp;quot; end=&amp;quot;110&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;110&amp;quot; end=&amp;quot;114&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;114&amp;quot; end=&amp;quot;120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;120&amp;quot; end=&amp;quot;125&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;125&amp;quot; end=&amp;quot;130&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;130&amp;quot; end=&amp;quot;136&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;136&amp;quot; end=&amp;quot;140&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;140&amp;quot; end=&amp;quot;148&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;148&amp;quot; end=&amp;quot;153&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;153&amp;quot; end=&amp;quot;160&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;160&amp;quot; end=&amp;quot;166&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;166&amp;quot; end=&amp;quot;176&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;176&amp;quot; end=&amp;quot;200&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;200&amp;quot; end=&amp;quot;252&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Wait a minute, have I not always checked my email on kitchen appliances?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;257&amp;quot; end=&amp;quot;281&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;281&amp;quot; end=&amp;quot;296&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;296&amp;quot; end=&amp;quot;313&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;313&amp;quot; end=&amp;quot;328&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;328&amp;quot; end=&amp;quot;367&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Oh, yeah! Computers!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;367&amp;quot; end=&amp;quot;398&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Let's go see how that old Compé is doing!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;405&amp;quot; end=&amp;quot;457&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;…Ooh. That is… that is some dust.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;457&amp;quot; end=&amp;quot;486&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Well, I'd best get to blowin'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;486&amp;quot; end=&amp;quot;540&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I said a-FWWWWWWWWWWWW…&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;550&amp;quot; end=&amp;quot;560&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whoa!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;560&amp;quot; end=&amp;quot;620&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;All that dust compressed my old computer into a newer, even better computer!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;620&amp;quot; end=&amp;quot;644&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Like coal to a diamond!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;644&amp;quot; end=&amp;quot;692&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ah, Compé, we hardly knew yé.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;692&amp;quot; end=&amp;quot;704&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whup!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;704&amp;quot; end=&amp;quot;733&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Startup music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;733&amp;quot; end=&amp;quot;753&amp;quot;&amp;gt;&amp;lt;sfx&amp;gt;Startup music&amp;lt;/sfx&amp;gt;&amp;lt;strongbad&amp;gt;The Lappier.&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;753&amp;quot; end=&amp;quot;795&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Just like the previous model, only crappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;795&amp;quot; end=&amp;quot;817&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I mean, more expensive.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;817&amp;quot; end=&amp;quot;839&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I–I mean, lappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;839&amp;quot; end=&amp;quot;849&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;849&amp;quot; end=&amp;quot;880&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;What?! April First?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;880&amp;quot; end=&amp;quot;915&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Aw, man, I can't check my email today!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;915&amp;quot; end=&amp;quot;953&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Here it comes, here it comes! Brace myself!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;953&amp;quot; end=&amp;quot;981&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, what are you doing here?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;981&amp;quot; end=&amp;quot;1032&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Just waiting for you to drop that April Foo'Day bomb, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1032&amp;quot; end=&amp;quot;1066&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Our website always has the best pranks!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1066&amp;quot; end=&amp;quot;1120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, everybody knows the Internet already ruined April Fools' Day.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1120&amp;quot; end=&amp;quot;1155&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;On February 7, 2008, ironically enough.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1155&amp;quot; end=&amp;quot;1216&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;But it's the day the Internet gets on the Internet to make inside jokes about the Internet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1216&amp;quot; end=&amp;quot;1317&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Exactly. And I can't wait to be &amp;lt;em&amp;gt;soooo&amp;lt;/em&amp;gt; fooled when my favorite website looks like it's from another &amp;lt;em&amp;gt;time&amp;lt;/em&amp;gt; period!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1317&amp;quot; end=&amp;quot;1388&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh. Man. This looks just like one of them Flash-y cartoon websites from 2002!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1388&amp;quot; end=&amp;quot;1414&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;No! Shut up! I haven't done it yet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1414&amp;quot; end=&amp;quot;1440&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;Boo-da-ling…&amp;lt;/strongbad&amp;gt;&amp;lt;sfx&amp;gt;Mechanical clunking&amp;lt;/sfx&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1440&amp;quot; end=&amp;quot;1483&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;What happened to my wedsize? It's gone Old Time Jones!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1483&amp;quot; end=&amp;quot;1513&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;E'erybody, e'erybody.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1513&amp;quot; end=&amp;quot;1555&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Insert one pence for tomfoolery!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1555&amp;quot; end=&amp;quot;1581&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;Insert a baby.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1581&amp;quot; end=&amp;quot;1615&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh, no, I'm not falling for &amp;lt;em&amp;gt;that&amp;lt;/em&amp;gt; prank again.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1615&amp;quot; end=&amp;quot;1656&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Strong Bad, let's move on to the next thing you're gonna make fun of.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1656&amp;quot; end=&amp;quot;1704&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And don't forget all the great fake movie trailers we get to suffer through.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1712&amp;quot; end=&amp;quot;1817&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Sometimes, a cruel, cruel world needs a man with cool, cool glasses.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1817&amp;quot; end=&amp;quot;1868&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Dangeresque theme&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1868&amp;quot; end=&amp;quot;1898&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1898&amp;quot; end=&amp;quot;1935&amp;quot;&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1935&amp;quot; end=&amp;quot;1955&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;But that equals…!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1965&amp;quot; end=&amp;quot;1995&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Divided by Two Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1995&amp;quot; end=&amp;quot;2027&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2027&amp;quot; end=&amp;quot;2060&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two Equals Six!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2067&amp;quot; end=&amp;quot;2092&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;…I, I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2092&amp;quot; end=&amp;quot;2099&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2099&amp;quot; end=&amp;quot;2104&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2104&amp;quot; end=&amp;quot;2109&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2109&amp;quot; end=&amp;quot;2113&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2113&amp;quot; end=&amp;quot;2122&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, I?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2144&amp;quot; end=&amp;quot;2165&amp;quot; speaker=&amp;quot;strongbad&amp;quot; volume=&amp;quot;0.8&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Is that— is that six?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2169&amp;quot; end=&amp;quot;2175&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2177&amp;quot; end=&amp;quot;2201&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;When's it coming out?! When's it coming out?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2201&amp;quot; end=&amp;quot;2235&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I gotta forward this to all my peeps on Google Buzz!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2235&amp;quot; end=&amp;quot;2303&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, hang on, we don't want to forget about the fake ads for nerd culture products that don't really exist.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2303&amp;quot; end=&amp;quot;2335&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Did someone say, &amp;quot;nerd cultures&amp;quot;?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2335&amp;quot; end=&amp;quot;2354&amp;quot; speaker=&amp;quot;strongsad&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Choking&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2354&amp;quot; end=&amp;quot;2363&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/strongbad&amp;gt;&amp;lt;homestar voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2368&amp;quot; end=&amp;quot;2422&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Burninate back-to-school with the Trogdor Beefy Arm Backpack.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2422&amp;quot; end=&amp;quot;2459&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Two straps! One beefy arm!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2459&amp;quot; end=&amp;quot;2508&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Secret com-pockt-ments for all your consummate V's.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2508&amp;quot; end=&amp;quot;2575&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And you'll look &amp;quot;rather dashing&amp;quot; in this Burninated Peasant Zip-up Trench Hoodie.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2575&amp;quot; end=&amp;quot;2604&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;It's only fake, unless enough of you say you'll buy one,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2604&amp;quot; end=&amp;quot;2636&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;in which case, support my crowdfunding campaign!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2636&amp;quot; end=&amp;quot;2676&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I want one! Imagine me with three arms!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2676&amp;quot; end=&amp;quot;2728&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Oooooooh! I gotta send this to all my Google Wavebirds!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2728&amp;quot; end=&amp;quot;2750&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Forget all that mess!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2750&amp;quot; end=&amp;quot;2804&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I'm yanking April Fools' off the Internet and back into the real world!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2804&amp;quot; end=&amp;quot;2833&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Where it can physically hurt people!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2833&amp;quot; end=&amp;quot;2869&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Nobody falls for that stuff no more, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2869&amp;quot; end=&amp;quot;2925&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, Homestar! I'd like you to meet your long-lost twin brother!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2925&amp;quot; end=&amp;quot;2960&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Chauncey! Give us a three-arm hug!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2973&amp;quot; end=&amp;quot;3000&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ha! April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3009&amp;quot; end=&amp;quot;3047&amp;quot; speaker=&amp;quot;marzipan&amp;quot;&amp;gt;Are you sure this is gluten-free?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3047&amp;quot; end=&amp;quot;3067&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3067&amp;quot; end=&amp;quot;3127&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, King of Town, I'd like you to eat… your long lost twin brother.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3127&amp;quot; end=&amp;quot;3141&amp;quot; speaker=&amp;quot;kingoftown&amp;quot;&amp;gt;Okay!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3153&amp;quot; end=&amp;quot;3173&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;GET ME DOWN!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3173&amp;quot; end=&amp;quot;3187&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;A-tee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3187&amp;quot; end=&amp;quot;3217&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;I'M SCARED OF HEIGHTS!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3217&amp;quot; end=&amp;quot;3230&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;And a-tee hee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3235&amp;quot; end=&amp;quot;3241&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3246&amp;quot; end=&amp;quot;3284&amp;quot; speaker=&amp;quot;bubs&amp;quot;&amp;gt;How am I supposed to get inside my car?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3284&amp;quot; end=&amp;quot;3324&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;How am I supposed to get outside my apratment?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3348&amp;quot; end=&amp;quot;3381&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, that's how you April Fools' a body.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3381&amp;quot; end=&amp;quot;3440&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Pain and suffering. Not… inconvenient web browsing.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3440&amp;quot; end=&amp;quot;3446&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3446&amp;quot; end=&amp;quot;3495&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey! Look at that! Now I can check my email.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3495&amp;quot; end=&amp;quot;3555&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Alright boxing gloves, get ready to work your inexplicable magic.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3555&amp;quot; end=&amp;quot;3596&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I check my email on computers, huh-HA! Uh, no toast!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3675&amp;quot; end=&amp;quot;3694&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;C-G-eowwww!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3701&amp;quot; end=&amp;quot;3750&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3919&amp;quot; end=&amp;quot;3956&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Old Time Jones Drug-filled Tonic!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3956&amp;quot; end=&amp;quot;3977&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;&amp;quot;It's for children, you!&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
&amp;lt;/transcript&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Subtitles:sbemail206/en</id>
		<title>Subtitles:sbemail206/en</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Subtitles:sbemail206/en"/>
				<updated>2015-04-02T13:15:38Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;Subtitle'd!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{subtitles|videography}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot; file=&amp;quot;sbemail205.swf&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;21&amp;quot; end=&amp;quot;45&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Emails are like Hot Pockets,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;45&amp;quot; end=&amp;quot;77&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;They're full of garbage and cheese.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;86&amp;quot; end=&amp;quot;90&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;90&amp;quot; end=&amp;quot;98&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;98&amp;quot; end=&amp;quot;105&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;105&amp;quot; end=&amp;quot;110&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;110&amp;quot; end=&amp;quot;114&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;114&amp;quot; end=&amp;quot;120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;120&amp;quot; end=&amp;quot;125&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;125&amp;quot; end=&amp;quot;130&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;130&amp;quot; end=&amp;quot;136&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;136&amp;quot; end=&amp;quot;140&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;140&amp;quot; end=&amp;quot;148&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;and answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;148&amp;quot; end=&amp;quot;153&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;answer an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;153&amp;quot; end=&amp;quot;160&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;an email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;160&amp;quot; end=&amp;quot;166&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;email? Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;166&amp;quot; end=&amp;quot;176&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Matt Massapequa&amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;176&amp;quot; end=&amp;quot;200&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;&amp;quot;Dear Strong Bad, when are you gonna dust off the Compé and answer an email? Matt Massapequa&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;200&amp;quot; end=&amp;quot;252&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Wait a minute, have I not always checked my email on kitchen appliances?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;257&amp;quot; end=&amp;quot;281&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;281&amp;quot; end=&amp;quot;296&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;296&amp;quot; end=&amp;quot;313&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;313&amp;quot; end=&amp;quot;328&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear crushed ice…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;&amp;quot;Dear Strong Bad…&amp;quot;&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;328&amp;quot; end=&amp;quot;367&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Oh, yeah! Computers!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;367&amp;quot; end=&amp;quot;398&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Let's go see how that old Compé is doing!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;405&amp;quot; end=&amp;quot;457&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;…Ooh. That is… that is some dust.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;457&amp;quot; end=&amp;quot;486&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Well, I'd best get to blowin'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;486&amp;quot; end=&amp;quot;540&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I said a-FWWWWWWWWWWWW…&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;550&amp;quot; end=&amp;quot;560&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whoa!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;560&amp;quot; end=&amp;quot;620&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;All that dust compressed my old computer into a newer, even better computer!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;620&amp;quot; end=&amp;quot;644&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Like coal to a diamond!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;644&amp;quot; end=&amp;quot;692&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ah, Compé, we hardly knew yé.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;692&amp;quot; end=&amp;quot;704&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Whup!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;704&amp;quot; end=&amp;quot;733&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Startup music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;733&amp;quot; end=&amp;quot;753&amp;quot;&amp;gt;&amp;lt;sfx&amp;gt;Startup music&amp;lt;/sfx&amp;gt;&amp;lt;strongbad&amp;gt;The Lappier.&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;753&amp;quot; end=&amp;quot;795&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Just like the previous model, only crappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;795&amp;quot; end=&amp;quot;817&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I mean, more expensive.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;817&amp;quot; end=&amp;quot;839&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I–I mean, lappier.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;839&amp;quot; end=&amp;quot;849&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;849&amp;quot; end=&amp;quot;880&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;What?! April First?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;880&amp;quot; end=&amp;quot;915&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Aw, man, I can't check my email today!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;915&amp;quot; end=&amp;quot;953&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Here it comes, here it comes! Brace myself!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;953&amp;quot; end=&amp;quot;981&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, what are you doing here?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;981&amp;quot; end=&amp;quot;1032&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Just waiting for you to drop that April Foo'Day bomb, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1032&amp;quot; end=&amp;quot;1066&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Our website always has the best pranks!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1066&amp;quot; end=&amp;quot;1120&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Homestar, everybody knows the Internet already ruined April Fools' Day.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1120&amp;quot; end=&amp;quot;1155&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;On February 7, 2008, ironically enough.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1155&amp;quot; end=&amp;quot;1216&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;But it's the day the Internet gets on the Internet to make inside jokes about the Internet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1216&amp;quot; end=&amp;quot;1317&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Exactly. And I can't wait to be soooo fooled when my favorite website looks like it's from another time period!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1317&amp;quot; end=&amp;quot;1388&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh. Man. This looks just like one of them Flash-y cartoon websites from 2002!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1388&amp;quot; end=&amp;quot;1414&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;No! Shut up! I haven't done it yet!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1414&amp;quot; end=&amp;quot;1440&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;Boo-da-ling…&amp;lt;/strongbad&amp;gt;&amp;lt;sfx&amp;gt;Mechanical clunking&amp;lt;/sfx&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1440&amp;quot; end=&amp;quot;1483&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;What happened to my websize? It's gone Old Time Jones!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1483&amp;quot; end=&amp;quot;1513&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;E'erybody, e'erybody.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1513&amp;quot; end=&amp;quot;1555&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Insert one pence for tomfoolery!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1555&amp;quot; end=&amp;quot;1581&amp;quot; speaker=&amp;quot;thehomestar&amp;quot;&amp;gt;Insert a baby.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1581&amp;quot; end=&amp;quot;1615&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Oh, no, I'm not falling for that prank again.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1615&amp;quot; end=&amp;quot;1656&amp;quot; speaker=&amp;quot;homestar&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Strong Bad, let's move on to the next thing you're gonna make fun of.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1656&amp;quot; end=&amp;quot;1704&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And don't forget all the great fake movie trailers we get to suffer through.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1712&amp;quot; end=&amp;quot;1817&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Sometimes, a cruel, cruel world needs a man with cool, cool glasses.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1817&amp;quot; end=&amp;quot;1868&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Dangeresque theme&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1868&amp;quot; end=&amp;quot;1898&amp;quot;&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;strongbad&amp;gt;Two Dangeresques?!&amp;lt;/strongbad&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1898&amp;quot; end=&amp;quot;1935&amp;quot;&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;homestar&amp;gt;And two Dangeresque Toos?!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1935&amp;quot; end=&amp;quot;1955&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;But that equals…!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1965&amp;quot; end=&amp;quot;1995&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Divided by Two Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;1995&amp;quot; end=&amp;quot;2027&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;Equals Six!&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2027&amp;quot; end=&amp;quot;2060&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Dangeresque Four Divided by Two Equals Six!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2067&amp;quot; end=&amp;quot;2092&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;…I, I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2092&amp;quot; end=&amp;quot;2099&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2099&amp;quot; end=&amp;quot;2104&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2104&amp;quot; end=&amp;quot;2109&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I, I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2109&amp;quot; end=&amp;quot;2113&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, &amp;lt;span style=&amp;quot;visibility:hidden&amp;quot;&amp;gt;I?&amp;lt;/span&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2113&amp;quot; end=&amp;quot;2122&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Or did I? …I, I, I, I, I?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2144&amp;quot; end=&amp;quot;2165&amp;quot; speaker=&amp;quot;strongbad&amp;quot; volume=&amp;quot;0.8&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Is that— is that six?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2169&amp;quot; end=&amp;quot;2175&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2177&amp;quot; end=&amp;quot;2201&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;When's it coming out?! When's it coming out?!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2201&amp;quot; end=&amp;quot;2235&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I gotta forward this to all my peeps on Google Buzz!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2235&amp;quot; end=&amp;quot;2303&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, hang on, we don't want to forget about the fake ads for nerd culture products that don't really exist.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2303&amp;quot; end=&amp;quot;2335&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Did someone say, &amp;quot;nerd cultures&amp;quot;?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2335&amp;quot; end=&amp;quot;2354&amp;quot; speaker=&amp;quot;strongsad&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Choking&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2354&amp;quot; end=&amp;quot;2363&amp;quot;&amp;gt;&amp;lt;strongbad voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/strongbad&amp;gt;&amp;lt;homestar voiceover=&amp;quot;yes&amp;quot;&amp;gt;No!&amp;lt;/homestar&amp;gt;&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2368&amp;quot; end=&amp;quot;2422&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Burninate back-to-school with the Trogdor Beefy Arm Backpack.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2422&amp;quot; end=&amp;quot;2459&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Two straps! One beefy arm!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2459&amp;quot; end=&amp;quot;2508&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;Secret com-pockt-ments for all your consummate V's.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2508&amp;quot; end=&amp;quot;2575&amp;quot; speaker=&amp;quot;announcer&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;And you'll look &amp;quot;rather dashing&amp;quot; in this Burninated Peasant Zip-up Trench Hoodie.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2575&amp;quot; end=&amp;quot;2604&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;It's only fake, unless enough of you say you'll buy one,&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2604&amp;quot; end=&amp;quot;2636&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;in which case, support my crowdfunding campaign!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2636&amp;quot; end=&amp;quot;2676&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;I want one! Imagine me with three arms!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2676&amp;quot; end=&amp;quot;2728&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Oooooooh! I gotta send this to all my Google Wavebirds!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2728&amp;quot; end=&amp;quot;2750&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Forget all that mess!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2750&amp;quot; end=&amp;quot;2804&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I'm yanking April Fools' off the Internet and back into the real world!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2804&amp;quot; end=&amp;quot;2833&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Where it can physically hurt people!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2833&amp;quot; end=&amp;quot;2869&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Nobody falls for that stuff no more, Strong Bad!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2869&amp;quot; end=&amp;quot;2925&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, Homestar! I'd like you to meet your long-lost twin brother!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2925&amp;quot; end=&amp;quot;2960&amp;quot; speaker=&amp;quot;homestar&amp;quot;&amp;gt;Chauncey! Give us a three-arm hug!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;2973&amp;quot; end=&amp;quot;3000&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Ha! April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3009&amp;quot; end=&amp;quot;3047&amp;quot; speaker=&amp;quot;marzipan&amp;quot;&amp;gt;Are you sure this is gluten-free?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3047&amp;quot; end=&amp;quot;3067&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;April Fools'!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3067&amp;quot; end=&amp;quot;3127&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey, King of Town, I'd like you to eat… your long lost twin brother.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3127&amp;quot; end=&amp;quot;3141&amp;quot; speaker=&amp;quot;kingoftown&amp;quot;&amp;gt;Okay!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3153&amp;quot; end=&amp;quot;3173&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;GET ME DOWN!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3173&amp;quot; end=&amp;quot;3187&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;A-tee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3187&amp;quot; end=&amp;quot;3217&amp;quot; speaker=&amp;quot;strongmad&amp;quot;&amp;gt;I'M SCARED OF HEIGHTS!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3217&amp;quot; end=&amp;quot;3230&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;And a-tee hee hee.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3235&amp;quot; end=&amp;quot;3241&amp;quot; speaker=&amp;quot;strongsad&amp;quot;&amp;gt;Ugh!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3246&amp;quot; end=&amp;quot;3284&amp;quot; speaker=&amp;quot;bubs&amp;quot;&amp;gt;How am I supposed to get inside my car?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3284&amp;quot; end=&amp;quot;3324&amp;quot; speaker=&amp;quot;coachz&amp;quot;&amp;gt;How am I supposed to get outside my apratment?&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3348&amp;quot; end=&amp;quot;3381&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Now, that's how you April Fools' a body.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3381&amp;quot; end=&amp;quot;3440&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Pain and suffering. Not… inconvenient web browsing.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3440&amp;quot; end=&amp;quot;3446&amp;quot; speaker=&amp;quot;sfx&amp;quot;&amp;gt;Ding!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3446&amp;quot; end=&amp;quot;3495&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Hey! Look at that! Now I can check my email.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3495&amp;quot; end=&amp;quot;3555&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;Alright boxing gloves, get ready to work your inexplicable magic.&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3555&amp;quot; end=&amp;quot;3596&amp;quot; speaker=&amp;quot;strongbad&amp;quot;&amp;gt;I check my email on computers, huh-HA! Uh, no toast!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3675&amp;quot; end=&amp;quot;3694&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot;&amp;gt;C-G-eowwww!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3701&amp;quot; end=&amp;quot;3750&amp;quot; speaker=&amp;quot;strongbad&amp;quot; voiceover=&amp;quot;yes&amp;quot; sfx=&amp;quot;sfx&amp;quot;&amp;gt;Music&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3919&amp;quot; end=&amp;quot;3956&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;Old Time Jones Drug-filled Tonic!&amp;lt;/line&amp;gt;&lt;br /&gt;
  &amp;lt;line start=&amp;quot;3956&amp;quot; end=&amp;quot;3977&amp;quot; speaker=&amp;quot;oldstrongbad&amp;quot;&amp;gt;&amp;quot;It's for children, you!&amp;quot;&amp;lt;/line&amp;gt;&lt;br /&gt;
&amp;lt;/transcript&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/Subtitles:sbemail206/en</id>
		<title>Subtitles:sbemail206/en</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/Subtitles:sbemail206/en"/>
				<updated>2015-04-02T10:30:14Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;It's been so long... see if I can remember how this works...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{inprogress|Phlip}}&lt;br /&gt;
{{subtitles|sbemail206}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;transcript xml:lang=&amp;quot;en-us&amp;quot; file=&amp;quot;sbemail206.swf&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;400&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2015-03-30T01:09:01Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Chrome Plain HTML NavBar still shows Subscribe */ Oops, try again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;br /&gt;
::Hey! Thanks for replying! I reinstalled the plugin and it still hasn't changed. Probably takes awhile for it to go through Google's servers. - [[User:Catjaz63|Catjaz63]] 01:02, 30 March 2015 (UTC)&lt;br /&gt;
:::Apparently there's a &amp;quot;Publish&amp;quot; button I had to press. Should be live now. {{User:Phlip/sig}} 01:09, 30 March 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	<entry>
		<id>http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey</id>
		<title>User talk:Phlip/Greasemonkey</title>
		<link rel="alternate" type="text/html" href="http://www.hrwiki.org/wiki/User_talk:Phlip/Greasemonkey"/>
				<updated>2015-03-29T22:25:04Z</updated>
		
		<summary type="html">&lt;p&gt;Phlip:&amp;#32;/* Chrome Plain HTML NavBar still shows Subscribe */ Reply for Catjaz63&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Troubleshooting==&lt;br /&gt;
If the script doesn't seem to be working for you, please try:&lt;br /&gt;
#If you have Adblock, Flashblock, or similar addons installed, disable them on homestarrunner.com.&lt;br /&gt;
#Reinstalling the script, by clicking [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js this link].&lt;br /&gt;
#Uninstalling Greasemonkey (from the Tools menu in Firefox, choose Add-ons, then go to the Extensions section, click Greasemonkey, then Uninstall), and then reinstall it (from [https://addons.mozilla.org/en-US/firefox/addon/748 here]). You'll probably need to [http://www.hrwiki.org/index.php?title=User:Phlip/Greasemonkey&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;fakeextension=.user.js install the script] again.&lt;br /&gt;
If you're still having problems after that, ''then'' ask for help on this page. Be sure to mention what versions of Firefox and Flash you have, and what other extensions you have installed. {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Release notes==&lt;br /&gt;
===Version 1.0 (8 Mar, 2006)===&lt;br /&gt;
*First released version.&lt;br /&gt;
*Had the fullscreen, seek bar, prev/next and wiki link features.&lt;br /&gt;
*Worked only on the main site.&lt;br /&gt;
===Version 2.0 (26 May, 2006)===&lt;br /&gt;
*Added the preferences menu.&lt;br /&gt;
*Added support for Videlectrix and the HRWiki mirror.&lt;br /&gt;
*Added &amp;quot;outside the frame&amp;quot;, April Fools and plain HTML navbar options.&lt;br /&gt;
===Version 2.1 (8 Aug, 2006)===&lt;br /&gt;
*Tooltips in the preferences box.&lt;br /&gt;
*The &amp;quot;more better&amp;quot; rando link is now always on... the less better version was just ugly, so I removed it.&lt;br /&gt;
*You can set what types of toon are included in the rando selection.&lt;br /&gt;
*You have the option to make it check if the next sbemail/whatever actually exists before putting the &amp;quot;next&amp;quot; link (so there's no &amp;quot;next&amp;quot; link on the latest email).&lt;br /&gt;
**The only reason this wasn't there before is that it means an extra hit to the H*R servers... but now that I have the preferences things set up, so you can turn it on or off, I think that's fine.&lt;br /&gt;
===Version 3.0 (29 Aug, 2006)===&lt;br /&gt;
*Added [[HRWiki:Subtitles|subtitling]] functionality.&lt;br /&gt;
*Updating no longer requires uninstalling the previous version.&lt;br /&gt;
===Version 3.1 (27 Sep, 2006)===&lt;br /&gt;
*Whether to show the names next to subtitles is now a distinct setting from the one for colours - you can have neither, either or both.&lt;br /&gt;
*There is a button that will purge the local cache for all subtitles-related files downloaded from the wiki and reload the page, for when the cache is out of date.&lt;br /&gt;
*The ability to update the test subtitles without refreshing the page for every change (NB: disabled by default, see [[#Refresh Subtitles|below]]).&lt;br /&gt;
*Rewind and fast forward buttons on the seek bar to go to the first/last frame, respectively.&lt;br /&gt;
*Flash loading progress bar on the seek bar (see how much it's loaded).&lt;br /&gt;
===Version 3.2 (25 Sep, 2007)===&lt;br /&gt;
*Add option to automatically check for script updates (on by default).&lt;br /&gt;
===Version 4.0 (8 Oct, 2014)===&lt;br /&gt;
Complete ground-up rewrite of the script! Featuring:&lt;br /&gt;
* Chrome support! Install the extension from the [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb Chrome Web Store]!&lt;br /&gt;
** Note: Due to limitations in how the settings storage has been written for Chrome, any settings you enter will not transfer between sites... so if you, say, turn on Subtitles while watching a toon on www.homestarrunner.com, and then go to a toon on the HRWiki mirror, your settings won't transfer across, and you'll have to enable Subtitles again for the new site.&lt;br /&gt;
* Turning settings on and off no longer causes the page to refresh.&lt;br /&gt;
* More modular codebase, making the code easier to navigate and maintain.&lt;br /&gt;
** The script is now built from a number of smaller files, accessible at [https://github.com/mrphlip/allinone GitHub].&lt;br /&gt;
* Cleaned up some bugs and bitrot from the last version of the script being 7 years old... browsers have changed a lot since then, and the script has been tweaked to match.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Suggestion==&lt;br /&gt;
Would it make sense to change line 272 to&lt;br /&gt;
&amp;lt;pre&amp;gt;		addHRWikiLink(&amp;quot;Index_Page&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then I suppose line 261 could be removed.  By the way, ''amazing'' work Phlip.&amp;amp;nbsp;-- [[User:Tom|Tom]] 17:25, 7 March 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
I suggest that the games on videlectrix.com should be added, such as&lt;br /&gt;
&amp;lt;pre&amp;gt;http://www.videlectrix.com/duckguard1.html&lt;br /&gt;
http://videlectrix.com/duckguard1.html&lt;br /&gt;
http://www.videlectrix.com/racewalk.html&lt;br /&gt;
http://videlectrix.com/racewalk.html&lt;br /&gt;
http://www.videlectrix.com/hallrunner.html&lt;br /&gt;
http://videlectrix.com/hallrunner.html&lt;br /&gt;
http://www.videlectrix.com/lcd_game.html&lt;br /&gt;
http://videlectrix.com/lcd_game.html&lt;br /&gt;
http://www.videlectrix.com/thydungeonman2.html&lt;br /&gt;
http://videlectrix.com/thydungeonman2.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
And yeah, you rock. [[User:Libertyernie|Libertyernie]] 16:32, 8 April 2006 (UTC)&lt;br /&gt;
:Hmm, that's a good point... I'll get on that sometime &amp;lt;s&amp;gt;(probably tomorrow)&amp;lt;/s&amp;gt;. {{User:Phlip/sig}} 16:37, 8 April 2006 (UTC)&lt;br /&gt;
::The reason I thought of this was because I realized the Pause button on the seekbar can be used for skipping a level in Duck Guardian. [[User:Libertyernie|Libertyernie]] 21:47, 12 April 2006 (UTC)&lt;br /&gt;
==Homestar-Fullon Edit==&lt;br /&gt;
Using the user script I was getting a scrollbar on every page, so I edited line 411 from&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 10;&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;var dh = window.innerHeight - 20;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This kept all the content in the window, but I didn't have to scroll down to see the navbar at the bottom. Did this happen to anyone else? [[User:Consonance|Consonance]] 08:39, 23 June 2006 (UTC)&lt;br /&gt;
:Not me. Works perfectly for me. --{{User:X-Spider2/X-Sigger2}} 03:04, 14 July 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Eventual to-do list==&lt;br /&gt;
(in no particular order)&lt;br /&gt;
*{{done}} General cleanup of the code.&lt;br /&gt;
*{{done}} Work on Videlectrix.&lt;br /&gt;
*{{done}} Work on the mirrors (&amp;lt;s&amp;gt;[http://homestarrunner.kitkorp.com/ kitkorp]&amp;lt;/s&amp;gt; ''(not needed with Tom working on completing the HRWiki mirror)'' and [[Mirror:|HRWiki]]).&lt;br /&gt;
*{{done}} Some way of turning various features on and off maybe?&lt;br /&gt;
**{{done}} Only if I get this working, replace the flash files with [[April Fools 2006|theyCallHimFlipper.swf]].&lt;br /&gt;
*{{done}} replace the navbar with text links (this is more for me than for you guys).&lt;br /&gt;
*{{done}} resize the seek bar when the toon resizes (if you resize the window)&lt;br /&gt;
*{{done}} show outside-the-frame stuff&lt;br /&gt;
Feel free to add suggestions. {{User:Phlip/sig}} 21:38, 9 April 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:I've got one. You could try &amp;quot;flipping the ''whole page'' upside down&amp;quot;. You know, using the [http://www.homestarrunner.com/theyCallHimFlipperMainNav.swf?contentURL=main_nav.swf flipped navbar], too. And putting the navbar above the flipped toon/game.&amp;lt;br /&amp;gt;&lt;br /&gt;
:Also, you could try adding A-B repeat to the seek bar, if you know enough to do that. Preferably make it a seperate sub-option in the prefs, too.&lt;br /&gt;
:[[do over|Totally not getting old]], {{User:X-Spider2/X-Sigger2}} 22:57, 5 June 2006 (UTC)&lt;br /&gt;
:I have a suggestion/request. If you could make a &amp;quot;play all sbemails in order&amp;quot; type of function, that would be really awesome. Thanks! [[Special:Contributions/69.249.241.164|69.249.241.164]] 18:13, 19 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Errors in installing ==&lt;br /&gt;
&lt;br /&gt;
I keep getting this error:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Error installing user script:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[Exception... &amp;quot;Compoment returned failure code: 0x804b000a [nsIIOService.newChannel]&amp;quot; nsresult: &amp;quot;0x804b000a (&amp;lt;unknown&amp;gt;)&amp;quot; location: &amp;quot;JS frame :: chrome://strongbademailsprevnext/content/browser.xul :: getContents :: line 20&amp;quot; data: no]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Any suggestions? {{User:NFITC1/sig}} 07:56, 16 August 2006 (UTC)&lt;br /&gt;
:&amp;quot;strongbademailsprevnext&amp;quot;? I'm guessing you have [https://addons.mozilla.org/firefox/1695/ this extension] installed? You might want to uninstall that... this script does that stuff too. {{User:Phlip/sig}} 08:01, 16 August 2006 (UTC)&lt;br /&gt;
::&amp;lt;s&amp;gt;Nope. I only have the script that allows it to be viewed 'full-screen'. {{User:NFITC1/sig}} 22:34, 16 August 2006 (UTC)&amp;lt;/s&amp;gt;&lt;br /&gt;
::Nevermind. Turns out that they were both conflicting and I was misinterpreting the second error message. Thanks! {{User:NFITC1/sig}} 22:40, 16 August 2006 (UTC)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Just as a side-note for people who run into the same problem I did: if you use a program that blends its own Javascript functions into every page you load (mainly found in ad-munching software, like Ad Muncher), make sure you disable it BEFORE installing the Greasemonkey script.  Otherwise the extra code might break it, requiring you to clear your cache and install it again with the filters disabled. [[User:MNGoldenEagle|MNGoldenEagle]] 14:24, 28 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== HOW THE HECK!?!?!?!?! ==&lt;br /&gt;
&lt;br /&gt;
HOW DID YOU MAKE THIS!?!?! {{User:The thing/sig}} 00:36, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Phlip has studied necromancy and sorcery for many years now. Other than that, it's a good diet, exercise, and a modicum of good fortune. {{User:Qermaq/sig}} 00:44, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::Phlip has access to both a monkey and a typewriter, so it really was only a [[Wikipedia:Infinite monkey theorem|matter of time]]. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 00:46, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::No, no, no... I sold my soul to Haxxina, ancient Greek goddess of programming and ruler of the underworld. In return She gave me the ability to write this script as my superpower. Just don't make me say my name backwards minus the first 'P' and we should be fine. {{User:Phlip/sig}} 00:52, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::We'll be out a free [[lunch special]]? {{User:Qermaq/sig}} 00:58, 18 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Refresh Subtitles ==&lt;br /&gt;
OK, this feature will need some explaining... First, go Tools&amp;amp;rarr;Manage User Scripts, click on &amp;quot;Homestar All-in-one&amp;quot; and click &amp;quot;Edit&amp;quot;. If it asks you to choose a text editor, just pick Notepad unless you have something better. It'll look ugly in Notepad (it doesn't recognise the line endings) but it'll work. Now search for &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; false)&amp;lt;/code&amp;gt; and change it to &amp;lt;code&amp;gt;if (settings.testsubs &amp;amp;&amp;amp; true)&amp;lt;/code&amp;gt;. Now you can use the feature. First you have to turn on &amp;quot;Test subtitles&amp;quot; and hit &amp;quot;Save and apply&amp;quot; as usual, but the next time after the page loads there'll be a &amp;quot;Refresh Subtitles&amp;quot; button below the text area, that re-parses the subtitles without reloading the page - invaluable to subtitle authors.&lt;br /&gt;
&lt;br /&gt;
The reasons the option's not avaliable by default are:&lt;br /&gt;
*The interface is clumsy... sometimes the button's there, sometimes it's not there... depending on whether the test subtitles were already enabled before the page loaded... given it's something that's supposed to update stuff without a page load it can be confusing.&lt;br /&gt;
*It's not exhaustively tested, and has some weird side-effects (it calls &amp;lt;code&amp;gt;savesettings&amp;lt;/code&amp;gt;, so if you, say, turn off the seekbar and hit &amp;quot;Reload Subtitles&amp;quot; the seekbar will remain, but it'll save that you want the seekbar turned off)...&lt;br /&gt;
*It's not permanent... Version 4.0 will hopefully make it so that ''all'' settings work like this, and clicking &amp;quot;Save and Apply&amp;quot; won't have to reload the page.&lt;br /&gt;
So it's there if you want it, but it's not cluttering up the settings boxes of people that don't want it.&lt;br /&gt;
&lt;br /&gt;
Anyways, enjoy! {{User:Phlip/sig}} 03:30, 27 September 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Greasemonkey install method ==&lt;br /&gt;
GM's changed the way it installs scripts by link. A single-click on the link will offer to install the script, the option isn't even on the right click menu anymore. --[[User:AndrewNeo|AndrewNeo]] 17:20, 31 October 2006 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just the seek bar ==&lt;br /&gt;
&lt;br /&gt;
Maybe for use on other sites, you could individually release the code for the seekbar. (And, if possible, include the preferences from the whole script, plus maybe external CSS skin support.) --{{User:Y2K/sig}} 04:00, 16 January 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== spellcheck ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Homestar&amp;quot; is misspelled in the warning section of the heap-o-comments at the beginning. Page is locked or I'd fix it myself. {{User:ACupOfCoffee/sig}} 07:08, 22 February 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Uniformity matters... again ==&lt;br /&gt;
&lt;br /&gt;
Since &amp;quot;podcast&amp;quot; was added recently to the navbar, can you please update that? --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 20:55, 2 March 2007 (UTC)&lt;br /&gt;
:Done. {{User:Phlip/sig}} 10:54, 4 March 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Is it just me or is this broken? ==&lt;br /&gt;
&lt;br /&gt;
One day the fullon part stopped working for me.  And the Subtitles.  And the seek bar.  The corner buttons are still there. --[[User:68.55.198.213|68.55.198.213]] 11:57, 13 June 2007 (UTC)&lt;br /&gt;
:It's still working fine for me. What did you do the day that it broke? Did you install any other extensions, or scripts, or upgrade anything? {{User:Phlip/sig}} 12:03, 13 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::So It's just me.  That's good to know.  I poked around in the system, and determined an update to flashblock borked it.  I normally don't unblock flash (even for homestarrunner.com).  Adding it to the whitelist fixed the problem.  Before that update, they both worked together.  Thanks, and I hope this info helps someone.--[[User:68.55.198.213|68.55.198.213]] 13:11, 21 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not working in nightly build  =( ==&lt;br /&gt;
&lt;br /&gt;
In the nightly build of Firefox (Dubbed Minefield), the script has limited functionality.&lt;br /&gt;
The subtitle language selector doesn't work, as there are no options. I will try to clean up to make it work..right.&lt;br /&gt;
&lt;br /&gt;
[[User:Onekopaka|onekopaka]] 02:14, 5 July 2007 (UTC)&lt;br /&gt;
:By design, if subtitles are turned off, the script doesn't contact the wiki at all. When you turn the subtitles on, it tries to download the [[Subtitles:Languages|list of supported languages]] then. The list is empty until that finishes (I suppose I should put a &amp;quot;Loading...&amp;quot; message in there...). So wait a bit, see if it turns up. Failing that, it is a nightly build after all, you should expect some things to be broken... the name &amp;quot;Minefield&amp;quot; isn't just for show... chances are, it's a problem with either &amp;lt;code&amp;gt;GM_xmlhttpRequest&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOMParser&amp;lt;/code&amp;gt;... and if so, then it's either a Firefox issue or a GreaseMonkey issue, and there's little I can do about it. {{User:Phlip/sig}} 03:15, 5 July 2007 (UTC)&lt;br /&gt;
::After looking in a Debug Console, the blame goes to..... Greasemonkey! [[User:Onekopaka|onekopaka]] 06:40, 17 November 2007 (UTC)&lt;br /&gt;
:::Firefox 3's document.getElementById is changed so that it returns the first object. If you're using it, you might want to read up on MDC (http://developer.mozilla.org/) --[[User:24.17.113.45|24.17.113.45]] 06:50, 9 May 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Typo... ==&lt;br /&gt;
&lt;br /&gt;
You mispelled automatically. [[User:Don't press that button.|Don&amp;amp;#39;t press that button.]] 10:08, 20 July 2007 (UTC)&lt;br /&gt;
:I somehow think that's [[Portmanteau|intentional]]. {{User:Mee/sig}} 11:05, 20 July 2007 (UTC)&lt;br /&gt;
::If you're referring to &amp;quot;[http://www.catb.org/jargon/html/A/automagically.html automagically]&amp;quot;, then yes, that's intentional. {{User:Phlip/sig}} 04:24, 21 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Podcast/Podstar ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/toons.html&amp;quot;, &amp;quot;Toons&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/games.html&amp;quot;, &amp;quot;Games&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/characters2.html&amp;quot;, &amp;quot;Characters&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/downloads.html&amp;quot;, &amp;quot;Downloads&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://homestarrunner.stores.yahoo.net/&amp;quot;, &amp;quot;Store&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/sbemail.html&amp;quot;, &amp;quot;SB Emails&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/email.html&amp;quot;, &amp;quot;Contact&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://podstar.homestarrunner.com/&amp;quot;, &amp;quot;Podstar&amp;quot;);&lt;br /&gt;
	addnavbarlink(newnavbar, &amp;quot;http://www.homestarrunner.com/legal.html&amp;quot;, &amp;quot;Legal&amp;quot;);&lt;br /&gt;
	randolink = addnavbarlink(newnavbar, &amp;quot;javascript:alert('rando.xml not loaded yet... be patient')&amp;quot;, &amp;quot;Rando&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Where it says Podstar, it should say Podcast. On main_nav.swf, it says podcast. Here, is says Podstar. Incorrect. --{{User:Techgeekmbg/sig}} 19:00, 29 July 2007 (UTC)&lt;br /&gt;
:The feature is called [[Podstar Runner]], though. --[[User:DorianGray|DorianGray]] 19:48, 29 July 2007 (UTC)&lt;br /&gt;
::My bad. Fixed. {{User:Phlip/sig}} 00:41, 30 July 2007 (UTC)&lt;br /&gt;
::Yes, but if the purpose is to simulate the real main_mav bar, then it should be podcast. --{{User:Techgeekmbg/sig}} 01:24, 30 July 2007 (UTC)&lt;br /&gt;
:::Yes. That's why I fixed it. {{User:Phlip/sig}} 01:26, 30 July 2007 (UTC)&lt;br /&gt;
::::Ah. You posted while I was still posting. --{{User:Techgeekmbg/sig}} 22:31, 31 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a question... ==&lt;br /&gt;
&lt;br /&gt;
Are you ever going to put this in the [http://dunck.us/collab/GreaseMonkeyUserScriptsSpecific#head-afce957a390e4b53ef2a03b41fd1b4c04a5f926b Greasemonkey Script Repository?] Just wondering... --{{User:Super Martyo Brother/sig}} 18:54, 6 August 2007 (UTC)&lt;br /&gt;
:Actually, that's the old Greasemonkey script place thing. The new one is at [http://www.userscripts.org/ userscripts.org]. {{User:Bluebry/sig}} 19:00, 6 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== not working ==&lt;br /&gt;
&lt;br /&gt;
i installed greasemonkey but there isnt anything under tools. you do mean tools that is above the adress bar, right? {{User:Slipknot6477/sig}} 22:57, 7 December 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Tablet stuff ==&lt;br /&gt;
&lt;br /&gt;
Hey, this is a really neat script. Anyway, I use a tablet computer, and I've noticed that, when viewing a toon in portrait (tall) mode, the toon will cover up the top two buttons (&amp;quot;settings&amp;quot; and &amp;quot;wiki&amp;quot;) if the script is set to scale the toon to full size. This is, I imagine, because the script expects the screen to be wider than it is tall, as most computer screens are... so when that is not the case, the toon sticks around the top of the page and covers up those key buttons. This doesn't happen in normal, &amp;quot;landscape&amp;quot; mode because the toon is horizontally centered across a wide screen. If the toon were vertically centered as well, or at least nudged sixteen pixels downward when on a tall screen, those buttons and their inherent usefulness would be unveiled for all. (&amp;quot;Landscape&amp;quot; mode is, of course, the better option for viewing Homestar Runner, but I think this would be a pretty good fix nonetheless.)&lt;br /&gt;
&lt;br /&gt;
There are some other things: in Firefox 3.0 beta 4, the seek bar extends too far to the right, visually (covering up the buttons to its right), and does not seem to work for changing your place in the toon. Also, the script never seems to be able to load subtitles, perpetually leaving &amp;quot;loading&amp;quot; in place of subtitle options in the pulldown menu. Oh, and the &amp;quot;settings&amp;quot; bar has most of its scrollbar obscured by the toon, oddly, though it still works.&lt;br /&gt;
&lt;br /&gt;
I hope this helps in working out any kinks. If nobody else can reproduce these errors, I can provide more details. Anyway, thanks![[User:24.22.64.228|24.22.64.228]] 05:18, 2 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 30 Frames fix? ==&lt;br /&gt;
&lt;br /&gt;
For some reason, with the SBCG4AP &amp;quot;ad,&amp;quot; the seek bar doesn't work at all. It counts the frame, but all the buttons (besides the zoom) doesn't work. --[[User:76.210.181.251|76.210.181.251]] 21:08, 10 April 2008 (UTC)&lt;br /&gt;
:This has nothing to do with the high framerate (which is 24 anyway, not 30), and everything to do with the fact that the HTML file is on homestarrunner.com, but the flash file is on Telltale's servers... Flash's security gets in the way, and there's nothing that can be done about it. Best I can do is make it so that the seekbar is disabled on that toon (or, at least, make it more obvious that it's informative only, and you can't use it to control the playback). Which I'm working on. {{User:Phlip/sig}} 04:53, 12 April 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 3.2.3 broken in FF 2? ==&lt;br /&gt;
&lt;br /&gt;
I can't get the subtitles if I upgrade to 3.2.3.  I'm  using FF 2.  I see that it was changed for tweaks for Firefox 3...did you notice that it breaks it in FF 2?  I don't think a version that breaks it in the current version of Firefox should be released to the update. --[[User:Mini-Geek|Mini-Geek]] 16:36, 9 June 2008 (UTC)&lt;br /&gt;
:Oops... I didn't think to regression-test the changes in Fx 2... yeah, that doesn't work. The deal is that, in an earlier version of GreaseMonkey, DOMParser wasn't available for GM scripts to use... and you had to use some workaround to get at it. That workaround didn't work in Fx 3, but the site I got it from listed another option that did. Turns out that other option doesn't work in Fx 2. It also turns out that the workaround isn't necessary at all any more. It's gone now, and the script works in both Fx 2 and 3 (it should auto-update again in the next day or so). {{User:Phlip/sig}} 08:55, 10 June 2008 (UTC)&lt;br /&gt;
::Thanks, it works now. --[[User:Mini-Geek|Mini-Geek]] 14:26, 10 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Trouble dragging in FF3 ==&lt;br /&gt;
&lt;br /&gt;
If you try to drag the seek bar, but are already moving the mouse when you start dragging (move it faster if it doesn't do it for you), it messes up.  By messes up, I mean it flashes the cursor between a circular crossout symbol and the normal cursor as you hold it down (still moving the movie as you move), then when you release, it keeps following your mouse until you click on it again. --[[User:Mini-Geek|Mini-Geek]] 20:04, 18 June 2008 (UTC)&lt;br /&gt;
:Huh. That's... bizzare. I get a similar thing, but instead of the cursor-flashing thing you're saying, it actually starts dragging around a slightly-shrunk picture of the seekbar, and sometimes some of the surrounding buttons. I'll look into it (which I guess means I'll need to figure out how the drag-and-drop stuff in the seekbar actually works, since I didn't write that... that'll be &amp;quot;fun&amp;quot;). In the meantime: Don't do that. {{User:Phlip/sig}} 08:55, 20 June 2008 (UTC)&lt;br /&gt;
::&amp;quot;In the meantime: Don't do that.&amp;quot; lol yeah...It's just that I do it accidentally pretty often now, and it's annoying. I'll try to avoid it in the meantime, though. Thanks for looking into it. --[[User:Mini-Geek|Mini-Geek]] 14:27, 20 June 2008 (UTC)&lt;br /&gt;
:::OK, this is fixed, I think. I never found a way to reproduce it reliably, but I think I could get it about one try in 3 or 4... and I tried about 20 times now, and I can't get it to happen... let me know if it still happens for you. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
::::It seems to work now.  It hasn't happened since I updated.  The random button now shows the correct tooltip. --[[User:Mini-Geek|Mini-Geek]] 21:35, 26 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Plain HTML Rando Not Working in FF3? ==&lt;br /&gt;
&lt;br /&gt;
I am finding if I used the plain HTML navbar with the script, it is not working and I get a dialog box saying &amp;quot;rando.xml has not loaded yet. Be Patient.&amp;quot; from homestarrunner.com. Is this an issue with the official site, or did something in FF3 break it?{{User:Bassbone/sig}} 22:20, 22 June 2008 (UTC)&lt;br /&gt;
:It works for me, but shows the wrong URL when I roll over it. --[[User:Mini-Geek|Mini-Geek]] 16:52, 23 June 2008 (UTC)&lt;br /&gt;
::The wrong-URL thing should be fixed now. Things were happening in the wrong order... the tooltip and the page it would send you to if you clicked matched, but the URL in the status bar was from the previous selection... I tweaked the timing a bit, so this doesn't happen any more. I couldn't reproduce the infinite &amp;quot;has not loaded yet&amp;quot; thing... try clicking the &amp;quot;Clear Subtitles Cache&amp;quot; button in the preferences screen... the same button will clear the rando.xml cache, forcing it to really try again to download it from the server. {{User:Phlip/sig}} 13:38, 25 June 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Subtitles broken ==&lt;br /&gt;
&lt;br /&gt;
I'm on Firefox 3, with Adblock Plus (disabled on h*r.com and hrwiki.org), and the subtitles don't appear. I check &amp;quot;Show subtitles&amp;quot; in the options, and a list of languages appears, but when I go to anything that has subtitles - I tested it on [[Play Date]] - I get a &amp;quot;loading subtitles&amp;quot; message which disappears after a second or so. Other features like the seek bar work fine. Thanks in advance, [[Special:Contributions/24.250.112.127|24.250.112.127]] 23:06, 1 July 2008 (UTC)&lt;br /&gt;
:Works fine on 2.0.0.14, the latest stable build. I don't know if it's worth Phlip's time to develop for the beta, but you could revert to the stable build and it'll work. {{User:Qermaq/sig}} 01:09, 2 July 2008 (UTC)&lt;br /&gt;
::IP Guy: I had the same problem, but then I reinstalled the script and tested it by watching [[The Baloneyman]], and now the subtitles work again.&lt;br /&gt;
::Qermaq: the latest stable build is actually 3.0.0. --{{User:Y2K/sig}} 07:08, 2 July 2008 (UTC)&lt;br /&gt;
:::Well, what do you know, must have been quite recently. {{User:Qermaq/sig}} 09:10, 2 July 2008 (UTC)&lt;br /&gt;
::::Update: I find the Greasemonkey extension is working flawlessly on my install of Firefox 3. {{User:Qermaq/sig}} 16:42, 3 July 2008 (UTC)&lt;br /&gt;
:::::I found that disabling AdBlock Plus for homestarrunner sites worked for me. --Rovlad.&lt;br /&gt;
&lt;br /&gt;
I was about to report a problem with this, but I forgot about having to disable Adblock to get the subtitles working, even on the latest build. I'm installing Firefox in Ubuntu, and I though the crappy flash plugin was the problem.&lt;br /&gt;
&lt;br /&gt;
Anyways, you may want to make this advice more prominent, in some sort of FAQ. (If you have already, well, I couldn't find it.)&lt;br /&gt;
&lt;br /&gt;
--trlkly 23:48, 3 October 2008 (UTC)&lt;br /&gt;
&amp;lt;!--I'll come back and sign this properly later.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How'd you get the icon data? ==&lt;br /&gt;
&lt;br /&gt;
I noticed that your icons are embedded in the script as base64 data. If you used an encoder program, which one was it? --{{User:Y2K/sig}} 00:49, 13 July 2008 (UTC)&lt;br /&gt;
:It's pretty simple... just convert the picture to PNG (I use The GIMP for that... any web-friendly image format will work, but PNG is best), then [[Wikipedia:Base64|Base64]]-ify the PNG file (I just use the tool in [http://packages.ubuntu.com/hardy/i386/coreutils coreutils]), and tack &amp;quot;&amp;lt;code&amp;gt;data:image/png;base64,&amp;lt;/code&amp;gt;&amp;quot; on the start, then use the string as the URL for the image. Wikipedia has [[Wikipedia:data URI scheme|more info]]. I'm sure there exists some online tools that let you upload files and generate the data: URIs for them... try Google. {{User:Phlip/sig}} 07:22, 13 July 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Seekbar ==&lt;br /&gt;
&lt;br /&gt;
I can't get the seekbar to work. Every time I click anywhere on it it just goes back to the beginning of the toon. I know nothing about code, mind you, so I have no idea how to fix this. {{User:That Guy Over There/sig}} 02:32, 15 July 2008 (UTC)&lt;br /&gt;
:Nevermind. I changed some of my Firefox settings and it works now. {{User:That Guy Over There/sig}} 02:37, 15 July 2008 (UTC)&lt;br /&gt;
what did you do, i have the same problem [[User:Forddude1416|Forddude1416]] 19:20, 18 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Screencapture ==&lt;br /&gt;
&lt;br /&gt;
How do I get a screen capture in Ubuntu Linux?  --[[User:O98-111-114-113|Blow Up the Ocean]] 20:50, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:This may vary (it's been a while since I used Gnome), but I believe that alt-Print Screen grabs the focused window, and Print Screen by itself grabs the entire desktop.  It will either prompt you for a filename to save it as, or just save it automatically on your Desktop.  It will be in PNG format, which is probably want you want. {{User:GreenHelmet/sig}} 21:02, 12 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Test subtitles script and back button ==&lt;br /&gt;
&lt;br /&gt;
I do a lot of subtitle work (the AIO makes it about a million times easier/possible, BTW :) ) and so I often use the &amp;quot;Test subtitles script&amp;quot; feature to preview my scripts before I save 'em.  The problem is that I usually forget to uncheck the box, so when I go to another toon, it displays the wrong subtitles.  Not a big deal, of course, as I can go into the options and uncheck the box, but it's an annoyance.  It'd be nice if it automatically unchecks the box.  Possibly make it uncheck when you load a different toon.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Also, if you have outside-the-frame action enabled and press the back/forward button (in the browser, not the next/previous button) to go to a page, it loads it full-screen instead of showing outside-the-frame action.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Oh and BTW I just noticed there's a feature to zoom in/out of the toon when it's full screened, but not when it shows outside-the-frame action.  Can you add that feature in outside-the-frame mode, too?&lt;br /&gt;
--[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 16:22, 14 August 2008 (UTC)&lt;br /&gt;
:The &amp;quot;Test subtitles script&amp;quot; option needs some serious rework anyway... I'd like the &amp;quot;Refresh subtitles&amp;quot; button to Just Work, rather than the sort of inconsistent mess it is now. Being able to give test subtitles for just one specific toon is a good idea... I'll add it to the list of things to do when I get around to doing that.&lt;br /&gt;
:The back/forward buttons and outside-the-frame: I hadn't noticed that... I'll look into it. Does everything else work with back/forward?&lt;br /&gt;
:As for the zoom buttons and outside-the-frame, if you use the Zoom things in Flash, then it stops doing the outside-the-frame thing... you can't zoom out further than how it behaves when you view the SWF alone (ie: either the height or width matches the height or width of your window, whichever is smaller)... and there's no way to go back to the outside-the-frame mode except by resetting it to the usual outside-the-frame size. I couldn't find any way around this... so I just got rid of the zoom buttons when that option's turned on. If you happen to know of a workaround, I'd love to hear it... {{User:Phlip/sig}} 22:41, 14 August 2008 (UTC)&lt;br /&gt;
::Ok, cool.  I don't mean that I really care to see toon-specific subs that are remembered with different pages, in case that's what you thought.  I just want it to be cleared when I go to a page besides the one being tested.&lt;br /&gt;
::I haven't noticed anything else wrong with back/forward.  I've noticed that when a page loads normally, it's momentarily enlarged to full screen before it's changed to show outside-the-frame, but that when you do back/forward it doesn't change.  Perhaps it's something with how FF tells scripts that the page has loaded when it comes in from memory (since it was in recent history) instead of loading for the first time.  I should probably also note that when it's zoomed out after going back/forward, I can still see outside-the-frame action, but of course since it's already full-screen, I only see it on the edges (instead of being like the normal full screen mode that puts black on the sides, this allows vision on the sides).&lt;br /&gt;
::Do you think you could make it so if it's already at the max zoom out level, instead of just trying to tell the SWF to zoom out more (unsuccessfully), make it refresh as outside-the-frame in some way so it goes back out?  Of course, that would preferably be without ''actually'' refreshing the page, so your place isn't lost like when you save a setting.  This could eliminate the need for an outside-the-frame option, since if you want to zoom out when it's already all the way out, it goes to outside-the-frame, while zooming in while viewing outside-the-frame would go to full screen.&lt;br /&gt;
::I just got an idea to fix the issue that when you save settings it refreshes the page (more of a workaround really, something that does it without refreshing at all would be better).  Let it refresh, but first remember the frame you're at and the pause/unpause status (is there anything else that would be needed to make it seem the same?) and set it to that once it refreshes. --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 01:27, 15 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Latest java build ==&lt;br /&gt;
&lt;br /&gt;
Seems this script is incompatable with the latest Java version. {{User:Qermaq/sig}} 03:08, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Can you be more specific? Neither this script, nor Homestarrunner.com use Java in any way... {{User:GreenHelmet/sig}} 03:15, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I beg to differ. I upgraded to the most recent Java and it asked me to deactivate this. I tied to reinstall, but it does not work. {{User:Qermaq/sig}} 03:59, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Can you still be more specific?  Asked you to disabled this specific userscript, or Greasemonkey in general? Do you know the exact wording of the message?  What version of Java did you update to?  I just checked mine and it was at 1.6.0_04, there was an update available (to 1.6.0_07), which I just installed, restarted Firefox (and confirmed it was using the new version), and I did not see any change in the behaviour at all.&lt;br /&gt;
:::I'm still pretty sure Java isn't used directly here (in fact, I'm certain it isn't).  But, it is possible that the Java installation changed something in the browsers security model that is messing things up. I'll try updating it on another computer tomorrow and see if I get the problem to happen there. {{User:GreenHelmet/sig}} 05:07, 27 August 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Are you on a Mac? It appears to be broken on my Mac... but, it's past my bedtime right now. {{User:GreenHelmet/sig}} 05:14, 27 August 2008 (UTC)&lt;br /&gt;
:::::I am still unable to install this script. {{User:Qermaq/sig}} 13:23, 5 September 2008 (UTC)&lt;br /&gt;
::::::And I am still unable to even guess as to what your problem is... Can you answer GreenHelmet's questions above? They'll help narrow down the problem. {{User:Phlip/sig}} 13:32, 5 September 2008 (UTC)&lt;br /&gt;
:::::::I am not certain how to check the Java version. I did go to the Java site and install the latest version. Greasemonkey itself seems to be properly installed, though I don't know how I can test that. Running Vista. {{User:Qermaq/sig}} 18:54, 5 September 2008 (UTC)&lt;br /&gt;
::::::::Hmm... can you try something for me... run notepad, and type in this:&lt;br /&gt;
&amp;lt;pre&amp;gt;// ==UserScript==&lt;br /&gt;
// @name          GM Test Thing&lt;br /&gt;
// @description	  Check that Greasemonkey is working&lt;br /&gt;
// @include       http://homestarrunner.com/*&lt;br /&gt;
// @include       http://www.homestarrunner.com/*&lt;br /&gt;
// ==/UserScript==&lt;br /&gt;
alert(&amp;quot;Greasemonkey's working&amp;quot;);&amp;lt;/pre&amp;gt;&lt;br /&gt;
::::::::Save it somewhere as &amp;quot;test.user.js&amp;quot; (include the quotes, when you type it into Notepad's &amp;quot;Save As&amp;quot; box, otherwise it'll save it as test.user.js.txt). Then open that file in Firefox, let it install the script, and go to [[HR:]]. You should get a message box coming up saying that GM's working. If not, there's something wrong with GM on your end... try uninstalling and reinstalling it. Otherwise, let me know, and I'll have to make a more detailed test. {{User:Phlip/sig}} 03:44, 6 September 2008 (UTC)&lt;br /&gt;
:::::::::I reinstalled Greasemonkey, and everything seems to be in order now. Something must have gotten goofed up on installation before. Thanks. {{User:Qermaq/sig}} 03:03, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script doesn't seem to work ==&lt;br /&gt;
&lt;br /&gt;
I'm running Firefox 3, and none of the buttons, scrollbar[s], or subtitles work. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 22:50, 10 October 2008 (UTC)&lt;br /&gt;
:Hmm... could you try out the things listed in the [[#Troubleshooting|brand new Troubleshooting section]]? {{User:Phlip/sig}} 03:26, 11 October 2008 (UTC)&lt;br /&gt;
::Phlip, maybe you should move step 3 up to step 1? It might save some people unnecessary work ;-){{User:Loafing/sig}} 16:27, 11 October 2008 (UTC)&lt;br /&gt;
:::Good point... {{User:Phlip/sig}} 23:46, 11 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
Yeah, Firefox 3 does have its own downs, because Adblock Plus doesn't conflict with the script in Firefox '''2''' but does in 3. --[[User:Addict 2006|Addict]] [[User talk:Addict 2006|2006]] 19:27, 12 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thank you! ==&lt;br /&gt;
&lt;br /&gt;
This thing is awesome. [[User:HomsarGuy|HomsarGuy]] 13:16, 2 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Thanks and feature suggestion ==&lt;br /&gt;
&lt;br /&gt;
Hey!  Thanks for making this script!  It really makes watching H*R much easier (and better)!&lt;br /&gt;
&amp;lt;br&amp;gt;I would like to suggest a feature - it would be great to have an automatic 'next' feature to play through a whole series (like SBemail) or to play random through the whole site.  This way we could watch sequential H*R without being near a mouse.  (I don't know if this would infringe on the value of the SBemail DVDs) -[[User:Dutchscout|Dutchscout]] 05:48, 5 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Page-Overwrite? ==&lt;br /&gt;
&lt;br /&gt;
It's been on my mind lately; would it be possible to get the script to overwrite the loaded Flash file on a page, or just replace the content of a page without creating security issues with Flash? In some cases, it could be helpful, as with being able to run subtitles on certain Puppet Stuff toons that don't have their own HTML page, like [[Marshie vs. Little Girl]]. We could use [[HR:default.html|default.html]] as a &amp;quot;dummy page&amp;quot;, and using a URL referrer of &amp;quot;&amp;lt;code&amp;gt;overwrite=whateverflashhere.swf&amp;lt;/code&amp;gt;&amp;quot; (which would be picked up by the script, not the page), would overwrite the page with your usual Homestar Runner toon-viewing code, with the Flash file in place of the usual &amp;quot;toon placeholder&amp;quot; itself? (I hope that made sense) --[[Special:Contributions/70.253.165.204|70.253.165.204]] 00:14, 6 December 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script broke. ==&lt;br /&gt;
&lt;br /&gt;
Your Greasemonkey script doesn't work. I am using Minefield 3.2a1pre and Flash Player 10. I also modified Greasemonkey to make it work with Minefield. {{User:Dagoth/sig}} 08:11, 10 January 2009 (UTC)&lt;br /&gt;
:Try everything in the [[#Troubleshooting|Troubleshooting section]]. If that doesn't help, read through [http://www.chiark.greenend.org.uk/~sgtatham/bugs.html this] and try again. Incidentally, &amp;quot;Minefield&amp;quot; has that codename for a reason... that Greasemonkey works at all (especially after you modified it) should be considered a stroke of luck. {{User:Phlip/sig}} 08:17, 10 January 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== 2 things ==&lt;br /&gt;
&lt;br /&gt;
1:Thanks!I really wanted a bigger screen.&lt;br /&gt;
2:Is it possible to make it work with the [http://www.homestarrunner.kitkorp.com kitkorp] mirror?&lt;br /&gt;
&lt;br /&gt;
== subtitles stopped working ==&lt;br /&gt;
&lt;br /&gt;
I just noticed it today.  I used it and it worked fine the other day.  It seems that the script isn't finding the list of languages at [[Subtitles:Languages]] (the Subtitles Language select box doesn't have any entries).  I do have AdBlock Plus but disabled it temporarily with no change.  I'm using Firefox 3.0.11 with Greasemonkey 0.8.20090123.1 and the newest All-in-one script from [[User:Phlip/Greasemonkey]] (3.2.7).  Perhaps it's related to &amp;quot;We will be making adjustments to the server throughout the evening, including upgrading to MediaWiki 1.15.&amp;quot;?  See also [[HRWiki_talk:Subtitles#Subitles_Not_Working?]] --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 03:11, 13 June 2009 (UTC)&lt;br /&gt;
:It's related to the [[HRWiki:Upgrade to MediaWiki 1.15|new upgrade]] and the move to the /wiki/ URLs... it should be fixed now. The script should automatically prompt you to update it sometime in the next day or so, or you can just hit the install link on [[User:Phlip/Greasemonkey|the script page]] to do it yourself. If you're still not getting subtitles, it could be because you hit the &amp;quot;Save&amp;quot; or &amp;quot;Clear cache&amp;quot; buttons in the config panel while the subtitles were broken... in that case, just open up the config panel, make sure that the &amp;quot;language&amp;quot; option is set, and hit save. That should bring them back. {{User:Phlip/sig}} 16:27, 13 June 2009 (UTC)&lt;br /&gt;
::Thanks, it works now. :) --[[User:Mini-Geek|Mini-Geek]]&amp;lt;sup&amp;gt;[[User_talk:Mini-Geek|t]] [[Special:Contributions/Mini-Geek|c]]&amp;lt;/sup&amp;gt; 20:34, 13 June 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== sbemail201 &amp;amp; hremail3184 ==&lt;br /&gt;
&lt;br /&gt;
Someone needs to fix the back/forward links for the Sbemails, because Sbemail #201 is actually Hremail #3184 in the URL!!! {{User:Religious Corn/sig}} 22:07, 1 July 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Not Compatible with Firefox 3? ==&lt;br /&gt;
&lt;br /&gt;
Ever since upgrading to FF3, this script hasn't been working at all.&lt;br /&gt;
:I'm running Firefox 3.5 (on Windows) and it's working fine for me (it worked fine for me on 3.0). Did you try the troubleshooting options [[#Troubleshooting|listed above]]?  I've had problems with AdBlock plus so I added an exception to [[homestarrunner.com|hr.com]], [[Main Page|hrwiki.org]] and [[videlectrix]].  If they don't work, can you provide more information regarding your problem? (Such as what platform and how does the script fail?) --[[User:Stux|Stux]] 13:18, 30 August 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I got it. I had to reinstall Greasemonkey, then update it, then reinstall the HR script.&lt;br /&gt;
&lt;br /&gt;
== Some code for a more streamlined &amp;quot;Hide&amp;quot; ability ==&lt;br /&gt;
&lt;br /&gt;
This is one way that crossed my mind. You'd have to replace the two lines in transcriptLoaded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;line.text = importNodes(lines[i]);&lt;br /&gt;
transcript.push(line);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;var hideEnds = true;&lt;br /&gt;
for (var j = lines[i].firstChild; j; j = j.nextSibling)&lt;br /&gt;
{&lt;br /&gt;
	// Looks for a &amp;quot;hide&amp;quot; element, and divides the line into two if one is found.&lt;br /&gt;
	if(j.nodeType == j.ELEMENT_NODE &amp;amp;&amp;amp; j.nodeName.toLowerCase() == &amp;quot;hide&amp;quot; &amp;amp;&amp;amp; hideEnds)&lt;br /&gt;
	{&lt;br /&gt;
		// If no frame number is specified, make the last frame of hiding really big, so it never stops hiding&lt;br /&gt;
		var hideUntil = 100000;&lt;br /&gt;
		if(j.hasAttribute(&amp;quot;frame&amp;quot;))&lt;br /&gt;
		{&lt;br /&gt;
			hideUntil = parseInt(j.getAttribute(&amp;quot;frame&amp;quot;), 10);&lt;br /&gt;
			if(isNaN(hideUntil) &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
				transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is not a number&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		if(hideUntil &amp;lt; line.start &amp;amp;&amp;amp; settings.TestSubs)&lt;br /&gt;
		{&lt;br /&gt;
			transcriptError(&amp;quot;Hide frame \&amp;quot;&amp;quot; + j.getAttribute(&amp;quot;frame&amp;quot;) + &amp;quot;\&amp;quot; is too early&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		var firstLine = line;&lt;br /&gt;
		if(hideuntil &amp;lt; line.end)&lt;br /&gt;
		{&lt;br /&gt;
			firstLine.end = hideuntil;&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			hideEnds = false;&lt;br /&gt;
		}&lt;br /&gt;
		j.setNodeName(&amp;quot;span&amp;quot;);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;hidden&amp;quot;);&lt;br /&gt;
		firstLine.text = importNodes(lines[i]);&lt;br /&gt;
		transcript.push(firstLine);&lt;br /&gt;
		j.setAttribute(&amp;quot;visibility&amp;quot;, &amp;quot;visible&amp;quot;);&lt;br /&gt;
		line.start = hideuntil;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
if(hideEnds)&lt;br /&gt;
{&lt;br /&gt;
	line.text = importNodes(lines[i]);&lt;br /&gt;
	transcript.push(line);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'm kinda shaky on the programming language and its nuances, though. Especially &amp;quot;setNodeName&amp;quot;, or whether &amp;quot;span&amp;quot; would work without a &amp;quot;/span&amp;quot; (or if adding a &amp;quot;/span&amp;quot; is possible). Also, it's very possible I made a mistake.&lt;br /&gt;
&lt;br /&gt;
If it works, though, it should allow you to add &amp;lt;hide frame=&amp;quot;123&amp;quot; /&amp;gt; and it would hide everything after it on a line until frame 123. You wouldn't have to put in multiple lines that way. Even a &amp;lt;hide/&amp;gt; tag should just simply hide everything else on the line, period (unless the toon becomes 100000+ frames in length AND the line comes after that point, but that hasn't happened yet and probably will never.)&lt;br /&gt;
&lt;br /&gt;
Thoughts? Fixes? --{{User:Jay/sig}} 00:31, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
: PS. Another useful addition would be the ability to write overlapping lines separately and have them all display. Would be useful for when characters semi-interrupt or speak over one another. [[Crystal Fortress]]'s subs were a pain to write without this feature. I don't have code for it, though. --{{User:Jay/sig}} 00:56, 1 November 2009 (UTC)&lt;br /&gt;
::Also for sound effects that are shorter than the dialogue, etc. Perhaps though it should be a different element called &amp;quot;&amp;lt;nowiki&amp;gt;&amp;lt;overlap&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot; with the same syntax as line, just to keep the error checking for people who don't intend to overlap lines. {{User:DeFender1031/sig}} 01:00, 1 November 2009 (UTC)&lt;br /&gt;
:::That &amp;lt;hide&amp;gt; tag sounds like a good idea, that's definitely going on my todo list. Maybe not the way you describe, though... rather than just having the empty tag hide everything from here to the end of the line, have something like &amp;quot;&amp;lt;code&amp;gt;first part &amp;lt;hide frame=&amp;quot;100&amp;quot;&amp;gt;second part&amp;lt;/hide&amp;gt;&amp;lt;/code&amp;gt;&amp;quot;... it'd make more sense, I think, and be easier to code up. Maybe it should have &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt; attributes instead, so things can disappear instead of appearing? Optional, of course, so you can have just a &amp;lt;code&amp;gt;start&amp;lt;/code&amp;gt; and no &amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;, and have it behave like you describe.&lt;br /&gt;
:::As for overlapping lines, it's something that I've considered before, but never really looked into, as it could be kinda tricky. In particular, arranging the lines... if you have two lines at once, and the first one ends, you want the second one to stay on the second line, with a gap above it (it could move upwards, but that'd be confusing)... and then, if a third line starts, it'd make sense to put it in the gap above the second line... but it may not fit, if it's a long line that word-wraps, or has the &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; attribute turned up, or something. So there's an optimisation problem there to arrange all the lines without it being so tall that it runs out of space. But I may be overthinking it here, and a greedy heuristic is probably enough. I'll try it, and see what happens.&lt;br /&gt;
:::But don't hold your breath for either of these... I can't guarantee how long they'll take to write... what with the full-time work and all, I'm often not in the mood for programming outside work... but we'll see. {{User:Phlip/sig}} 03:58, 1 November 2009 (UTC)&lt;br /&gt;
::::We could create a &amp;lt;code&amp;gt;lineindex&amp;lt;/code&amp;gt; attribute to fix that problem. {{User:Soiled Bargains/sig}} 14:21, 1 November 2009 (UTC)&lt;br /&gt;
:::::Not really... maybe if every line was exactly the same height, it'd work, but that's not necessarily the case, with &amp;lt;code&amp;gt;volume&amp;lt;/code&amp;gt; and word-wrap. Indeed, with word-wrap, the same line could be different heights on different computers, even with the same subtitles script. Much better to have a dynamic solution. It'd be less work for the transcribers that way anyway, which is kinda the point of this whole thing. {{User:Phlip/sig}} 22:00, 1 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Midori Web Browser ==&lt;br /&gt;
&lt;br /&gt;
You probably don't use linux but, your script does not work with midori's built in userscript engine. I want it to work with midori but do not know why it isn't working. {{User:ColdReactive/sig}} 13:11, 5 November 2009 (UTC)&lt;br /&gt;
:The script uses a bunch of GreaseMonkey-specific features, for things like saving the preferences or loading subtitles from the wiki. From [http://wiki.xfce.org/midori_faq#user_scripts what I can tell], Midori doesn't support any of those (note the part that says &amp;quot;Midori also does not support greasemonkey's api&amp;quot;). I looked into it briefly before, when I was considering supporting Opera... but without those features, it would be a lot of work. Maybe I'll take another look in the future, but don't hold your breath. (Incidentally: Yes, I do use Linux.) {{User:Phlip/sig}} 13:19, 5 November 2009 (UTC)&lt;br /&gt;
::I don't need preferences if I can just have a userscript that does the following:&lt;br /&gt;
::* Stretches the flash&lt;br /&gt;
::* Check if next toon exists&lt;br /&gt;
::* Has the seek bar&lt;br /&gt;
::But I guess it's still not possible. {{User:ColdReactive/sig}} 13:48, 5 November 2009 (UTC)&lt;br /&gt;
:::Like I said, it would be a heck of a lot of work to retrofit the script to not depend on Greasemonkey. That includes stripping out the script so that only some features are available - all the different features are pretty interconnected at the moment, it's hard to remove just one of them. It's my long-term plan to clean up the script and make it simpler to manage, but that's been my long-term plan since before the subtitles thing started 3 years ago, and I still haven't even started, so don't hold your breath. And anyway, that &amp;quot;check if the next toon exists&amp;quot; thing is one of the things that depends on the GM API, so even if I could quickly strip down the features, I couldn't do that one easily.&lt;br /&gt;
:::However! You might have some luck with the original scripts that the all-in-one script was based on. I suspect that the [http://userscripts.org/scripts/review/633 Homestar Full-on] ''could'' work in other browsers that have userscript features... I haven't tried it, but it looks like it could work (it doesn't depend on GreaseMonkey, but it might implicitly depend on Firefox, that's harder to tell just by looking at the script). The [https://www.squarefree.com/bookmarklets/flash.html seek bar] bookmarklet might work, it might not. Try it and see. Obviously, if they don't work, there's not much I can do about it, but it's worth a shot. {{User:Phlip/sig}} 21:41, 5 November 2009 (UTC)&lt;br /&gt;
::::Yeah, they unfortunately do not work. The seek bar bookmarklet gives an error even (1 @ undefined) Oh well. I'll just use my display in 1024x768, since my screen is square and not widescreen. {{User:ColdReactive/sig}} 22:46, 5 November 2009 (UTC)&lt;br /&gt;
:::::WHOA! It works now! The fullon I mean. (It sometimes causes the flashes to be blank, reloading the page fixes that.) {{User:ColdReactive/sig}} 01:17, 6 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== Revisiting Midori With 0.2.4 ===&lt;br /&gt;
Well, the fullon resizes the flash, but now refreshing won't fix the blank flash box. Oh well, guess I'll have to watch it small. {{User:ColdReactive/sig}} 00:00, 23 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Feedburner ==&lt;br /&gt;
&lt;br /&gt;
Yeah, the navbar on greasemonkey doesn't show the 'subscribe' button. Just saying. {{User:StrongAwesome74/sig}} 21:10, 7 December 2009 (UTC)&lt;br /&gt;
:{{p|l=http://www.hrwiki.org/w/index.php?title=User:Phlip/Greasemonkey&amp;amp;diff=681479&amp;amp;oldid=660845 Yes it does}}. Are you sure your script is up to date? It has an option to check for updates automatically, but maybe you've turned that off? {{User:Phlip/sig}} 21:18, 7 December 2009 (UTC)&lt;br /&gt;
::Huh, don't know why it was off. I don't '''''think''''' I turned it off. weird. Thanks! {{User:StrongAwesome74/sig}} 21:26, 7 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Opening as plain text ==&lt;br /&gt;
&lt;br /&gt;
Firefox = check, Greasemonkey = go, and it worked a couple of weeks ago. But the Greasemonkey stuff vanished from H*R, oh, about the time the &amp;quot;visit our store&amp;quot; link appeared on it. I uninstalled and reinstalled Greasemonkey, but when I try clicking on the &amp;quot;click here to install&amp;quot; link, all it does is open the script ''in plain text'' instead of installing the script to Greasemonkey. I tried saving the script to my desktop and running it there, but it complains that, on character 1 of line 122, &amp;quot;document&amp;quot; is undefined. Um? --{{User:Jay/sig}} 01:15, 25 January 2010 (UTC)&lt;br /&gt;
:If you save it and just try to run it, it'll do [[Wikipedia:Windows Script Host|something completely different]]... that's not going to work. You might have some luck if you save it to disk and then open it in Firefox (as opposed to just double-clicking it) but it'll probably do the same thing. Is Greasemonkey enabled? Check the little monkey in the status bar, he should be all colourful and smiley (as opposed to greyscale and frowney). {{User:Phlip/sig}} 07:55, 25 January 2010 (UTC)&lt;br /&gt;
:: That was it, actually. Thanks! --{{User:Jay/sig}} 08:36, 25 January 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Now Can Install... but... ==&lt;br /&gt;
&lt;br /&gt;
You need to install [http://userscripts.org/scripts/show/5166 from here] instead. Unfortunately, even though Chrome has the greasemonkey APIs, your extension, Philip, doesn't work. the only portion that DOES work is the flyout settings menu when looking at a homestarrunner.com page. None of the settings can actually be saved. You need a git or development version of chrome to be able to install the script I believe, and that's easily done on ubuntu using the chromium daily ppa from launchpad. However, as said by [http://blog.chromium.org/2010/02/40000-more-extensions.html this blog] about the new feature, you will most likely have to edit your script so it works with chrome. {{User:ColdReactive/sig}} 13:50, 2 February 2010 (UTC)&lt;br /&gt;
:Yes, I know, both Chrome and Opera and a couple of other browsers have user script engines, but most of them don't have the power necessary to run this script (neither Opera nor Chrome for instance allow cross-site AJAX requests, which are required for subtitles, rando and check-for-updates) and even the features they do have, you need to use in a different way (eg Opera doesn't have the GM_* functions, so I'd need to re-write all the preference-saving and AJAX code using other APIs). This doesn't make it ''impossible'' to make a script this complicated that will work in all these browsers... but it means it'd be a ''lot'' of work to retrofit an existing script to work.&lt;br /&gt;
:tl;dr: Only Firefox is supported for the foreseeable future. Like I [[#Midori_Web_Browser|said to you before]]. {{User:Phlip/sig}} 21:38, 2 February 2010 (UTC)&lt;br /&gt;
::I just wanted to make sure that when other people ask why your script doesn't work with chrome (as, in the foreseeable future, I see chrome overtaking firefox due to google's advertising and whatnot) that they know what you have planned for the future. {{User:ColdReactive/sig}} 01:12, 3 February 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Eating Up CPU ==&lt;br /&gt;
&lt;br /&gt;
Just to warn people who have non-HT Single Core Processors (true single-cores, meaning no logical cores.) I have a 1.60 GHz true single-core processor (atoms are not true single-cores), and adding this to homestarrunner.com shoots up CPU usage to 100% on idle. Unfocusing the tab in which the script is active will bring down the CPU. {{User:ColdReactive/sig}} 01:23, 9 April 2010 (UTC)&lt;br /&gt;
:Huh, it doesn't do that for me... my computer isn't single-core, but using this script doesn't cause my usage to shoot up to a single core being fully used. It does increase the usage a bit, but not drastically... the main culprits being (a) View fullscreen - obviously, if Flash has to render a larger area, it's going to take more processing time; and (b) Seek bar/subtitles... these too mean asking the Flash object a bunch what frame it's up to... which means a lot more context switching between the browser and the plugin, and all the wrappers and whatnot that needs... which is either the fault of Flash or the plugin architecture, I'm not sure which. Anyways - if you try turning those options off, it should help with your CPU problems. {{User:Phlip/sig}} 09:30, 9 April 2010 (UTC)&lt;br /&gt;
::I've turned off fullscreen thing, nothing changed; I don't want to turn off subtitles, but I turned off the seek bar, it took up half my CPU alone. I really like the subtitles project, so I don't want that to go away. {{User:ColdReactive/sig}} 15:42, 9 April 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4.0 &amp;amp; JaegerMonkey ==&lt;br /&gt;
&lt;br /&gt;
With [http://news.cnet.com/8301-30685_3-20004620-264.html Firefox 4.0] coming this year (or so it seems), they plan to implement &amp;quot;JaegerMonkey,&amp;quot; a javaScript engine that rivals Safari's and Chrome's. The suffix -Monkey, sounds like it'll probably be replacing Greasemonkey or even forcing greasemonkey users to recompile their scripts all together. What do you plan to do if this happens? Keeping in mind that Firefox is the ONLY browser that works with your script, no other does. &amp;amp;mdash;[[User:ColdReactive|ColdReactive]] 16:08, 11 May 2010 (UTC)&lt;br /&gt;
:I'll cross that bridge when we come to it. I don't see anything to suggest JägerMonkey is going to supersede GreaseMonkey (it's more likely it got the -Monkey suffix from [[Wikipedia:SpiderMonkey (JavaScript engine)|SpiderMonkey]]). So I don't expect the changes to be that drastic (there's probably going to be new features the script could potentially use, but little in the way of old features disappearing). Also: yes, I get the fact that there's a couple of dozen browsers you've asked me to port the script to... I've made it clear that isn't going to happen. Being snarky isn't going to change that. Note the big GPL header at the top of the script - if you want it to work in Opera or Chrome or Midori or whateverthecrap other browser you're using this week, you're welcome to try to figure it out yourself. {{User:Phlip/sig}} 22:59, 11 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Resizing option for recent toons ==&lt;br /&gt;
&lt;br /&gt;
Hey, Phlip. The largest monitor I have is reasonably sized and yet can't show all of past two toons at their HTML'd resolution (at least in Firefox). I admire the screen-resizing option, but with an old laptop that can only do 1024&amp;amp;times;768 that struggles enough with Flash (The one I'm using right now, in fact. It runs Linux), I'd rather not have toons in the usual 550&amp;amp;times;400 resolution being scaled. Could there be an option so that users can downsize toons to their native resolution? After all, the newer toons were made in the usual 550&amp;amp;times;400, I've heard. {{User:Soiled Bargains/sig}} 23:20, 24 December 2010 (UTC)&lt;br /&gt;
:Actually, could there be an option to set our preferred vertical resolution? {{User:Soiled Bargains/sig}} 23:27, 24 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Firefox 4 zoom ==&lt;br /&gt;
&lt;br /&gt;
I just noted that when I do the normal resize thing by holding down CTRL and using the scroll wheel in firefox 4, the homestar runner flash objects all are resized as well. Is this new to Firefox 4? Or was it already introduced into 3.6.x? I swear I wasn't able to do this previously. This probably should go somewhere else, but since I only really wanted the resize portion in this script, I may just forgo keeping greasemonkey. {{User:ColdReactive/sig}} 20:18, 4 January 2011 (UTC)&lt;br /&gt;
:It works as you describe in at least 3.6.13. Maybe you had &amp;quot;Zoom Text Only&amp;quot; checked. &amp;amp;mdash; [[User:It's dot com|It's dot com]] 23:54, 4 January 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;Do not play on load&amp;quot; option ==&lt;br /&gt;
&lt;br /&gt;
I have another feature request, but it's more of a convenience than anything. Could we have the option to have the Flash paused on page load, instead of having it automatically play? This would help someone when they restore a browser session that has multiple tabs/windows on homestarrunner.com. In my case, I find myself going to a toon, and then adjusting my settings a few times to get it just right (or, in recent cases of one of my Linux machines, getting the Flash player to appear). The bad thing is that, after doing that, the very beginning of the toon is unpleasantly seared into my brain, after hearing it several times on several occasions. Please and thanks, {{User:Soiled Bargains/sig|nodash=nodash}} 19:53, 5 November 2011 (UTC)&lt;br /&gt;
:Someone has told me about the Firefox extension [https://addons.mozilla.org/en-US/firefox/addon/bartab/ BarTab] for Firefox versions 4.0b6 and below, which doesn't automatically load tabs when a browser session is restored. Then I learned that Firefox 4 through 7 have had an option like this available as a hidden option; in Firefox 8 it will be available through the Preferences window. I guess my request is no more, seeing as I have other options. {{User:Soiled Bargains/sig}} 20:25, 5 November 2011 (UTC)&lt;br /&gt;
::Hahaha, what timing. Firefox 8 is out three days later. I did not see that coming. {{User:Soiled Bargains/sig}} 22:33, 8 November 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Flipper broken ==&lt;br /&gt;
&lt;br /&gt;
The flipper function (that turns the website upside down) is broken. Can you please either remove the function or mirror the flipper SWF on mrphlip.com? {{User:Dagoth/sig}} (I mean that it shows a 404'd error in place of the flipped page)&lt;br /&gt;
: I'll have a bit of a look, but I'm not sure it'd work to mirror the SWF... Flash tends to get tetchy about that sort of cross-domain nonsense. Anyway, I haven't really touched this script in some time, and unless the hiatus ends, I probably won't any time soon... {{User:Phlip/sig}} 09:48, 25 March 2013 (UTC)&lt;br /&gt;
:: Yeah, doesn't work. I've disabled the flipper in the script... I didn't bother to set the &amp;quot;updated&amp;quot; flag, though, so it won't get sent out through the update notification thing... no need to alert people to have to pick this up just because a feature's getting removed. If you feel the need to have the non-working option disappear from your options, though, you can just click the &amp;quot;install the script&amp;quot; link on the page here. {{User:Phlip/sig}} 10:50, 25 March 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chromified All-In-One Prototype ==&lt;br /&gt;
Update: It's highly recommended to either use the CRX, or the original script with Tampermonkey, like DeFender mentioned. I might add this to the Chrome App Store, but I'd like to make sure it's mostly bug-free, first.&lt;br /&gt;
Downlods:&lt;br /&gt;
* Chrome CRX (adds button to toolbar instead of in-window): http://cl.ly/QlpQ/HRAIO.crx&lt;br /&gt;
* Chrome CRX source: http://cl.ly/Qlse/HRAIO.zip&lt;br /&gt;
* Tampermonkey: https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en&lt;br /&gt;
&amp;lt;del&amp;gt;I modified the userscript to work with Chrome (I have version 28.0.1500.95). It's a bit of a hack, but hey-- it works for the most part!&lt;br /&gt;
I tested the basics, if anyone wants to test it, download it here: http://cl.ly/QkAX/allinone.user.js&amp;lt;/del&amp;gt;&lt;br /&gt;
To install:&lt;br /&gt;
  1. Download the file (it'll likely complain that you can only use the Chrome App Store, ignore it because it's downloaded anyway)&lt;br /&gt;
  2. Go to your Downloads folder and find HRAIO.crx&lt;br /&gt;
  3. Open the URL chrome://extensions in Chrome and drag and drop the HRAIO.crx into that window.&lt;br /&gt;
  4. Click Accept/OK/Sure/whatever it says when it asks about security to install it.&lt;br /&gt;
[[User:Atarifanatic|Atari]] 02:13, 8 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit by Gh0st&lt;br /&gt;
&lt;br /&gt;
yes it works kindof navigation bar works, however subtitles do not when enabled do you want to possibly contact me to work on this script gh0sti at me dot com&lt;br /&gt;
:Phlip's original script works (almost) perfectly fine with [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey] installed. (The almost is that the &amp;quot;back one frame&amp;quot; button has the | and the &amp;amp;lt; on separate lines, making it look slightly wrong. Other than that, it's perfect.) {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
::I wasn't even aware that was a thing, honestly! If anything, I'm just going to keep working on this in case people don't want to download another extension for whatever reason. Also because I find it fun, cough cough. The &amp;quot;|&amp;lt;&amp;quot; is a problem even without tampermonkey, so it must be a Chrome thing. I'll start to look into that, even if just because of cosmetic reasons. Also, gh0st, what's the problem with the navbar/subtitles? I've got this just fine: [http://cl.ly/image/0j361g3C1x2n/i.png screenshot] [[User:Atarifanatic|Atari]] 20:54, 10 August 2013 (UTC)&lt;br /&gt;
:::Hmm... try this:&amp;lt;pre&amp;gt;prevButton.style.whiteSpace = &amp;quot;nowrap&amp;quot;;&amp;lt;/pre&amp;gt;should fix the wrapping, though I haven't tested it. As for the subtitles, it looks like you're still using GM_xmlHttpRequest to fetch those, so presumably you have something set up that lets you do that... I doubt Chrome has that builtin (and what it does have builtin wouldn't let you make a replacement, since it's cross-site and all). {{User:Phlip/sig}} 23:09, 10 August 2013 (UTC)&lt;br /&gt;
:::: That bit of code worked out! Although, I'm kinda confused on why Chrome would decide to wrap a button. With the subtitles, I honestly don't know what in my version of Chrome is making it work. Even with only the All-in-one extension added, it works. I tried looking it up and it seems to be implied that it was broken on version 27, but it works on 28 (which is odd in the first place because GM_ is GreaseMonkey, not Chrome), as referenced by [https://code.google.com/p/chromium/issues/detail?id=242890 this issue in the bugtracker]. [[User:Atarifanatic|Atari]] 14:58, 11 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
what if you made it a plugin in the chrome store possibly easier to update?? and philip are you back to help code it to work again?&lt;br /&gt;
:I decided to work on this one and came up with this buggy little .crx in the first post. &amp;lt;del&amp;gt;It's got some problems with the scaling that I couldn't figure out (if anyone could help, that'd be great; I just have to wait for tomorrow to upload the source)&amp;lt;/del&amp;gt; I think I got it figured out; at least it's scrolling. I'm much better with making my own code than editing that of others', so I wouldn't be surprised if I made a mess out of it. But hey, now the button's in the Chrome toolbar! [[User:Atarifanatic|Atari]] 22:36, 11 August 2013 (UTC), edited 15:11, 12 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti : Subtitles still do not work on the latest version you have put up, everything else seems to be working&lt;br /&gt;
&lt;br /&gt;
:::Other than the seek bar not turning off, this works pretty good. --[[User:Mr nutt|mr_nutt]] 12:39, 14 August 2013 (UTC)&lt;br /&gt;
::::Just looked into this and you're right; localStorage doesn't cross between site to extension, meaning all settings are stored somewhere they can't be accessed. I'll try to figure out a fix for this as soon as possible. [[User:Atarifanatic|Atari]] 17:49, 14 August 2013 (UTC)&lt;br /&gt;
&lt;br /&gt;
@Gh0sti: so how goes the updating of the plugin for chrome the subtitles still doesnt work and also looks like chrome wont let you install extensions unless its from the chrome store 12/1/2013&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this project seems dead. A real shame too since it was mostly working at one point. Though mind you, they might be struggling to get it in the Chrome Store for all I know. --[[User:Mr nutt|mr_nutt]] 22:38, 25 September 2014 (UTC)&lt;br /&gt;
:I said it above and i'll say it again. The original script works almost perfectly in [https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=en tampermonkey]. Just use that and stop complaining. {{User:DeFender1031/sig}} 18:01, 10 August 2013 (UTC)&lt;br /&gt;
With the new version 4.0 release, there is now a [https://chrome.google.com/webstore/detail/homestar-all-in-one/ekecfcebbojjfaiendgjgcadampmppdb fully Chrome-compatible version of this script]. {{User:Phlip/sig}} 21:17, 7 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome plugin ==&lt;br /&gt;
&lt;br /&gt;
I really like how simple the plugin is now, but I notice the frame counter is gone. That was really useful for finding hidden sections of the video, as well as a way to tell someone what frame to start on to see or hear a specific moment. If that can be added back in, that would be fantastic. [[User:Homestar3.14|Homestar3.14]] 23:41, 8 October 2014 (UTC)&lt;br /&gt;
:It's still there... it's just turned off by default. Hit the settings menu in the top left. {{User:Phlip/sig}} 00:31, 9 October 2014 (UTC)&lt;br /&gt;
::...*facepalm* Thanks. My eyes must have slid right past that when I went to turn on the subtitles. [[User:Homestar3.14|Homestar3.14]] 00:55, 9 October 2014 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Kitkorp version ==&lt;br /&gt;
&lt;br /&gt;
Phlip, Why don't you make a Kitkorp version? --[[Special:Contributions/207.255.156.241|207.255.156.241]] 00:10, 10 March 2015 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chrome Plain HTML NavBar still shows Subscribe ==&lt;br /&gt;
&lt;br /&gt;
Will it be updated soon? [[User:Catjaz63|Catjaz63]] 15:17, 29 March 2015 (UTC)&lt;br /&gt;
:I've updated it in the Chrome Web Store, I'm not sure how long that takes updates to filter down. Maybe try checking for updates in Chrome manually? {{User:Phlip/sig}} 22:25, 29 March 2015 (UTC)&lt;/div&gt;</summary>
		<author><name>Phlip</name></author>	</entry>

	</feed>