Index: /tags/plugins/captions/3.0/build/encode-images.py
===================================================================
--- /tags/plugins/captions/3.0/build/encode-images.py	(revision 1956)
+++ /tags/plugins/captions/3.0/build/encode-images.py	(revision 1956)
@@ -0,0 +1,36 @@
+import sys
+if len(sys.argv) < 3 or len(sys.argv) > 3:
+    print """
+        This script takes exactly two arguments: 
+        the original file and the image path.
+        """
+else:
+    import base64, re
+
+    org = sys.argv[1]
+    org_file = open(org, 'r')
+    css = org_file.read()
+    css_base = sys.argv[2]
+    extensions = {
+        'png': 'image/png',
+        'gif': 'image/gif',
+    }
+    for ext in extensions:
+        regex = re.compile('(\.*\/*)([a-zA-Z0-9-_/]+)\.%s' % ext)
+        matches = regex.finditer(css)
+        if matches:
+            for m in matches:
+                img_name = m.group(1) + m.group(2) + '.' + ext
+                img_file = css_base + '/' + img_name
+                try:
+                    img_text = base64.b64encode(open(img_file,'rb').read())
+                    css = css.replace(img_name, 'data:%s;base64,%s' % (extensions[ext], img_text))
+                except IOError:
+                    print "%s does not exist" % img_file
+        else:
+            print "No %s images found." % ext
+
+    org_file.close()
+    dest_file = open(org, 'w')
+    dest_file.write(css)
+    dest_file.close()
Index: /tags/plugins/captions/3.0/build/build.xml
===================================================================
--- /tags/plugins/captions/3.0/build/build.xml	(revision 1964)
+++ /tags/plugins/captions/3.0/build/build.xml	(revision 1964)
@@ -0,0 +1,34 @@
+<project name="Plugin" default="buildAS">
+
+    <target name="buildJS">
+        <concat destfile="../captions.js">
+            <fileset dir="../src/js" includes="*.js" />
+        </concat>
+        <java jar="yuicompressor.jar" fork="true">
+            <arg line="'../captions.js'"/>
+            <arg line="-o '../captions.js'"/>
+        </java>
+        <exec executable="python">
+            <arg file="encode-images.py" />
+            <arg file="../captions.js" />
+            <arg file="../assets/" />
+        </exec>
+        <echo message="Compiled JS plugin." />
+    </target>
+
+    <target name="buildAS" depends="buildJS">
+        <exec executable="/Developer/SDKs/flex_sdk_4/bin/mxmlc" dir="../">
+            <arg line="src/as/com/longtailvideo/plugins/captions/Captions.as" />
+            <arg line="-o captions.swf" />
+            <arg line="-sp src/as" />
+            <arg line="-library-path+=lib" />
+            <arg line="-load-externs=lib/jwplayer-5-classes.xml" />
+            <arg line="-static-link-runtime-shared-libraries=true" />
+            <arg line="-use-network=false" />
+            <arg line="-optimize=true" />
+            <arg line="-incremental=false" />
+        </exec>
+        <echo message="Compiled SWF plugin." />
+    </target>
+
+</project>
Index: /tags/plugins/captions/3.0/captions.xml
===================================================================
--- /tags/plugins/captions/3.0/captions.xml	(revision 1911)
+++ /tags/plugins/captions/3.0/captions.xml	(revision 1911)
@@ -0,0 +1,62 @@
+<plugin>
+	<title>Captions</title>
+	<filename>captions.swf</filename>
+	<version>2</version>
+	<compatibility>Compatible with 5.0</compatibility>
+	<author>LongTail Video</author>
+	<description>This plugin plays closed captions with a video.</description>
+	<href>http://developer.longtailvideo.com/trac/browser/plugins/captions</href>
+
+	<flashvars>
+		<flashvar>
+			<name>back</name>
+			<default>false</default>
+			<description>Set this to "true" to show a semitransparent backdrop that makes the captions more readable.</description>
+		</flashvar>
+		<flashvar>
+			<name>file</name>
+			<default></default>
+			<description>Location of the captions in (TimedText or SRT format) to display.</description>
+		</flashvar>
+		<flashvar>
+			<name>state</name>
+			<default>true</default>
+			<description>Set this to false to turn off the captions by default.</description>
+		</flashvar>
+		<flashvar>
+			<name>files</name>
+			<default></default>
+			<description>Comma-separated list of multiple captions tracks.</description>
+		</flashvar>
+		<flashvar>
+			<name>labels</name>
+			<default></default>
+			<description>Comma-separated list of labels for multiple tracks.</description>
+		</flashvar>
+		<flashvar>
+			<name>color</name>
+			<default>FFF</default>
+		</flashvar>
+		<flashvar>
+			<name>fontFamily</name>
+			<default>Arial,sans-serif</default>
+		</flashvar>
+		<flashvar>
+			<name>fontSize</name>
+			<default>14</default>
+		</flashvar>
+		<flashvar>
+			<name>fontStyle</name>
+			<default>normal</default>
+		</flashvar>
+		<flashvar>
+			<name>fontWeight</name>
+			<default>normal</default>
+		</flashvar>
+		<flashvar>
+			<name>textDecoration</name>
+			<default>none</default>
+		</flashvar>
+	</flashvars>
+
+</plugin>
Index: /tags/plugins/captions/3.0/test/errors.html
===================================================================
--- /tags/plugins/captions/3.0/test/errors.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/errors.html	(revision 2017)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Error Handling</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Error Handling</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(file) {
+    var options = {
+        debug:'console',
+        file: 'http://content.bitsontherun.com/videos/7OCSON1y.mp4',
+        height: 270,
+        image: 'http://content.bitsontherun.com/thumbs/7OCSON1y-320.jpg',
+        plugins: {
+            '../captions.js': {
+                file: file,
+                fontSize: 20
+            }
+        },
+        flashplayer: 'assets/player.swf',
+        stretching: 'exactfit',
+        width: 480
+    };
+    jwplayer("player").setup(options);
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer('assets/corri.srt')">Nonexisting file</a>
+    <li><a href="javascript:loadPlayer('http://www.longtailvideo.com/support/sites/default/files/plain.txt')">Crossdomain loading</a></li>
+    <li><a href="javascript:loadPlayer('assets/malformed.srt')">Malformed SRT</a></li>
+    <li><a href="javascript:loadPlayer('assets/malformed.xml')">Malformed DFXP</a></li>
+</ul>
+
+
+<p>Test all cases in Flash, and all but the DFXP case in one HTML5/MP4 browser.<br>
+    In all cases, the captions should not show up and no error should pop up.<br/>
+    However, the browser console should pop a log line with the error.
+</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/assets/sintel-far.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-far.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-far.txt	(revision 1964)
@@ -0,0 +1,106 @@
+﻿1
+00:01:47,250 --> 00:01:50,500
+این شمشیر گذشته تاریکی دارد.
+
+2
+00:01:51,800 --> 00:01:55,800
+خون های بسیاری ریخته؛
+
+3
+00:01:58,000 --> 00:02:01,450
+تو برای تنها سفر کردن نادانی،
+خامی رو تو وجودت حس می کنم.
+
+4
+00:02:01,750 --> 00:02:04,800
+تو خوش شانسی که خونت هنوز جریان داره.
+
+5
+00:02:05,250 --> 00:02:06,300
+متشکرم.
+
+6
+00:02:07,500 --> 00:02:09,000
+بنابراین...
+
+7
+00:02:09,400 --> 00:02:13,800
+سرزمین دروازه بان ها چه چیزی برای تو به ارمغان آورده ؟
+
+8
+00:02:15,000 --> 00:02:17,500
+من دنبال کسی می گردم.
+
+9
+00:02:18,000 --> 00:02:22,200
+یک شخص بسیار عزیز ؟
+روح یک خویشاوند ؟
+
+10
+00:02:23,400 --> 00:02:25,000
+یک اژدها.
+
+11
+00:02:28,850 --> 00:02:31,750
+یک تلاش خطرناک برای شکارچی تنها.
+
+12
+00:02:32,950 --> 00:02:35,870
+من تا زمانی که به یاد دارم تنها بودم.
+
+13
+00:03:27,250 --> 00:03:30,500
+ما تقریباً انجامش دادیم. ششش...
+
+14
+00:03:30,750 --> 00:03:33,500
+هی، هنوز بشین.
+
+15
+00:03:48,250 --> 00:03:52,250
+شب بخیر, اسکالز.
+
+16
+00:04:10,350 --> 00:04:13,850
+بگیرش, اسکالز! بیا!
+
+17
+00:04:25,250 --> 00:04:28,250
+اسکالز؟
+
+18
+00:05:04,000 --> 00:05:07,500
+آره! بیا!
+
+19
+00:05:38,750 --> 00:05:42,000
+اسکالز!
+
+20
+00:07:25,850 --> 00:07:27,500
+من شکست خورم.
+
+21
+00:07:32,800 --> 00:07:36,500
+تو فقط در دیدن شکست خوردی...
+
+22
+00:07:37,800 --> 00:07:40,500
+این سرزمین اژدها هاست، سینتل.
+
+23
+00:07:40,850 --> 00:07:44,000
+تو نزدیک تر از اونی که بدونی.
+
+24
+00:09:17,600 --> 00:09:19,500
+اسکالز!
+
+25
+00:10:21,600 --> 00:10:24,000
+اسکالز?
+
+26
+00:10:26,200 --> 00:10:29,800
+اسکالز...
+
Index: /tags/plugins/captions/3.0/test/assets/corrie-styled.xml
===================================================================
--- /tags/plugins/captions/3.0/test/assets/corrie-styled.xml	(revision 1815)
+++ /tags/plugins/captions/3.0/test/assets/corrie-styled.xml	(revision 1815)
@@ -0,0 +1,26 @@
+<tt xmlns="http://www.w3.org/2006/10/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
+  <head>
+   <styling>
+      <style id="boldened" tts:fontWeight="bold" />
+      <style id="yellow" tts:color="#FFFF00" />
+      <style id="bigger" tts:fontWeight="bold" tts:fontSize="20" tts:textDecoration="underline" />
+      <style id="serifed" tts:fontFamily="Times,serif" tts:fontStyle="italic" />
+   </styling>
+  </head>
+  <body>
+    <div>
+      <p begin="00:00:08" end="00:00:10" style="boldened">- Nothing is going on.</p>
+      <p begin="00:00:10.5" end="00:00:12.5" style="yellow">You liar!</p>
+      <p begin="00:00:13.5" end="00:00:15" style="yellow"><span tts:fontSize="30" tts:color="#FFCC00">Are you?</span></p>
+      <p begin="00:00:17" end="00:00:20" style="bigger">Violet, please!<br/>- I am <span tts:fontSize="30">not</span> your babe!</p>
+      <p begin="00:00:24" end="00:00:29" style="yellow">
+          You <span tts:textDecoration="underline" tts:fontStyle="italic">stupid cow</span>, look what<br/>you gone and done now, ay.
+      </p>
+      <p begin="00:00:34" end="00:00:36" style="serifed">Vi, please.<br/>- Leave me alone!</p>
+      <p begin="00:00:36" end="00:00:38.5" style="serifed">- We need to <span style="yellow">talk</span>
+.<br/>- Jason, are you deaf?!</p>
+      <p begin="00:00:41" end="00:00:42.9" style="boldened">What's going on?<br/>&nbsp;<br/>&nbsp;<br/><span tts:fontSize="-5" tts:fontWeight="normal">[some extra linebreaks]</span></p>
+      <p begin="00:00:43" end="00:00:45" style="boldened">GÃ©t out thÃ«re and try tÃž Ãalvage thisÂ©!<br/>&nbsp;<span tts:fontSize="-5" tts:fontWeight="normal">[some special characters]</span></p>
+    </div>
+  </body>
+</tt>
Index: /tags/plugins/captions/3.0/test/assets/style.css
===================================================================
--- /tags/plugins/captions/3.0/test/assets/style.css	(revision 2017)
+++ /tags/plugins/captions/3.0/test/assets/style.css	(revision 2017)
@@ -0,0 +1,6 @@
+body { padding: 50px; font: 13px/20px Arial; background: #EEE; }
+a  { color: #369; }
+a:visited { color: #444; }
+form,p, ul { margin-top: 20px; }
+#player { -webkit-box-shadow: 0 0 5px #999; }
+.note { font-style: italic; color: #444; }
Index: /tags/plugins/captions/3.0/test/assets/sintel-deu.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-deu.txt	(revision 1769)
+++ /tags/plugins/captions/3.0/test/assets/sintel-deu.txt	(revision 1769)
@@ -0,0 +1,112 @@
+1
+00:01:47,025 --> 00:01:50,050
+Diese Klinge birgt eine finstere
+Vergangenheit.
+
+2
+00:01:51,079 --> 00:01:55,079
+Durch sie wurde viel unschuldiges Blut
+vergossen.
+
+3
+00:01:58,000 --> 00:02:01,045
+Es ist tÃ¶richt, so ganz allein und
+unvorbereitet zu reisen!
+
+4
+00:02:01,075 --> 00:02:04,079
+Du kannst von GlÃŒck sagen, dass dein
+Blut noch in deinen Adern flieÃt.
+
+5
+00:02:05,025 --> 00:02:06,029
+Danke.
+
+6
+00:02:07,050 --> 00:02:09,000
+Also...
+
+7
+00:02:09,040 --> 00:02:13,080
+...was fÃŒhrt dich in die Lande der
+Torwaechter?
+
+8
+00:02:15,000 --> 00:02:17,050
+Ich suche jemanden.
+
+9
+00:02:18,000 --> 00:02:22,019
+Ein teurer Freund?
+Eine verwandte Seele?
+
+10
+00:02:23,040 --> 00:02:25,000
+Ein Drache.
+
+11
+00:02:28,084 --> 00:02:31,075
+Ein gefÃ€hrliches Unterfangen fÃŒr eine
+einsame JÃ€gerin.
+
+12
+00:02:32,094 --> 00:02:35,087
+Ich bin einsam, solange ich mich
+erinnern kann.
+
+13
+00:03:27,025 --> 00:03:30,050
+Wir sind fast fertig. Ruhig...
+
+14
+00:03:30,075 --> 00:03:33,050
+He, halt still.
+
+15
+00:03:48,025 --> 00:03:52,025
+Gute Nacht, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Los, hol ihn dir, Scales! Komm schon!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ja! VorwÃ€rts!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ich habe versagt.
+
+21
+00:07:32,080 --> 00:07:36,050
+Du hast es nur nicht vermocht, genauer
+hinzusehen.
+
+22
+00:07:37,080 --> 00:07:40,050
+Dies ist das Reich der Drachen, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Du bist nÃ€her, als du ahnst.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/corrie.srt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/corrie.srt	(revision 1769)
+++ /tags/plugins/captions/3.0/test/assets/corrie.srt	(revision 1769)
@@ -0,0 +1,39 @@
+1
+00:00:08,000 --> 00:00:10,000
+- Nothing is going on.
+
+2
+00:00:10,500 --> 00:00:12,500
+You liar!
+
+3
+00:00:13,500 --> 00:00:15,000
+Are you?
+
+4
+00:00:17,000 --> 00:00:20,000
+Violet, please!
+- I am not your babe!
+
+5
+00:00:24,000 --> 00:00:29,000
+You stupid cow,
+look what you gone and done now, ay.
+
+6
+00:00:34,000 --> 00:00:36,000
+Vi, please.
+- Leave me alone!
+
+7
+00:00:36,000 --> 00:00:38,500
+- We need to talk.
+- Jason, are you deaf?!
+
+8
+00:00:41,000 --> 00:00:43,000
+What's going on?
+
+9
+00:00:43,000 --> 00:00:45,000
+Get out there and try to salvage this!
Index: /tags/plugins/captions/3.0/test/assets/jwplayer.min.js
===================================================================
--- /tags/plugins/captions/3.0/test/assets/jwplayer.min.js	(revision 2017)
+++ /tags/plugins/captions/3.0/test/assets/jwplayer.min.js	(revision 2017)
@@ -0,0 +1,1 @@
+if(typeof jwplayer=="undefined"){var jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="5.8.2011";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function(b){b.utils=function(){};b.utils.typeOf=function(d){var c=typeof d;if(c==="object"){if(d){if(d instanceof Array){c="array"}}else{c="null"}}return c};b.utils.extend=function(){var c=b.utils.extend["arguments"];if(c.length>1){for(var e=1;e<c.length;e++){for(var d in c[e]){c[0][d]=c[e][d]}}return c[0]}return null};b.utils.clone=function(f){var c;var d=b.utils.clone["arguments"];if(d.length==1){switch(b.utils.typeOf(d[0])){case"object":c={};for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;case"array":c=[];for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;default:return d[0];break}}return c};b.utils.extension=function(c){if(!c){return""}c=c.substring(c.lastIndexOf("/")+1,c.length);c=c.split("?")[0];if(c.lastIndexOf(".")>-1){return c.substr(c.lastIndexOf(".")+1,c.length).toLowerCase()}return};b.utils.html=function(c,d){c.innerHTML=d};b.utils.wrap=function(c,d){if(c.parentNode){c.parentNode.replaceChild(d,c)}d.appendChild(c)};b.utils.ajax=function(g,f,c){var e;if(window.XMLHttpRequest){e=new XMLHttpRequest()}else{e=new ActiveXObject("Microsoft.XMLHTTP")}e.onreadystatechange=function(){if(e.readyState===4){if(e.status===200){if(f){if(!b.utils.exists(e.responseXML)){try{if(window.DOMParser){var h=(new DOMParser()).parseFromString(e.responseText,"text/xml");if(h){e=b.utils.extend({},e,{responseXML:h})}}else{h=new ActiveXObject("Microsoft.XMLDOM");h.async="false";h.loadXML(e.responseText);e=b.utils.extend({},e,{responseXML:h})}}catch(j){if(c){c(g)}}}f(e)}}else{if(c){c(g)}}}};try{e.open("GET",g,true);e.send(null)}catch(d){if(c){c(g)}}return e};b.utils.load=function(d,e,c){d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e()}}else{if(c){c()}}}}};b.utils.find=function(d,c){return d.getElementsByTagName(c)};b.utils.append=function(c,d){c.appendChild(d)};b.utils.isIE=function(){return((!+"\v1")||(typeof window.ActiveXObject!="undefined"))};b.utils.userAgentMatch=function(d){var c=navigator.userAgent.toLowerCase();return(c.match(d)!==null)};b.utils.isIOS=function(){return b.utils.userAgentMatch(/iP(hone|ad|od)/i)};b.utils.isIPad=function(){return b.utils.userAgentMatch(/iPad/i)};b.utils.isIPod=function(){return b.utils.userAgentMatch(/iP(hone|od)/i)};b.utils.isAndroid=function(){return b.utils.userAgentMatch(/android/i)};b.utils.isLegacyAndroid=function(){return b.utils.userAgentMatch(/android 2.[012]/i)};b.utils.isBlackberry=function(){return b.utils.userAgentMatch(/blackberry/i)};b.utils.isMobile=function(){return b.utils.isIOS()};b.utils.getFirstPlaylistItemFromConfig=function(c){var d={};var e;if(c.playlist&&c.playlist.length){e=c.playlist[0]}else{e=c}d.file=e.file;d.levels=e.levels;d.streamer=e.streamer;d.playlistfile=e.playlistfile;d.provider=e.provider;if(!d.provider){if(d.file&&(d.file.toLowerCase().indexOf("youtube.com")>-1||d.file.toLowerCase().indexOf("youtu.be")>-1)){d.provider="youtube"}if(d.streamer&&d.streamer.toLowerCase().indexOf("rtmp://")==0){d.provider="rtmp"}if(e.type){d.provider=e.type.toLowerCase()}}if(d.provider=="audio"){d.provider="sound"}return d};b.utils.getOuterHTML=function(c){if(c.outerHTML){return c.outerHTML}else{try{return new XMLSerializer().serializeToString(c)}catch(d){return""}}};b.utils.setOuterHTML=function(f,e){if(f.outerHTML){f.outerHTML=e}else{var g=document.createElement("div");g.innerHTML=e;var c=document.createRange();c.selectNodeContents(g);var d=c.extractContents();f.parentNode.insertBefore(d,f);f.parentNode.removeChild(f)}};b.utils.hasFlash=function(){if(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined"){return true}if(typeof window.ActiveXObject!="undefined"){try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash");return true}catch(c){}}return false};b.utils.getPluginName=function(c){if(c.lastIndexOf("/")>=0){c=c.substring(c.lastIndexOf("/")+1,c.length)}if(c.lastIndexOf("-")>=0){c=c.substring(0,c.lastIndexOf("-"))}if(c.lastIndexOf(".swf")>=0){c=c.substring(0,c.lastIndexOf(".swf"))}if(c.lastIndexOf(".js")>=0){c=c.substring(0,c.lastIndexOf(".js"))}return c};b.utils.getPluginVersion=function(c){if(c.lastIndexOf("-")>=0){if(c.lastIndexOf(".js")>=0){return c.substring(c.lastIndexOf("-")+1,c.lastIndexOf(".js"))}else{if(c.lastIndexOf(".swf")>=0){return c.substring(c.lastIndexOf("-")+1,c.lastIndexOf(".swf"))}else{return c.substring(c.lastIndexOf("-")+1)}}}return""};b.utils.getAbsolutePath=function(j,h){if(!b.utils.exists(h)){h=document.location.href}if(!b.utils.exists(j)){return undefined}if(a(j)){return j}var k=h.substring(0,h.indexOf("://")+3);var g=h.substring(k.length,h.indexOf("/",k.length+1));var d;if(j.indexOf("/")===0){d=j.split("/")}else{var e=h.split("?")[0];e=e.substring(k.length+g.length+1,e.lastIndexOf("/"));d=e.split("/").concat(j.split("/"))}var c=[];for(var f=0;f<d.length;f++){if(!d[f]||!b.utils.exists(d[f])||d[f]=="."){continue}else{if(d[f]==".."){c.pop()}else{c.push(d[f])}}}return k+g+"/"+c.join("/")};function a(d){if(!b.utils.exists(d)){return}var e=d.indexOf("://");var c=d.indexOf("?");return(e>0&&(c<0||(c>e)))}b.utils.pluginPathType={ABSOLUTE:"ABSOLUTE",RELATIVE:"RELATIVE",CDN:"CDN"};b.utils.getPluginPathType=function(d){if(typeof d!="string"){return}d=d.split("?")[0];var e=d.indexOf("://");if(e>0){return b.utils.pluginPathType.ABSOLUTE}var c=d.indexOf("/");var f=b.utils.extension(d);if(e<0&&c<0&&(!f||!isNaN(f))){return b.utils.pluginPathType.CDN}return b.utils.pluginPathType.RELATIVE};b.utils.mapEmpty=function(c){for(var d in c){return false}return true};b.utils.mapLength=function(d){var c=0;for(var e in d){c++}return c};b.utils.log=function(d,c){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(c){console.log(d,c)}else{console.log(d)}}};b.utils.css=function(d,g,c){if(b.utils.exists(d)){for(var e in g){try{if(typeof g[e]==="undefined"){continue}else{if(typeof g[e]=="number"&&!(e=="zIndex"||e=="opacity")){if(isNaN(g[e])){continue}if(e.match(/color/i)){g[e]="#"+b.utils.strings.pad(g[e].toString(16),6)}else{g[e]=Math.ceil(g[e])+"px"}}}d.style[e]=g[e]}catch(f){}}}};b.utils.isYouTube=function(c){return(c.indexOf("youtube.com")>-1||c.indexOf("youtu.be")>-1)};b.utils.transform=function(e,d,c,g,h){if(!b.utils.exists(d)){d=1}if(!b.utils.exists(c)){c=1}if(!b.utils.exists(g)){g=0}if(!b.utils.exists(h)){h=0}if(d==1&&c==1&&g==0&&h==0){e.style.webkitTransform="";e.style.MozTransform="";e.style.OTransform=""}else{var f="scale("+d+","+c+") translate("+g+"px,"+h+"px)";e.style.webkitTransform=f;e.style.MozTransform=f;e.style.OTransform=f}};b.utils.stretch=function(j,p,o,f,m,g){if(typeof o=="undefined"||typeof f=="undefined"||typeof m=="undefined"||typeof g=="undefined"){return}var d=o/m;var e=f/g;var l=0;var k=0;var c={};if(p.parentElement){p.parentElement.style.overflow="hidden"}b.utils.transform(p);switch(j.toUpperCase()){case b.utils.stretching.NONE:c.width=m;c.height=g;c.top=(f-c.height)/2;c.left=(o-c.width)/2;break;case b.utils.stretching.UNIFORM:if(d>e){c.width=m*e;c.height=g*e}else{c.width=m*d;c.height=g*d}c.top=(f-c.height)/2;c.left=(o-c.width)/2;break;case b.utils.stretching.FILL:if(d>e){c.width=m*d;c.height=g*d}else{c.width=m*e;c.height=g*e}c.top=(f-c.height)/2;c.left=(o-c.width)/2;break;case b.utils.stretching.EXACTFIT:c.width=m;c.height=g;var n=Math.round((m/2)*(1-1/d));var h=Math.round((g/2)*(1-1/e));b.utils.transform(p,d,e,n,h);c.top=c.left=0;break;default:break}b.utils.css(p,c)};b.utils.stretching={NONE:"NONE",FILL:"FILL",UNIFORM:"UNIFORM",EXACTFIT:"EXACTFIT"};b.utils.deepReplaceKeyName=function(h,e,c){switch(b.utils.typeOf(h)){case"array":for(var g=0;g<h.length;g++){h[g]=b.utils.deepReplaceKeyName(h[g],e,c)}break;case"object":for(var f in h){var d=f.replace(new RegExp(e,"g"),c);h[d]=b.utils.deepReplaceKeyName(h[f],e,c);if(f!=d){delete h[f]}}break}return h};b.utils.isInArray=function(e,d){if(!(e)||!(e instanceof Array)){return false}for(var c=0;c<e.length;c++){if(d===e[c]){return true}}return false};b.utils.exists=function(c){switch(typeof(c)){case"string":return(c.length>0);break;case"object":return(c!==null);case"undefined":return false}return true};b.utils.empty=function(c){if(typeof c.hasChildNodes=="function"){while(c.hasChildNodes()){c.removeChild(c.firstChild)}}};b.utils.parseDimension=function(c){if(typeof c=="string"){if(c===""){return 0}else{if(c.lastIndexOf("%")>-1){return c}else{return parseInt(c.replace("px",""),10)}}}return c};b.utils.getDimensions=function(c){if(c&&c.style){return{x:b.utils.parseDimension(c.style.left),y:b.utils.parseDimension(c.style.top),width:b.utils.parseDimension(c.style.width),height:b.utils.parseDimension(c.style.height)}}else{return{}}};b.utils.getElementWidth=function(c){if(!c){return null}else{if(c==document.body){return b.utils.parentNode(c).clientWidth}else{if(c.clientWidth>0){return c.clientWidth}else{if(c.style){return b.utils.parseDimension(c.style.width)}else{return null}}}}};b.utils.getElementHeight=function(c){if(!c){return null}else{if(c==document.body){return b.utils.parentNode(c).clientHeight}else{if(c.clientHeight>0){return c.clientHeight}else{if(c.style){return b.utils.parseDimension(c.style.height)}else{return null}}}}};b.utils.timeFormat=function(c){str="00:00";if(c>0){str=Math.floor(c/60)<10?"0"+Math.floor(c/60)+":":Math.floor(c/60)+":";str+=Math.floor(c%60)<10?"0"+Math.floor(c%60):Math.floor(c%60)}return str};b.utils.useNativeFullscreen=function(){return(navigator&&navigator.vendor&&navigator.vendor.indexOf("Apple")==0)};b.utils.parentNode=function(c){if(!c){return docuemnt.body}else{if(c.parentNode){return c.parentNode}else{if(c.parentElement){return c.parentElement}else{return c}}}};b.utils.getBoundingClientRect=function(c){if(typeof c.getBoundingClientRect=="function"){return c.getBoundingClientRect()}else{return{left:c.offsetLeft+document.body.scrollLeft,top:c.offsetTop+document.body.scrollTop,width:c.offsetWidth,height:c.offsetHeight}}}})(jwplayer);(function(a){a.events=function(){};a.events.COMPLETE="COMPLETE";a.events.ERROR="ERROR"})(jwplayer);(function(jwplayer){jwplayer.events.eventdispatcher=function(debug){var _debug=debug;var _listeners;var _globallisteners;this.resetEventListeners=function(){_listeners={};_globallisteners=[]};this.resetEventListeners();this.addEventListener=function(type,listener,count){try{if(!jwplayer.utils.exists(_listeners[type])){_listeners[type]=[]}if(typeof(listener)=="string"){eval("listener = "+listener)}_listeners[type].push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeEventListener=function(type,listener){if(!_listeners[type]){return}try{for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){if(_listeners[type][listenerIndex].listener.toString()==listener.toString()){_listeners[type].splice(listenerIndex,1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.addGlobalListener=function(listener,count){try{if(typeof(listener)=="string"){eval("listener = "+listener)}_globallisteners.push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeGlobalListener=function(listener){if(!_globallisteners[type]){return}try{for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){if(_globallisteners[globalListenerIndex].listener.toString()==listener.toString()){_globallisteners.splice(globalListenerIndex,1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.sendEvent=function(type,data){if(!jwplayer.utils.exists(data)){data={}}if(_debug){jwplayer.utils.log(type,data)}if(typeof _listeners[type]!="undefined"){for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){try{_listeners[type][listenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_listeners[type][listenerIndex].listener)}if(_listeners[type][listenerIndex]){if(_listeners[type][listenerIndex].count===1){delete _listeners[type][listenerIndex]}else{if(_listeners[type][listenerIndex].count>0){_listeners[type][listenerIndex].count=_listeners[type][listenerIndex].count-1}}}}}for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){try{_globallisteners[globalListenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_globallisteners[globalListenerIndex].listener)}if(_globallisteners[globalListenerIndex]){if(_globallisteners[globalListenerIndex].count===1){delete _globallisteners[globalListenerIndex]}else{if(_globallisteners[globalListenerIndex].count>0){_globallisteners[globalListenerIndex].count=_globallisteners[globalListenerIndex].count-1}}}}}}})(jwplayer);(function(a){var b={};a.utils.animations=function(){};a.utils.animations.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d;c.style.msTransform=d};a.utils.animations.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d;c.style.msTransformOrigin=d};a.utils.animations.rotate=function(c,d){a.utils.animations.transform(c,["rotate(",d,"deg)"].join(""))};a.utils.cancelAnimation=function(c){delete b[c.id]};a.utils.fadeTo=function(m,f,e,j,h,d){if(b[m.id]!=d&&a.utils.exists(d)){return}if(m.style.opacity==f){return}var c=new Date().getTime();if(d>c){setTimeout(function(){a.utils.fadeTo(m,f,e,j,0,d)},d-c)}if(m.style.display=="none"){m.style.display="block"}if(!a.utils.exists(j)){j=m.style.opacity===""?1:m.style.opacity}if(m.style.opacity==f&&m.style.opacity!==""&&a.utils.exists(d)){if(f===0){m.style.display="none"}return}if(!a.utils.exists(d)){d=c;b[m.id]=d}if(!a.utils.exists(h)){h=0}var k=(e>0)?((c-d)/(e*1000)):0;k=k>1?1:k;var l=f-j;var g=j+(k*l);if(g>1){g=1}else{if(g<0){g=0}}m.style.opacity=g;if(h>0){b[m.id]=d+h*1000;a.utils.fadeTo(m,f,e,j,0,b[m.id]);return}setTimeout(function(){a.utils.fadeTo(m,f,e,j,0,d)},10)}})(jwplayer);(function(a){a.utils.arrays=function(){};a.utils.arrays.indexOf=function(c,d){for(var b=0;b<c.length;b++){if(c[b]==d){return b}}return -1};a.utils.arrays.remove=function(c,d){var b=a.utils.arrays.indexOf(c,d);if(b>-1){c.splice(b,1)}}})(jwplayer);(function(a){a.utils.extensionmap={"3gp":{html5:"video/3gpp",flash:"video"},"3gpp":{html5:"video/3gpp"},"3g2":{html5:"video/3gpp2",flash:"video"},"3gpp2":{html5:"video/3gpp2"},flv:{flash:"video"},f4a:{html5:"audio/mp4"},f4b:{html5:"audio/mp4",flash:"video"},f4v:{html5:"video/mp4",flash:"video"},mov:{html5:"video/quicktime",flash:"video"},m4a:{html5:"audio/mp4",flash:"video"},m4b:{html5:"audio/mp4"},m4p:{html5:"audio/mp4"},m4v:{html5:"video/mp4",flash:"video"},mp4:{html5:"video/mp4",flash:"video"},rbs:{flash:"sound"},aac:{html5:"audio/aac",flash:"video"},mp3:{html5:"audio/mp3",flash:"sound"},ogg:{html5:"audio/ogg"},oga:{html5:"audio/ogg"},ogv:{html5:"video/ogg"},webm:{html5:"video/webm"},m3u8:{html5:"audio/x-mpegurl"},gif:{flash:"image"},jpeg:{flash:"image"},jpg:{flash:"image"},swf:{flash:"image"},png:{flash:"image"},wav:{html5:"audio/x-wav"}}})(jwplayer);(function(e){e.utils.mediaparser=function(){};var g={element:{width:"width",height:"height",id:"id","class":"className",name:"name"},media:{src:"file",preload:"preload",autoplay:"autostart",loop:"repeat",controls:"controls"},source:{src:"file",type:"type",media:"media","data-jw-width":"width","data-jw-bitrate":"bitrate"},video:{poster:"image"}};var f={};e.utils.mediaparser.parseMedia=function(j){return d(j)};function c(k,j){if(!e.utils.exists(j)){j=g[k]}else{e.utils.extend(j,g[k])}return j}function d(n,j){if(f[n.tagName.toLowerCase()]&&!e.utils.exists(j)){return f[n.tagName.toLowerCase()](n)}else{j=c("element",j);var o={};for(var k in j){if(k!="length"){var m=n.getAttribute(k);if(e.utils.exists(m)){o[j[k]]=m}}}var l=n.style["#background-color"];if(l&&!(l=="transparent"||l=="rgba(0, 0, 0, 0)")){o.screencolor=l}return o}}function h(n,k){k=c("media",k);var l=[];var j=e.utils.selectors("source",n);for(var m in j){if(!isNaN(m)){l.push(a(j[m]))}}var o=d(n,k);if(e.utils.exists(o.file)){l[0]={file:o.file}}o.levels=l;return o}function a(l,k){k=c("source",k);var j=d(l,k);j.width=j.width?j.width:0;j.bitrate=j.bitrate?j.bitrate:0;return j}function b(l,k){k=c("video",k);var j=h(l,k);return j}f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);(function(a){a.utils.loaderstatus={NEW:"NEW",LOADING:"LOADING",ERROR:"ERROR",COMPLETE:"COMPLETE"};a.utils.scriptloader=function(c){var d=a.utils.loaderstatus.NEW;var b=new a.events.eventdispatcher();a.utils.extend(this,b);this.load=function(){if(d==a.utils.loaderstatus.NEW){d=a.utils.loaderstatus.LOADING;var e=document.createElement("script");e.onload=function(f){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)};e.onerror=function(f){d=a.utils.loaderstatus.ERROR;b.sendEvent(a.events.ERROR)};e.onreadystatechange=function(){if(e.readyState=="loaded"||e.readyState=="complete"){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)}};document.getElementsByTagName("head")[0].appendChild(e);e.src=c}};this.getStatus=function(){return d}}})(jwplayer);(function(a){a.utils.selectors=function(b,e){if(!a.utils.exists(e)){e=document}b=a.utils.strings.trim(b);var c=b.charAt(0);if(c=="#"){return e.getElementById(b.substr(1))}else{if(c=="."){if(e.getElementsByClassName){return e.getElementsByClassName(b.substr(1))}else{return a.utils.selectors.getElementsByTagAndClass("*",b.substr(1))}}else{if(b.indexOf(".")>0){var d=b.split(".");return a.utils.selectors.getElementsByTagAndClass(d[0],d[1])}else{return e.getElementsByTagName(b)}}}return null};a.utils.selectors.getElementsByTagAndClass=function(e,h,g){var j=[];if(!a.utils.exists(g)){g=document}var f=g.getElementsByTagName(e);for(var d=0;d<f.length;d++){if(a.utils.exists(f[d].className)){var c=f[d].className.split(" ");for(var b=0;b<c.length;b++){if(c[b]==h){j.push(f[d])}}}}return j}})(jwplayer);(function(a){a.utils.strings=function(){};a.utils.strings.trim=function(b){return b.replace(/^\s*/,"").replace(/\s*$/,"")};a.utils.strings.pad=function(c,d,b){if(!b){b="0"}while(c.length<d){c=b+c}return c};a.utils.strings.serialize=function(b){if(b==null){return null}else{if(b=="true"){return true}else{if(b=="false"){return false}else{if(isNaN(Number(b))||b.length>5||b.length==0){return b}else{return Number(b)}}}}};a.utils.strings.seconds=function(d){d=d.replace(",",".");var b=d.split(":");var c=0;if(d.substr(-1)=="s"){c=Number(d.substr(0,d.length-1))}else{if(d.substr(-1)=="m"){c=Number(d.substr(0,d.length-1))*60}else{if(d.substr(-1)=="h"){c=Number(d.substr(0,d.length-1))*3600}else{if(b.length>1){c=Number(b[b.length-1]);c+=Number(b[b.length-2])*60;if(b.length==3){c+=Number(b[b.length-3])*3600}}else{c=Number(d)}}}}return c};a.utils.strings.xmlAttribute=function(b,c){for(var d=0;d<b.attributes.length;d++){if(b.attributes[d].name&&b.attributes[d].name.toLowerCase()==c.toLowerCase()){return b.attributes[d].value.toString()}}return""};a.utils.strings.jsonToString=function(f){var h=h||{};if(h&&h.stringify){return h.stringify(f)}var c=typeof(f);if(c!="object"||f===null){if(c=="string"){f='"'+f.replace(/"/g,'\\"')+'"'}else{return String(f)}}else{var g=[],b=(f&&f.constructor==Array);for(var d in f){var e=f[d];switch(typeof(e)){case"string":e='"'+e.replace(/"/g,'\\"')+'"';break;case"object":if(a.utils.exists(e)){e=a.utils.strings.jsonToString(e)}break}if(b){if(typeof(e)!="function"){g.push(String(e))}}else{if(typeof(e)!="function"){g.push('"'+d+'":'+String(e))}}}if(b){return"["+String(g)+"]"}else{return"{"+String(g)+"}"}}}})(jwplayer);(function(c){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);c.utils.typechecker=function(g,f){f=!c.utils.exists(f)?b(g):f;return e(g,f)};function b(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(!c.utils.exists(f)){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){switch(f.toLowerCase()){case"blue":return parseInt("0000FF",16);case"green":return parseInt("00FF00",16);case"red":return parseInt("FF0000",16);case"cyan":return parseInt("00FFFF",16);case"magenta":return parseInt("FF00FF",16);case"yellow":return parseInt("FFFF00",16);case"black":return parseInt("000000",16);case"white":return parseInt("FFFFFF",16);default:f=f.replace(/(#|0x)?([0-9A-F]{3,6})$/gi,"$2");if(f.length==3){f=f.charAt(0)+f.charAt(0)+f.charAt(1)+f.charAt(1)+f.charAt(2)+f.charAt(2)}return parseInt(f,16)}return parseInt("000000",16)}})(jwplayer);(function(a){a.utils.parsers=function(){};a.utils.parsers.localName=function(b){if(!b){return""}else{if(b.localName){return b.localName}else{if(b.baseName){return b.baseName}else{return""}}}};a.utils.parsers.textContent=function(b){if(!b){return""}else{if(b.textContent){return b.textContent}else{if(b.text){return b.text}else{return""}}}}})(jwplayer);(function(a){a.utils.parsers.jwparser=function(){};a.utils.parsers.jwparser.PREFIX="jwplayer";a.utils.parsers.jwparser.parseEntry=function(c,d){for(var b=0;b<c.childNodes.length;b++){if(c.childNodes[b].prefix==a.utils.parsers.jwparser.PREFIX){d[a.utils.parsers.localName(c.childNodes[b])]=a.utils.strings.serialize(a.utils.parsers.textContent(c.childNodes[b]))}if(!d.file&&String(d.link).toLowerCase().indexOf("youtube")>-1){d.file=d.link}}return d};a.utils.parsers.jwparser.getProvider=function(c){if(c.type){return c.type}else{if(c.file.indexOf("youtube.com/w")>-1||c.file.indexOf("youtube.com/v")>-1||c.file.indexOf("youtu.be/")>-1){return"youtube"}else{if(c.streamer&&c.streamer.indexOf("rtmp")==0){return"rtmp"}else{if(c.streamer&&c.streamer.indexOf("http")==0){return"http"}else{var b=a.utils.strings.extension(c.file);if(extensions.hasOwnProperty(b)){return extensions[b]}}}}}return""}})(jwplayer);(function(a){a.utils.parsers.mediaparser=function(){};a.utils.parsers.mediaparser.PREFIX="media";a.utils.parsers.mediaparser.parseGroup=function(d,f){var e=false;for(var c=0;c<d.childNodes.length;c++){if(d.childNodes[c].prefix==a.utils.parsers.mediaparser.PREFIX){if(!a.utils.parsers.localName(d.childNodes[c])){continue}switch(a.utils.parsers.localName(d.childNodes[c]).toLowerCase()){case"content":if(!e){f.file=a.utils.strings.xmlAttribute(d.childNodes[c],"url")}if(a.utils.strings.xmlAttribute(d.childNodes[c],"duration")){f.duration=a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c],"duration"))}if(a.utils.strings.xmlAttribute(d.childNodes[c],"start")){f.start=a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c],"start"))}if(d.childNodes[c].childNodes&&d.childNodes[c].childNodes.length>0){f=a.utils.parsers.mediaparser.parseGroup(d.childNodes[c],f)}if(a.utils.strings.xmlAttribute(d.childNodes[c],"width")||a.utils.strings.xmlAttribute(d.childNodes[c],"bitrate")||a.utils.strings.xmlAttribute(d.childNodes[c],"url")){if(!f.levels){f.levels=[]}f.levels.push({width:a.utils.strings.xmlAttribute(d.childNodes[c],"width"),bitrate:a.utils.strings.xmlAttribute(d.childNodes[c],"bitrate"),file:a.utils.strings.xmlAttribute(d.childNodes[c],"url")})}break;case"title":f.title=a.utils.parsers.textContent(d.childNodes[c]);break;case"description":f.description=a.utils.parsers.textContent(d.childNodes[c]);break;case"keywords":f.tags=a.utils.parsers.textContent(d.childNodes[c]);break;case"thumbnail":f.image=a.utils.strings.xmlAttribute(d.childNodes[c],"url");break;case"credit":f.author=a.utils.parsers.textContent(d.childNodes[c]);break;case"player":var b=d.childNodes[c].url;if(b.indexOf("youtube.com")>=0||b.indexOf("youtu.be")>=0){e=true;f.file=a.utils.strings.xmlAttribute(d.childNodes[c],"url")}break;case"group":a.utils.parsers.mediaparser.parseGroup(d.childNodes[c],f);break}}}return f}})(jwplayer);(function(b){b.utils.parsers.rssparser=function(){};b.utils.parsers.rssparser.parse=function(f){var c=[];for(var e=0;e<f.childNodes.length;e++){if(b.utils.parsers.localName(f.childNodes[e]).toLowerCase()=="channel"){for(var d=0;d<f.childNodes[e].childNodes.length;d++){if(b.utils.parsers.localName(f.childNodes[e].childNodes[d]).toLowerCase()=="item"){c.push(a(f.childNodes[e].childNodes[d]))}}}}return c};function a(d){var e={};for(var c=0;c<d.childNodes.length;c++){if(!b.utils.parsers.localName(d.childNodes[c])){continue}switch(b.utils.parsers.localName(d.childNodes[c]).toLowerCase()){case"enclosure":e.file=b.utils.strings.xmlAttribute(d.childNodes[c],"url");break;case"title":e.title=b.utils.parsers.textContent(d.childNodes[c]);break;case"pubdate":e.date=b.utils.parsers.textContent(d.childNodes[c]);break;case"description":e.description=b.utils.parsers.textContent(d.childNodes[c]);break;case"link":e.link=b.utils.parsers.textContent(d.childNodes[c]);break;case"category":if(e.tags){e.tags+=b.utils.parsers.textContent(d.childNodes[c])}else{e.tags=b.utils.parsers.textContent(d.childNodes[c])}break}}e=b.utils.parsers.mediaparser.parseGroup(d,e);e=b.utils.parsers.jwparser.parseEntry(d,e);return new b.html5.playlistitem(e)}})(jwplayer);(function(a){var c={};var b={};a.plugins=function(){};a.plugins.loadPlugins=function(e,d){b[e]=new a.plugins.pluginloader(new a.plugins.model(c),d);return b[e]};a.plugins.registerPlugin=function(h,f,e){var d=a.utils.getPluginName(h);if(c[d]){c[d].registerPlugin(h,f,e)}else{a.utils.log("A plugin ("+h+") was registered with the player that was not loaded. Please check your configuration.");for(var g in b){b[g].pluginFailed()}}}})(jwplayer);(function(a){a.plugins.model=function(b){this.addPlugin=function(c){var d=a.utils.getPluginName(c);if(!b[d]){b[d]=new a.plugins.plugin(c)}return b[d]}}})(jwplayer);(function(a){a.plugins.pluginmodes={FLASH:"FLASH",JAVASCRIPT:"JAVASCRIPT",HYBRID:"HYBRID"};a.plugins.plugin=function(b){var d="http://plugins.longtailvideo.com";var j=a.utils.loaderstatus.NEW;var k;var h;var l;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function e(){switch(a.utils.getPluginPathType(b)){case a.utils.pluginPathType.ABSOLUTE:return b;case a.utils.pluginPathType.RELATIVE:return a.utils.getAbsolutePath(b,window.location.href);case a.utils.pluginPathType.CDN:var o=a.utils.getPluginName(b);var n=a.utils.getPluginVersion(b);var m=(window.location.href.indexOf("https://")==0)?d.replace("http://","https://secure"):d;return m+"/"+a.version.split(".")[0]+"/"+o+"/"+o+(n!==""?("-"+n):"")+".js"}}function g(m){l=setTimeout(function(){j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)},1000)}function f(m){j=a.utils.loaderstatus.ERROR;c.sendEvent(a.events.ERROR)}this.load=function(){if(j==a.utils.loaderstatus.NEW){if(b.lastIndexOf(".swf")>0){k=b;j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE);return}j=a.utils.loaderstatus.LOADING;var m=new a.utils.scriptloader(e());m.addEventListener(a.events.COMPLETE,g);m.addEventListener(a.events.ERROR,f);m.load()}};this.registerPlugin=function(o,n,m){if(l){clearTimeout(l);l=undefined}if(n&&m){k=m;h=n}else{if(typeof n=="string"){k=n}else{if(typeof n=="function"){h=n}else{if(!n&&!m){k=o}}}}j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)};this.getStatus=function(){return j};this.getPluginName=function(){return a.utils.getPluginName(b)};this.getFlashPath=function(){if(k){switch(a.utils.getPluginPathType(k)){case a.utils.pluginPathType.ABSOLUTE:return k;case a.utils.pluginPathType.RELATIVE:if(b.lastIndexOf(".swf")>0){return a.utils.getAbsolutePath(k,window.location.href)}return a.utils.getAbsolutePath(k,e());case a.utils.pluginPathType.CDN:if(k.indexOf("-")>-1){return k+"h"}return k+"-h"}}return null};this.getJS=function(){return h};this.getPluginmode=function(){if(typeof k!="undefined"&&typeof h!="undefined"){return a.plugins.pluginmodes.HYBRID}else{if(typeof k!="undefined"){return a.plugins.pluginmodes.FLASH}else{if(typeof h!="undefined"){return a.plugins.pluginmodes.JAVASCRIPT}}}};this.getNewInstance=function(n,m,o){return new h(n,m,o)};this.getURL=function(){return b}}})(jwplayer);(function(a){a.plugins.pluginloader=function(h,e){var g={};var k=a.utils.loaderstatus.NEW;var d=false;var b=false;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function f(){if(!b){b=true;k=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)}}function j(){if(!b){var m=0;for(plugin in g){var l=g[plugin].getStatus();if(l==a.utils.loaderstatus.LOADING||l==a.utils.loaderstatus.NEW){m++}}if(m==0){f()}}}this.setupPlugins=function(n,l,s){var m={length:0,plugins:{}};var p={length:0,plugins:{}};for(var o in g){var q=g[o].getPluginName();if(g[o].getFlashPath()){m.plugins[g[o].getFlashPath()]=l.plugins[o];m.plugins[g[o].getFlashPath()].pluginmode=g[o].getPluginmode();m.length++}if(g[o].getJS()){var r=document.createElement("div");r.id=n.id+"_"+q;r.style.position="absolute";r.style.zIndex=p.length+10;p.plugins[q]=g[o].getNewInstance(n,l.plugins[o],r);p.length++;if(typeof p.plugins[q].resize!="undefined"){n.onReady(s(p.plugins[q],r,true));n.onResize(s(p.plugins[q],r))}}}n.plugins=p.plugins;return m};this.load=function(){k=a.utils.loaderstatus.LOADING;d=true;for(var l in e){if(a.utils.exists(l)){g[l]=h.addPlugin(l);g[l].addEventListener(a.events.COMPLETE,j);g[l].addEventListener(a.events.ERROR,j)}}for(l in g){g[l].load()}d=false;j()};this.pluginFailed=function(){f()};this.getStatus=function(){return k}}})(jwplayer);(function(b){var a=[];b.api=function(d){this.container=d;this.id=d.id;var n={};var s={};var q={};var c=[];var h=undefined;var l=false;var j=[];var p=b.utils.getOuterHTML(d);var r={};var k={};this.getBuffer=function(){return this.callInternal("jwGetBuffer")};this.getContainer=function(){return this.container};function e(u,t){return function(z,v,w,x){if(u.renderingMode=="flash"||u.renderingMode=="html5"){var y;if(v){k[z]=v;y="jwplayer('"+u.id+"').callback('"+z+"')"}else{if(!v&&k[z]){delete k[z]}}h.jwDockSetButton(z,y,w,x)}return t}}this.getPlugin=function(t){var v=this;var u={};if(t=="dock"){return b.utils.extend(u,{setButton:e(v,u),show:function(){v.callInternal("jwDockShow");return u},hide:function(){v.callInternal("jwDockHide");return u},onShow:function(w){v.componentListener("dock",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("dock",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{if(t=="controlbar"){return b.utils.extend(u,{show:function(){v.callInternal("jwControlbarShow");return u},hide:function(){v.callInternal("jwControlbarHide");return u},onShow:function(w){v.componentListener("controlbar",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("controlbar",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{if(t=="display"){return b.utils.extend(u,{show:function(){v.callInternal("jwDisplayShow");return u},hide:function(){v.callInternal("jwDisplayHide");return u},onShow:function(w){v.componentListener("display",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("display",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{return this.plugins[t]}}}};this.callback=function(t){if(k[t]){return k[t]()}};this.getDuration=function(){return this.callInternal("jwGetDuration")};this.getFullscreen=function(){return this.callInternal("jwGetFullscreen")};this.getHeight=function(){return this.callInternal("jwGetHeight")};this.getLockState=function(){return this.callInternal("jwGetLockState")};this.getMeta=function(){return this.getItemMeta()};this.getMute=function(){return this.callInternal("jwGetMute")};this.getPlaylist=function(){var u=this.callInternal("jwGetPlaylist");if(this.renderingMode=="flash"){b.utils.deepReplaceKeyName(u,"__dot__",".")}for(var t=0;t<u.length;t++){if(!b.utils.exists(u[t].index)){u[t].index=t}}return u};this.getPlaylistItem=function(t){if(!b.utils.exists(t)){t=this.getCurrentItem()}return this.getPlaylist()[t]};this.getPosition=function(){return this.callInternal("jwGetPosition")};this.getRenderingMode=function(){return this.renderingMode};this.getState=function(){return this.callInternal("jwGetState")};this.getVolume=function(){return this.callInternal("jwGetVolume")};this.getWidth=function(){return this.callInternal("jwGetWidth")};this.setFullscreen=function(t){if(!b.utils.exists(t)){this.callInternal("jwSetFullscreen",!this.callInternal("jwGetFullscreen"))}else{this.callInternal("jwSetFullscreen",t)}return this};this.setMute=function(t){if(!b.utils.exists(t)){this.callInternal("jwSetMute",!this.callInternal("jwGetMute"))}else{this.callInternal("jwSetMute",t)}return this};this.lock=function(){return this};this.unlock=function(){return this};this.load=function(t){this.callInternal("jwLoad",t);return this};this.playlistItem=function(t){this.callInternal("jwPlaylistItem",t);return this};this.playlistPrev=function(){this.callInternal("jwPlaylistPrev");return this};this.playlistNext=function(){this.callInternal("jwPlaylistNext");return this};this.resize=function(u,t){if(this.renderingMode=="html5"){h.jwResize(u,t)}else{this.container.width=u;this.container.height=t;var v=document.getElementById(this.id+"_wrapper");if(v){v.style.width=u+"px";v.style.height=t+"px"}}return this};this.play=function(t){if(typeof t=="undefined"){t=this.getState();if(t==b.api.events.state.PLAYING||t==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPlay",t)}return this};this.pause=function(t){if(typeof t=="undefined"){t=this.getState();if(t==b.api.events.state.PLAYING||t==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPause",t)}return this};this.stop=function(){this.callInternal("jwStop");return this};this.seek=function(t){this.callInternal("jwSeek",t);return this};this.setVolume=function(t){this.callInternal("jwSetVolume",t);return this};this.onBufferChange=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER,t)};this.onBufferFull=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,t)};this.onError=function(t){return this.eventListener(b.api.events.JWPLAYER_ERROR,t)};this.onFullscreen=function(t){return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN,t)};this.onMeta=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_META,t)};this.onMute=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE,t)};this.onPlaylist=function(t){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,t)};this.onPlaylistItem=function(t){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,t)};this.onReady=function(t){return this.eventListener(b.api.events.API_READY,t)};this.onResize=function(t){return this.eventListener(b.api.events.JWPLAYER_RESIZE,t)};this.onComplete=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,t)};this.onSeek=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_SEEK,t)};this.onTime=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME,t)};this.onVolume=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME,t)};this.onBuffer=function(t){return this.stateListener(b.api.events.state.BUFFERING,t)};this.onPause=function(t){return this.stateListener(b.api.events.state.PAUSED,t)};this.onPlay=function(t){return this.stateListener(b.api.events.state.PLAYING,t)};this.onIdle=function(t){return this.stateListener(b.api.events.state.IDLE,t)};this.remove=function(){n={};j=[];if(b.utils.getOuterHTML(this.container)!=p){b.api.destroyPlayer(this.id,p)}};this.setup=function(u){if(b.embed){var t=this.id;this.remove();var v=b(t);v.config=u;return new b.embed(v)}return this};this.registerPlugin=function(v,u,t){b.plugins.registerPlugin(v,u,t)};this.setPlayer=function(t,u){h=t;this.renderingMode=u};this.stateListener=function(t,u){if(!s[t]){s[t]=[];this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE,g(t))}s[t].push(u);return this};this.detachMedia=function(){if(this.renderingMode=="html5"){return this.callInternal("jwDetachMedia")}};this.attachMedia=function(){if(this.renderingMode=="html5"){return this.callInternal("jwAttachMedia")}};function g(t){return function(v){var u=v.newstate,x=v.oldstate;if(u==t){var w=s[u];if(w){for(var y=0;y<w.length;y++){if(typeof w[y]=="function"){w[y].call(this,{oldstate:x,newstate:u})}}}}}}this.componentListener=function(t,u,v){if(!q[t]){q[t]={}}if(!q[t][u]){q[t][u]=[];this.eventListener(u,m(t,u))}q[t][u].push(v);return this};function m(t,u){return function(w){if(t==w.component){var v=q[t][u];if(v){for(var x=0;x<v.length;x++){if(typeof v[x]=="function"){v[x].call(this,w)}}}}}}this.addInternalListener=function(t,u){t.jwAddEventListener(u,'function(dat) { jwplayer("'+this.id+'").dispatchEvent("'+u+'", dat); }')};this.eventListener=function(t,u){if(!n[t]){n[t]=[];if(h&&l){this.addInternalListener(h,t)}}n[t].push(u);return this};this.dispatchEvent=function(v){if(n[v]){var u=f(v,arguments[1]);for(var t=0;t<n[v].length;t++){if(typeof n[v][t]=="function"){n[v][t].call(this,u)}}}};function f(v,t){var x=b.utils.extend({},t);if(v==b.api.events.JWPLAYER_FULLSCREEN&&!x.fullscreen){x.fullscreen=x.message=="true"?true:false;delete x.message}else{if(typeof x.data=="object"){x=b.utils.extend(x,x.data);delete x.data}}var u=["position","duration","offset"];for(var w in u){if(x[u[w]]){x[u[w]]=Math.round(x[u[w]]*1000)/1000}}return x}this.callInternal=function(u,t){if(l){if(typeof h!="undefined"&&typeof h[u]=="function"){if(b.utils.exists(t)){return(h[u])(t)}else{return(h[u])()}}return null}else{j.push({method:u,parameters:t})}};this.playerReady=function(v){l=true;if(!h){this.setPlayer(document.getElementById(v.id))}this.container=document.getElementById(this.id);for(var t in n){this.addInternalListener(h,t)}this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,function(w){r={}});this.eventListener(b.api.events.JWPLAYER_MEDIA_META,function(w){b.utils.extend(r,w.metadata)});this.dispatchEvent(b.api.events.API_READY);while(j.length>0){var u=j.shift();this.callInternal(u.method,u.parameters)}};this.getItemMeta=function(){return r};this.getCurrentItem=function(){return this.callInternal("jwGetPlaylistIndex")};function o(v,x,w){var t=[];if(!x){x=0}if(!w){w=v.length-1}for(var u=x;u<=w;u++){t.push(v[u])}return t}return this};b.api.selectPlayer=function(d){var c;if(!b.utils.exists(d)){d=0}if(d.nodeType){c=d}else{if(typeof d=="string"){c=document.getElementById(d)}}if(c){var e=b.api.playerById(c.id);if(e){return e}else{return b.api.addPlayer(new b.api(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_COMPONENT_SHOW:"jwplayerComponentShow",JWPLAYER_COMPONENT_HIDE:"jwplayerComponentHide",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_SEEK:"jwplayerMediaSeek",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem"};b.api.events.state={BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING"};b.api.playerById=function(d){for(var c=0;c<a.length;c++){if(a[c].id==d){return a[c]}}return null};b.api.addPlayer=function(c){for(var d=0;d<a.length;d++){if(a[d]==c){return c}}a.push(c);return c};b.api.destroyPlayer=function(g,d){var f=-1;for(var j=0;j<a.length;j++){if(a[j].id==g){f=j;continue}}if(f>=0){var c=document.getElementById(a[f].id);if(document.getElementById(a[f].id+"_wrapper")){c=document.getElementById(a[f].id+"_wrapper")}if(c){if(d){b.utils.setOuterHTML(c,d)}else{var h=document.createElement("div");var e=c.id;if(c.id.indexOf("_wrapper")==c.id.length-8){newID=c.id.substring(0,c.id.length-8)}h.setAttribute("id",e);c.parentNode.replaceChild(h,c)}}a.splice(f,1)}return null};b.getPlayers=function(){return a.slice(0)}})(jwplayer);var _userPlayerReady=(typeof playerReady=="function")?playerReady:undefined;playerReady=function(b){var a=jwplayer.api.playerById(b.id);if(a){a.playerReady(b)}else{jwplayer.api.selectPlayer(b.id).playerReady(b)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){var c=a.utils;a.embed=function(h){var k={width:400,height:300,components:{controlbar:{position:"over"}}};var g=c.mediaparser.parseMedia(h.container);var f=new a.embed.config(c.extend(k,g,h.config),this);var j=a.plugins.loadPlugins(h.id,f.plugins);function d(n,m){for(var l in m){if(typeof n[l]=="function"){(n[l]).call(n,m[l])}}}function e(){if(j.getStatus()==c.loaderstatus.COMPLETE){for(var n=0;n<f.modes.length;n++){if(f.modes[n].type&&a.embed[f.modes[n].type]){var p=f.modes[n].config;var t=f;if(p){t=c.extend(c.clone(f),p);var s=["file","levels","playlist"];for(var m=0;m<s.length;m++){var q=s[m];if(c.exists(p[q])){for(var l=0;l<s.length;l++){if(l!=m){var o=s[l];if(c.exists(t[o])&&!c.exists(p[o])){delete t[o]}}}}}}var r=new a.embed[f.modes[n].type](document.getElementById(h.id),f.modes[n],t,j,h);if(r.supportsConfig()){r.embed();d(h,f.events);return h}}}c.log("No suitable players found");new a.embed.logo(c.extend({hide:true},f.components.logo),"none",h.id)}}j.addEventListener(a.events.COMPLETE,e);j.addEventListener(a.events.ERROR,e);j.load();return h};function b(){if(!document.body){return setTimeout(b,15)}var d=c.selectors.getElementsByTagAndClass("video","jwplayer");for(var e=0;e<d.length;e++){var f=d[e];if(f.id==""){f.id="jwplayer_"+Math.round(Math.random()*100000)}a(f.id).setup({})}}b()})(jwplayer);(function(e){function h(){return[{type:"flash",src:"/jwplayer/player.swf"},{type:"html5"},{type:"download"}]}var a={players:"modes",autoplay:"autostart"};function b(n){var m=n.toLowerCase();var l=["left","right","top","bottom"];for(var k=0;k<l.length;k++){if(m==l[k]){return true}}return false}function c(l){var k=false;k=(l instanceof Array)||(typeof l=="object"&&!l.position&&!l.size);return k}function j(k){if(typeof k=="string"){if(parseInt(k).toString()==k||k.toLowerCase().indexOf("px")>-1){return parseInt(k)}}return k}var g=["playlist","dock","controlbar","logo","display"];function f(k){var n={};switch(e.utils.typeOf(k.plugins)){case"object":for(var m in k.plugins){n[e.utils.getPluginName(m)]=m}break;case"string":var o=k.plugins.split(",");for(var l=0;l<o.length;l++){n[e.utils.getPluginName(o[l])]=o[l]}break}return n}function d(o,n,m,k){if(e.utils.typeOf(o[n])!="object"){o[n]={}}var l=o[n][m];if(e.utils.typeOf(l)!="object"){o[n][m]=l={}}if(k){if(n=="plugins"){var p=e.utils.getPluginName(m);l[k]=o[p+"."+k];delete o[p+"."+k]}else{l[k]=o[m+"."+k];delete o[m+"."+k]}}}e.embed.deserialize=function(l){var m=f(l);for(var k in m){d(l,"plugins",m[k])}for(var p in l){if(p.indexOf(".")>-1){var o=p.split(".");var n=o[0];var p=o[1];if(e.utils.isInArray(g,n)){d(l,"components",n,p)}else{if(m[n]){d(l,"plugins",m[n],p)}}}}return l};e.embed.config=function(k,u){var t=e.utils.extend({},k);var r;if(c(t.playlist)){r=t.playlist;delete t.playlist}t=e.embed.deserialize(t);t.height=j(t.height);t.width=j(t.width);if(typeof t.plugins=="string"){var l=t.plugins.split(",");if(typeof t.plugins!="object"){t.plugins={}}for(var p=0;p<l.length;p++){var q=e.utils.getPluginName(l[p]);if(typeof t[q]=="object"){t.plugins[l[p]]=t[q];delete t[q]}else{t.plugins[l[p]]={}}}}for(var s=0;s<g.length;s++){var o=g[s];if(e.utils.exists(t[o])){if(typeof t[o]!="object"){if(!t.components[o]){t.components[o]={}}if(o=="logo"){t.components[o].file=t[o]}else{t.components[o].position=t[o]}delete t[o]}else{if(!t.components[o]){t.components[o]={}}e.utils.extend(t.components[o],t[o]);delete t[o]}}if(typeof t[o+"size"]!="undefined"){if(!t.components[o]){t.components[o]={}}t.components[o].size=t[o+"size"];delete t[o+"size"]}}if(typeof t.icons!="undefined"){if(!t.components.display){t.components.display={}}t.components.display.icons=t.icons;delete t.icons}for(var n in a){if(t[n]){if(!t[a[n]]){t[a[n]]=t[n]}delete t[n]}}var m;if(t.flashplayer&&!t.modes){m=h();m[0].src=t.flashplayer;delete t.flashplayer}else{if(t.modes){if(typeof t.modes=="string"){m=h();m[0].src=t.modes}else{if(t.modes instanceof Array){m=t.modes}else{if(typeof t.modes=="object"&&t.modes.type){m=[t.modes]}}}delete t.modes}else{m=h()}}t.modes=m;if(r){t.playlist=r}return t}})(jwplayer);(function(a){a.embed.download=function(c,g,b,d,f){this.embed=function(){var k=a.utils.extend({},b);var q={};var j=b.width?b.width:480;if(typeof j!="number"){j=parseInt(j,10)}var m=b.height?b.height:320;if(typeof m!="number"){m=parseInt(m,10)}var u,o,n;var s={};if(b.playlist&&b.playlist.length){s.file=b.playlist[0].file;o=b.playlist[0].image;s.levels=b.playlist[0].levels}else{s.file=b.file;o=b.image;s.levels=b.levels}if(s.file){u=s.file}else{if(s.levels&&s.levels.length){u=s.levels[0].file}}n=u?"pointer":"auto";var l={display:{style:{cursor:n,width:j,height:m,backgroundColor:"#000",position:"relative",textDecoration:"none",border:"none",display:"block"}},display_icon:{style:{cursor:n,position:"absolute",display:u?"block":"none",top:0,left:0,border:0,margin:0,padding:0,zIndex:3,width:50,height:50,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg==)"}},display_iconBackground:{style:{cursor:n,position:"absolute",display:u?"block":"none",top:((m-50)/2),left:((j-50)/2),border:0,width:50,height:50,margin:0,padding:0,zIndex:2,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC)"}},display_image:{style:{width:j,height:m,display:o?"block":"none",position:"absolute",cursor:n,left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1,border:"none"}}};var h=function(v,x,y){var w=document.createElement(v);if(y){w.id=y}else{w.id=c.id+"_jwplayer_"+x}a.utils.css(w,l[x].style);return w};q.display=h("a","display",c.id);if(u){q.display.setAttribute("href",a.utils.getAbsolutePath(u))}q.display_image=h("img","display_image");q.display_image.setAttribute("alt","Click to download...");if(o){q.display_image.setAttribute("src",a.utils.getAbsolutePath(o))}if(true){q.display_icon=h("div","display_icon");q.display_iconBackground=h("div","display_iconBackground");q.display.appendChild(q.display_image);q.display_iconBackground.appendChild(q.display_icon);q.display.appendChild(q.display_iconBackground)}_css=a.utils.css;_hide=function(v){_css(v,{display:"none"})};function r(v){_imageWidth=q.display_image.naturalWidth;_imageHeight=q.display_image.naturalHeight;t()}function t(){a.utils.stretch(a.utils.stretching.UNIFORM,q.display_image,j,m,_imageWidth,_imageHeight)}q.display_image.onerror=function(v){_hide(q.display_image)};q.display_image.onload=r;c.parentNode.replaceChild(q.display,c);var p=(b.plugins&&b.plugins.logo)?b.plugins.logo:{};q.display.appendChild(new a.embed.logo(b.components.logo,"download",c.id));f.container=document.getElementById(f.id);f.setPlayer(q.display,"download")};this.supportsConfig=function(){if(b){var j=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof j.file=="undefined"&&typeof j.levels=="undefined"){return true}else{if(j.file){return e(j.file,j.provider,j.playlistfile)}else{if(j.levels&&j.levels.length){for(var h=0;h<j.levels.length;h++){if(j.levels[h].file&&e(j.levels[h].file,j.provider,j.playlistfile)){return true}}}}}}else{return true}};function e(j,l,h){if(h){return false}var k=["image","sound","youtube","http"];if(l&&(k.toString().indexOf(l)>-1)){return true}if(!l||(l&&l=="video")){var m=a.utils.extension(j);if(m&&a.utils.extensionmap[m]){return true}}return false}}})(jwplayer);(function(a){a.embed.flash=function(f,g,l,e,j){function m(o,n,p){var q=document.createElement("param");q.setAttribute("name",n);q.setAttribute("value",p);o.appendChild(q)}function k(o,p,n){return function(q){if(n){document.getElementById(j.id+"_wrapper").appendChild(p)}var s=document.getElementById(j.id).getPluginConfig("display");o.resize(s.width,s.height);var r={left:s.x,top:s.y};a.utils.css(p,r)}}function d(p){if(!p){return{}}var r={};for(var o in p){var n=p[o];for(var q in n){r[o+"."+q]=n[q]}}return r}function h(q,p){if(q[p]){var s=q[p];for(var o in s){var n=s[o];if(typeof n=="string"){if(!q[o]){q[o]=n}}else{for(var r in n){if(!q[o+"."+r]){q[o+"."+r]=n[r]}}}}delete q[p]}}function b(q){if(!q){return{}}var t={},s=[];for(var n in q){var p=a.utils.getPluginName(n);var o=q[n];s.push(n);for(var r in o){t[p+"."+r]=o[r]}}t.plugins=s.join(",");return t}function c(p){var n=p.netstreambasepath?"":"netstreambasepath="+encodeURIComponent(window.location.href.split("#")[0])+"&";for(var o in p){if(typeof(p[o])=="object"){n+=o+"="+encodeURIComponent("[[JSON]]"+a.utils.strings.jsonToString(p[o]))+"&"}else{n+=o+"="+encodeURIComponent(p[o])+"&"}}return n.substring(0,n.length-1)}this.embed=function(){l.id=j.id;var y;var q=a.utils.extend({},l);var n=q.width;var w=q.height;if(f.id+"_wrapper"==f.parentNode.id){y=document.getElementById(f.id+"_wrapper")}else{y=document.createElement("div");y.id=f.id+"_wrapper";a.utils.wrap(f,y);a.utils.css(y,{position:"relative",width:n,height:w})}var o=e.setupPlugins(j,q,k);if(o.length>0){a.utils.extend(q,b(o.plugins))}else{delete q.plugins}var r=["height","width","modes","events"];for(var u=0;u<r.length;u++){delete q[r[u]]}var p="opaque";if(q.wmode){p=q.wmode}h(q,"components");h(q,"providers");if(typeof q["dock.position"]!="undefined"){if(q["dock.position"].toString().toLowerCase()=="false"){q.dock=q["dock.position"];delete q["dock.position"]}}var x="#000000";var t;if(a.utils.isIE()){var v='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" bgcolor="'+x+'" width="100%" height="100%" id="'+f.id+'" name="'+f.id+'" tabindex=0"">';v+='<param name="movie" value="'+g.src+'">';v+='<param name="allowfullscreen" value="true">';v+='<param name="allowscriptaccess" value="always">';v+='<param name="seamlesstabbing" value="true">';v+='<param name="wmode" value="'+p+'">';v+='<param name="flashvars" value="'+c(q)+'">';v+="</object>";a.utils.setOuterHTML(f,v);t=document.getElementById(f.id)}else{var s=document.createElement("object");s.setAttribute("type","application/x-shockwave-flash");s.setAttribute("data",g.src);s.setAttribute("width","100%");s.setAttribute("height","100%");s.setAttribute("bgcolor","#000000");s.setAttribute("id",f.id);s.setAttribute("name",f.id);s.setAttribute("tabindex",0);m(s,"allowfullscreen","true");m(s,"allowscriptaccess","always");m(s,"seamlesstabbing","true");m(s,"wmode",p);m(s,"flashvars",c(q));f.parentNode.replaceChild(s,f);t=s}j.container=t;j.setPlayer(t,"flash")};this.supportsConfig=function(){if(a.utils.hasFlash()){if(l){var o=a.utils.getFirstPlaylistItemFromConfig(l);if(typeof o.file=="undefined"&&typeof o.levels=="undefined"){return true}else{if(o.file){return flashCanPlay(o.file,o.provider)}else{if(o.levels&&o.levels.length){for(var n=0;n<o.levels.length;n++){if(o.levels[n].file&&flashCanPlay(o.levels[n].file,o.provider)){return true}}}}}}else{return true}}return false};flashCanPlay=function(n,p){var o=["video","http","sound","image"];if(p&&(o.toString().indexOf(p<0))){return true}var q=a.utils.extension(n);if(!q){return true}if(a.utils.exists(a.utils.extensionmap[q])&&!a.utils.exists(a.utils.extensionmap[q].flash)){return false}return true}}})(jwplayer);(function(a){a.embed.html5=function(c,g,b,d,f){function e(j,k,h){return function(l){var m=document.getElementById(c.id+"_displayarea");if(h){m.appendChild(k)}j.resize(m.clientWidth,m.clientHeight);k.left=m.style.left;k.top=m.style.top}}this.embed=function(){if(a.html5){d.setupPlugins(f,b,e);c.innerHTML="";var j=a.utils.extend({screencolor:"0x000000"},b);var h=["plugins","modes","events"];for(var k=0;k<h.length;k++){delete j[h[k]]}if(j.levels&&!j.sources){j.sources=b.levels}if(j.skin&&j.skin.toLowerCase().indexOf(".zip")>0){j.skin=j.skin.replace(/\.zip/i,".xml")}var l=new (a.html5(c)).setup(j);f.container=document.getElementById(f.id);f.setPlayer(l,"html5")}else{return null}};this.supportsConfig=function(){if(!!a.vid.canPlayType){if(b){var j=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof j.file=="undefined"&&typeof j.levels=="undefined"){return true}else{if(j.file){return html5CanPlay(a.vid,j.file,j.provider,j.playlistfile)}else{if(j.levels&&j.levels.length){for(var h=0;h<j.levels.length;h++){if(j.levels[h].file&&html5CanPlay(a.vid,j.levels[h].file,j.provider,j.playlistfile)){return true}}}}}}else{return true}}return false};html5CanPlay=function(k,j,l,h){if(h){return false}if(l&&l=="youtube"){return true}if(l&&l!="video"&&l!="http"&&l!="sound"){return false}var m=a.utils.extension(j);if(!a.utils.exists(m)||!a.utils.exists(a.utils.extensionmap[m])){return true}if(!a.utils.exists(a.utils.extensionmap[m].html5)){return false}if(a.utils.isLegacyAndroid()&&m.match(/m4v|mp4/)){return true}return browserCanPlay(k,a.utils.extensionmap[m].html5)};browserCanPlay=function(j,h){if(!h){return true}if(j.canPlayType(h)){return true}else{if(h=="audio/mp3"&&navigator.userAgent.match(/safari/i)){return j.canPlayType("audio/mpeg")}else{return false}}}}})(jwplayer);(function(a){a.embed.logo=function(m,l,d){var j={prefix:"http://l.longtailvideo.com/"+l+"/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:5,hide:false,position:"bottom-left"};_css=a.utils.css;var b;var h;k();function k(){o();c();f()}function o(){if(j.prefix){var q=a.version.split(/\W/).splice(0,2).join("/");if(j.prefix.indexOf(q)<0){j.prefix+=q+"/"}}h=a.utils.extend({},j)}function p(){var s={border:"none",textDecoration:"none",position:"absolute",cursor:"pointer",zIndex:10};s.display=h.hide?"none":"block";var r=h.position.toLowerCase().split("-");for(var q in r){s[r[q]]=h.margin}return s}function c(){b=document.createElement("img");b.id=d+"_jwplayer_logo";b.style.display="none";b.onload=function(q){_css(b,p());e()};if(!h.file){return}if(h.file.indexOf("http://")===0){b.src=h.file}else{b.src=h.prefix+h.file}}if(!h.file){return}function f(){if(h.link){b.onmouseover=g;b.onmouseout=e;b.onclick=n}else{this.mouseEnabled=false}}function n(q){if(typeof q!="undefined"){q.preventDefault();q.stopPropagation()}if(h.link){window.open(h.link,"_blank")}return}function e(q){if(h.link){b.style.opacity=h.out}return}function g(q){if(h.hide){b.style.opacity=h.over}return}return b}})(jwplayer);(function(a){a.html5=function(b){var c=b;this.setup=function(d){a.utils.extend(this,new a.html5.api(c,d));return this};return this}})(jwplayer);(function(a){var c=a.utils;var b=c.css;a.html5.view=function(s,r,e){var w=s;var m=r;var y=e;var x;var f;var G;var t;var H;var p;var E;var q=false;var B,o;function A(){x=document.createElement("div");x.id=m.id;x.className=m.className;_videowrapper=document.createElement("div");_videowrapper.id=x.id+"_video_wrapper";m.id=x.id+"_video";b(x,{position:"relative",height:y.height,width:y.width,padding:0,backgroundColor:I(),zIndex:0});function I(){if(w.skin.getComponentSettings("display")&&w.skin.getComponentSettings("display").backgroundcolor){return w.skin.getComponentSettings("display").backgroundcolor}return parseInt("000000",16)}b(m,{width:"100%",height:"100%",top:0,left:0,zIndex:1,margin:"auto",display:"block"});b(_videowrapper,{overflow:"hidden",position:"absolute",top:0,left:0,bottom:0,right:0});c.wrap(m,x);c.wrap(m,_videowrapper);t=document.createElement("div");t.id=x.id+"_displayarea";x.appendChild(t)}function j(){for(var I=0;I<y.plugins.order.length;I++){var J=y.plugins.order[I];if(c.exists(y.plugins.object[J].getDisplayElement)){y.plugins.object[J].height=c.parseDimension(y.plugins.object[J].getDisplayElement().style.height);y.plugins.object[J].width=c.parseDimension(y.plugins.object[J].getDisplayElement().style.width);y.plugins.config[J].currentPosition=y.plugins.config[J].position}}v()}function l(I){b(t,{display:(y.getMedia()&&y.getMedia().hasChrome()&&I.newstate!=a.api.events.state.IDLE)?"none":"block"})}function v(J){var L=y.getMedia()?y.getMedia().getDisplayElement():null;if(c.exists(L)){if(E!=L){if(E&&E.parentNode){E.parentNode.replaceChild(L,E)}E=L}for(var I=0;I<y.plugins.order.length;I++){var K=y.plugins.order[I];if(c.exists(y.plugins.object[K].getDisplayElement)){y.plugins.config[K].currentPosition=y.plugins.config[K].position}}}h(y.width,y.height)}this.setup=function(){if(y&&y.getMedia()){m=y.getMedia().getDisplayElement()}A();j();w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,l);w.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_LOADED,v);w.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_META,function(){z()});var I;if(c.exists(window.onresize)){I=window.onresize}window.onresize=function(J){if(c.exists(I)){try{I(J)}catch(L){}}if(w.jwGetFullscreen()){if(!C()){var K=c.getBoundingClientRect(document.body);y.width=Math.abs(K.left)+Math.abs(K.right);y.height=window.innerHeight;h(y.width,y.height)}}else{h(y.width,y.height)}}};function g(I){switch(I.keyCode){case 27:if(w.jwGetFullscreen()){w.jwSetFullscreen(false)}break;case 32:if(w.jwGetState()!=a.api.events.state.IDLE&&w.jwGetState()!=a.api.events.state.PAUSED){w.jwPause()}else{w.jwPlay()}break}}function h(L,I){if(x.style.display=="none"){return}var K=[].concat(y.plugins.order);K.reverse();H=K.length+2;if(C()){try{if(y.fullscreen&&!y.getMedia().getDisplayElement().webkitDisplayingFullscreen){y.fullscreen=false}}catch(N){}}if(!y.fullscreen){f=L;G=I;if(typeof L=="string"&&L.indexOf("%")>0){f=c.getElementWidth(c.parentNode(x))*parseInt(L.replace("%"),"")/100}else{f=L}if(typeof I=="string"&&I.indexOf("%")>0){G=c.getElementHeight(c.parentNode(x))*parseInt(I.replace("%"),"")/100}else{G=I}b(t,{top:0,bottom:0,left:0,right:0,width:f,height:G,position:"absolute"});b(x,{height:G,width:f});var J=n(u,K);if(J.length>0){H+=J.length;var O=J.indexOf("playlist"),M=J.indexOf("controlbar");if(O>=0&&M>=0){J[O]=J.splice(M,1,J[O])[0]}n(k,J,true)}B=c.getElementWidth(t);o=c.getElementHeight(t)}else{if(!C()){n(F,K,true)}}z()}function n(P,L,M){var N=[];for(var K=0;K<L.length;K++){var O=L[K];if(c.exists(y.plugins.object[O].getDisplayElement)){if(y.plugins.config[O].currentPosition!=a.html5.view.positions.NONE){var I=P(O,H--);if(!I){N.push(O)}else{var J=I.width;var Q=I.height;if(M){delete I.width;delete I.height}b(y.plugins.object[O].getDisplayElement(),I);y.plugins.object[O].resize(J,Q)}}else{b(y.plugins.object[O].getDisplayElement(),{display:"none"})}}}return N}function u(J,K){if(c.exists(y.plugins.object[J].getDisplayElement)){if(y.plugins.config[J].position&&D(y.plugins.config[J].position)){if(!c.exists(y.plugins.object[J].getDisplayElement().parentNode)){x.appendChild(y.plugins.object[J].getDisplayElement())}var I=d(J);I.zIndex=K;return I}}return false}function k(I,J){if(!c.exists(y.plugins.object[I].getDisplayElement().parentNode)){t.appendChild(y.plugins.object[I].getDisplayElement())}return{position:"absolute",width:(c.getElementWidth(t)-c.parseDimension(t.style.left)-c.parseDimension(t.style.right)),height:(c.getElementHeight(t)-c.parseDimension(t.style.top)-c.parseDimension(t.style.bottom)),zIndex:J}}function F(I,J){return{position:"fixed",width:y.width,height:y.height,zIndex:J}}function z(){if(!c.exists(y.getMedia())){return}t.style.position="absolute";var K=y.getMedia().getDisplayElement();if(K&&K.tagName.toLowerCase()=="video"){K.style.position="absolute";if(K.parentNode){K.parentNode.style.left=t.style.left;K.parentNode.style.top=t.style.top}if(y.fullscreen&&w.jwGetStretching()==a.utils.stretching.EXACTFIT&&!c.isMobile()){var I=document.createElement("div");c.stretch(a.utils.stretching.UNIFORM,I,c.getElementWidth(t),c.getElementHeight(t),B,o);c.stretch(a.utils.stretching.EXACTFIT,K,c.parseDimension(I.style.width),c.parseDimension(I.style.height),K.videoWidth?K.videoWidth:400,K.videoHeight?K.videoHeight:300);b(K,{left:I.style.left,top:I.style.top})}else{c.stretch(w.jwGetStretching(),K,c.getElementWidth(t),c.getElementHeight(t),K.videoWidth?K.videoWidth:400,K.videoHeight?K.videoHeight:300)}}else{var J=y.plugins.object.display.getDisplayElement();if(J){y.getMedia().resize(c.parseDimension(J.style.width),c.parseDimension(J.style.height))}else{y.getMedia().resize(c.parseDimension(t.style.width),c.parseDimension(t.style.height))}}}function d(J){var K={position:"absolute",margin:0,padding:0,top:null};var I=y.plugins.config[J].currentPosition.toLowerCase();switch(I.toUpperCase()){case a.html5.view.positions.TOP:K.top=c.parseDimension(t.style.top);K.left=c.parseDimension(t.style.left);K.width=c.getElementWidth(t)-c.parseDimension(t.style.left)-c.parseDimension(t.style.right);K.height=y.plugins.object[J].height;t.style[I]=c.parseDimension(t.style[I])+y.plugins.object[J].height+"px";t.style.height=c.getElementHeight(t)-K.height+"px";break;case a.html5.view.positions.RIGHT:K.top=c.parseDimension(t.style.top);K.right=c.parseDimension(t.style.right);K.width=y.plugins.object[J].width;K.height=c.getElementHeight(t)-c.parseDimension(t.style.top)-c.parseDimension(t.style.bottom);t.style.width=c.getElementWidth(t)-K.width+"px";break;case a.html5.view.positions.BOTTOM:K.bottom=c.parseDimension(t.style.bottom);K.left=c.parseDimension(t.style.left);K.width=c.getElementWidth(t)-c.parseDimension(t.style.left)-c.parseDimension(t.style.right);K.height=y.plugins.object[J].height;t.style.height=c.getElementHeight(t)-K.height+"px";break;case a.html5.view.positions.LEFT:K.top=c.parseDimension(t.style.top);K.left=c.parseDimension(t.style.left);K.width=y.plugins.object[J].width;K.height=c.getElementHeight(t)-c.parseDimension(t.style.top)-c.parseDimension(t.style.bottom);t.style[I]=c.parseDimension(t.style[I])+y.plugins.object[J].width+"px";t.style.width=c.getElementWidth(t)-K.width+"px";break;default:break}return K}this.resize=h;this.fullscreen=function(L){var N;try{N=y.getMedia().getDisplayElement()}catch(M){}if(C()&&N&&N.webkitSupportsFullscreen){if(L&&!N.webkitDisplayingFullscreen){try{c.transform(N);N.webkitEnterFullscreen()}catch(K){}}else{if(!L){z();if(N.webkitDisplayingFullscreen){try{N.webkitExitFullscreen()}catch(K){}}}}q=false}else{if(L){document.onkeydown=g;clearInterval(p);var J=c.getBoundingClientRect(document.body);y.width=Math.abs(J.left)+Math.abs(J.right);y.height=window.innerHeight;var I={position:"fixed",width:"100%",height:"100%",top:0,left:0,zIndex:2147483000};b(x,I);I.zIndex=1;if(y.getMedia()&&y.getMedia().getDisplayElement()){b(y.getMedia().getDisplayElement(),I)}I.zIndex=2;b(t,I);q=true}else{document.onkeydown="";y.width=f;y.height=G;b(x,{position:"relative",height:y.height,width:y.width,zIndex:0});q=false}h(y.width,y.height)}};function D(I){return([a.html5.view.positions.TOP,a.html5.view.positions.RIGHT,a.html5.view.positions.BOTTOM,a.html5.view.positions.LEFT].toString().indexOf(I.toUpperCase())>-1)}function C(){if(w.jwGetState()!=a.api.events.state.IDLE&&!q&&(y.getMedia()&&y.getMedia().getDisplayElement()&&y.getMedia().getDisplayElement().webkitSupportsFullscreen)&&c.useNativeFullscreen()){return true}return false}};a.html5.view.positions={TOP:"TOP",RIGHT:"RIGHT",BOTTOM:"BOTTOM",LEFT:"LEFT",OVER:"OVER",NONE:"NONE"}})(jwplayer);(function(a){var b={backgroundcolor:"",margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",buttoncolor:parseInt("ffffff",16),position:a.html5.view.positions.BOTTOM,idlehide:false,hideplaylistcontrols:false,layout:{left:{position:"left",elements:[{name:"play",type:"button"},{name:"divider",type:"divider"},{name:"prev",type:"button"},{name:"divider",type:"divider"},{name:"next",type:"button"},{name:"divider",type:"divider"},{name:"elapsed",type:"text"}]},center:{position:"center",elements:[{name:"time",type:"slider"}]},right:{position:"right",elements:[{name:"duration",type:"text"},{name:"blank",type:"button"},{name:"divider",type:"divider"},{name:"mute",type:"button"},{name:"volume",type:"slider"},{name:"divider",type:"divider"},{name:"fullscreen",type:"button"}]}}};_utils=a.utils;_css=_utils.css;_hide=function(c){_css(c,{display:"none"})};_show=function(c){_css(c,{display:"block"})};a.html5.controlbar=function(m,X){window.controlbar=this;var l=m;var D=_utils.extend({},b,l.skin.getComponentSettings("controlbar"),X);if(D.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[D.position]=="undefined"){return}if(_utils.mapLength(l.skin.getComponentLayout("controlbar"))>0){D.layout=l.skin.getComponentLayout("controlbar")}var af;var Q;var ae;var E;var w="none";var h;var k;var ag;var g;var f;var z;var R={};var q=false;var c={};var ab;var j=false;var p;var d;var U=false;var G=false;var H;var Z=new a.html5.eventdispatcher();_utils.extend(this,Z);function K(){if(!ab){ab=l.skin.getSkinElement("controlbar","background");if(!ab){ab={width:0,height:0,src:null}}}return ab}function O(){ae=0;E=0;Q=0;if(!q){var ao={height:K().height,backgroundColor:D.backgroundcolor};af=document.createElement("div");af.id=l.id+"_jwplayer_controlbar";_css(af,ao)}var an=(l.skin.getSkinElement("controlbar","capLeft"));var am=(l.skin.getSkinElement("controlbar","capRight"));if(an){y("capLeft","left",false,af)}ac("background",af,{position:"absolute",height:K().height,left:(an?an.width:0),zIndex:0},"img");if(K().src){R.background.src=K().src}ac("elements",af,{position:"relative",height:K().height,zIndex:1});if(am){y("capRight","right",false,af)}}this.getDisplayElement=function(){return af};this.resize=function(ao,am){S();_utils.cancelAnimation(af);f=ao;z=am;if(G!=l.jwGetFullscreen()){G=l.jwGetFullscreen();d=undefined}var an=x();J({id:l.id,duration:ag,position:k});v({id:l.id,bufferPercent:g});return an};this.show=function(){if(j){j=false;_show(af);V()}};this.hide=function(){if(!j){j=true;_hide(af);ad()}};function r(){var an=["timeSlider","volumeSlider","timeSliderRail","volumeSliderRail"];for(var ao in an){var am=an[ao];if(typeof R[am]!="undefined"){c[am]=_utils.getBoundingClientRect(R[am])}}}var e;function Y(am){if(j){return}clearTimeout(p);if(D.position==a.html5.view.positions.OVER||l.jwGetFullscreen()){switch(l.jwGetState()){case a.api.events.state.PAUSED:case a.api.events.state.IDLE:if(af&&af.style.opacity<1&&(!D.idlehide||_utils.exists(am))){e=false;setTimeout(function(){if(!e){W()}},100)}if(D.idlehide){p=setTimeout(function(){A()},2000)}break;default:e=true;if(am){W()}p=setTimeout(function(){A()},2000);break}}else{W()}}function A(){if(!j){ad();if(af.style.opacity==1){_utils.cancelAnimation(af);_utils.fadeTo(af,0,0.1,1,0)}}}function W(){if(!j){V();if(af.style.opacity==0){_utils.cancelAnimation(af);_utils.fadeTo(af,1,0.1,0,0)}}}function I(am){return function(){if(U&&d!=am){d=am;Z.sendEvent(am,{component:"controlbar",boundingRect:P()})}}}var V=I(a.api.events.JWPLAYER_COMPONENT_SHOW);var ad=I(a.api.events.JWPLAYER_COMPONENT_HIDE);function P(){if(D.position==a.html5.view.positions.OVER||l.jwGetFullscreen()){return _utils.getDimensions(af)}else{return{x:0,y:0,width:0,height:0}}}function ac(aq,ap,ao,am){var an;if(!q){if(!am){am="div"}an=document.createElement(am);R[aq]=an;an.id=af.id+"_"+aq;ap.appendChild(an)}else{an=document.getElementById(af.id+"_"+aq)}if(_utils.exists(ao)){_css(an,ao)}return an}function N(){if(l.jwGetHeight()<=40){D.layout=_utils.clone(D.layout);for(var am=0;am<D.layout.left.elements.length;am++){if(D.layout.left.elements[am].name=="fullscreen"){D.layout.left.elements.splice(am,1)}}for(am=0;am<D.layout.right.elements.length;am++){if(D.layout.right.elements[am].name=="fullscreen"){D.layout.right.elements.splice(am,1)}}o()}al(D.layout.left);al(D.layout.center);al(D.layout.right)}function al(ap,am){var aq=ap.position=="right"?"right":"left";var ao=_utils.extend([],ap.elements);if(_utils.exists(am)){ao.reverse()}var ap=ac(ap.position+"Group",R.elements,{"float":"left",styleFloat:"left",cssFloat:"left",height:"100%"});for(var an=0;an<ao.length;an++){C(ao[an],aq,ap)}}function L(){return Q++}function C(aq,at,av){var ap,an,ao,am,aw;if(!av){av=R.elements}if(aq.type=="divider"){y("divider"+L(),at,true,av,undefined,aq.width,aq.element);return}switch(aq.name){case"play":y("playButton",at,false,av);y("pauseButton",at,true,av);T("playButton","jwPlay");T("pauseButton","jwPause");break;case"prev":y("prevButton",at,true,av);T("prevButton","jwPlaylistPrev");break;case"stop":y("stopButton",at,true,av);T("stopButton","jwStop");break;case"next":y("nextButton",at,true,av);T("nextButton","jwPlaylistNext");break;case"elapsed":y("elapsedText",at,true,av);break;case"time":an=!_utils.exists(l.skin.getSkinElement("controlbar","timeSliderCapLeft"))?0:l.skin.getSkinElement("controlbar","timeSliderCapLeft").width;ao=!_utils.exists(l.skin.getSkinElement("controlbar","timeSliderCapRight"))?0:l.skin.getSkinElement("controlbar","timeSliderCapRight").width;ap=at=="left"?an:ao;aw={height:K().height,position:"relative","float":"left",styleFloat:"left",cssFloat:"left"};var ar=ac("timeSlider",av,aw);y("timeSliderCapLeft",at,true,ar,"relative");y("timeSliderRail",at,false,ar,"relative");y("timeSliderBuffer",at,false,ar,"absolute");y("timeSliderProgress",at,false,ar,"absolute");y("timeSliderThumb",at,false,ar,"absolute");y("timeSliderCapRight",at,true,ar,"relative");aa("time");break;case"fullscreen":y("fullscreenButton",at,false,av);y("normalscreenButton",at,true,av);T("fullscreenButton","jwSetFullscreen",true);T("normalscreenButton","jwSetFullscreen",false);break;case"volume":an=!_utils.exists(l.skin.getSkinElement("controlbar","volumeSliderCapLeft"))?0:l.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;ao=!_utils.exists(l.skin.getSkinElement("controlbar","volumeSliderCapRight"))?0:l.skin.getSkinElement("controlbar","volumeSliderCapRight").width;ap=at=="left"?an:ao;am=l.skin.getSkinElement("controlbar","volumeSliderRail").width+an+ao;aw={height:K().height,position:"relative",width:am,"float":"left",styleFloat:"left",cssFloat:"left"};var au=ac("volumeSlider",av,aw);y("volumeSliderCapLeft",at,false,au,"relative");y("volumeSliderRail",at,false,au,"relative");y("volumeSliderProgress",at,false,au,"absolute");y("volumeSliderThumb",at,false,au,"absolute");y("volumeSliderCapRight",at,false,au,"relative");aa("volume");break;case"mute":y("muteButton",at,false,av);y("unmuteButton",at,true,av);T("muteButton","jwSetMute",true);T("unmuteButton","jwSetMute",false);break;case"duration":y("durationText",at,true,av);break}}function y(ap,at,an,aw,aq,am,ao){if(_utils.exists(l.skin.getSkinElement("controlbar",ap))||ap.indexOf("Text")>0||ap.indexOf("divider")===0){var ar={height:"100%",position:aq?aq:"relative",display:"block","float":"left",styleFloat:"left",cssFloat:"left"};if((ap.indexOf("next")===0||ap.indexOf("prev")===0)&&(l.jwGetPlaylist().length<2||D.hideplaylistcontrols)){an=false;ar.display="none"}var ax;if(ap.indexOf("Text")>0){ap.innerhtml="00:00";ar.font=D.fontsize+"px/"+(K().height+1)+"px "+D.font;ar.color=D.fontcolor;ar.textAlign="center";ar.fontWeight=D.fontweight;ar.fontStyle=D.fontstyle;ar.cursor="default";ax=14+3*D.fontsize}else{if(ap.indexOf("divider")===0){if(am){if(!isNaN(parseInt(am))){ax=parseInt(am)}}else{if(ao){var au=l.skin.getSkinElement("controlbar",ao);if(au){ar.background="url("+au.src+") repeat-x center left";ax=au.width}}else{ar.background="url("+l.skin.getSkinElement("controlbar","divider").src+") repeat-x center left";ax=l.skin.getSkinElement("controlbar","divider").width}}}else{ar.background="url("+l.skin.getSkinElement("controlbar",ap).src+") repeat-x center left";ax=l.skin.getSkinElement("controlbar",ap).width}}if(at=="left"){if(an){ae+=ax}}else{if(at=="right"){if(an){E+=ax}}}if(_utils.typeOf(aw)=="undefined"){aw=R.elements}ar.width=ax;if(q){_css(R[ap],ar)}else{var av=ac(ap,aw,ar);if(_utils.exists(l.skin.getSkinElement("controlbar",ap+"Over"))){av.onmouseover=function(ay){av.style.backgroundImage=["url(",l.skin.getSkinElement("controlbar",ap+"Over").src,")"].join("")};av.onmouseout=function(ay){av.style.backgroundImage=["url(",l.skin.getSkinElement("controlbar",ap).src,")"].join("")}}if(ap.indexOf("divider")==0){av.setAttribute("class","divider")}}}}function F(){l.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,B);l.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,t);l.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER,v);l.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,s);l.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME,J);l.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,ak);l.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME,n);l.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE,M)}function B(){if(!D.hideplaylistcontrols){if(l.jwGetPlaylist().length>1){_show(R.nextButton);_show(R.prevButton)}else{_hide(R.nextButton);_hide(R.prevButton)}x();ah()}}function t(am){ag=l.jwGetPlaylist()[am.index].duration;J({id:l.id,duration:ag,position:0});v({id:l.id,bufferProgress:0})}function ah(){J({id:l.id,duration:l.jwGetDuration(),position:0});v({id:l.id,bufferProgress:0});ak({id:l.id,mute:l.jwGetMute()});s({id:l.id,newstate:a.api.events.state.IDLE});n({id:l.id,volume:l.jwGetVolume()})}function T(ao,ap,an){if(q){return}if(_utils.exists(l.skin.getSkinElement("controlbar",ao))){var am=R[ao];if(_utils.exists(am)){_css(am,{cursor:"pointer"});if(ap=="fullscreen"){am.onmouseup=function(aq){aq.stopPropagation();l.jwSetFullscreen(!l.jwGetFullscreen())}}else{am.onmouseup=function(aq){aq.stopPropagation();if(_utils.exists(an)){l[ap](an)}else{l[ap]()}}}}}}function aa(am){if(q){return}var an=R[am+"Slider"];_css(R.elements,{cursor:"pointer"});_css(an,{cursor:"pointer"});an.onmousedown=function(ao){w=am};an.onmouseup=function(ao){ao.stopPropagation();aj(ao.pageX)};an.onmousemove=function(ao){if(w=="time"){h=true;var ap=ao.pageX-c[am+"Slider"].left-window.pageXOffset;_css(R[w+"SliderThumb"],{left:ap})}}}function aj(an){h=false;var am;if(w=="time"){am=an-c.timeSliderRail.left+window.pageXOffset;var ap=am/c.timeSliderRail.width*ag;if(ap<0){ap=0}else{if(ap>ag){ap=ag-3}}if(l.jwGetState()==a.api.events.state.PAUSED||l.jwGetState()==a.api.events.state.IDLE){l.jwPlay()}l.jwSeek(ap)}else{if(w=="volume"){am=an-c.volumeSliderRail.left-window.pageXOffset;var ao=Math.round(am/c.volumeSliderRail.width*100);if(ao<0){ao=0}else{if(ao>100){ao=100}}if(l.jwGetMute()){l.jwSetMute(false)}l.jwSetVolume(ao)}}w="none"}function v(an){if(_utils.exists(an.bufferPercent)){g=an.bufferPercent}if(c.timeSliderRail){var ap=l.skin.getSkinElement("controlbar","timeSliderCapLeft");var ao=c.timeSliderRail.width;var am=isNaN(Math.round(ao*g/100))?0:Math.round(ao*g/100);_css(R.timeSliderBuffer,{width:am,left:ap?ap.width:0})}}function ak(am){if(am.mute){_hide(R.muteButton);_show(R.unmuteButton);_hide(R.volumeSliderProgress)}else{_show(R.muteButton);_hide(R.unmuteButton);_show(R.volumeSliderProgress)}}function s(am){if(am.newstate==a.api.events.state.BUFFERING||am.newstate==a.api.events.state.PLAYING){_show(R.pauseButton);_hide(R.playButton)}else{_hide(R.pauseButton);_show(R.playButton)}Y();if(am.newstate==a.api.events.state.IDLE){_hide(R.timeSliderBuffer);_hide(R.timeSliderProgress);_hide(R.timeSliderThumb);J({id:l.id,duration:l.jwGetDuration(),position:0})}else{_show(R.timeSliderBuffer);if(am.newstate!=a.api.events.state.BUFFERING){_show(R.timeSliderProgress);_show(R.timeSliderThumb)}}}function M(am){v({bufferPercent:0});J(_utils.extend(am,{position:0,duration:ag}))}function J(ap){if(_utils.exists(ap.position)){k=ap.position}if(_utils.exists(ap.duration)){ag=ap.duration}var an=(k===ag===0)?0:k/ag;var ar=c.timeSliderRail;if(ar){var am=isNaN(Math.round(ar.width*an))?0:Math.round(ar.width*an);var aq=l.skin.getSkinElement("controlbar","timeSliderCapLeft");var ao=am+(aq?aq.width:0);if(R.timeSliderProgress){_css(R.timeSliderProgress,{width:am,left:aq?aq.width:0});if(!h){if(R.timeSliderThumb){R.timeSliderThumb.style.left=ao+"px"}}}}if(R.durationText){R.durationText.innerHTML=_utils.timeFormat(ag)}if(R.elapsedText){R.elapsedText.innerHTML=_utils.timeFormat(k)}}function o(){var am=R.elements.childNodes;var ar,ap;for(var ao=0;ao<am.length;ao++){var aq=am[ao].childNodes;for(var an in aq){if(isNaN(parseInt(an,10))){continue}if(aq[an].id.indexOf(af.id+"_divider")===0&&ap&&ap.id.indexOf(af.id+"_divider")===0&&aq[an].style.backgroundImage==ap.style.backgroundImage){aq[an].style.display="none"}else{if(aq[an].id.indexOf(af.id+"_divider")===0&&ar&&ar.style.display!="none"){aq[an].style.display="block"}}if(aq[an].style.display!="none"){ap=aq[an]}ar=aq[an]}}}function ai(){if(l.jwGetFullscreen()){_show(R.normalscreenButton);_hide(R.fullscreenButton)}else{_hide(R.normalscreenButton);_show(R.fullscreenButton)}if(l.jwGetState()==a.api.events.state.BUFFERING||l.jwGetState()==a.api.events.state.PLAYING){_show(R.pauseButton);_hide(R.playButton)}else{_hide(R.pauseButton);_show(R.playButton)}if(l.jwGetMute()==true){_hide(R.muteButton);_show(R.unmuteButton)}else{_show(R.muteButton);_hide(R.unmuteButton)}}function x(){o();ai();var ao={width:f};var aw={"float":"left",styleFloat:"left",cssFloat:"left"};if(D.position==a.html5.view.positions.OVER||l.jwGetFullscreen()){ao.left=D.margin;ao.width-=2*D.margin;ao.top=z-K().height-D.margin;ao.height=K().height}var aq=l.skin.getSkinElement("controlbar","capLeft");var au=l.skin.getSkinElement("controlbar","capRight");aw.width=ao.width-(aq?aq.width:0)-(au?au.width:0);var ap=_utils.getBoundingClientRect(R.leftGroup).width;var at=_utils.getBoundingClientRect(R.rightGroup).width;var ar=aw.width-ap-at;var an=ar;var am=l.skin.getSkinElement("controlbar","timeSliderCapLeft");var av=l.skin.getSkinElement("controlbar","timeSliderCapRight");if(_utils.exists(am)){an-=am.width}if(_utils.exists(av)){an-=av.width}R.timeSlider.style.width=ar+"px";R.timeSliderRail.style.width=an+"px";_css(af,ao);_css(R.elements,aw);_css(R.background,aw);r();return ao}function n(ar){if(_utils.exists(R.volumeSliderRail)){var ao=isNaN(ar.volume/100)?1:ar.volume/100;var ap=_utils.parseDimension(R.volumeSliderRail.style.width);var am=isNaN(Math.round(ap*ao))?0:Math.round(ap*ao);var at=_utils.parseDimension(R.volumeSliderRail.style.right);var an=(!_utils.exists(l.skin.getSkinElement("controlbar","volumeSliderCapLeft")))?0:l.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;_css(R.volumeSliderProgress,{width:am,left:an});if(R.volumeSliderThumb){var aq=(am-Math.round(_utils.parseDimension(R.volumeSliderThumb.style.width)/2));aq=Math.min(Math.max(aq,0),ap-_utils.parseDimension(R.volumeSliderThumb.style.width));_css(R.volumeSliderThumb,{left:aq})}if(_utils.exists(R.volumeSliderCapLeft)){_css(R.volumeSliderCapLeft,{left:0})}}}function S(){H=document.getElementById(l.id);H.addEventListener("mousemove",Y)}function u(){O();N();r();q=true;F();D.idlehide=(D.idlehide.toString().toLowerCase()=="true");if(D.position==a.html5.view.positions.OVER&&D.idlehide){af.style.opacity=0;U=true}else{af.style.opacity=1;setTimeout((function(){U=true;V()}),1)}S();ah()}u();return this}})(jwplayer);(function(b){var a=["width","height","state","playlist","item","position","buffer","duration","volume","mute","fullscreen"];var c=b.utils;b.html5.controller=function(n,I,e,g){var m=n;var k=e;var h=g;var x=I;var K=true;var E=-1;var z=c.exists(k.config.debug)&&(k.config.debug.toString().toLowerCase()=="console");var L=new b.html5.eventdispatcher(x.id,z);c.extend(this,L);var B=[];var p=false;function J(Q){if(p){L.sendEvent(Q.type,Q)}else{B.push(Q)}}function r(Q){if(!p){p=true;L.sendEvent(b.api.events.JWPLAYER_READY,Q);if(b.utils.exists(window.playerReady)){playerReady(Q)}if(b.utils.exists(window[e.config.playerReady])){window[e.config.playerReady](Q)}while(B.length>0){var S=B.shift();L.sendEvent(S.type,S)}if(e.config.autostart&&!b.utils.isIOS()){M()}while(w.length>0){var R=w.shift();A(R.method,R.arguments)}}}k.addGlobalListener(J);k.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,function(){k.getMedia().play()});k.addEventListener(b.api.events.JWPLAYER_MEDIA_TIME,function(Q){if(Q.position>=k.playlist[k.item].start&&E>=0){k.playlist[k.item].start=E;E=-1}});k.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,function(Q){setTimeout(C,25)});k.addEventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,M);k.addEventListener(b.api.events.JWPLAYER_FULLSCREEN,o);function D(){try{u(k.item);if(k.playlist[k.item].levels[0].file.length>0){if(K||k.state==b.api.events.state.IDLE){k.getMedia().load(k.playlist[k.item]);K=false}else{if(k.state==b.api.events.state.PAUSED){k.getMedia().play()}}}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function d(){try{if(k.playlist[k.item].levels[0].file.length>0){switch(k.state){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:if(k.getMedia()){k.getMedia().pause()}break}}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function y(Q){try{if(k.playlist[k.item].levels[0].file.length>0){if(typeof Q!="number"){Q=parseFloat(Q)}switch(k.state){case b.api.events.state.IDLE:if(E<0){E=k.playlist[k.item].start;k.playlist[k.item].start=Q}D();break;case b.api.events.state.PLAYING:case b.api.events.state.PAUSED:case b.api.events.state.BUFFERING:k.seek(Q);break}}return true}catch(R){L.sendEvent(b.api.events.JWPLAYER_ERROR,R)}return false}function v(Q){if(!c.exists(Q)){Q=true}try{if(k.getMedia()){k.getMedia().stop(Q)}return true}catch(R){L.sendEvent(b.api.events.JWPLAYER_ERROR,R)}return false}function j(){try{if(k.playlist[k.item].levels[0].file.length>0){if(k.config.shuffle){u(P())}else{if(k.item+1==k.playlist.length){u(0)}else{u(k.item+1)}}}if(k.state!=b.api.events.state.IDLE){var R=k.state;k.state=b.api.events.state.IDLE;L.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE,{oldstate:R,newstate:b.api.events.state.IDLE})}D();return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function G(){try{if(k.playlist[k.item].levels[0].file.length>0){if(k.config.shuffle){u(P())}else{if(k.item===0){u(k.playlist.length-1)}else{u(k.item-1)}}}if(k.state!=b.api.events.state.IDLE){var R=k.state;k.state=b.api.events.state.IDLE;L.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE,{oldstate:R,newstate:b.api.events.state.IDLE})}D();return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function P(){var Q=null;if(k.playlist.length>1){while(!c.exists(Q)){Q=Math.floor(Math.random()*k.playlist.length);if(Q==k.item){Q=null}}}else{Q=0}return Q}function F(R){if(!k.playlist||!k.playlist[R]){return false}try{if(k.playlist[R].levels[0].file.length>0){var S=k.state;if(S!==b.api.events.state.IDLE){if(k.playlist[k.item].provider==k.playlist[R].provider){v(false)}else{v()}}u(R);D()}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function u(Q){if(!k.playlist[Q]){return}k.setActiveMediaProvider(k.playlist[Q]);if(k.item!=Q){k.item=Q;K=true;L.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM,{index:Q})}}function f(R){try{u(k.item);var S=k.getMedia();switch(typeof(R)){case"number":S.volume(R);break;case"string":S.volume(parseInt(R,10));break}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function q(R){try{u(k.item);var S=k.getMedia();if(typeof R=="undefined"){S.mute(!k.mute)}else{if(R.toString().toLowerCase()=="true"){S.mute(true)}else{S.mute(false)}}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function H(R,Q){try{k.width=R;k.height=Q;h.resize(R,Q);L.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:k.width,height:k.height});return true}catch(S){L.sendEvent(b.api.events.JWPLAYER_ERROR,S)}return false}function t(R){try{if(typeof R=="undefined"){R=!k.fullscreen}if(R!=k.fullscreen){if(R.toString().toLowerCase()=="true"){k.fullscreen=true;h.fullscreen(true);L.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:true})}else{k.fullscreen=false;h.fullscreen(false);L.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:false})}L.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:k.width,height:k.height})}return true}catch(Q){L.sendEvent(b.api.events.JWPLAYER_ERROR,Q)}return false}function O(Q){try{v();k.loadPlaylist(Q);if(k.playlist[k.item].provider){u(k.item);if(k.config.autostart.toString().toLowerCase()=="true"){D()}return true}else{return false}}catch(R){L.sendEvent(b.api.events.JWPLAYER_ERROR,R)}return false}function M(Q){u(k.playlist[k.item]);if(k.config.autostart.toString().toLowerCase()=="true"){D()}}function o(Q){t(Q.fullscreen)}function s(){try{return k.getMedia().detachMedia()}catch(Q){return null}}function l(){try{return k.getMedia().attachMedia()}catch(Q){return null}}b.html5.controller.repeatoptions={LIST:"LIST",ALWAYS:"ALWAYS",SINGLE:"SINGLE",NONE:"NONE"};function C(){switch(k.config.repeat.toUpperCase()){case b.html5.controller.repeatoptions.SINGLE:D();break;case b.html5.controller.repeatoptions.ALWAYS:if(k.item==k.playlist.length-1&&!k.config.shuffle){F(0)}else{j()}break;case b.html5.controller.repeatoptions.LIST:if(k.item==k.playlist.length-1&&!k.config.shuffle){v();u(0)}else{j()}break;default:v();break}}var w=[];function N(Q){return function(){if(p){A(Q,arguments)}else{w.push({method:Q,arguments:arguments})}}}function A(S,R){var Q=[];for(i=0;i<R.length;i++){Q.push(R[i])}S.apply(this,Q)}this.play=N(D);this.pause=N(d);this.seek=N(y);this.stop=N(v);this.next=N(j);this.prev=N(G);this.item=N(F);this.setVolume=N(f);this.setMute=N(q);this.resize=N(H);this.setFullscreen=N(t);this.load=N(O);this.playerReady=r;this.detachMedia=s;this.attachMedia=l}})(jwplayer);(function(a){a.html5.defaultSkin=function(){this.text='<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.1"><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/><setting name="fontcolor" value="0x000000"/></settings><layout><group position="left"><button name="play"/><divider name="divider"/><button name="prev"/><divider name="divider"/><button name="next"/><divider name="divider"/><text name="elapsed"/></group><group position="center"><slider name="time"/></group><group position="right"><text name="duration"/><divider name="divider"/><button name="blank"/><divider name="divider"/><button name="mute"/><slider name="volume"/><divider name="divider"/><button name="fullscreen"/></group></layout><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUOI3t1LERACAMQlFgGvcfxNIhHMK4gsUvUviOmgtNsiAZkBSEKxKEnCYkkQrJn/YwbUNiSDDYRZaQRDaShv+oX9GBZEIuK+8hXVLs+/YAAAAASUVORK5CYII="/><element name="blankButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAYAAAA7zJfaAAAAQElEQVQIWz3LsRGAMADDQJ0XB5bMINABZ9GENGrszxhjT2WLSqxEJG2JQrTMdV2q5LpOAvyRaVmsi7WdeZ/7+AAaOTq7BVrfOQAAAABJRU5ErkJggg=="/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUCB0FwcENgEAAw7Aq+893g8APUILNOQcbFRktVGqUVFRkWNz3xTa2sUaLNUosKlRUvvf5AdbWOTtzmzyWAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAANUlEQVR42u2RsQkAAAjD/NTTPaW6dXLrINJA1kBpGPMAjDWmOgp1HFQXx+b1KOefO4oxY57R73YnVYCQUCQAAAAASUVORK5CYII="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAIUlEQVQ4jWNgGAWjYOiD/0gYG3/U0FFDB4Oho2AUDAYAAEwiL9HrpdMVAAAAAElFTkSuQmCC"/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQklEQVQ4y2NgGAWjYOiD/1AMA/JAfB5NjCJD/YH4PRaLyDa0H4lNNUP/DxlD59PCUBCIp3ZEwYA+NZLUKBgFgwEAAN+HLX9sB8u8AAAAAElFTkSuQmCC"/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAQElEQVQ4y2NgGAWjYOiD/0B8Hojl0cT+U2ooCL8HYn9qGwrD/bQw9P+QMXQ+tSMqnpoRBUpS+tRMUqNgFAwGAADxZy1/mHvFnAAAAABJRU5ErkJggg=="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAOElEQVRIDe3BwQkAIRADwAhhw/nU/kWwUK+KPITMABFh19Y+F0acY8CJvX9wYpXgRElwolSIiMf9ZWEDhtwurFsAAAAASUVORK5CYII="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAN0lEQVRIDe3BwQkAMQwDMBcc55mRe9zi7RR+FCwBEWG39vcfGHFm4MTuhhMlwYlVBSdKhYh43AW/LQMKm1spzwAAAABJRU5ErkJggg=="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAIElEQVRIiWNgGAWjYBTQBfynMR61YCRYMApGwSigMQAAiVWPcbq6UkIAAAAASUVORK5CYII="/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAYCAYAAAA/OUfnAAAAO0lEQVQYlWP4//8/Awwz0JgDBP/BeN6Cxf/hnI2btiI4u/fsQ3AOHjqK4Jw4eQbBOX/hEoKDYjSd/AMA4cS4mfLsorgAAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAJklEQVQ4y2NgGAUjDcwH4v/kaPxPikZkxcNVI9mBQ5XoGAWDFwAAsKAXKQQmfbUAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAMklEQVQ4y2NgGAWDHPyntub5xBr6Hwv/Pzk2/yfVG/8psRFE25Oq8T+tQnsIaB4FVAcAi2YVysVY52AAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAACmpqampqbBXAu8AAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEUAAAAAAAAAAACDY+nAAAAAAnRSTlMAgJsrThgAAAArSURBVAhbY2AgErBAyA4I2QEhOyBkB4TsYOhAoaCCUCUwDTDtMMNgRuMHAFB5FoGH5T0UAAAAAElFTkSuQmCC"/><element name="volumeSliderCapRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAYCAYAAAAyJzegAAAAFElEQVQYV2P8//8/AzpgHBUc7oIAGZdH0RjKN8EAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAQklEQVRIiWNgGAWjYMiD/0iYFDmSLbDHImdPLQtgBpEiR7Zl2NijAA5oEkT/0Whi5UiyAJ8BVMsHNMtoo2AUDAIAAGdcIN3IDNXoAAAAAElFTkSuQmCC"/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAP0lEQVRIx2NgGAWjYMiD/1RSQ5QB/wmIUWzJfzx8qhj+n4DYCAY0DyJ7PBbYU8sHMEvwiZFtODXUjIJRMJgBACpWIN2ZxdPTAAAAAElFTkSuQmCC"/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiUlEQVR42u3XSw2AMBREURwgAQlIQAISKgUpSEFKJeCg5b0E0kWBTVcD9ySTsL0Jn9IBAAAA+K2UUrBlW/Rr5ZDoIeeuoFkxJD9ss03aIXXQqB9SttoG7ZA6qNcOKdttiwcJh9RB+iFl4SshkRBuLR72+9cvH0SOKI2HRo7x/Fi1/uoCAAAAwLsD8ki99IlO2dQAAAAASUVORK5CYII="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAVUlEQVR42u3WMQrAIAxAUW/g/SdvGmvpoOBeSHgPsjj5QTANAACARCJilIhYM0tEvJM+Ik3Id9E957kQIb+F3OdCPC0hPkQriqWx9hp/x/QGAABQyAPLB22VGrpLDgAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAA/0lEQVR42u2U0QmEMBAF7cASLMESUoIlpARLSCkpwRJSgiWkhOvAXD4WsgRkyaG5DbyB+Yvg8KITAAAAAAAYk+u61mwk15EjPtlEfihmqIiZR1Qx80ghjgdUuiHXGHSVsoag0x6x8DUoyjD5KovmEJ9NTDMRPIT0mtdIUkjlonuNohO+Ha99DTmkuGgKCTcvebAzx82ZoCWC3/3aIMWSRucaxcjORSFY4xpFdjYJGp1rFGcyCYZ/RVh6AUnfcNZ2zih3/mGj1jVCdiNDwyrq1rA/xMdeEXvDVdnYc1vDc3uPkDObXrlaxbNHSOohQhr/WOeLEWfWTgAAAAAAADzNF9sHJ7PJ57MlAAAAAElFTkSuQmCC"/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAACBklEQVR42u3Zv0sCYRzH8USTzOsHHEWGkC1HgaDgkktGDjUYtDQ01RDSljQ1BLU02+rk1NTm2NLq4Nx/0L/h9fnCd3j4cnZe1/U8xiO8h3uurufF0/3COd/3/0UWYiEWYiEWYiGJQ+J8xuPxKhXjEMZANinjIZhkGuVRNioE4wVURo4JkHm0xKWmhRAc1bh1EyCUw5BcBIjHiApKa4CErko6DEJwuRo6IRKzyJD8FJAyI3Zp2zRImiBcRhlfo5RtlxCcE3CcDNpGrhYIT2IhAJKilO0VRmzJ32fAMTpBTS0QMfGwlcuKMRftE0DJ0wCJdcOsCkBdXP3Mh9CEFUBTPS9mDZJBG6io4aqVzMdCokCw9H3kT6j/C/9iDdSeUMNC7DkyyxAs/Rk6Qss8FPWRZgdVtUH4DjxEn1zxh+/zj1wHlf4MQhNGrwqA6sY40U8JonRJwEQh+AO3AvCG6gHv4U7IY4krxkroWoAOkoQMGfCBrgIm+YBGqPENpIJ66CJg3x66Y0gnSUidAEEnNr9jjLiWMn5DiWP0OC/oAsCgkq43xBdGDMQr7YASP/vEkHvdl1+JOCcEV5sC4hGEOzTlPuKgd0b0xD4JkRcOgnRRTjdErkYhAsQVq6IdUuPJtmk7BCL3t/h88cx91pKQkI/pkDx6pmYTIjEoxiHsN1YWYiEWYiEWknhflZ5IErA5nr8AAAAASUVORK5CYII="/></elements></component><component name="dock"><settings><setting name="fontcolor" value="0xffffff"/></settings><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAQMAAAAk8RryAAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlOZpuml+rYAAAASSURBVBhXY2AYJuA/GBwY6jQAyDyoK8QcL4QAAAAASUVORK5CYII="/></elements></component><component name="playlist"><settings><setting name="backgroundcolor" value="0xe8e8e8"/></settings><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHBJREFUaN7t2MENwCAMBEEe9N8wSKYC/D8YV7CyJoRkVtVImxkZPQInMxoP0XiIxkM0HsGbjjSNBx544IEHHnjggUe/6UQeey0PIh7XTftGxKPj4eXCtLsHHh+ZxkO0Iw8PR55Ni8ZD9Hu/EAoP0dc5RRg9qeRjVF8AAAAASUVORK5CYII="/><element name="sliderCapTop" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAKElEQVQ4y2P4//8/Az68bNmy/+iYkB6GUUNHDR01dNTQUUNHDaXcUABUDOKhcxnsSwAAAABJRU5ErkJggg=="/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAUCAYAAABiS3YzAAAAJUlEQVQ4T2P4//8/Ay4MBP9xYbz6Rg0dNXTU0FFDRw0dNZRyQwHH4NBa7GJsXAAAAABJRU5ErkJggg=="/><element name="sliderCapBottom" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAHCAYAAADnCQYGAAAAFUlEQVQokWP8//8/A7UB46ihI9hQAKt6FPPXhVGHAAAAAElFTkSuQmCC"/></elements></component></components></skin>';this.xml=null;if(window.DOMParser){parser=new DOMParser();this.xml=parser.parseFromString(this.text,"text/xml")}else{this.xml=new ActiveXObject("Microsoft.XMLDOM");this.xml.async="false";this.xml.loadXML(this.text)}return this}})(jwplayer);(function(a){_utils=a.utils;_css=_utils.css;_hide=function(b){_css(b,{display:"none"})};_show=function(b){_css(b,{display:"block"})};a.html5.display=function(k,H){var j={icons:true,showmute:false};var S=_utils.extend({},j,H);var h=k;var R={};var e;var u;var x;var P;var s;var J;var B;var K=!_utils.exists(h.skin.getComponentSettings("display").bufferrotation)?15:parseInt(h.skin.getComponentSettings("display").bufferrotation,10);var q=!_utils.exists(h.skin.getComponentSettings("display").bufferinterval)?100:parseInt(h.skin.getComponentSettings("display").bufferinterval,10);var A=-1;var t="";var L=true;var d;var g=false;var n=false;var w,N;var I=new a.html5.eventdispatcher();_utils.extend(this,I);var E={display:{style:{cursor:"pointer",top:0,left:0,overflow:"hidden"},click:m},display_icon:{style:{cursor:"pointer",position:"absolute",top:((h.skin.getSkinElement("display","background").height-h.skin.getSkinElement("display","playIcon").height)/2),left:((h.skin.getSkinElement("display","background").width-h.skin.getSkinElement("display","playIcon").width)/2),border:0,margin:0,padding:0,zIndex:3,display:"none"}},display_iconBackground:{style:{cursor:"pointer",position:"absolute",top:((u-h.skin.getSkinElement("display","background").height)/2),left:((e-h.skin.getSkinElement("display","background").width)/2),border:0,backgroundImage:(["url(",h.skin.getSkinElement("display","background").src,")"]).join(""),width:h.skin.getSkinElement("display","background").width,height:h.skin.getSkinElement("display","background").height,margin:0,padding:0,zIndex:2,display:"none"}},display_image:{style:{display:"none",width:e,height:u,position:"absolute",cursor:"pointer",left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1}},display_text:{style:{zIndex:4,position:"relative",opacity:0.8,backgroundColor:parseInt("000000",16),color:parseInt("ffffff",16),textAlign:"center",fontFamily:"Arial,sans-serif",padding:"0 5px",fontSize:14}}};h.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,o);h.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,o);h.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,o);h.jwAddEventListener(a.api.events.JWPLAYER_ERROR,p);M();function M(){R.display=D("div","display");R.display_text=D("div","display_text");R.display.appendChild(R.display_text);R.display_image=D("img","display_image");R.display_image.onerror=function(T){_hide(R.display_image)};R.display_image.onload=z;R.display_icon=D("div","display_icon");R.display_iconBackground=D("div","display_iconBackground");R.display.appendChild(R.display_image);R.display_iconBackground.appendChild(R.display_icon);R.display.appendChild(R.display_iconBackground);f();setTimeout((function(){n=true;if(S.icons.toString()=="true"){G()}}),1)}this.getDisplayElement=function(){return R.display};this.resize=function(U,T){_css(R.display,{width:U,height:T});_css(R.display_text,{width:(U-10),top:((T-_utils.getBoundingClientRect(R.display_text).height)/2)});_css(R.display_iconBackground,{top:((T-h.skin.getSkinElement("display","background").height)/2),left:((U-h.skin.getSkinElement("display","background").width)/2)});if(e!=U||u!=T){e=U;u=T;d=undefined;G()}if(!h.jwGetFullscreen()){w=U;N=T}c();o({})};this.show=function(){if(g){g=false;r(h.jwGetState())}};this.hide=function(){if(!g){C();g=true}};function z(T){x=R.display_image.naturalWidth;P=R.display_image.naturalHeight;c()}function c(){if(h.jwGetFullscreen()&&h.jwGetStretching()==a.utils.stretching.EXACTFIT){var T=document.createElement("div");_utils.stretch(a.utils.stretching.UNIFORM,T,e,u,w,N);_utils.stretch(a.utils.stretching.EXACTFIT,R.display_image,_utils.parseDimension(T.style.width),_utils.parseDimension(T.style.height),x,P);_css(R.display_image,{left:T.style.left,top:T.style.top})}else{_utils.stretch(h.jwGetStretching(),R.display_image,e,u,x,P)}}function D(T,V){var U=document.createElement(T);U.id=h.id+"_jwplayer_"+V;_css(U,E[V].style);return U}function f(){for(var T in R){if(_utils.exists(E[T].click)){R[T].onclick=E[T].click}}}function m(T){if(typeof T.preventDefault!="undefined"){T.preventDefault()}else{T.returnValue=false}if(h.jwGetState()!=a.api.events.state.PLAYING){h.jwPlay()}else{h.jwPause()}}function Q(T){if(B){C();return}R.display_icon.style.backgroundImage=(["url(",h.skin.getSkinElement("display",T).src,")"]).join("");_css(R.display_icon,{width:h.skin.getSkinElement("display",T).width,height:h.skin.getSkinElement("display",T).height,top:(h.skin.getSkinElement("display","background").height-h.skin.getSkinElement("display",T).height)/2,left:(h.skin.getSkinElement("display","background").width-h.skin.getSkinElement("display",T).width)/2});b();if(_utils.exists(h.skin.getSkinElement("display",T+"Over"))){R.display_icon.onmouseover=function(U){R.display_icon.style.backgroundImage=["url(",h.skin.getSkinElement("display",T+"Over").src,")"].join("")};R.display_icon.onmouseout=function(U){R.display_icon.style.backgroundImage=["url(",h.skin.getSkinElement("display",T).src,")"].join("")}}else{R.display_icon.onmouseover=null;R.display_icon.onmouseout=null}}function C(){if(S.icons.toString()=="true"){_hide(R.display_icon);_hide(R.display_iconBackground);O()}}function b(){if(!g&&S.icons.toString()=="true"){_show(R.display_icon);_show(R.display_iconBackground);G()}}function p(T){B=true;C();R.display_text.innerHTML=T.message;_show(R.display_text);R.display_text.style.top=((u-_utils.getBoundingClientRect(R.display_text).height)/2)+"px"}function F(){R.display_image.style.display="none"}function o(T){if((T.type==a.api.events.JWPLAYER_PLAYER_STATE||T.type==a.api.events.JWPLAYER_PLAYLIST_ITEM)&&B){B=false;_hide(R.display_text)}var U=h.jwGetState();if(U==t){return}t=U;if(A>=0){clearTimeout(A)}if(L||h.jwGetState()==a.api.events.state.PLAYING||h.jwGetState()==a.api.events.state.PAUSED){r(h.jwGetState())}else{A=setTimeout(l(h.jwGetState()),500)}}function l(T){return(function(){r(T)})}function r(T){if(_utils.exists(J)){clearInterval(J);J=null;_utils.animations.rotate(R.display_icon,0)}switch(T){case a.api.events.state.BUFFERING:if(_utils.isMobile()){F();C()}else{if(h.jwGetPlaylist()[h.jwGetItem()].provider=="sound"){v()}s=0;J=setInterval(function(){s+=K;_utils.animations.rotate(R.display_icon,s%360)},q);Q("bufferIcon");L=true}break;case a.api.events.state.PAUSED:if(!_utils.isMobile()){if(h.jwGetPlaylist()[h.jwGetItem()].provider!="sound"){_css(R.display_image,{background:"transparent no-repeat center center"})}Q("playIcon");L=true}break;case a.api.events.state.IDLE:if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].image){v()}else{F()}Q("playIcon");L=true;break;default:if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].provider=="sound"){if(_utils.isMobile()){F();L=false}else{v()}}else{F();L=false}if(h.jwGetMute()&&S.showmute){Q("muteIcon")}else{C()}break}A=-1}function v(){if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].image){_css(R.display_image,{display:"block"});R.display_image.src=_utils.getAbsolutePath(h.jwGetPlaylist()[h.jwGetItem()].image)}}function y(T){return function(){if(!n){return}if(!g&&d!=T){d=T;I.sendEvent(T,{component:"display",boundingRect:_utils.getDimensions(R.display_iconBackground)})}}}var G=y(a.api.events.JWPLAYER_COMPONENT_SHOW);var O=y(a.api.events.JWPLAYER_COMPONENT_HIDE);return this}})(jwplayer);(function(a){var c=a.utils;var b=c.css;a.html5.dock=function(v,C){function w(){return{align:a.html5.view.positions.RIGHT}}var m=c.extend({},w(),C);if(m.align=="FALSE"){return}var h={};var z=[];var j;var E;var f=false;var B=false;var g={x:0,y:0,width:0,height:0};var y;var n;var x;var l=new a.html5.eventdispatcher();c.extend(this,l);var q=document.createElement("div");q.id=v.id+"_jwplayer_dock";q.style.opacity=1;o();v.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,p);this.getDisplayElement=function(){return q};this.setButton=function(J,G,H,I){if(!G&&h[J]){c.arrays.remove(z,J);q.removeChild(h[J].div);delete h[J]}else{if(G){if(!h[J]){h[J]={}}h[J].handler=G;h[J].outGraphic=H;h[J].overGraphic=I;if(!h[J].div){z.push(J);h[J].div=document.createElement("div");h[J].div.style.position="relative";q.appendChild(h[J].div);h[J].div.appendChild(document.createElement("img"));h[J].div.childNodes[0].style.position="absolute";h[J].div.childNodes[0].style.left=0;h[J].div.childNodes[0].style.top=0;h[J].div.childNodes[0].style.zIndex=10;h[J].div.childNodes[0].style.cursor="pointer";h[J].div.appendChild(document.createElement("img"));h[J].div.childNodes[1].style.position="absolute";h[J].div.childNodes[1].style.left=0;h[J].div.childNodes[1].style.top=0;if(v.skin.getSkinElement("dock","button")){h[J].div.childNodes[1].src=v.skin.getSkinElement("dock","button").src}h[J].div.childNodes[1].style.zIndex=9;h[J].div.childNodes[1].style.cursor="pointer";h[J].div.onmouseover=function(){if(h[J].overGraphic){h[J].div.childNodes[0].src=h[J].overGraphic}if(v.skin.getSkinElement("dock","buttonOver")){h[J].div.childNodes[1].src=v.skin.getSkinElement("dock","buttonOver").src}};h[J].div.onmouseout=function(){if(h[J].outGraphic){h[J].div.childNodes[0].src=h[J].outGraphic}if(v.skin.getSkinElement("dock","button")){h[J].div.childNodes[1].src=v.skin.getSkinElement("dock","button").src}};if(v.skin.getSkinElement("dock","button")){h[J].div.childNodes[1].src=v.skin.getSkinElement("dock","button").src}}if(h[J].outGraphic){h[J].div.childNodes[0].src=h[J].outGraphic}else{if(h[J].overGraphic){h[J].div.childNodes[0].src=h[J].overGraphic}}if(G){h[J].div.onclick=function(K){K.preventDefault();a(v.id).callback(J);if(h[J].overGraphic){h[J].div.childNodes[0].src=h[J].overGraphic}if(v.skin.getSkinElement("dock","button")){h[J].div.childNodes[1].src=v.skin.getSkinElement("dock","button").src}}}}}k(j,E)};function s(G){}function k(G,S){o();if(z.length>0){var H=10;var R=H;var O=-1;var P=v.skin.getSkinElement("dock","button").height;var N=v.skin.getSkinElement("dock","button").width;var L=G-N-H;var Q,K;if(m.align==a.html5.view.positions.LEFT){O=1;L=H}for(var I=0;I<z.length;I++){var T=Math.floor(R/S);if((R+P+H)>((T+1)*S)){R=((T+1)*S)+H;T=Math.floor(R/S)}var J=h[z[I]].div;J.style.top=(R%S)+"px";J.style.left=(L+(v.skin.getSkinElement("dock","button").width+H)*T*O)+"px";var M={x:c.parseDimension(J.style.left),y:c.parseDimension(J.style.top),width:N,height:P};if(!Q||(M.x<=Q.x&&M.y<=Q.y)){Q=M}if(!K||(M.x>=K.x&&M.y>=K.y)){K=M}R+=v.skin.getSkinElement("dock","button").height+H}g={x:Q.x,y:Q.y,width:K.x-Q.x+K.width,height:Q.y-K.y+K.height}}if(B!=v.jwGetFullscreen()||j!=G||E!=S){j=G;E=S;B=v.jwGetFullscreen();y=undefined;setTimeout(r,1)}}function d(G){return function(){if(!f&&y!=G&&z.length>0){y=G;l.sendEvent(G,{component:"dock",boundingRect:g})}}}function p(G){if(c.isMobile()){if(G.newstate==a.api.events.state.IDLE){u()}else{e()}}else{A()}}function A(G){if(f){return}clearTimeout(x);if(C.position==a.html5.view.positions.OVER||v.jwGetFullscreen()){switch(v.jwGetState()){case a.api.events.state.PAUSED:case a.api.events.state.IDLE:if(q&&q.style.opacity<1&&(!C.idlehide||c.exists(G))){D()}if(C.idlehide){x=setTimeout(function(){t()},2000)}break;default:if(c.exists(G)){D()}x=setTimeout(function(){t()},2000);break}}else{D()}}var r=d(a.api.events.JWPLAYER_COMPONENT_SHOW);var F=d(a.api.events.JWPLAYER_COMPONENT_HIDE);this.resize=k;var u=function(){b(q,{display:"block"});if(f){f=false;r()}};var e=function(){b(q,{display:"none"});if(!f){F();f=true}};function t(){if(!f){F();if(q.style.opacity==1){c.cancelAnimation(q);c.fadeTo(q,0,0.1,1,0)}}}function D(){if(!f){r();if(q.style.opacity==0){c.cancelAnimation(q);c.fadeTo(q,1,0.1,0,0)}}}function o(){n=document.getElementById(v.id);n.addEventListener("mousemove",A)}this.hide=e;this.show=u;return this}})(jwplayer);(function(a){a.html5.eventdispatcher=function(d,b){var c=new a.events.eventdispatcher(b);a.utils.extend(this,c);this.sendEvent=function(e,f){if(!a.utils.exists(f)){f={}}a.utils.extend(f,{id:d,version:a.version,type:e});c.sendEvent(e,f)}}})(jwplayer);(function(a){var b={prefix:"http://l.longtailvideo.com/html5/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:5,hide:true,position:"bottom-left"};_css=a.utils.css;a.html5.logo=function(n,r){var q=n;var u;var d;var t;var h=false;g();function g(){o();q.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,j);c();l()}function o(){if(b.prefix){var v=n.version.split(/\W/).splice(0,2).join("/");if(b.prefix.indexOf(v)<0){b.prefix+=v+"/"}}if(r.position==a.html5.view.positions.OVER){r.position=b.position}try{if(window.location.href.indexOf("https")==0){b.prefix=b.prefix.replace("http://l.longtailvideo.com","https://securel.longtailvideo.com")}}catch(w){}d=a.utils.extend({},b)}function c(){t=document.createElement("img");t.id=q.id+"_jwplayer_logo";t.style.display="none";t.onload=function(v){_css(t,k());p()};if(!d.file){return}if(d.file.indexOf("/")>=0){t.src=d.file}else{t.src=d.prefix+d.file}}if(!d.file){return}this.resize=function(w,v){};this.getDisplayElement=function(){return t};function l(){if(d.link){t.onmouseover=f;t.onmouseout=p;t.onclick=s}else{this.mouseEnabled=false}}function s(v){if(typeof v!="undefined"){v.stopPropagation()}if(!h){return}q.jwPause();q.jwSetFullscreen(false);if(d.link){window.open(d.link,"_top")}return}function p(v){if(d.link&&h){t.style.opacity=d.out}return}function f(v){if(h){t.style.opacity=d.over}return}function k(){var x={textDecoration:"none",position:"absolute",cursor:"pointer"};x.display=(d.hide.toString()=="true"&&!h)?"none":"block";var w=d.position.toLowerCase().split("-");for(var v in w){x[w[v]]=d.margin}return x}function m(){if(d.hide.toString()=="true"){t.style.display="block";t.style.opacity=0;a.utils.fadeTo(t,d.out,0.1,parseFloat(t.style.opacity));u=setTimeout(function(){e()},d.timeout*1000)}h=true}function e(){h=false;if(d.hide.toString()=="true"){a.utils.fadeTo(t,0,0.1,parseFloat(t.style.opacity))}}function j(v){if(v.newstate==a.api.events.state.BUFFERING){clearTimeout(u);m()}}return this}})(jwplayer);(function(b){var d={ended:b.api.events.state.IDLE,playing:b.api.events.state.PLAYING,pause:b.api.events.state.PAUSED,buffering:b.api.events.state.BUFFERING};var e=b.utils;var c=e.css;var a=e.isMobile();b.html5.mediavideo=function(j,v){var u={abort:p,canplay:m,canplaythrough:m,durationchange:L,emptied:p,ended:m,error:x,loadeddata:L,loadedmetadata:L,loadstart:m,pause:m,play:p,playing:m,progress:y,ratechange:p,seeked:m,seeking:m,stalled:m,suspend:m,timeupdate:I,volumechange:E,waiting:m,canshowcurrentframe:p,dataunavailable:p,empty:p,load:D,loadedfirstframe:p,webkitfullscreenchange:k};var l=new b.html5.eventdispatcher();e.extend(this,l);var B=j,n=v,o,G,F,A,g,M=false,C=false,H,r,s;q();this.load=function(O,P){if(typeof P=="undefined"){P=true}if(!C){return}A=O;e.empty(o);s=0;if(O.levels&&O.levels.length>0){if(O.levels.length==1){o.src=O.levels[0].file}else{f(O.levels);if(o.src){o.removeAttribute("src")}for(var N=0;N<O.levels.length;N++){var Q=o.ownerDocument.createElement("source");Q.src=O.levels[N].file;o.appendChild(Q);s++}}}else{o.src=O.file}if(a){if(O.image){o.poster=O.image}o.style.display="block";setTimeout(function(){o.setAttribute("controls","controls")},100)}H=r=F=false;B.buffer=0;if(!e.exists(O.start)){O.start=0}B.duration=O.duration;l.sendEvent(b.api.events.JWPLAYER_MEDIA_LOADED);if((!a&&O.levels.length==1)||!M){o.load()}M=false;if(P){J(b.api.events.state.BUFFERING);l.sendEvent(b.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:0});this.play()}};this.play=function(){if(!C){return}if(G!=b.api.events.state.PLAYING){w();if(r){J(b.api.events.state.PLAYING)}else{J(b.api.events.state.BUFFERING)}o.play()}};this.pause=function(){if(!C){return}o.pause();J(b.api.events.state.PAUSED)};this.seek=function(N){if(!C){return}if(!(B.duration<=0||isNaN(B.duration))&&!(B.position<=0||isNaN(B.position))){o.currentTime=N;o.play()}};_stop=this.stop=function(N){if(!C){return}if(!e.exists(N)){N=true}h();if(N){o.style.display="none";r=false;var O=navigator.userAgent;if(O.match(/chrome/i)){o.src=undefined}else{if(O.match(/safari/i)||O.match(/firefox/i)){o.removeAttribute("src")}else{o.src=""}}o.removeAttribute("controls");o.removeAttribute("poster");e.empty(o);o.load();M=true;if(o.webkitSupportsFullscreen){try{o.webkitExitFullscreen()}catch(P){}}}J(b.api.events.state.IDLE)};this.fullscreen=function(N){if(N===true){this.resize("100%","100%")}else{this.resize(B.config.width,B.config.height)}};this.resize=function(O,N){};this.volume=function(N){if(!a){o.volume=N/100}};this.mute=function(N){if(!a){o.muted=N}};this.getDisplayElement=function(){return o};this.hasChrome=function(){return a};this.detachMedia=function(){C=false;return this.getDisplayElement()};this.attachMedia=function(){C=true};function t(O,N){return function(P){if(C&&e.exists(P.target.parentNode)){N(P)}}}function q(){o=document.createElement("video");G=b.api.events.state.IDLE;for(var N in u){o.addEventListener(N,t(N,u[N]),true)}C=true;o.setAttribute("x-webkit-airplay","allow");if(n.parentNode){n.parentNode.replaceChild(o,n)}if(!o.id){o.id=n.id}o.volume=B.volume/100}function J(N){if(N==b.api.events.state.PAUSED&&G==b.api.events.state.IDLE){return}if(G!=N){var O=G;B.state=G=N;l.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE,{oldstate:O,newstate:N})}}function p(N){}function E(N){var O=Math.round(o.volume*100);if(O!=B.volume){B.volume=O;l.sendEvent(b.api.events.JWPLAYER_MEDIA_VOLUME,{volume:B.volume})}if(o.muted!=B.mute){B.mute=o.muted;l.sendEvent(b.api.events.JWPLAYER_MEDIA_MUTE,{mute:B.mute})}}function y(P){var O;if(e.exists(P)&&P.lengthComputable&&P.total){O=P.loaded/P.total*100}else{if(e.exists(o.buffered)&&(o.buffered.length>0)){var N=o.buffered.length-1;if(N>=0){O=o.buffered.end(N)/o.duration*100}}}if(r===false&&G==b.api.events.state.BUFFERING){l.sendEvent(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL);r=true}if(!H){if(O==100){H=true}if(e.exists(O)&&(O>B.buffer)){B.buffer=Math.round(O);l.sendEvent(b.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(O)})}}}function I(O){if(e.exists(O)&&e.exists(O.target)){if(!isNaN(O.target.duration)&&(isNaN(B.duration)||B.duration<1)){if(O.target.duration==Infinity){B.duration=0}else{B.duration=Math.round(O.target.duration*10)/10}}if(!F&&o.readyState>0){o.style.display="block";J(b.api.events.state.PLAYING)}if(G==b.api.events.state.PLAYING){if(!F&&o.readyState>0){F=true;try{if(o.currentTime<A.start){o.currentTime=A.start}}catch(N){}o.volume=B.volume/100;o.muted=B.mute}B.position=B.duration>0?(Math.round(O.target.currentTime*10)/10):0;l.sendEvent(b.api.events.JWPLAYER_MEDIA_TIME,{position:B.position,duration:B.duration});if(B.position>=B.duration&&(B.position>0||B.duration>0)){z()}}}y(O)}function D(N){}function m(N){if(d[N.type]){if(N.type=="ended"){z()}else{J(d[N.type])}}}function L(O){var N=Math.round(O.target.duration*10)/10;var P={height:O.target.videoHeight,width:O.target.videoWidth,duration:N};if((B.duration<N||isNaN(B.duration))&&O.target.duration!=Infinity){B.duration=N}l.sendEvent(b.api.events.JWPLAYER_MEDIA_META,{metadata:P})}function x(P){if(G==b.api.events.state.IDLE){return}var O="There was an error: ";if((P.target.error&&P.target.tagName.toLowerCase()=="video")||P.target.parentNode.error&&P.target.parentNode.tagName.toLowerCase()=="video"){var N=!e.exists(P.target.error)?P.target.parentNode.error:P.target.error;switch(N.code){case N.MEDIA_ERR_ABORTED:O="You aborted the video playback: ";break;case N.MEDIA_ERR_NETWORK:O="A network error caused the video download to fail part-way: ";break;case N.MEDIA_ERR_DECODE:O="The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";break;case N.MEDIA_ERR_SRC_NOT_SUPPORTED:O="The video could not be loaded, either because the server or network failed or because the format is not supported: ";break;default:O="An unknown error occurred: ";break}}else{if(P.target.tagName.toLowerCase()=="source"){s--;if(s>0){return}O="The video could not be loaded, either because the server or network failed or because the format is not supported: "}else{e.log("An unknown error occurred.  Continuing...");return}}_stop(false);O+=K();_error=true;l.sendEvent(b.api.events.JWPLAYER_ERROR,{message:O});return}function K(){var P="";for(var O in A.levels){var N=A.levels[O];var Q=n.ownerDocument.createElement("source");P+=b.utils.getAbsolutePath(N.file);if(O<(A.levels.length-1)){P+=", "}}return P}function w(){if(!e.exists(g)){g=setInterval(function(){y()},100)}}function h(){clearInterval(g);g=null}function z(){if(G!=b.api.events.state.IDLE){_stop(false);l.sendEvent(b.api.events.JWPLAYER_MEDIA_COMPLETE)}}function k(N){if(e.exists(o.webkitDisplayingFullscreen)){if(B.fullscreen&&!o.webkitDisplayingFullscreen){l.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:false})}}}function f(P){if(P.length>0&&e.isIOS()){if(e.extension(P[0].file)!="mp4"){var N=-1;for(var O=1;O<P.length;O++){if(e.extension(P[O].file)=="mp4"){N=O;break}}if(N>-1){var Q=P.splice(N,1)[0];P.unshift(Q)}}}}}})(jwplayer);(function(a){var c={ended:a.api.events.state.IDLE,playing:a.api.events.state.PLAYING,pause:a.api.events.state.PAUSED,buffering:a.api.events.state.BUFFERING};var b=a.utils.css;a.html5.mediayoutube=function(j,e){var f=new a.html5.eventdispatcher();a.utils.extend(this,f);var l=j;var h=document.getElementById(e.id);var g=a.api.events.state.IDLE;var n,m;function k(p){if(g!=p){var q=g;l.state=p;g=p;f.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:q,newstate:p})}}this.getDisplayElement=this.detachMedia=function(){return h};this.attachMedia=function(){};this.play=function(){if(g==a.api.events.state.IDLE){f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:100});f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);k(a.api.events.state.PLAYING)}else{if(g==a.api.events.state.PAUSED){k(a.api.events.state.PLAYING)}}};this.pause=function(){k(a.api.events.state.PAUSED)};this.seek=function(p){};this.stop=function(p){if(!_utils.exists(p)){p=true}l.position=0;k(a.api.events.state.IDLE);if(p){b(h,{display:"none"})}};this.volume=function(p){l.volume=p;f.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(p)})};this.mute=function(p){h.muted=p;l.mute=p;f.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:p})};this.resize=function(q,p){if(q*p>0&&n){n.width=m.width=q;n.height=m.height=p}};this.fullscreen=function(p){if(p===true){this.resize("100%","100%")}else{this.resize(l.config.width,l.config.height)}};this.load=function(p){o(p);b(n,{display:"block"});k(a.api.events.state.BUFFERING);f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:0});f.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);this.play()};this.hasChrome=function(){return(g!=a.api.events.state.IDLE)};function o(v){var s=v.levels[0].file;s=["http://www.youtube.com/v/",d(s),"&amp;hl=en_US&amp;fs=1&autoplay=1"].join("");n=document.createElement("object");n.id=h.id;n.style.position="absolute";var u={movie:s,allowfullscreen:"true",allowscriptaccess:"always"};for(var p in u){var t=document.createElement("param");t.name=p;t.value=u[p];n.appendChild(t)}m=document.createElement("embed");n.appendChild(m);var q={src:s,type:"application/x-shockwave-flash",allowfullscreen:"true",allowscriptaccess:"always",width:n.width,height:n.height};for(var r in q){m.setAttribute(r,q[r])}n.appendChild(m);n.style.zIndex=2147483000;if(h!=n&&h.parentNode){h.parentNode.replaceChild(n,h)}h=n}function d(q){var p=q.split(/\?|\#\!/);var s="";for(var r=0;r<p.length;r++){if(p[r].substr(0,2)=="v="){s=p[r].substr(2)}}if(s==""){if(q.indexOf("/v/")>=0){s=q.substr(q.indexOf("/v/")+3)}else{if(q.indexOf("youtu.be")>=0){s=q.substr(q.indexOf("youtu.be/")+9)}else{s=q}}}if(s.indexOf("?")>-1){s=s.substr(0,s.indexOf("?"))}if(s.indexOf("&")>-1){s=s.substr(0,s.indexOf("&"))}return s}this.embed=m;return this}})(jwplayer);(function(jwplayer){var _configurableStateVariables=["width","height","start","duration","volume","mute","fullscreen","item","plugins","stretching"];jwplayer.html5.model=function(api,container,options){var _api=api;var _container=container;var _model={id:_container.id,playlist:[],state:jwplayer.api.events.state.IDLE,position:0,buffer:0,config:{width:480,height:320,item:-1,skin:undefined,file:undefined,image:undefined,start:0,duration:0,bufferlength:5,volume:90,mute:false,fullscreen:false,repeat:"",stretching:jwplayer.utils.stretching.UNIFORM,autostart:false,debug:undefined,screencolor:undefined}};var _media;var _eventDispatcher=new jwplayer.html5.eventdispatcher();var _components=["display","logo","controlbar","playlist","dock"];jwplayer.utils.extend(_model,_eventDispatcher);for(var option in options){if(typeof options[option]=="string"){var type=/color$/.test(option)?"color":null;options[option]=jwplayer.utils.typechecker(options[option],type)}var config=_model.config;var path=option.split(".");for(var edge in path){if(edge==path.length-1){config[path[edge]]=options[option]}else{if(!jwplayer.utils.exists(config[path[edge]])){config[path[edge]]={}}config=config[path[edge]]}}}for(var index in _configurableStateVariables){var configurableStateVariable=_configurableStateVariables[index];_model[configurableStateVariable]=_model.config[configurableStateVariable]}var pluginorder=_components.concat([]);if(jwplayer.utils.exists(_model.plugins)){if(typeof _model.plugins=="string"){var userplugins=_model.plugins.split(",");for(var userplugin in userplugins){if(typeof userplugins[userplugin]=="string"){pluginorder.push(userplugins[userplugin].replace(/^\s+|\s+$/g,""))}}}}if(jwplayer.utils.isMobile()){pluginorder=["display","logo","dock","playlist"];if(!jwplayer.utils.exists(_model.config.repeat)){_model.config.repeat="list"}}else{if(_model.config.chromeless){pluginorder=["logo","dock","playlist"];if(!jwplayer.utils.exists(_model.config.repeat)){_model.config.repeat="list"}}}_model.plugins={order:pluginorder,config:{},object:{}};if(typeof _model.config.components!="undefined"){for(var component in _model.config.components){_model.plugins.config[component]=_model.config.components[component]}}var playlistVisible=false;for(var pluginIndex in _model.plugins.order){var pluginName=_model.plugins.order[pluginIndex];var pluginConfig=!jwplayer.utils.exists(_model.plugins.config[pluginName])?{}:_model.plugins.config[pluginName];_model.plugins.config[pluginName]=!jwplayer.utils.exists(_model.plugins.config[pluginName])?pluginConfig:jwplayer.utils.extend(_model.plugins.config[pluginName],pluginConfig);if(!jwplayer.utils.exists(_model.plugins.config[pluginName].position)){if(pluginName=="playlist"){_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.NONE}else{_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.OVER}}else{if(pluginName=="playlist"){playlistVisible=true}_model.plugins.config[pluginName].position=_model.plugins.config[pluginName].position.toString().toUpperCase()}}if(_model.plugins.config.controlbar&&playlistVisible){_model.plugins.config.controlbar.hideplaylistcontrols=true}if(typeof _model.plugins.config.dock!="undefined"){if(typeof _model.plugins.config.dock!="object"){var position=_model.plugins.config.dock.toString().toUpperCase();_model.plugins.config.dock={position:position}}if(typeof _model.plugins.config.dock.position!="undefined"){_model.plugins.config.dock.align=_model.plugins.config.dock.position;_model.plugins.config.dock.position=jwplayer.html5.view.positions.OVER}if(typeof _model.plugins.config.dock.idlehide=="undefined"){try{_model.plugins.config.dock.idlehide=_model.plugins.config.controlbar.idlehide}catch(e){}}}function _loadExternal(playlistfile){var loader=new jwplayer.html5.playlistloader();loader.addEventListener(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,function(evt){_model.playlist=new jwplayer.html5.playlist(evt);_loadComplete(true)});loader.addEventListener(jwplayer.api.events.JWPLAYER_ERROR,function(evt){_model.playlist=new jwplayer.html5.playlist({playlist:[]});_loadComplete(false)});loader.load(playlistfile)}function _loadComplete(){if(_model.config.shuffle){_model.item=_getShuffleItem()}else{if(_model.config.item>=_model.playlist.length){_model.config.item=_model.playlist.length-1}else{if(_model.config.item<0){_model.config.item=0}}_model.item=_model.config.item}_model.position=0;_model.duration=_model.playlist.length>0?_model.playlist[_model.item].duration:0;_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:_model.playlist});_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM,{index:_model.item})}_model.loadPlaylist=function(arg){var input;if(typeof arg=="string"){if(arg.indexOf("[")==0||arg.indexOf("{")=="0"){try{input=eval(arg)}catch(err){input=arg}}else{input=arg}}else{input=arg}var config;switch(jwplayer.utils.typeOf(input)){case"object":config=input;break;case"array":config={playlist:input};break;default:config={file:input};break}_model.playlist=new jwplayer.html5.playlist(config);_model.item=_model.config.item>=0?_model.config.item:0;if(!_model.playlist[_model.item].provider){_loadExternal(_model.playlist[_model.item].file)}else{_loadComplete()}};function _getShuffleItem(){var result=null;if(_model.playlist.length>1){while(!jwplayer.utils.exists(result)){result=Math.floor(Math.random()*_model.playlist.length);if(result==_model.item){result=null}}}else{result=0}return result}function forward(evt){if(evt.type==jwplayer.api.events.JWPLAYER_MEDIA_LOADED){_container=_media.getDisplayElement()}_eventDispatcher.sendEvent(evt.type,evt)}var _mediaProviders={};_model.setActiveMediaProvider=function(playlistItem){if(playlistItem.provider=="audio"){playlistItem.provider="sound"}var provider=playlistItem.provider;var current=_media?_media.getDisplayElement():null;if(provider=="sound"||provider=="http"||provider==""){provider="video"}if(!jwplayer.utils.exists(_mediaProviders[provider])){switch(provider){case"video":_media=new jwplayer.html5.mediavideo(_model,current?current:_container);break;case"youtube":_media=new jwplayer.html5.mediayoutube(_model,current?current:_container);break}if(!jwplayer.utils.exists(_media)){return false}_media.addGlobalListener(forward);_mediaProviders[provider]=_media}else{if(_media!=_mediaProviders[provider]){if(_media){_media.stop()}_media=_mediaProviders[provider]}}return true};_model.getMedia=function(){return _media};_model.seek=function(pos){_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_SEEK,{position:_model.position,offset:pos});return _media.seek(pos)};_model.setupPlugins=function(){if(!jwplayer.utils.exists(_model.plugins)||!jwplayer.utils.exists(_model.plugins.order)||_model.plugins.order.length==0){jwplayer.utils.log("No plugins to set up");return _model}for(var i=0;i<_model.plugins.order.length;i++){try{var pluginName=_model.plugins.order[i];if(jwplayer.utils.exists(jwplayer.html5[pluginName])){if(pluginName=="playlist"){_model.plugins.object[pluginName]=new jwplayer.html5.playlistcomponent(_api,_model.plugins.config[pluginName])}else{_model.plugins.object[pluginName]=new jwplayer.html5[pluginName](_api,_model.plugins.config[pluginName])}}else{_model.plugins.order.splice(plugin,plugin+1)}if(typeof _model.plugins.object[pluginName].addGlobalListener=="function"){_model.plugins.object[pluginName].addGlobalListener(forward)}}catch(err){jwplayer.utils.log("Could not setup "+pluginName)}}};return _model}})(jwplayer);(function(a){a.html5.playlist=function(b){var d=[];if(b.playlist&&b.playlist instanceof Array&&b.playlist.length>0){for(var c in b.playlist){if(!isNaN(parseInt(c))){d.push(new a.html5.playlistitem(b.playlist[c]))}}}else{d.push(new a.html5.playlistitem(b))}return d}})(jwplayer);(function(a){var c={size:180,position:a.html5.view.positions.NONE,itemheight:60,thumbs:true,fontcolor:"#000000",overcolor:"",activecolor:"",backgroundcolor:"#f8f8f8",font:"_sans",fontsize:"",fontstyle:"",fontweight:""};var b={_sans:"Arial, Helvetica, sans-serif",_serif:"Times, Times New Roman, serif",_typewriter:"Courier New, Courier, monospace"};_utils=a.utils;_css=_utils.css;_hide=function(d){_css(d,{display:"none"})};_show=function(d){_css(d,{display:"block"})};a.html5.playlistcomponent=function(r,B){var w=r;var e=a.utils.extend({},c,w.skin.getComponentSettings("playlist"),B);if(e.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[e.position]=="undefined"){return}var x;var l;var C;var d;var g;var f;var k=-1;var h={background:undefined,item:undefined,itemOver:undefined,itemImage:undefined,itemActive:undefined};this.getDisplayElement=function(){return x};this.resize=function(F,D){l=F;C=D;if(w.jwGetFullscreen()){_hide(x)}else{var E={display:"block",width:l,height:C};_css(x,E)}};this.show=function(){_show(x)};this.hide=function(){_hide(x)};function j(){x=document.createElement("div");x.id=w.id+"_jwplayer_playlistcomponent";x.style.overflow="hidden";switch(e.position){case a.html5.view.positions.RIGHT:case a.html5.view.positions.LEFT:x.style.width=e.size+"px";break;case a.html5.view.positions.TOP:case a.html5.view.positions.BOTTOM:x.style.height=e.size+"px";break}A();if(h.item){e.itemheight=h.item.height}x.style.backgroundColor="#C6C6C6";w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,s);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,u);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,m)}function p(){var D=document.createElement("ul");_css(D,{width:x.style.width,minWidth:x.style.width,height:x.style.height,backgroundColor:e.backgroundcolor,backgroundImage:h.background?"url("+h.background.src+")":"",color:e.fontcolor,listStyle:"none",margin:0,padding:0,fontFamily:b[e.font]?b[e.font]:b._sans,fontSize:(e.fontsize?e.fontsize:11)+"px",fontStyle:e.fontstyle,fontWeight:e.fontweight,overflowY:"auto"});return D}function y(D){return function(){var E=f.getElementsByClassName("item")[D];var F=e.fontcolor;var G=h.item?"url("+h.item.src+")":"";if(D==w.jwGetPlaylistIndex()){if(e.activecolor!==""){F=e.activecolor}if(h.itemActive){G="url("+h.itemActive.src+")"}}_css(E,{color:e.overcolor!==""?e.overcolor:F,backgroundImage:h.itemOver?"url("+h.itemOver.src+")":G})}}function o(D){return function(){var E=f.getElementsByClassName("item")[D];var F=e.fontcolor;var G=h.item?"url("+h.item.src+")":"";if(D==w.jwGetPlaylistIndex()){if(e.activecolor!==""){F=e.activecolor}if(h.itemActive){G="url("+h.itemActive.src+")"}}_css(E,{color:F,backgroundImage:G})}}function q(I){var P=d[I];var O=document.createElement("li");O.className="item";_css(O,{height:e.itemheight,display:"block",cursor:"pointer",backgroundImage:h.item?"url("+h.item.src+")":"",backgroundSize:"100% "+e.itemheight+"px"});O.onmouseover=y(I);O.onmouseout=o(I);var J=document.createElement("div");var F=new Image();var K=0;var L=0;var M=0;if(v()&&(P.image||P["playlist.image"]||h.itemImage)){F.className="image";if(h.itemImage){K=(e.itemheight-h.itemImage.height)/2;L=h.itemImage.width;M=h.itemImage.height}else{L=e.itemheight*4/3;M=e.itemheight}_css(J,{height:M,width:L,"float":"left",styleFloat:"left",cssFloat:"left",margin:"0 5px 0 0",background:"black",overflow:"hidden",margin:K+"px",position:"relative"});_css(F,{position:"relative"});J.appendChild(F);F.onload=function(){a.utils.stretch(a.utils.stretching.FILL,F,L,M,this.naturalWidth,this.naturalHeight)};if(P["playlist.image"]){F.src=P["playlist.image"]}else{if(P.image){F.src=P.image}else{if(h.itemImage){F.src=h.itemImage.src}}}O.appendChild(J)}var E=l-L-K*2;if(C<e.itemheight*d.length){E-=15}var D=document.createElement("div");_css(D,{position:"relative",height:"100%",overflow:"hidden"});var G=document.createElement("span");if(P.duration>0){G.className="duration";_css(G,{fontSize:(e.fontsize?e.fontsize:11)+"px",fontWeight:(e.fontweight?e.fontweight:"bold"),width:"40px",height:e.fontsize?e.fontsize+10:20,lineHeight:24,"float":"right",styleFloat:"right",cssFloat:"right"});G.innerHTML=_utils.timeFormat(P.duration);D.appendChild(G)}var N=document.createElement("span");N.className="title";_css(N,{padding:"5px 5px 0 "+(K?0:"5px"),height:e.fontsize?e.fontsize+10:20,lineHeight:e.fontsize?e.fontsize+10:20,overflow:"hidden","float":"left",styleFloat:"left",cssFloat:"left",width:((P.duration>0)?E-50:E)-10+"px",fontSize:(e.fontsize?e.fontsize:13)+"px",fontWeight:(e.fontweight?e.fontweight:"bold")});N.innerHTML=P?P.title:"";D.appendChild(N);if(P.description){var H=document.createElement("span");H.className="description";_css(H,{display:"block","float":"left",styleFloat:"left",cssFloat:"left",margin:0,paddingLeft:N.style.paddingLeft,paddingRight:N.style.paddingRight,lineHeight:(e.fontsize?e.fontsize+4:16)+"px",overflow:"hidden",position:"relative"});H.innerHTML=P.description;D.appendChild(H)}O.appendChild(D);return O}function s(E){x.innerHTML="";d=w.jwGetPlaylist();if(!d){return}items=[];f=p();for(var F=0;F<d.length;F++){var D=q(F);D.onclick=z(F);f.appendChild(D);items.push(D)}k=w.jwGetPlaylistIndex();o(k)();x.appendChild(f);if(_utils.isIOS()&&window.iScroll){f.style.height=e.itemheight*d.length+"px";var G=new iScroll(x.id)}}function z(D){return function(){w.jwPlaylistItem(D);w.jwPlay(true)}}function n(){f.scrollTop=w.jwGetPlaylistIndex()*e.itemheight}function v(){return e.thumbs.toString().toLowerCase()=="true"}function u(D){if(k>=0){o(k)();k=D.index}o(D.index)();n()}function m(){if(e.position==a.html5.view.positions.OVER){switch(w.jwGetState()){case a.api.events.state.IDLE:_show(x);break;default:_hide(x);break}}}function A(){for(var D in h){h[D]=t(D)}}function t(D){return w.skin.getSkinElement("playlist",D)}j();return this}})(jwplayer);(function(b){b.html5.playlistitem=function(d){var e={author:"",date:"",description:"",image:"",link:"",mediaid:"",tags:"",title:"",provider:"",file:"",streamer:"",duration:-1,start:0,currentLevel:-1,levels:[]};var c=b.utils.extend({},e,d);if(c.type){c.provider=c.type;delete c.type}if(c.levels.length===0){c.levels[0]=new b.html5.playlistitemlevel(c)}if(!c.provider){c.provider=a(c.levels[0])}else{c.provider=c.provider.toLowerCase()}return c};function a(e){if(b.utils.isYouTube(e.file)){return"youtube"}else{var f=b.utils.extension(e.file);var c;if(f&&b.utils.extensionmap[f]){if(f=="m3u8"){return"video"}c=b.utils.extensionmap[f].html5}else{if(e.type){c=e.type}}if(c){var d=c.split("/")[0];if(d=="audio"){return"sound"}else{if(d=="video"){return d}}}}return""}})(jwplayer);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(a.utils.exists(b[c])){d[c]=b[c]}}return d}})(jwplayer);(function(a){a.html5.playlistloader=function(){var c=new a.html5.eventdispatcher();a.utils.extend(this,c);this.load=function(e){a.utils.ajax(e,d,b)};function d(g){var f=[];try{var f=a.utils.parsers.rssparser.parse(g.responseXML.firstChild);c.sendEvent(a.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:new a.html5.playlist({playlist:f})})}catch(h){b("Could not parse the playlist")}}function b(e){c.sendEvent(a.api.events.JWPLAYER_ERROR,{message:e?e:"Could not load playlist an unknown reason."})}}})(jwplayer);(function(a){a.html5.skin=function(){var b={};var c=false;this.load=function(d,e){new a.html5.skinloader(d,function(f){c=true;b=f;e()},function(){new a.html5.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){a.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){return b[d].layout}return null}}})(jwplayer);(function(a){a.html5.skinloader=function(f,p,k){var o={};var c=p;var l=k;var e=true;var j;var n=f;var s=false;function m(){if(typeof n!="string"||n===""){d(a.html5.defaultSkin().xml)}else{a.utils.ajax(a.utils.getAbsolutePath(n),function(t){try{if(a.utils.exists(t.responseXML)){d(t.responseXML);return}}catch(u){h()}d(a.html5.defaultSkin().xml)},function(t){d(a.html5.defaultSkin().xml)})}}function d(y){var E=y.getElementsByTagName("component");if(E.length===0){return}for(var H=0;H<E.length;H++){var C=E[H].getAttribute("name");var B={settings:{},elements:{},layout:{}};o[C]=B;var G=E[H].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var F=0;F<G.length;F++){b(G[F],C)}var z=E[H].getElementsByTagName("settings")[0];if(z&&z.childNodes.length>0){var K=z.getElementsByTagName("setting");for(var P=0;P<K.length;P++){var Q=K[P].getAttribute("name");var I=K[P].getAttribute("value");var x=/color$/.test(Q)?"color":null;o[C].settings[Q]=a.utils.typechecker(I,x)}}var L=E[H].getElementsByTagName("layout")[0];if(L&&L.childNodes.length>0){var M=L.getElementsByTagName("group");for(var w=0;w<M.length;w++){var A=M[w];o[C].layout[A.getAttribute("position")]={elements:[]};for(var O=0;O<A.attributes.length;O++){var D=A.attributes[O];o[C].layout[A.getAttribute("position")][D.name]=D.value}var N=A.getElementsByTagName("*");for(var v=0;v<N.length;v++){var t=N[v];o[C].layout[A.getAttribute("position")].elements.push({type:t.tagName});for(var u=0;u<t.attributes.length;u++){var J=t.attributes[u];o[C].layout[A.getAttribute("position")].elements[v][J.name]=J.value}if(!a.utils.exists(o[C].layout[A.getAttribute("position")].elements[v].name)){o[C].layout[A.getAttribute("position")].elements[v].name=t.tagName}}}}e=false;r()}}function r(){clearInterval(j);if(!s){j=setInterval(function(){q()},100)}}function b(y,x){var w=new Image();var t=y.getAttribute("name");var v=y.getAttribute("src");var A;if(v.indexOf("data:image/png;base64,")===0){A=v}else{var u=a.utils.getAbsolutePath(n);var z=u.substr(0,u.lastIndexOf("/"));A=[z,x,v].join("/")}o[x].elements[t]={height:0,width:0,src:"",ready:false,image:w};w.onload=function(B){g(w,t,x)};w.onerror=function(B){s=true;r();l()};w.src=A}function h(){for(var u in o){var w=o[u];for(var t in w.elements){var x=w.elements[t];var v=x.image;v.onload=null;v.onerror=null;delete x.image;delete w.elements[t]}delete o[u]}}function q(){for(var t in o){if(t!="properties"){for(var u in o[t].elements){if(!o[t].elements[u].ready){return}}}}if(e===false){clearInterval(j);c(o)}}function g(t,v,u){if(o[u]&&o[u].elements[v]){o[u].elements[v].height=t.height;o[u].elements[v].width=t.width;o[u].elements[v].src=t.src;o[u].elements[v].ready=true;r()}else{a.utils.log("Loaded an image for a missing element: "+u+"."+v)}}m()}})(jwplayer);(function(a){a.html5.api=function(c,n){var m={};var f=document.createElement("div");c.parentNode.replaceChild(f,c);f.id=c.id;m.version=a.version;m.id=f.id;var l=new a.html5.model(m,f,n);var j=new a.html5.view(m,f,l);var k=new a.html5.controller(m,f,l,j);m.skin=new a.html5.skin();m.jwPlay=function(o){if(typeof o=="undefined"){e()}else{if(o.toString().toLowerCase()=="true"){k.play()}else{k.pause()}}};m.jwPause=function(o){if(typeof o=="undefined"){e()}else{if(o.toString().toLowerCase()=="true"){k.pause()}else{k.play()}}};function e(){if(l.state==a.api.events.state.PLAYING||l.state==a.api.events.state.BUFFERING){k.pause()}else{k.play()}}m.jwStop=k.stop;m.jwSeek=k.seek;m.jwPlaylistItem=k.item;m.jwPlaylistNext=k.next;m.jwPlaylistPrev=k.prev;m.jwResize=k.resize;m.jwLoad=k.load;m.jwDetachMedia=k.detachMedia;m.jwAttachMedia=k.attachMedia;function h(o){return function(){return l[o]}}function d(o,q,p){return function(){var r=l.plugins.object[o];if(r&&r[q]&&typeof r[q]=="function"){r[q].apply(r,p)}}}m.jwGetItem=h("item");m.jwGetPosition=h("position");m.jwGetDuration=h("duration");m.jwGetBuffer=h("buffer");m.jwGetWidth=h("width");m.jwGetHeight=h("height");m.jwGetFullscreen=h("fullscreen");m.jwSetFullscreen=k.setFullscreen;m.jwGetVolume=h("volume");m.jwSetVolume=k.setVolume;m.jwGetMute=h("mute");m.jwSetMute=k.setMute;m.jwGetStretching=function(){return l.stretching.toUpperCase()};m.jwGetState=h("state");m.jwGetVersion=function(){return m.version};m.jwGetPlaylist=function(){return l.playlist};m.jwGetPlaylistIndex=m.jwGetItem;m.jwAddEventListener=k.addEventListener;m.jwRemoveEventListener=k.removeEventListener;m.jwSendEvent=k.sendEvent;m.jwDockSetButton=function(r,o,p,q){if(l.plugins.object.dock&&l.plugins.object.dock.setButton){l.plugins.object.dock.setButton(r,o,p,q)}};m.jwControlbarShow=d("controlbar","show");m.jwControlbarHide=d("controlbar","hide");m.jwDockShow=d("dock","show");m.jwDockHide=d("dock","hide");m.jwDisplayShow=d("display","show");m.jwDisplayHide=d("display","hide");m.jwGetLevel=function(){};m.jwGetBandwidth=function(){};m.jwGetLockState=function(){};m.jwLock=function(){};m.jwUnlock=function(){};function b(){if(l.config.playlistfile){l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.loadPlaylist(l.config.playlistfile)}else{if(typeof l.config.playlist=="string"){l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.loadPlaylist(l.config.playlist)}else{l.loadPlaylist(l.config);setTimeout(g,25)}}}function g(o){l.removeEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.setupPlugins();j.setup();var o={id:m.id,version:m.version};k.playerReady(o)}if(l.config.chromeless&&!a.utils.isIOS()){b()}else{m.skin.load(l.config.skin,b)}return m}})(jwplayer)};
Index: /tags/plugins/captions/3.0/test/assets/corrie-speakers.xml
===================================================================
--- /tags/plugins/captions/3.0/test/assets/corrie-speakers.xml	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/corrie-speakers.xml	(revision 1767)
@@ -0,0 +1,23 @@
+<tt xmlns="http://www.w3.org/2006/10/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
+  <head>
+   <styling>
+      <style id="jason" tts:color="#00FF00" />
+      <style id="violet" tts:color="#FF0000" />
+      <style id="sarah" tts:color="#FFCC00" />
+      <style id="eileen" tts:color="#3333FF" />
+   </styling>
+  </head>
+  <body>
+    <div>
+      <p begin="00:00:08" end="00:00:10" style="jason">Nothing is going on.</p>
+      <p begin="00:00:10.5" end="00:00:12.5" style="sarah">You liar!</p>
+      <p begin="00:00:13.5" end="00:00:15" style="violet">Are you?</p>
+      <p begin="00:00:17" end="00:00:20" style="jason">Violet, please!<br/><span style="violet">I am not your babe!</span></p>
+      <p begin="00:00:24" end="00:00:29" style="jason">You stupid cow,<br/>look what you have done now, ay.</p>
+      <p begin="00:00:34" end="00:00:36" style="jason">Vi, please.<br/><span style="violet">Leave me alone!</span></p>
+      <p begin="00:00:36" end="00:00:38.5" style="jason">We need to talk.<br/><span style="violet">Jason, are you deaf?</span></p>
+      <p begin="00:00:41" end="00:00:42.9" style="eileen">What's going on?</p>
+      <p begin="00:00:43" end="00:00:45" style="eileen">Get out there<br/>and try to salvage this!</p>
+    </div>
+  </body>
+</tt>
Index: /tags/plugins/captions/3.0/test/assets/playlist.xml
===================================================================
--- /tags/plugins/captions/3.0/test/assets/playlist.xml	(revision 2017)
+++ /tags/plugins/captions/3.0/test/assets/playlist.xml	(revision 2017)
@@ -0,0 +1,44 @@
+<rss version="2.0" xmlns:jwplayer="http://developer.longtailvideo.com/trac/wiki/FlashFormats">
+  <channel>
+    <title>Example RSS playlist with captions</title>
+
+    <item>
+      <title>Coronation Street</title>
+      <description>Single, external SRT captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/7OCSON1y.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/7OCSON1y-320.jpg</jwplayer:image>
+      <jwplayer:captions.file>assets/corrie.srt</jwplayer:captions.file>
+    </item>
+
+    <item>
+      <title>Big Buck Bunny</title>
+      <description>Single, embedded MP4 captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/aytCR4cx-393434.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/aytCR4cx-320.jpg</jwplayer:image>
+    </item>
+
+    <item>
+      <title>Men With Talent</title>
+      <description>No captions at all.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/SAs4hE5G-364766.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/SAs4hE5G-320.jpg</jwplayer:image>
+    </item>
+
+    <item>
+      <title>Global Timoto</title>
+      <description>Multiple, embedded MP4 captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/w5VkaqJ1-393434.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/w5VkaqJ1-320.jpg</jwplayer:image>
+    </item>
+
+    <item>
+      <title>Sintel</title>
+      <description>Multiple, external SRT captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/q1fx20VZ-364765.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/q1fx20VZ-320.jpg</jwplayer:image>
+      <jwplayer:captions.files>assets/sintel-dut.txt,assets/sintel-eng.txt,assets/sintel-fra.txt,assets/sintel-deu.txt,assets/sintel-ita.txt,assets/sintel-pol.txt,assets/sintel-por.txt,assets/sintel-rus.txt,assets/sintel-spa.txt</jwplayer:captions.files>
+      <jwplayer:captions.labels>Dutch,English,French,German,Italian,Polish,Portuguese,Russian,Spanish</jwplayer:captions.labels>
+    </item>
+
+  </channel>
+</rss>
Index: /tags/plugins/captions/3.0/test/assets/singleline.srt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/singleline.srt	(revision 1979)
+++ /tags/plugins/captions/3.0/test/assets/singleline.srt	(revision 1979)
@@ -0,0 +1,35 @@
+1
+00:00:08,000 --> 00:00:10,000
+- Nothing is going on.
+
+2
+00:00:10,500 --> 00:00:12,500
+You liar!
+
+3
+00:00:13,500 --> 00:00:15,000
+Are you?
+
+4
+00:00:17,000 --> 00:00:20,000
+Violet, please! - I am not your babe!
+
+5
+00:00:24,000 --> 00:00:29,000
+You stupid cow, look what you gone and done now, ay.
+
+6
+00:00:34,000 --> 00:00:36,000
+Vi, please. - Leave me alone!
+
+7
+00:00:36,000 --> 00:00:38,500
+- We need to talk. - Jason, are you deaf?!
+
+8
+00:00:41,000 --> 00:00:43,000
+What's going on?
+
+9
+00:00:43,000 --> 00:00:45,000
+Get out there and try to salvage this!
Index: /tags/plugins/captions/3.0/test/assets/swfobject.js
===================================================================
--- /tags/plugins/captions/3.0/test/assets/swfobject.js	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/swfobject.js	(revision 1964)
@@ -0,0 +1,4 @@
+/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
+	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
+*/
+var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
Index: /tags/plugins/captions/3.0/test/assets/sintel-pol.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-pol.txt	(revision 1980)
+++ /tags/plugins/captions/3.0/test/assets/sintel-pol.txt	(revision 1980)
@@ -0,0 +1,109 @@
+1
+00:01:47,025 --> 00:01:50,050
+To ostrze ma mrocznÄ
+ przeszÅoÅÄ.
+
+2
+00:01:51,079 --> 00:01:55,079
+WytoczyÅo wiele niewinnej krwi.
+
+3
+00:01:58,000 --> 00:02:01,045
+JesteÅ szalona podrÃ³ÅŒujÄ
+c samotnie 
+bez najmniejszego przygotowania.
+
+4
+00:02:01,075 --> 00:02:04,079
+Masz szczÄÅcie,ÅŒe jeszcze ÅŒyjesz.
+
+5
+00:02:05,025 --> 00:02:06,029
+DziÄkujÄ.
+
+6
+00:02:07,050 --> 00:02:09,000
+No cÃ³ÅŒ...
+
+7
+00:02:09,040 --> 00:02:13,080
+Co ciÄ przywiodÅo do krainy straÅŒnikÃ³w?
+
+8
+00:02:15,000 --> 00:02:17,050
+PoszukujÄ kogoÅ.
+
+9
+00:02:18,000 --> 00:02:22,019
+Czy to ktoÅ bliski ?
+Bratnia dusza?
+
+10
+00:02:23,040 --> 00:02:25,000
+Smok.
+
+11
+00:02:28,084 --> 00:02:31,075
+Niebezpieczna to wyprawa dla samotnego Åowcy.
+
+12
+00:02:32,094 --> 00:02:35,087
+OdkÄ
+d pamiÄtam zawsze byÅam sama.
+
+13
+00:03:27,025 --> 00:03:30,050
+JuÅŒ prawie skoÅczyÅam, ciiiii....
+
+14
+00:03:30,075 --> 00:03:33,050
+Ej, siedÅº spokojnie.
+
+15
+00:03:48,025 --> 00:03:52,025
+Dobranoc, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Bierz jÄ
+ Scales! Dalej!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Tak! Dobrze!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+PogubiÅam siÄ.
+
+21
+00:07:32,080 --> 00:07:36,050
+Nie, tylko nie dostrzegasz, ÅŒe...
+
+22
+00:07:37,080 --> 00:07:40,050
+jesteÅ juÅŒ w krainie smokÃ³w, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+UdaÅo ci siÄ.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/sintel-kor.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-kor.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-kor.txt	(revision 1964)
@@ -0,0 +1,110 @@
+
+1
+00:01:47,250 --> 00:01:50,500
+ìŽ ì¹Œë ìë ìŽëìŽ ê³Œê±°ê° ìë€.
+
+2
+00:01:51,800 --> 00:01:55,800
+ë§ì ë¬Žê³ í íŒê° ìë € ìêµ°.
+
+3
+00:01:58,000 --> 00:02:01,450
+ìë¬Žë° ì€ë¹ë ììŽ íŒì ë€ëë€ë, ë°ë³Žê°êµ°.
+
+4
+00:02:01,750 --> 00:02:04,800
+ì¬í ìŽììë ê² íìŽìŽë€.
+
+5
+00:02:05,250 --> 00:02:06,300
+ê°ì¬í©ëë€.
+
+6
+00:02:07,500 --> 00:02:09,000
+ê·žë°ë°...
+
+7
+00:02:09,400 --> 00:02:13,800
+ë¬žì§êž°ë€ì ë
+ìë
+ë¬Žìš ìŒë¡ ì°Ÿììë?
+
+8
+00:02:15,000 --> 00:02:17,500
+ì°Ÿë ê² ììŽìì.
+
+9
+00:02:18,000 --> 00:02:22,200
+ìì£Œ ìì€í ê²ìžê° ë³Žêµ°?
+ê°ê¹ìŽ ì¹êµ¬ìžê°?
+
+10
+00:02:23,400 --> 00:02:25,000
+ì©ìŽì.
+
+11
+00:02:28,850 --> 00:02:31,750
+íë¡ ë€ëë ì¬ë¥êŸŒìê²ë ìíí ìŒìŽêµ°.
+
+12
+00:02:32,950 --> 00:02:35,870
+ì ë ìžì ë ìžíšìŽììŽì.
+
+13
+00:03:27,250 --> 00:03:30,500
+ê±°ì ë€ ëë€. ì¿... 
+
+14
+00:03:30,750 --> 00:03:33,500
+ê°ë§í ììŽ.
+
+15
+00:03:48,250 --> 00:03:52,250
+ì ì, ë¹ëì.
+
+16
+00:04:10,350 --> 00:04:13,850
+ì¡ì, ë¹ëì! ë¹šëŠ¬!
+
+17
+00:04:25,250 --> 00:04:28,250
+ë¹ëì?
+
+18
+00:05:04,000 --> 00:05:07,500
+ì¢ììŽ!
+
+19
+00:05:38,750 --> 00:05:42,000
+ë¹ëì!
+
+20
+00:07:25,850 --> 00:07:27,500
+ë ì°Ÿì§ ëª»íìŽì.
+
+21
+00:07:32,800 --> 00:07:36,500
+ë³Žì§ ëª»íì ë¿ìŽê² ì§...
+
+22
+00:07:37,800 --> 00:07:40,500
+ì¬êž°ë ì©ì ë
+ìŽëë€, ì í
+.
+
+23
+00:07:40,850 --> 00:07:44,000
+ìê°íë ê²ë³Žë€ ê°ê¹ìŽ ìë€.
+
+24
+00:09:17,600 --> 00:09:19,500
+ë¹ëì!
+
+25
+00:10:21,600 --> 00:10:24,000
+ë¹ëìŽë?
+
+26
+00:10:26,200 --> 00:10:29,800
+ë¹ëì...
+
Index: /tags/plugins/captions/3.0/test/assets/malformed.xml
===================================================================
--- /tags/plugins/captions/3.0/test/assets/malformed.xml	(revision 1973)
+++ /tags/plugins/captions/3.0/test/assets/malformed.xml	(revision 1973)
@@ -0,0 +1,15 @@
+<tt>
+  <body>
+    <div>
+        - Nothing is going on.</p>
+      <p begin="00:00:10.5" end="00:00:12.5">You liar!</p>
+      <p begin="00:00:13.5" end="00:00:15">Are you?</p>
+      <p begin="00:00:17" end="00:00:20">Violet, please!<br/>- I am not your babe!</p>
+      <p begin="00:00:24" end="00:00:29">You stupid cow,<br/>look what you gone and done now, ay.</p>
+      <p begin="00:00:34" end="00:00:36">Vi, please.<br/>- Leave me alone!</p>
+      <p begin="00:00:36" end="00:00:38.5">- We need to talk.<br/>- Jason, are you deaf?!</p>
+      <p begin="00:00:41" end="00:00:42.9">What's going on?</p>
+      <p begin="00:00:43" end="00:00:45">Get out there and try to salvage this!
+    </div>
+  </body>
+</tt>
Index: /tags/plugins/captions/3.0/test/assets/sintel-dut.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-dut.txt	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/sintel-dut.txt	(revision 1767)
@@ -0,0 +1,103 @@
+1
+00:01:47,025 --> 00:01:50,050
+Dit wapen heeft een donker verleden.
+
+2
+00:01:51,079 --> 00:01:55,079
+Het heeft veel onschuldig bloed doen vloeien.
+
+3
+00:01:58,000 --> 00:02:01,045
+Het is dom dat je alleen reist, zo onvoorbereid.
+
+4
+00:02:01,075 --> 00:02:04,079
+Je hebt geluk dat je bloed nog stroomt.
+
+5
+00:02:05,025 --> 00:02:06,029
+Dank u.
+
+6
+00:02:07,050 --> 00:02:09,000
+Dus...
+
+7
+00:02:09,040 --> 00:02:13,080
+Wat brengt je naar het land van de poortwachters?
+
+8
+00:02:15,000 --> 00:02:17,050
+Ik ben op zoek naar iemand.
+
+9
+00:02:18,000 --> 00:02:22,019
+Een dierbare? Een zielsverwant?
+
+10
+00:02:23,040 --> 00:02:25,000
+Een draak.
+
+11
+00:02:28,084 --> 00:02:31,075
+Een gevaarlijke queeste voor een eenzame jager.
+
+12
+00:02:32,094 --> 00:02:35,087
+Ik ben alleen, al zo lang als ik me herinner.
+
+13
+00:03:27,025 --> 00:03:30,050
+We zijn bijna klaar. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+He, stil zitten.
+
+15
+00:03:48,025 --> 00:03:52,025
+Welterusten, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Pak em, Scales! Kom op!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ja! Kom op!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ik heb gefaald.
+
+21
+00:07:32,080 --> 00:07:36,050
+Je hebt enkel gefaald om te zien...
+
+22
+00:07:37,080 --> 00:07:40,050
+Dit is draken land, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Je bent dichter bij dan je denkt.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/sintel-por.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-por.txt	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/sintel-por.txt	(revision 1767)
@@ -0,0 +1,108 @@
+1
+00:01:47,025 --> 00:01:50,050
+Esta lÃ¢mina tem um passado escuro.
+
+2
+00:01:51,079 --> 00:01:55,079
+Ela jÃ¡ derramou muito sangue inocente.
+
+3
+00:01:58,000 --> 00:02:01,045
+Somente uma tola viajaria assim,
+sozinha e despreparada.
+
+4
+00:02:01,075 --> 00:02:04,079
+VocÄ tem sorte de ainda ter sangue.
+
+5
+00:02:05,025 --> 00:02:06,029
+Obrigada.
+
+6
+00:02:07,050 --> 00:02:09,000
+Pois bem...
+
+7
+00:02:09,040 --> 00:02:13,080
+O que a traz Å terra
+dos guardiÅes do portal?
+
+8
+00:02:15,000 --> 00:02:17,050
+Eu preciso encontrar alguÃ©m.
+
+9
+00:02:18,000 --> 00:02:22,019
+AlguÃ©m prÃ³ximo?
+Uma alma gÄmea?
+
+10
+00:02:23,040 --> 00:02:25,000
+Um dragÄo.
+
+11
+00:02:28,084 --> 00:02:31,075
+Uma tarefa perigosa para uma aventureira sÃ³.
+
+12
+00:02:32,094 --> 00:02:35,087
+Eu sigo sozinha hÃ¡ mais
+tempo que eu me lembre.
+
+13
+00:03:27,025 --> 00:03:30,050
+Eu jÃ¡ estou terminando. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+Ei, nÄo se meixa.
+
+15
+00:03:48,025 --> 00:03:52,025
+Boa noite, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Vamos Scales! Pega ele!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ã, boa!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Eu falhei.
+
+21
+00:07:32,080 --> 00:07:36,050
+A sua Ãºnica falha foi
+enxergar e nÄo ver...
+
+22
+00:07:37,080 --> 00:07:40,050
+Estas sÄo terras dos dragÅes, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+VocÄ estÃ¡ mais prÃ³xima do que imagina.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/sintel-chi.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-chi.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-chi.txt	(revision 1964)
@@ -0,0 +1,107 @@
+
+1
+00:01:47,250 --> 00:01:50,500
+éæåæèäžæ®µé»æçéå»
+
+2
+00:01:51,800 --> 00:01:55,800
+äžé¢æ²Ÿæ»¿äºå€ªå€ç¡èŸçé®®è¡
+
+3
+00:01:58,000 --> 00:02:01,450
+æ¯«ç¡æºåå°äžåäººäŸå°éè£¡  çæ¯æè ¢
+
+4
+00:02:01,750 --> 00:02:04,800
+äœ è©²æ
+¶å¹žäœ çå¿èéåšè·³
+
+5
+00:02:05,250 --> 00:02:06,300
+è¬è¬
+
+6
+00:02:07,500 --> 00:02:09,000
+é£éºŒ...
+
+7
+00:02:09,400 --> 00:02:13,800
+æ¯ä»éºŒé¢šæäœ å¹å°éå®éäººä¹å°?
+
+8
+00:02:15,000 --> 00:02:17,500
+æåšæŸäºº
+
+9
+00:02:18,000 --> 00:02:22,200
+åŸèŠªè¿çäºº?
+ç¥å¿çæå?
+
+10
+00:02:23,400 --> 00:02:25,000
+æ¯äžæ¢éŸ
+
+11
+00:02:28,850 --> 00:02:31,750
+å°äžåå­€å®ççµäººäŸèªª  éæ¯åå±éªçä»»å
+
+12
+00:02:32,950 --> 00:02:35,870
+åŸæéæå°è±¡ä»¥äŸ
+æäžçŽéœæ¯äžåäºº
+
+13
+00:03:26,250 --> 00:03:30,500
+å...  å°±å¿«å¥œäº
+
+14
+00:03:30,750 --> 00:03:33,500
+å¿  å¥äºå
+
+15
+00:03:48,250 --> 00:03:52,250
+æå®  å°é±
+
+16
+00:04:10,350 --> 00:04:13,850
+æäœä»  å°é±!  å¿«å!
+
+17
+00:04:25,250 --> 00:04:28,250
+å°é±?
+
+18
+00:05:04,000 --> 00:05:07,500
+è¶!  é£å!
+
+19
+00:05:38,750 --> 00:05:42,000
+å°é±!
+
+20
+00:07:25,850 --> 00:07:27,500
+ææ²èœæå
+
+21
+00:07:32,800 --> 00:07:36,500
+äœ åªæ¯æ²èœçèŠ...
+
+22
+00:07:37,800 --> 00:07:40,500
+éè£¡æ¯éŸçååºŠ  èŸç¹çŸ
+
+23
+00:07:40,650 --> 00:07:44,000
+äœ æ¯äœ èªçºçéæ¥è¿
+
+24
+00:09:17,600 --> 00:09:19,500
+å°é±!
+
+25
+00:10:21,600 --> 00:10:24,000
+å°é±?
+
+26
+00:10:26,200 --> 00:10:29,800
+å°é±...
Index: /tags/plugins/captions/3.0/test/assets/bunny-eng.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/bunny-eng.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/bunny-eng.txt	(revision 1964)
@@ -0,0 +1,32 @@
+1
+00:00:00,500 --> 00:00:04,000
+The Peach Open Movie Project presents
+
+2
+00:00:06,500 --> 00:00:09,000
+One big rabbit
+
+3
+00:00:11,000 --> 00:00:13,000
+Three rodents
+
+4
+00:00:16,500 --> 00:00:19,000
+And one giant payback
+
+5
+00:00:23,000 --> 00:00:25,000
+Get ready
+
+6
+00:00:27,000 --> 00:00:30,000
+Big Buck Bunny
+
+7
+00:00:30,000 --> 00:00:31,000
+Coming soon
+
+8
+00:00:31,000 --> 00:00:33,000
+www.bigbuckbunny.org
+Licensed as Creative Commons 3.0 attribution
Index: /tags/plugins/captions/3.0/test/assets/corrie.xml
===================================================================
--- /tags/plugins/captions/3.0/test/assets/corrie.xml	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/corrie.xml	(revision 1767)
@@ -0,0 +1,15 @@
+<tt xmlns="http://www.w3.org/2006/10/ttaf1">
+  <body>
+    <div>
+      <p begin="00:00:08" end="00:00:10">- Nothing is going on.</p>
+      <p begin="00:00:10.5" end="00:00:12.5">You liar!</p>
+      <p begin="00:00:13.5" end="00:00:15">Are you?</p>
+      <p begin="00:00:17" end="00:00:20">Violet, please!<br/>- I am not your babe!</p>
+      <p begin="00:00:24" end="00:00:29">You stupid cow,<br/>look what you gone and done now, ay.</p>
+      <p begin="00:00:34" end="00:00:36">Vi, please.<br/>- Leave me alone!</p>
+      <p begin="00:00:36" end="00:00:38.5">- We need to talk.<br/>- Jason, are you deaf?!</p>
+      <p begin="00:00:41" end="00:00:42.9">What's going on?</p>
+      <p begin="00:00:43" end="00:00:45">Get out there and try to salvage this!</p>
+    </div>
+  </body>
+</tt>
Index: /tags/plugins/captions/3.0/test/assets/sintel-fra.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-fra.txt	(revision 1769)
+++ /tags/plugins/captions/3.0/test/assets/sintel-fra.txt	(revision 1769)
@@ -0,0 +1,108 @@
+1
+00:01:47,025 --> 00:01:50,050
+Cette lame a un sombre passÃ©.
+
+2
+00:01:51,079 --> 00:01:55,079
+Elle a fait couler bien du sang innocent.
+
+3
+00:01:58,000 --> 00:02:01,045
+Tu es bien idiote de voyager seule
+sans la moindre prÃ©paration.
+
+4
+00:02:01,075 --> 00:02:04,079
+Tu as de la chance que ton sang coule encore
+dans tes veines.
+
+5
+00:02:05,025 --> 00:02:06,029
+Merci.
+
+6
+00:02:07,050 --> 00:02:09,000
+Alors...
+
+7
+00:02:09,040 --> 00:02:13,080
+Qu'est-ce qui t'amÃšne
+sur la terre des gardiens ?
+
+8
+00:02:15,000 --> 00:02:17,050
+Je recherche quelqu'un.
+
+9
+00:02:18,000 --> 00:02:22,019
+Quelqu'un de trÃšs cher ?
+Une Ã¢me sÅur ?
+
+10
+00:02:23,040 --> 00:02:25,000
+Un dragon.
+
+11
+00:02:28,084 --> 00:02:31,075
+Une quÃªte dangereuse pour une chasseresse solitaire.
+
+12
+00:02:32,094 --> 00:02:35,087
+J'ai Ã©tÃ© seule
+aussi longtemps que je m'en souvienne.
+
+13
+00:03:27,025 --> 00:03:30,050
+C'est bientÃŽt fini. Chut...
+
+14
+00:03:30,075 --> 00:03:33,050
+Ne bouge pas !
+
+15
+00:03:48,025 --> 00:03:52,025
+Bonne nuit, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Attrape-la, Scales ! Vas-y !
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ouais ! Vas-y !
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales !
+
+20
+00:07:25,085 --> 00:07:27,050
+J'ai Ã©chouÃ©.
+
+21
+00:07:32,080 --> 00:07:36,050
+Tu n'as juste pas su ouvrir les yeux...
+
+22
+00:07:37,080 --> 00:07:40,050
+Ce sont des terres Ã  dragons, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Tu es plus proche que tu ne le crois.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/sintel-eng.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-eng.txt	(revision 1979)
+++ /tags/plugins/captions/3.0/test/assets/sintel-eng.txt	(revision 1979)
@@ -0,0 +1,107 @@
+1
+00:01:47,025 --> 00:01:50,050
+This blade has a dark past.
+
+2
+00:01:51,079 --> 00:01:55,079
+It has shed much innocent blood.
+
+3
+00:01:58,000 --> 00:02:01,045
+You're a fool for traveling alone,
+so completely unprepared.
+
+4
+00:02:01,075 --> 00:02:04,079
+You're lucky your blood's still flowing.
+
+5
+00:02:05,025 --> 00:02:06,029
+Thank you.
+
+6
+00:02:07,050 --> 00:02:09,000
+So...
+
+7
+00:02:09,040 --> 00:02:13,080
+What brings you to
+the land of the gatekeepers?
+
+8
+00:02:15,000 --> 00:02:17,050
+I'm searching for someone.
+
+9
+00:02:18,000 --> 00:02:22,019
+Someone very dear?
+A kindred spirit?
+
+10
+00:02:23,040 --> 00:02:25,000
+A dragon.
+
+11
+00:02:28,084 --> 00:02:31,075
+A dangerous quest for a lone hunter.
+
+12
+00:02:32,094 --> 00:02:35,087
+I've been alone for
+as long as I can remember.
+
+13
+00:03:27,025 --> 00:03:30,050
+We're almost done. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+Hey, sit still.
+
+15
+00:03:48,025 --> 00:03:52,025
+Good night, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Get him, Scales! Come on!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Yeah! Come on!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+I have failed.
+
+21
+00:07:32,080 --> 00:07:36,050
+You've only failed to see...
+
+22
+00:07:37,080 --> 00:07:40,050
+These are dragon lands, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+You are closer than you know.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/sintel-rus.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-rus.txt	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/sintel-rus.txt	(revision 1767)
@@ -0,0 +1,109 @@
+1
+00:01:47,025 --> 00:01:50,050
+Ð! Ð­ÑÐŸ ÐºÐŸÐ¿ÑÑ Ñ ÑÐµÐŒÐœÑÐŒ Ð¿ÑÐŸÑÐ»ÑÐŒ.
+
+2
+00:01:51,079 --> 00:01:55,079
+ÐÐ³ÐŸ Ð»ÐµÐ·Ð²ÐžÐµ Ð²ÑÐ¿ÐžÐ»ÐŸ ÐœÐµÐŒÐ°Ð»ÐŸ ÐœÐµÐ²ÐžÐœÐœÐŸÐ¹ ÐºÑÐŸÐ²Ðž.
+
+3
+00:01:58,000 --> 00:02:01,045
+Ð¢ÐŸÐ»ÑÐºÐŸ Ð³Ð»ÑÐ¿ÐµÑ Ð¿ÑÑÐµÑÐµÑÑÐ²ÑÐµÑ Ð² ÐŸÐŽÐžÐœÐŸÑÐºÑ,
+ÐŽÐ° ÐµÑÐµ Ð±ÐµÐ· ÐŸÑÑÐ¶ÐžÑ.
+
+4
+00:02:01,075 --> 00:02:04,079
+Ð¢ÐµÐ±Ðµ Ð¿ÐŸÐ²ÐµÐ·Ð»ÐŸ, ÑÑÐŸ ÐŸÑÑÐ°Ð»Ð°ÑÑ Ð¶ÐžÐ²Ð°.
+
+5
+00:02:05,025 --> 00:02:06,029
+Ð¡Ð¿Ð°ÑÐžÐ±ÐŸ.
+
+6
+00:02:07,050 --> 00:02:09,000
+Ð Ð°ÑÐºÐ°Ð¶Ðž,
+
+7
+00:02:09,040 --> 00:02:13,080
+ÑÑÐŸ Ð¿ÑÐžÐ²ÐµÐ»ÐŸ ÑÐµÐ±Ñ Ð² ÑÑÑÐ°ÐœÑ
+Ñ
+ÑÐ°ÐœÐžÑÐµÐ»ÐµÐ¹?
+
+8
+00:02:15,000 --> 00:02:17,050
+Ð¯ ÐžÑÑ ÐºÐŸÐµ ÐºÐŸÐ³ÐŸ.
+
+9
+00:02:18,000 --> 00:02:22,019
+ÐÐŸÐ³ÐŸ-ÑÐŸ ÐŸÑÐµÐœÑ ÐŽÐŸÑÐŸÐ³ÐŸÐ³ÐŸ?
+Ð ÐŸÐŽÑÑÐ²ÐµÐœÐœÑÑ ÐŽÑÑÑ?
+
+10
+00:02:23,040 --> 00:02:25,000
+ÐÑÐ°ÐºÐŸÐœÐ°.
+
+11
+00:02:28,084 --> 00:02:31,075
+ÐÐ¿Ð°ÑÐœÐŸÐµ Ð·Ð°ÐœÑÑÐžÐµ ÐŽÐ»Ñ ÐŸÐŽÐžÐœÐŸÑÐºÐž.
+
+12
+00:02:32,094 --> 00:02:35,087
+Ð¡ÐºÐŸÐ»ÑÐºÐŸ ÑÐµÐ±Ñ Ð¿ÐŸÐŒÐœÑ, 
+Ñ Ð²ÑÐµÐ³ÐŽÐ° Ð±ÑÐ»Ð° ÐŸÐŽÐœÐ°.
+
+13
+00:03:27,025 --> 00:03:30,050
+Ð£Ð¶Ðµ Ð¿ÐŸÑÑÐž Ð²ÑÑ. ÐšÑÑÑ...
+
+14
+00:03:30,075 --> 00:03:33,050
+Ð¡Ð¿ÐŸÐºÐŸÐ¹ÐœÐŸ!
+
+15
+00:03:48,025 --> 00:03:52,025
+Ð¡Ð¿ÐŸÐºÐŸÐ¹ÐœÐŸÐ¹ ÐœÐŸÑÐž, Ð§ÐµÑÑÐ¹ÑÐžÐº.
+
+16
+00:04:10,034 --> 00:04:13,084
+ÐÐ·ÑÑÑ, Ð§ÐµÑÑÐ¹ÑÐžÐº! ÐÐ°Ð²Ð°Ð¹!
+
+17
+00:04:25,025 --> 00:04:28,025
+Ð§ÐµÑÑÐ¹ÑÐžÐº?
+
+18
+00:05:04,000 --> 00:05:07,050
+ÐÐ°! ÐÐ°Ð²Ð°Ð¹!
+
+19
+00:05:38,075 --> 00:05:42,000
+Ð§ÐµÑÑÐ¹ÑÐžÐº!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ð£ ÐŒÐµÐœÑ ÐœÐžÑÐµÐ³ÐŸ ÐœÐµ Ð¿ÐŸÐ»ÑÑÐžÐ»ÐŸÑÑ.
+
+21
+00:07:32,080 --> 00:07:36,050
+ÐÐµ Ð¿ÐŸÐ»ÑÑÐžÐ»ÐŸÑÑ ÑÐŸÐ»ÑÐºÐŸ Ð¿ÐŸÐœÑÑÑ,
+
+22
+00:07:37,080 --> 00:07:40,050
+ÑÑÐŸ ÑÑ ÐŽÐŸÑÐ»Ð° ÐŽÐŸ Ð·ÐµÐŒÐ»Ðž ÐŽÑÐ°ÐºÐŸÐœÐŸÐ², Ð¡ÐžÐœÑÑÐ»Ñ.
+
+23
+00:07:40,085 --> 00:07:44,000
+Ð ÑÐµÐ¿ÐµÑÑ Ð±Ð»ÐžÐ¶Ðµ Ðº ÑÐµÐ»Ðž,
+ÑÐµÐŒ ÑÑ ÐŽÑÐŒÐ°ÐµÑÑ.
+
+24
+00:09:17,060 --> 00:09:19,050
+Ð§ÐµÑÑÐ¹ÑÐžÐº!
+
+25
+00:10:21,060 --> 00:10:24,000
+Ð§ÐµÑÑÐ¹ÑÐžÐº?
+
+26
+00:10:26,020 --> 00:10:29,079
+Ð§ÐµÑÑÐ¹ÑÐžÐº...
Index: /tags/plugins/captions/3.0/test/assets/sintel-tur.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-tur.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-tur.txt	(revision 1964)
@@ -0,0 +1,109 @@
+
+1
+00:01:47,250 --> 00:01:50,500
+Bu bÄ±Ã§aÄÄ±n karanlÄ±k bir geÃ§miÅi var.
+
+2
+00:01:51,800 --> 00:01:55,800
+Ãok fazla masum kan dÃ¶ktÃŒ.
+
+3
+00:01:58,000 --> 00:02:01,450
+Bu kadar hazÄ±rlÄ±ksÄ±z ve yalnÄ±z baÅÄ±na
+seyahat etmekle aptallÄ±k ediyorsun.
+
+4
+00:02:01,750 --> 00:02:04,800
+DamarlarÄ±ndaki kan hala aktÄ±ÄÄ± iÃ§in ÅanslÄ±sÄ±n.
+
+5
+00:02:05,250 --> 00:02:06,300
+TeÅekkÃŒr ederim.
+
+6
+00:02:07,500 --> 00:02:09,000
+Pekala...
+
+7
+00:02:09,400 --> 00:02:13,800
+Seni bekÃ§ilerinin diyarÄ±na 
+getiren nedir?
+
+8
+00:02:15,000 --> 00:02:17,500
+Birini arÄ±yorum.
+
+9
+00:02:18,000 --> 00:02:22,200
+Ãok sevdiÄin birini?
+Sana yakÄ±n bir ruh?
+
+10
+00:02:23,400 --> 00:02:25,000
+Bir ejderha.
+
+11
+00:02:28,850 --> 00:02:31,750
+YalnÄ±z bir avcÄ± iÃ§in tehlikeli bir arayÄ±Å.
+
+12
+00:02:32,950 --> 00:02:35,870
+Kendimi bildim bileli
+hep yalnÄ±z oldum.
+
+13
+00:03:27,250 --> 00:03:30,500
+Neredeyse bitti. Shhh...
+
+14
+00:03:30,750 --> 00:03:33,500
+Hey, kÄ±mÄ±ldama.
+
+15
+00:03:48,250 --> 00:03:52,250
+Ä°yi geceler, Scales.
+
+16
+00:04:10,350 --> 00:04:13,850
+Yakala onu, Scales! Haydi!
+
+17
+00:04:25,250 --> 00:04:28,250
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,500
+Evet! Haydi!
+
+19
+00:05:38,750 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,850 --> 00:07:27,500
+BaÅarÄ±sÄ±z oldum.
+
+21
+00:07:32,800 --> 00:07:36,500
+YalnÄ±zca gÃ¶rmeyi baÅaramadÄ±n...
+
+22
+00:07:37,800 --> 00:07:40,500
+BurasÄ± ejdarhalar diyarÄ±, Sintel.
+
+23
+00:07:40,850 --> 00:07:44,000
+SandÄ±ÄÄ±ndan daha yakÄ±nsÄ±n.
+
+24
+00:09:17,600 --> 00:09:19,500
+Scales!
+
+25
+00:10:21,600 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,200 --> 00:10:29,800
+Scales...
+
Index: /tags/plugins/captions/3.0/test/assets/sintel-gre.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-gre.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-gre.txt	(revision 1964)
@@ -0,0 +1,124 @@
+
+1
+00:01:47,250 --> 00:01:50,500
+ÎÏ
+ÏÎ® Î· Î»ÎµÏÎ¯ÎŽÎ± Î­ÏÎµÎ¹ ÏÎºÎ¿ÏÎµÎ¹ÎœÏ ÏÎ±ÏÎµÎ»ÎžÏÎœ.
+
+2
+00:01:51,800 --> 00:01:55,800
+ÎÏÎµÎ¹ ÏÏÏÎµÎ¹ ÏÎ¿Î»Ï Î±Î¯ÎŒÎ± Î±ÎžÏÏÎœ.
+
+3
+00:01:58,000 --> 00:02:01,450
+ÎÎœÎ¿Î·ÏÎ¯Î± ÏÎ¿Ï
+ ÎœÎ± ÏÎ±ÎŸÎ¹ÎŽÎµÏÎµÎ¹Ï ÎŒÏÎœÎ·,
+ÎµÎœÏÎµÎ»ÏÏ Î±ÏÏÎ¿ÎµÏÎ¿Î¯ÎŒÎ±ÏÏÎ·.
+
+4
+00:02:01,750 --> 00:02:04,800
+ÎÎ¯ÏÎ±Î¹ ÏÏ
+ÏÎµÏÎ® ÏÎ¿Ï
+ Î±ÎºÏÎŒÎ· ÏÎ­ÎµÎ¹ Î±Î¯ÎŒÎ± ÏÏÎ¹Ï ÏÎ»Î­Î²ÎµÏ ÏÎ¿Ï
+.
+
+5
+00:02:05,250 --> 00:02:06,300
+Î£Îµ ÎµÏ
+ÏÎ±ÏÎ¹ÏÏÏ.
+
+6
+00:02:07,500 --> 00:02:09,000
+ÎÎ¿Î¹ÏÏÎœ...
+
+7
+00:02:09,400 --> 00:02:13,800
+Î€Î¹ ÏÎµ ÏÎ­ÏÎœÎµÎ¹ ÏÏÎ· Î³Î· 
+ÏÏÎœ ÏÏÎ¿ÏÏÎ±ÏÏÎœ ÏÏÎœ ÏÏ
+Î»ÏÎœ;
+
+8
+00:02:15,000 --> 00:02:17,500
+ÎÎœÎ±Î¶Î·ÏÏ ÎºÎ¬ÏÎ¿Î¹Î¿Îœ.
+
+9
+00:02:18,000 --> 00:02:22,200
+ÎÎ¬ÏÎ¿Î¹Î¿Îœ ÏÎ¿Î»Ï Î±Î³Î±ÏÎ·ÎŒÎ­ÎœÎ¿;
+ÎÎ¹Î± Î±ÎŽÎµÏÏÎ® ÏÏ
+ÏÎ®;
+
+10
+00:02:23,400 --> 00:02:25,000
+ÎÎœÎ± ÎŽÏÎ¬ÎºÎ¿.
+
+11
+00:02:28,850 --> 00:02:31,750
+ÎÏÎ¹ÎºÎ¯ÎœÎŽÏ
+ÎœÎ· Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· Î³Î¹Î± ÎŒÎ¯Î± ÎŒÎ¿ÎœÎ±ÏÎ¹ÎºÎ® ÎºÏ
+ÎœÎ·Î³Ï.
+
+12
+00:02:32,950 --> 00:02:35,870
+ÎÎ¯ÎŒÎ±Î¹ ÎŒÏÎœÎ· Î±ÏÏ ÏÏÎ±Îœ
+ÎžÏ
+ÎŒÎ¬ÎŒÎ±Î¹ ÏÎ¿Îœ ÎµÎ±Ï
+ÏÏ ÎŒÎ¿Ï
+.
+
+13
+00:03:27,250 --> 00:03:30,500
+Î£ÏÎµÎŽÏÎœ ÏÎµÎ»ÎµÎ¹ÏÏÎ±ÎŒÎµ.
+
+14
+00:03:30,750 --> 00:03:33,500
+ÎÎ¹, ÎºÎ¬ÏÏÎµ Î±ÎºÎ¯ÎœÎ·ÏÎ¿Ï.
+
+15
+00:03:48,250 --> 00:03:52,250
+ÎÎ±Î»Î·ÎœÏÏÏÎ±, Î£ÎºÎ­Î¹Î»Ï.
+
+16
+00:04:10,350 --> 00:04:13,850
+Î Î¹Î¬Ï' ÏÎ¿Îœ, Î£ÎºÎ­Î¹Î»Ï! ÎÎ»Î±!
+
+17
+00:04:25,250 --> 00:04:28,250
+Î£ÎºÎ­Î¹Î»Ï;
+
+18
+00:05:04,000 --> 00:05:07,500
+ÎÎ±Î¹! ÎÎ»Î±!
+
+19
+00:05:38,750 --> 00:05:42,000
+Î£ÎºÎ­Î¹Î»Ï!
+
+20
+00:07:25,850 --> 00:07:27,500
+ÎÏÎ­ÏÏ
+ÏÎ±.
+
+21
+00:07:32,800 --> 00:07:36,500
+ÎÏÎ­ÏÏ
+ÏÎµÏ ÎŒÏÎœÎ¿ ÎœÎ± ÎŽÎµÎ¹Ï...
+
+22
+00:07:37,800 --> 00:07:40,500
+ÎÏ
+ÏÎ® ÎµÎ¯ÎœÎ±Î¹ Î· Î³Î· ÏÏÎœ ÎŽÏÎ¬ÎºÏÎœ, Î£Î¯ÎœÏÎµÎ».
+
+23
+00:07:40,850 --> 00:07:44,000
+ÎÎ¯ÏÎ±Î¹ ÏÎ¹Î¿ ÎºÎ¿ÎœÏÎ¬ Î±Ï' ÏÏÎ¿ ÎœÎ¿ÎŒÎ¯Î¶ÎµÎ¹Ï.
+
+24
+00:09:17,600 --> 00:09:19,500
+Î£ÎºÎ­Î¹Î»Ï!
+
+25
+00:10:21,600 --> 00:10:24,000
+Î£ÎºÎ­Î¹Î»Ï;
+
+26
+00:10:26,200 --> 00:10:29,800
+Î£ÎºÎ­Î¹Î»Ï...
Index: /tags/plugins/captions/3.0/test/assets/sintel-ita.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-ita.txt	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/sintel-ita.txt	(revision 1767)
@@ -0,0 +1,110 @@
+1
+00:01:47,025 --> 00:01:50,050
+Questa lama ha un oscuro passato.
+
+2
+00:01:51,079 --> 00:01:55,079
+Ha sparso molto sangue innocente.
+
+3
+00:01:58,000 --> 00:02:01,045
+Sei sciocca a viaggiare sola,
+completamente impreparata.
+
+4
+00:02:01,075 --> 00:02:04,079
+Sei fortunato che il tuo sangue
+scorra ancora.
+
+5
+00:02:05,025 --> 00:02:06,029
+Grazie.
+
+6
+00:02:07,050 --> 00:02:09,000
+Quindi...
+
+7
+00:02:09,040 --> 00:02:13,080
+Cosa ti porta nella terra
+dei guardiani?
+
+8
+00:02:15,000 --> 00:02:17,050
+Sto cercando qualcuno.
+
+9
+00:02:18,000 --> 00:02:22,019
+Qualcuno molto caro?
+Un'anima gemella?
+
+10
+00:02:23,040 --> 00:02:25,000
+Un drago.
+
+11
+00:02:28,084 --> 00:02:31,075
+Una ricerca pericolosa
+per una cacciatrice solitaria.
+
+12
+00:02:32,094 --> 00:02:35,087
+Sono stata sola per
+quanto possa ricordare.
+
+13
+00:03:27,025 --> 00:03:30,050
+Ci siamo quasi. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+Hey, siediti tranquilla.
+
+15
+00:03:48,025 --> 00:03:52,025
+Buona notte, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Prendilo, Scales! Avanti!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Si! Avanti!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ho fallito.
+
+21
+00:07:32,080 --> 00:07:36,050
+Hai solo fallito nel vedere...
+
+22
+00:07:37,080 --> 00:07:40,050
+Queste sono le terre
+dei draghi, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Sei piÂ vicino di quanto immagini.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/test/assets/corrie-styled.srt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/corrie-styled.srt	(revision 1769)
+++ /tags/plugins/captions/3.0/test/assets/corrie-styled.srt	(revision 1769)
@@ -0,0 +1,43 @@
+1
+00:00:08,000 --> 00:00:10,000
+- <b>Nothing</b> is going on.
+
+2
+00:00:10,500 --> 00:00:12,500
+<font face="Times, serif" size="20" color="#FFCC00">You liar!</font>
+
+3
+00:00:13,500 --> 00:00:15,000
+<u>Are</u> <i>you</i>?
+
+4
+00:00:17,000 --> 00:00:20,000
+Violet, <i><b><u>please</u></b></i>!
+- I am <font face="Courier, monospace" size="+10" color="#FF0000"><b><u>not</u></b></font> your babe!
+
+5
+00:00:24,000 --> 00:00:29,000
+<font color="#00FF00">You <u>stupid cow</u>,
+look what you gone and done now, ay.</font>
+
+6
+00:00:34,000 --> 00:00:36,000
+<b>Vi, please.
+- <i>Leave me alone!</i></b>
+
+7
+00:00:36,000 --> 00:00:38,500
+- <u><a href="http://www.korrelatie.nl">We need to talk.</a></u>
+- Jason, are you deaf?!</span>
+
+8
+00:00:41,000 --> 00:00:43,000
+What's going on?
+ 
+ 
+ <font size="-5">[extra spaces]</font>
+
+9
+00:00:43,000 --> 00:00:45,000
+GÃ©t out thÃ«re and try tÃž Ãalvage thisÂ© !
+<font size="-5">[some UTF chars]</font>
Index: /tags/plugins/captions/3.0/test/assets/sintel-spa.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-spa.txt	(revision 1767)
+++ /tags/plugins/captions/3.0/test/assets/sintel-spa.txt	(revision 1767)
@@ -0,0 +1,115 @@
+1
+00:01:47,028 --> 00:01:51,005
+Esta cuchilla tiene un pasado oscuro
+
+2
+00:01:51,046 --> 00:01:55,064
+ha derramado demasiada sangre inocente
+
+3
+00:01:57,046 --> 00:02:01,034
+Eres una tonta por viajar sola, sin ninguna preparaciÃ³n
+
+4
+00:02:01,046 --> 00:02:05,010
+tienes suerte de que tu sangre siga corriendo
+
+5
+00:02:05,033 --> 00:02:06,047
+Gracias
+
+6
+00:02:07,069 --> 00:02:08,088
+Entonces,
+
+7
+00:02:09,052 --> 00:02:13,028
+Â¿QuÃ© te trae a la Tierra de los Guardianes de la Puerta?
+
+8
+00:02:13,040 --> 00:02:14,021
+Ehm...
+
+9
+00:02:15,017 --> 00:02:17,070
+Estoy buscando a alguien
+
+10
+00:02:17,094 --> 00:02:19,094
+Â¿Alguien muy querido?
+
+11
+00:02:19,094 --> 00:02:22,047
+Â¿Un espÃ­ritu perdido?
+
+12
+00:02:23,057 --> 00:02:25,082
+Un dragÃ³n
+
+13
+00:02:28,095 --> 00:02:33,066
+Una tarea peligrosa para una persona solitaria
+
+14
+00:02:33,066 --> 00:02:38,010
+He estado sola desde que tengo memoria...
+
+15
+00:03:26,083 --> 00:03:30,049
+Hey! Shh...ya casi termino.
+
+16
+00:03:31,058 --> 00:03:34,054
+QuÃ©date quieto
+
+17
+00:03:48,036 --> 00:03:51,068
+Buenas noches Skills
+
+18
+00:04:10,033 --> 00:04:14,011
+Â¡AtrÃ¡palo Skills! Â¡VÃ¡mos, atrÃ¡palo!
+
+19
+00:04:25,045 --> 00:04:27,050
+Â¿Skills?
+
+20
+00:05:05,078 --> 00:05:07,018
+Si! Vamos!
+
+21
+00:05:38,092 --> 00:05:39,085
+Â¡Skills!
+
+22
+00:07:25,039 --> 00:07:28,000
+He fallado
+
+23
+00:07:28,018 --> 00:07:29,061
+Hmm...
+
+24
+00:07:32,069 --> 00:07:36,009
+Solo has fallado en ver
+
+25
+00:07:37,049 --> 00:07:40,029
+Estas son tierras de dragones, Sintel
+
+26
+00:07:40,029 --> 00:07:44,064
+Te encuentras mÃ¡s cerca de lo que crees
+
+27
+00:09:18,004 --> 00:09:19,005
+Â¡Skills!
+
+28
+00:10:20,094 --> 00:10:22,064
+Â¿Skills?
+
+29
+00:10:26,026 --> 00:10:27,074
+Skills...
Index: /tags/plugins/captions/3.0/test/assets/sintel-jpn.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-jpn.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-jpn.txt	(revision 1964)
@@ -0,0 +1,109 @@
+
+1
+00:01:47,250 --> 00:01:50,500
+ãã®å£ã«ã¯æãéå»ã
+
+2
+00:01:51,800 --> 00:01:55,800
+å€ãã®çœªãªãäººã®è¡ã§æ±ããŠãã
+
+3
+00:01:58,000 --> 00:02:01,450
+ãããªé Œããªãã®ã«
+äžäººæ
+ãšã¯ç¡è¶ãªããšã
+
+4
+00:02:01,750 --> 00:02:04,800
+çããŠããã®ãäžæè­°ãªäœãã
+
+5
+00:02:05,250 --> 00:02:06,300
+ããããšã
+
+6
+00:02:07,500 --> 00:02:09,000
+ã§âŠ
+
+7
+00:02:09,400 --> 00:02:13,800
+ãªããéçªã®å°ãã«æ¥ãã®ãã­ïŒ
+
+8
+00:02:15,000 --> 00:02:17,500
+æ¢ããŠãããã§ã
+
+9
+00:02:18,000 --> 00:02:22,200
+å€§åãªäººïŒ
+èŠªé¡ããïŒ
+
+10
+00:02:23,400 --> 00:02:25,000
+ãã©ãŽã³ã
+
+11
+00:02:28,850 --> 00:02:31,750
+ãã³ã¿ãŒäžäººã ãšå±éºãããª
+
+12
+00:02:32,950 --> 00:02:35,870
+ç§ã¯ç©å¿ã€ããæãããã£ãšäžäººã§ãã
+
+13
+00:03:27,250 --> 00:03:30,500
+ããå€§äžå€«ã ããâŠããããâŠ
+
+14
+00:03:30,750 --> 00:03:33,500
+ããã«åº§ã£ãŠâŠ
+
+15
+00:03:48,250 --> 00:03:52,250
+ãããã¿ãã¹ã±ãŒã«
+
+16
+00:04:10,350 --> 00:04:13,850
+ã¹ã±ãŒã«ïŒ åŸ
+ã¡ãªããïŒ
+
+17
+00:04:25,250 --> 00:04:28,250
+ã¹ã±ãŒã«ïŒ
+
+18
+00:05:04,000 --> 00:05:07,500
+ãããïŒ
+
+19
+00:05:38,750 --> 00:05:42,000
+ã¹ã±ãŒã«ïŒ
+
+20
+00:07:25,850 --> 00:07:27,500
+ãããã¡ãã
+
+21
+00:07:32,800 --> 00:07:36,500
+æ¡ãããªã·ã³ãã«
+
+22
+00:07:37,800 --> 00:07:40,500
+ããã¯ããã©ãŽã³ã®å°ããã
+
+23
+00:07:40,850 --> 00:07:44,000
+ãåãããæããããã£ãšè¿ã
+
+24
+00:09:17,600 --> 00:09:19,500
+ã¹ã±ãŒã«ïŒ
+
+25
+00:10:21,600 --> 00:10:24,000
+ã¹ã±ãŒã«ïŒ
+
+26
+00:10:26,200 --> 00:10:29,800
+ã¹ã±ãŒã«âŠ
+
Index: /tags/plugins/captions/3.0/test/assets/malformed.srt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/malformed.srt	(revision 1979)
+++ /tags/plugins/captions/3.0/test/assets/malformed.srt	(revision 1979)
@@ -0,0 +1,33 @@
+1
+00:00:000:00:12,500
+You liar!
+
+3
+00:00:13,500 - 00:00:15,000
+Are you?
+
+4
+00:00:17,000 - 00:00:20,000
+Violet, please!
+- I am not your babe!
+
+5
+00:00:24,000 - 00:00:29,000
+You stupid cow,
+look what you gone and done now, ay.
+
+6
+00:00:34,000 - 00:00:36,000
+Vi, please.
+- Leave me alone!
+
+
+
+7
+00:00:36,000 - 00:00:38,500
+- We need to talk.
+- Jason, are you deaf?!
+
+8
+00:00:41,000 - 00:00:43,000
+What's going on?
Index: /tags/plugins/captions/3.0/test/assets/bunny-ned.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/bunny-ned.txt	(revision 1973)
+++ /tags/plugins/captions/3.0/test/assets/bunny-ned.txt	(revision 1973)
@@ -0,0 +1,32 @@
+1
+00:00:00,500 --> 00:00:04,000
+Peach Open Movie Project presenteert
+
+2
+00:00:06,500 --> 00:00:09,000
+ÃÃ©n groot konijn
+
+3
+00:00:11,000 --> 00:00:13,000
+Drie knagers
+
+4
+00:00:16,500 --> 00:00:19,000
+En een koekje van eigen deeg
+
+5
+00:00:23,000 --> 00:00:25,000
+Let op
+
+6
+00:00:27,000 --> 00:00:30,000
+Big Buck Bunny
+
+7
+00:00:30,000 --> 00:00:31,000
+Binnenkort beschikbaar
+
+8
+00:00:31,000 --> 00:00:33,000
+www.bigbuckbunny.org
+Auteursrecht via Creative Commons 3.0
Index: /tags/plugins/captions/3.0/test/assets/sintel-srp.txt
===================================================================
--- /tags/plugins/captions/3.0/test/assets/sintel-srp.txt	(revision 1964)
+++ /tags/plugins/captions/3.0/test/assets/sintel-srp.txt	(revision 1964)
@@ -0,0 +1,110 @@
+﻿
+1
+00:01:47,250 --> 00:01:50,500
+Ова оштрица има мрачну прошлост.
+
+2
+00:01:51,800 --> 00:01:55,800
+Пролила је много невине крви.
+
+3
+00:01:58,000 --> 00:02:01,450
+Будала си што путујеш сама,
+потпуно неприпремљена.
+
+4
+00:02:01,750 --> 00:02:04,800
+Имаш среће што ти крв
+још увек тече венама.
+
+5
+00:02:05,250 --> 00:02:06,300
+Хвала.
+
+6
+00:02:07,500 --> 00:02:09,000
+Дакле...
+
+7
+00:02:09,400 --> 00:02:13,800
+Шта те доводи у
+земљу чувара капија?
+
+8
+00:02:15,000 --> 00:02:17,500
+Тражим некога.
+
+9
+00:02:18,000 --> 00:02:22,200
+Некога веома драгог?
+Сродну душу?
+
+10
+00:02:23,400 --> 00:02:25,000
+Змаја.
+
+11
+00:02:28,850 --> 00:02:31,750
+Опасно трагање за усамљеног ловца.
+
+12
+00:02:32,950 --> 00:02:35,870
+Сама сам откад знам за себе.
+
+13
+00:03:27,250 --> 00:03:30,500
+Скоро смо готови.
+
+14
+00:03:30,750 --> 00:03:33,500
+Хеј, седи мирно.
+
+15
+00:03:48,250 --> 00:03:52,250
+Лаку ноћ, Крле.
+(енг. Scales = Крљушти)
+
+16
+00:04:10,350 --> 00:04:13,850
+Ухвати га, Крле! Хајде!
+
+17
+00:04:25,250 --> 00:04:28,250
+Крле?
+
+18
+00:05:04,000 --> 00:05:07,500
+Тако је! Хајде!
+
+19
+00:05:38,750 --> 00:05:42,000
+Крле!
+
+20
+00:07:25,850 --> 00:07:27,500
+Нисам успела.
+
+21
+00:07:32,800 --> 00:07:36,500
+Само ниси успела да видиш...
+
+22
+00:07:37,800 --> 00:07:40,500
+Ово су земље змајева, Синтел.
+
+23
+00:07:40,850 --> 00:07:44,000
+Ближе си него што знаш.
+
+24
+00:09:17,600 --> 00:09:19,500
+Крле!
+
+25
+00:10:21,600 --> 00:10:24,000
+Крле?
+
+26
+00:10:26,200 --> 00:10:29,800
+Крле...
+
Index: /tags/plugins/captions/3.0/test/basic.html
===================================================================
--- /tags/plugins/captions/3.0/test/basic.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/basic.html	(revision 2017)
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+    <title>Basic Setup</title>
+
+</head>
+<body>
+
+<h2>Basic Setup</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(key,captions) {
+    var options = {
+        file: 'http://content.bitsontherun.com/videos/'+key+'.mp4',
+        height: 270,
+        image: 'http://content.bitsontherun.com/thumbs/'+key.substr(0,8)+'-480.jpg',
+        plugins: {
+            '../captions.js': {}
+        },
+        flashplayer: 'assets/player.swf',
+        width: 480
+    };
+    if(captions) { 
+        options.plugins['../captions.js'].file = captions;
+    }
+    jwplayer("player").setup(options);
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer('7OCSON1y','assets/corrie.srt')">srt captions</a></li>
+    <li><a href="javascript:loadPlayer('7OCSON1y','assets/corrie.xml')">dfxp captions</a></li>
+    <li><a href="javascript:loadPlayer('aytCR4cx-393434')">mp4 captions</a></li>
+</ul>
+
+<p>Test on a Flash-enabled browser. In all cases, watch the entire video.<br/>
+Captions should render and disappear at the correct time.</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/playlist.html
===================================================================
--- /tags/plugins/captions/3.0/test/playlist.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/playlist.html	(revision 2017)
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Captions in Playlist</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Captions in Playlist</h2>
+
+<ul id="loaders" style='display:none'>
+    <li><a href="javascript:jwplayer().load({file:'http://content.bitsontherun.com/videos/7OCSON1y.mp4','captions.file':'assets/corrie.srt',title: 'Coronation Street'})">load() one video</a>
+    <li><a href="javascript:jwplayer().load('assets/playlist.xml')">load() RSS feed</a>
+</ul>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlaylist(list) {
+    var options = {
+        controlbar: 'bottom',
+        flashplayer: 'assets/player.swf',
+        height: 300,
+        'playlist.position': 'right',
+        'playlist.size': 320,
+        plugins: {
+            '../captions.js': {}
+        },
+        stretching: 'fill',
+        width: 800
+    }
+    if(typeof(list) == 'string') {
+        options.file = list;
+    } else { 
+        options.playlist = list;
+    }
+    jwplayer("player").setup(options);
+    document.getElementById('loaders').style.display = 'block';
+};
+
+var playlist = [{
+    title: 'Coronation Street',
+    description: 'Single, external SRT captions.',
+    file: 'http://content.bitsontherun.com/videos/7OCSON1y.mp4', 
+    image: 'http://content.bitsontherun.com/thumbs/7OCSON1y-320.jpg',
+    'captions.file': 'assets/corrie.srt'
+},{
+    title:'Big Buck Bunny',
+    description: 'Single, embedded MP4 captions.',
+    file: 'http://content.bitsontherun.com/videos/aytCR4cx.mp4',
+    image: 'http://content.bitsontherun.com/thumbs/aytCR4cx-320.jpg'
+},{
+    title: 'Men With Talent',
+    description: 'No captions at all.',
+    file: 'http://content.bitsontherun.com/videos/SAs4hE5G.mp4',
+    image: 'http://content.bitsontherun.com/thumbs/SAs4hE5G-320.jpg'
+},{
+    title: 'Global Timoto',
+    description: 'Multiple, embedded MP4 captions.',
+    file: 'http://content.bitsontherun.com/videos/w5VkaqJ1.mp4',
+    image: 'http://content.bitsontherun.com/thumbs/w5VkaqJ1-320.jpg'
+},{
+    title: 'Sintel',
+    description: 'Multiple, external SRT captions.',
+    file: 'http://content.bitsontherun.com/videos/q1fx20VZ.mp4',
+    image: 'http://content.bitsontherun.com/thumbs/q1fx20VZ-320.jpg',
+    'captions.files': 'assets/sintel-dut.txt,assets/sintel-eng.txt,assets/sintel-fra.txt,assets/sintel-deu.txt,assets/sintel-ita.txt,assets/sintel-pol.txt,assets/sintel-por.txt,assets/sintel-rus.txt,assets/sintel-spa.txt',
+    'captions.labels': 'Dutch,English,French,German,Italian,Polish,Portuguese,Russian,Spanish'
+}];
+</script>
+
+<ul>
+    <li><a href="javascript:loadPlaylist('assets/playlist.xml')">RSS Playlist</a></li>
+    <li><a href="javascript:loadPlaylist(playlist)">Inline playlist</a></li>
+</ul>
+
+<p>Test in Flash and in one HTML5/MP4 browser. For each entry, the correct captions should display.<br/>
+    Also check the button to display the correct state (on, off, not set). Note the MP4 captions only work in Flash.
+</p>
+<p>
+   The two additional links test the load() call of the API. They only work if the player is already visible.
+</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/ova.html
===================================================================
--- /tags/plugins/captions/3.0/test/ova.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/ova.html	(revision 2017)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>OVA Support</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>OVA Support</h2>
+
+<div style="position:relative">
+    <div id="container"></div>
+    <div id="companion"></div>
+</div>
+
+<script type="text/javascript">
+jwplayer("container").setup({
+    file: 'http://content.bitsontherun.com/videos/7OCSON1y-393434.flv',
+    height: 240,
+    image: 'http://content.bitsontherun.com/thumbs/7OCSON1y-480.jpg',
+    flashplayer: 'assets/player.swf',
+    plugins: { ova: {
+            json: '{"blockUntilOriginalPlaylistLoaded":true,"delayAdRequestUntilPlay":true,"ads":{"disableControls":false,"servers":[{"type":"OpenX","apiAddress":"http://openx.openvideoads.org/openx/www/delivery/fc.php"}],"notice":{"show":true,"type":"countdown"},"displayCompanions":true,"restoreCompanions":false,"companions":[{"id":"companion","width":"200","height":"240"}],"schedule":[{"zone":"47","position":"pre-roll"}]},"debug":{"levels":"none"}}'
+        }, '../captions.js': {
+            file: 'assets/corrie.srt'
+        }
+    },
+    width: 420
+});
+</script>
+
+
+<p>Test in a Flash browser. Captions should be shown on the video and not on the preroll.</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/index.html
===================================================================
--- /tags/plugins/captions/3.0/test/index.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/index.html	(revision 2017)
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Captions Plugin Tests</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+</head>
+<body>
+
+<h2>Captions Plugin Tests</h2>
+
+<ul>
+    <li><a href="basic.html">Basic Setup</a></li>
+    <li><a href="modes.html">Rendering Modes</a></li>
+    <li><a href="options.html">Configuration Options</a></li>
+</ul>
+<ul>
+    <li><a href="multiple.html">Multiple Tracks</a></li>
+    <li><a href="playlist.html">Captions in Playlist</a></li>
+    <li><a href="styling.html">Captions Styling</a></li>
+</ul>
+<ul>
+    <li><a href="compatibility.html">Backward Compatibility</a></li>
+    <li><a href="errors.html">Error Handling</a></li>
+    <li><a href="dimensions.html">Various dimensions</a></li>
+</ul>
+
+<h2>Hints</h2>
+
+<p class="note">You can clear Flash cookies by rightclicking, choosing "Settings..." and then set the "local storage" to 0.<br/>
+You can disable plugins in chrome by navigating to "chrome://plugins"</p>
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/modes.html
===================================================================
--- /tags/plugins/captions/3.0/test/modes.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/modes.html	(revision 2017)
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Rendering Modes</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Rendering Modes</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+
+
+function loadPlayer(html5first,multitrack) {
+    var key = 'bkaovAYt';
+    var cap = {file:'assets/bunny-eng.txt'};
+    if(multitrack) { 
+        key = 'q1fx20VZ'; 
+        cap = {files:'assets/sintel-chi.txt,assets/sintel-far.txt,assets/sintel-gre.txt,assets/sintel-jpn.txt,assets/sintel-kor.txt,assets/sintel-pol.txt,assets/sintel-rus.txt,assets/sintel-srp.txt,assets/sintel-tur.txt',labels:'Chinese,Farsi,Greek,Japanese,Korean,Polish,Russian,Serbian,Turkish',back:true};
+    }
+    var options = {
+        image: 'http://content.bitsontherun.com/thumbs/'+key+'-720.jpg',
+        height: 300,
+        levels: [
+            { file: 'http://content.bitsontherun.com/videos/'+key+'-injeKYZS.mp4' },
+            { file: 'http://content.bitsontherun.com/videos/'+key+'-27m5HpIu.webm' }
+        ],
+        plugins: {
+            '../captions.js': cap
+        },
+        width: 640
+    };
+    var html5 = {
+        type: 'html5'
+    }
+    var flash = { 
+        type: 'flash',
+        src: 'assets/player.swf'
+    }
+    if(html5first) {
+        options.modes = [html5,flash];
+    } else { 
+        options.modes = [flash,html5];
+    }
+    jwplayer("player").setup(options);
+};
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer(true,false)">HTML5 first, single track</a></li>
+    <li><a href="javascript:loadPlayer(false,false)">Flash first, single track</a></li>
+    <li><a href="javascript:loadPlayer(true,true)">HTML5 first, multitrack</a></li>
+    <li><a href="javascript:loadPlayer(false,true)">Flash first, multitrack</a></li>
+</ul>
+
+<p>Check if the plugin works correctly in both rendering modes, using IE9, Firefox, Safari, Chrome.<br/>
+Check if both the captions and dock button are omitted on iPad, iPhone and Android/HTML5.</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/dimensions.html
===================================================================
--- /tags/plugins/captions/3.0/test/dimensions.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/dimensions.html	(revision 2017)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Various Dimensions</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Various Dimensions</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(width,height,back) {
+    var options = {
+        levels: [
+            { file: 'http://content.bitsontherun.com/videos/bkaovAYt-injeKYZS.mp4' },
+            { file: 'http://content.bitsontherun.com/videos/bkaovAYt-27m5HpIu.webm' }
+        ],
+        height: height,
+        image: 'http://content.bitsontherun.com/thumbs/bkaovAYt-480.jpg',
+        plugins: {
+            '../captions.js': {
+                file: 'assets/bunny-ned.txt',
+                back: back
+            }
+        },
+        flashplayer: 'assets/player.swf',
+        width: width
+    };
+    jwplayer("player").setup(options);
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer(320,180,false)">320x180, outlined</a></li>
+    <li><a href="javascript:loadPlayer(320,180,true)">320x180, boxed</a></li>
+    <li><a href="javascript:loadPlayer(480,270,false)">480x270, outlined</a></li>
+    <li><a href="javascript:loadPlayer(480,270,true)">480x270, boxed</a></li>
+    <li><a href="javascript:loadPlayer(640,360,false)">640x360, outlined</a></li>
+    <li><a href="javascript:loadPlayer(640,360,true)">640x360, boxed</a></li>
+    <li><a href="javascript:loadPlayer(800,450,false)">800x450, outlined</a></li>
+    <li><a href="javascript:loadPlayer(800,450,true)">800x450, boxed</a></li>
+</ul>
+
+
+<p>
+    Test in one Flash-enabled and in one HTML5/MP4 browser.</br>
+    Fontsize and bottom alignment should <em>feel</em> fairly balanced with all dimensions.<br/>
+    Don't forget to check in fullscreen and with controlbar shown or hidden.
+</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/compatibility.html
===================================================================
--- /tags/plugins/captions/3.0/test/compatibility.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/compatibility.html	(revision 2017)
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/swfobject.js"></script>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+    <title>Backward compatibility</title>
+
+</head>
+<body>
+
+<h2>Backward compatibility</h2>
+
+<div id="container">Select an option</div>
+
+<script type="text/javascript">
+    swfobject.embedSWF(
+        'assets/player52.swf',
+        'container',
+        760,
+        300,
+        '9.0.0',
+        null,
+        {file:'assets/playlist.xml', playlist: 'right', playlistsize: 280, stretching: 'exactfit', plugins:'../captions.swf', 'captions.back':'true', dock:'false', skin:'assets/stijl.zip' },
+        {allowfullscreen:'true',allowscriptaccess:'always'},
+        {id:'player',name:'player'}
+    );
+</script>
+
+<p>
+    Test whether the correct captions show up for all playlist entries.<br />
+    Also check whether a skinned button shows up in the controlbar.
+</p>
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/styling.html
===================================================================
--- /tags/plugins/captions/3.0/test/styling.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/styling.html	(revision 2017)
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Captions Styling</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Captions Styling</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(options) {
+    jwplayer("player").setup({
+        file: 'http://content.bitsontherun.com/videos/7OCSON1y.mp4',
+        height: 300,
+        plugins: {
+            '../captions.js': options
+        },
+        flashplayer: 'assets/player.swf',
+        stretching: 'fill',
+        width: 600
+    });
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer({color:'FFCC00',file:'assets/corrie.srt',fontFamily:'Georgia',fontSize:20,fontStyle:'italic',fontWeight:'bold',textDecoration:'underline'})">config styling</a><br/>
+        Captions should be bold, big, italic, yellow, underlined and serifed.</li>
+    <li><a href="javascript:loadPlayer({file:'assets/corrie-styled.xml'})">dfxp styling</a><br/>
+        Captions vary in style, size and color. Focus on whether all captions display.</li>
+    <li><a href="javascript:loadPlayer({file:'assets/corrie-speakers.xml',fontFamily:'Georgia',fontSize:20,fontStyle:'italic',fontWeight:'bold'})">config &amp; dfxp styling</a><br/>
+        Captions should be bold, big, italic and serifed. Every speaker should have its own color.</li>
+    <li><a href="javascript:loadPlayer({file:'assets/corrie-styled.srt'})">html in srt</a><br/>
+        Captions have the same variations as in case 2. All lines should render correctly.</li>
+</ul>
+
+<p>Test all cases in Flash, plus the first case in one HTML5/MP4 browser (Chrome, IE9 or Safari).</p>
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/multiple.html
===================================================================
--- /tags/plugins/captions/3.0/test/multiple.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/multiple.html	(revision 2017)
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Multiple Tracks</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Multiple Tracks</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(options,captions) {
+    var defaults = {
+        controlbar: 'bottom',
+        flashplayer: 'assets/player.swf',
+        height: 300,
+        plugins: {
+            '../captions.js': {
+                back: true
+            }
+        },
+        stretching: 'fill',
+        width: 600
+    };
+    for(var param in options) {
+        defaults[param] = options[param];
+    }
+    for(var param in captions) {
+        defaults.plugins['../captions.js'][param] = captions[param];
+    }
+    jwplayer("player").setup(defaults);
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/aytCR4cx.mp4',image:'http://content.bitsontherun.com/thumbs/aytCR4cx-720.jpg'},{files:'assets/bunny-eng.txt,assets/bunny-ned.txt',labels:'English,Nederlands'})">2 external srt tracks</a></li>
+
+    <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/w5VkaqJ1-393434.mp4',image:'http://content.bitsontherun.com/thumbs/w5VkaqJ1-720.jpg'},{})">6 embedded mp4 tracks</a></li>
+    
+    <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/a95zAVN1.mp4',image:'http://content.bitsontherun.com/thumbs/a95zAVN1-720.jpg'},{files:'assets/sintel-chi.txt,assets/sintel-far.txt,assets/sintel-gre.txt,assets/sintel-jpn.txt,assets/sintel-kor.txt,assets/sintel-pol.txt,assets/sintel-rus.txt,assets/sintel-srp.txt,assets/sintel-tur.txt',labels:'Chinese,Farsi,Greek,Japanese,Korean,Polish,Russian,Serbian,Turkish'})">9 external srt tracks</a></li>
+     <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/aytCR4cx.mp4',image:'http://content.bitsontherun.com/thumbs/aytCR4cx-720.jpg'},{files:'assets/bunny-eng.txt,assets/bunny-ned.txt'})">2 srt tracks, no labels</a></li>
+     
+    <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/w5VkaqJ1-393434.mp4',image:'http://content.bitsontherun.com/thumbs/w5VkaqJ1-720.jpg'},{labels:'English,FranÃ§ais,PortugÃ»es,EspaÃ±ol,Deutsch,Norske'})">6 mp4 tracks, with labels</a></li>
+    <li><a href="javascript:loadPlayer({file:'http://content.bitsontherun.com/videos/a95zAVN1.mp4',image:'http://content.bitsontherun.com/thumbs/a95zAVN1-720.jpg'},{files:'assets/sintel-chi.txt,assets/sintel-far.txt,assets/sintel-gre.txt,assets/sintel-jpn.txt,assets/sintel-kor.txt,assets/sintel-pol.txt,assets/sintel-rus.txt,assets/sintel-srp.txt,assets/sintel-tur.txt',labels:'Chinese,Farsi,Greek,Japanese,Korean,Polish,Russian,Serbian,Turkish',label:'Greek'})">9 srt tracks, greek preset</a></li>
+
+
+</ul>
+
+
+
+
+<p>Test in a Flash-enabled browser. In all cases, check whether the correct text track is rendered.<br />
+   Also check whether the selection menu is correctly rendered, in normal and full screen.<br/>
+   Last, check whether the selected language is stored in a cookie and saved across reloads.
+</p>
+
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/test/options.html
===================================================================
--- /tags/plugins/captions/3.0/test/options.html	(revision 2017)
+++ /tags/plugins/captions/3.0/test/options.html	(revision 2017)
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    <script type="text/javascript" src="assets/jwplayer.min.js"></script>
+    <title>Configuration Options</title>
+    <link type="text/css" rel="stylesheet" href="assets/style.css" />
+
+</head>
+<body>
+
+<h2>Configuration Options</h2>
+
+<div id="player"></div>
+<script type="text/javascript">
+function loadPlayer(back,state) {
+    var options = {
+        controlbar: 'bottom',
+        file: 'http://content.bitsontherun.com/videos/7OCSON1y.mp4',
+        height: 296,
+        image: 'http://content.bitsontherun.com/thumbs/7OCSON1y-480.jpg',
+        plugins: {
+            '../captions.js': {
+                file: 'assets/corrie.srt'
+            }
+        },
+        flashplayer: 'assets/player.swf',
+        width: 480
+    };
+    if(back !== undefined) {
+        options.plugins['../captions.js'].back = back;
+        options.plugins['../captions.js'].state = state;
+    }
+    jwplayer("player").setup(options);
+}
+</script>
+
+
+<ul>
+    <li><a href="javascript:loadPlayer()">Default options</a>:<br/>
+        Captions should have a thin black outline. They should be enabled on first load, and in the state you left on refresh.</li>
+    <li><a href="javascript:loadPlayer(true,true)">Back true, state true</a>:<br/>
+        Captions should be in black box. They should always be on, no matter you disabled them before a refresh.</li>
+    <li><a href="javascript:loadPlayer(false,false)">Back false, state false</a>:<br/>
+        Captions should have a thin black outline. They should always be off, no matter you disabled them before a refresh.</li>
+</ul>
+
+<p>Test both in Flash and in one HTML5/MP4 browser (Chrome, IE9 or Safari).</p>
+
+</body>
+</html>
Index: /tags/plugins/captions/3.0/doc/guide.html
===================================================================
--- /tags/plugins/captions/3.0/doc/guide.html	(revision 1980)
+++ /tags/plugins/captions/3.0/doc/guide.html	(revision 1980)
@@ -0,0 +1,336 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<title>Captions Plugin Reference</title>
+<style>
+    body { padding: 50px 100px; width: 660px; font: 13px/20px Arial; background: #FFF; }
+    a , h1, h2{ color: #369; }
+    h1 { font-size: 32px; }
+    h2 { margin-top: 50px; }
+    h3 { margin-top: 25px; }
+    pre { font-size: 12px; background: #E5F3C8; padding:5px 10px; border: 1px solid #D3EAA4; }
+    dd { color: #333; font-style: italic; }
+</style>
+</head><body>
+
+
+<h1>Captions Plugin Reference</h1>
+
+<h2>Purpose</h2>
+
+<p>The purpose of this guide is providing a feature overview of the <a href="http://www.longtailvideo.com/addons/plugins/84/Captions">JW Player Captions Plugin</a>.</p>
+
+
+
+<h2>Introduction</h2>
+
+<p>The Captions plugin for JW Player supports the display of closed captions or subtitles at the bottom of a video. Captions can be shown or hidden with a toggle:</p>
+
+<p><img src="assets/captions_example.png" alt="A screenshot of example captions implementation" style="margin-left:15px"/></p>
+
+<p>Captions are read from external files, in the SRT (SubRip) text format or the DFXP (W3C TimedText) XML format. Captions are also read from MP4 videos (3GPP Timed Text). The plugin works in both Flash and HTML5, but there are certain format/device restrictions (see below).</p>
+
+<p>The plugin can load multiple subtitle tracks per video, in which case a selection menu is presented. It also supports <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12537/xml-playlist-support">playlists</a> and styling of the captions with CSS properties.</p>
+
+
+
+<h2>Configuration Options</h2>
+
+<p>Like the <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12536/configuration-options">JW Player </a> itself, the Captions plugin can be configured with options that are set in the embed code. The following configuration options are available:</p>
+
+<dl>
+<dt><b>back</b> (<em>false</em>)</dt>
+<dd>By default, the player renders a thin black outline around the captions, similar to TV / DVD captions. When setting this option <b>true</b>, a black box is drawn around the captions. This background makes the captions more readeable (nice for small texts), but does set them more apart from the video.</dd>
+<dt><b>file</b> (<em>undefined</em>)</dt>
+<dd>Location of the captions file to display. Should be the URL to a valid <a href="#dfxp">DFXP</a> or <a href="#srt">SRT</a> captions file. If your captions are embedded in your MP4 videos, or if you use a playlist, this option is not needed.</dd>
+<dt><b>state</b> (<em>true</em>)</dt>
+<dd>Describes whether to show the captions on startup or not. The default is <b>true</b> (captions are shown). When a viewer changes the state, the value is saved in a cookie, so users won't have to disable the captions on every video again if they don't want them.</dd>
+</dl>
+
+<h3>Example</h3>
+
+<p>Here is a basic embed code of a player with the captions plugin, using the <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/15995/jw-embedder-reference-guide">JW Embedder</a>. The <strong>file</strong> option is used to load SRT captions:</p>
+
+<pre>
+&lt;script type="text/javascript" src="/jwplayer/jwplayer.min.js"&gt;&lt;/script&gt;
+
+&lt;p id="container"&gt;The player will be placed here&lt;/p&gt;
+
+&lt;script type="text/javascript"&gt;
+ jwplayer("container").setup({
+   file: "/assets/video.mp4",
+   flashplayer: "/jwplayer/player.swf",
+   height: 360,
+   plugins: {
+     "captions-3": {
+       file: "/assets/captions.srt"
+     }
+   },
+   width: 640
+ });
+&lt;/script&gt;
+</pre>
+
+<h3>Crossdomain loading</h3>
+
+<p>An important issue to keep in mind with captions is that they cannot be loaded cross-domain. In other words, if your player is embedded at <em>http://somesite.com</em>, you cannot load SRT or XML captions from <em>http://othersite.com</em>. This restriction applies to all browsers and devices, in Flash and HTML5. There are workarounds though:</p>
+
+<ul>
+<li>You can place a small (PHP) script on the server that hosts your player to <em>proxy</em> the external playlist. This is the easiest solution which works for both Flash and HTML5.</li>
+<li>If you're using only the Flash mode of JW Player (no HTML5), you can place a <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12541/crossdomain-file-loading-restrictions">crossdomain.xml file</a> on the server that hosts the captions.</li>
+<li>A very technical solution for HTML5 is to configure the server that hosts your captions for <a href="https://developer.mozilla.org/En/HTTP_Access_Control">Cross-Origin Resource Sharing</a>.</li>
+</ul>
+
+
+
+<h2>Formats and Devices</h2>
+
+<p>This section lists the 3 formats the plugin supports, as well as the modes (Flash, HTML5)  and devices (iPad, iPhone, Android) in which these formats work.</p>
+
+<h3>SRT (SubRip)</h3>
+
+<p>The <a href="http://en.wikipedia.org/wiki/SubRip">SRT format</a> is a widely used and easy to understand plain text captioning format. It is supported in both Flash and HTML5 mode on all desktop browsers. SRT is not supported on Android and the iPad/iPhone. On those devices, it is not possible to render custom graphics during (fullscreen) video playback.</p>
+
+<p>In SRT, a double linebreak is used to distinct between entries. Single linebreaks are used to add breaks in the texts themselves. Lines should be restricted to about 80 characters per line, which fits the default plugin setup. Here's an example file:</p>
+
+<pre>
+1
+00:00:08,000 --&gt; 00:00:10,000
+Nothing is going on.
+
+2
+00:00:10,500 --&gt; 00:00:12,500
+Violet, please!
+- I am not your babe!
+
+3
+00:00:17,000 --&gt; 00:00:20,000
+You stupid cow,
+look what you gone and done now, ay.
+</pre>
+
+<p><em>Note your SRT files should be saved using <strong>UTF8</strong> encoding in order to correctly display special characters (accents, but also e.g. Arab, Chinese, Russian).</em></p>
+
+<h3>DFXP (W3C TimedText)</h3>
+
+<p>The <a href="http://www.w3.org/TR/2010/PR-ttaf1-dfxp-20100914/">DFXP format</a> is an XML captioning format popular amongst Flash and Silverlight players. The Captions plugin also supports it in Flash mode, but not in HTML5. DFXP is therefore also not supported on the iPad, Android and the iPhone.</p>
+    
+<p>DFXP is a fairly complicated and structured XML format. The actual captions entries are found inside &lt;p&gt; tags inside the &lt;body&gt;, with &lt;br/&gt; tags used for line breaks. Here is an example:</p>
+
+<pre>
+&lt;tt xmlns="http://www.w3.org/2006/10/ttaf1"&gt;
+ &lt;body&gt;
+   &lt;div&gt;
+     &lt;p begin="00:00:08" end="00:00:10"&gt;- Nothing is going on.&lt;/p&gt;
+     &lt;p begin="00:00:10.5" end="00:00:12.5"&gt;You liar!&lt;/p&gt;
+     &lt;p begin="00:00:13.5" end="00:00:15"&gt;Are you?&lt;/p&gt;
+     &lt;p begin="00:00:17" end="00:00:20"&gt;Violet, please!&lt;br/&gt;- I am not your babe!&lt;/p&gt;
+     &lt;p begin="00:00:34" end="00:00:36"&gt;Vi, please.&lt;br/&gt;- Leave me alone!&lt;/p&gt;
+   &lt;/div&gt;
+ &lt;/body&gt;
+&lt;/tt&gt;
+</pre>
+
+<p><em>Note your DFXP files should be saved using <strong>UTF8</strong> encoding in order to correctly display special characters (accents, but also e.g. Arab, Chinese, Russian).</em></p>
+
+<h3>MP4 (3GPP Text Tracks)</h3>
+
+<p>The MP4 media container has the ability to <a href="http://en.wikipedia.org/wiki/MPEG-4_Part_17">embed timed text tracks</a>, in addition to e.g. a video and an audio track. This text data, often referred to as 3GPP Timed Text, is automatically picked up and displayed by the Captions plugin in Flash mode.</p>
+
+<p>On the iPad and iPhone, the video element controller itself detect and renders the closed captions. It also displays a language selection menu in case multiple tracks are shown:</p>
+
+<p><img src="assets/captions_iphone.png" alt="Embedded MP4 captions showing on the iPhone" style="margin-left:60px"/></p>
+
+<p>In HTML5 mode on desktop browsers and on Android, embedded MP4 captions are not supported.</p>
+
+
+
+<h2>Multiple Tracks</h2>
+
+<p>It is possible to assign multiple captions tracks (for multiple languages) to one video. The button that used to toggle the captions then pops up a language selection menu:</p>
+
+<p><img src="assets/captions_multitrack.png" alt="An example with multiple captions tracks" style="margin-left:20px"/></p>
+
+<p>For MP4 files with multiple tracks, the plugin automatically detects the languages and renders the menu. For SRT or DFXP files, there's two configuration options to set:</p>
+
+<dl>
+<dt><b>files</b> (<em>undefined</em>)</dt>
+<dd>When you have multiple captions, use the <b>files</b> option instead of <b>file</b>. Set it to a comma-separated list of URLs. Each URL in this list should link to a valid SRT or DFXP captions file. If your captions are embedded in your MP4 videos, this option is not needed.</dd>
+<dt><b>labels</b> (<em>undefined</em>)</dt>
+<dd>Set this value to a second comma-separated list, defining the labels for each language that should pop up in the selection menu (e.g. <em>English,Deutsch,Francais</em>). The amount and order of these labels should be the same as the amount and order of entries in the <b>files</b> option.</dd>
+</dl>
+
+<p>When a viewer changes the captions track, the value is saved in a cookie. That way the viewer won't have to re-set the track with every new video or page reload. You can override this cookied value by setting another option called <strong>label</strong>. Set it to the label of the track you want pre-selected.<p>
+
+<p><em>Note you can also set the <strong>labels</strong> option to override the default MP4 track labels.</em></p>
+
+<h3>Example</h3>
+
+<p>This example embed code loads a video with 3 different SRT files:</p>
+
+<pre>
+&lt;script type="text/javascript" src="/jwplayer/jwplayer.min.js"&gt;&lt;/script&gt;
+
+&lt;p id="container"&gt;The player will be placed here&lt;/p&gt;
+
+&lt;script type="text/javascript"&gt;
+ jwplayer("container").setup({
+   file: "/assets/video.mp4",
+   flashplayer: "/jwplayer/player.swf",
+   height: 360,
+   plugins: {
+     "captions-3": {
+       files: "/assets/deu.srt,/assets/fra.srt,/assets/ita.srt",
+       labels: "Deutsch,FranÃ§ais,Italiano"
+     }
+   },
+   width: 640
+ });
+&lt;/script&gt;
+</pre>
+
+<p><em>Note the selection menu cannot scroll (yet) if there are too many languages. Work around this issue by offering a language selection outside the player or use browser info for pre-selecting a few languages.</em></p>
+
+
+
+<h2>Playlist Support</h2>
+
+<p>Captions can be assigned to one or more videos in a playlist. The functionality is available for both inline and RSS playlists, in both Flash and HTML5. You can mix videos with and videos without captions in a single feed.</p>
+
+<p>Since RSS playlist format does not define an element for linking to captions files, captions should be set using the <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12537/xml-playlist-support">JWPlayer XML namespace</a>. In practice, the namespace is enabled by:</p>
+
+<ul>
+<li>Setting an <b>xmlns:jwplayer</b> attribute in the main XML tag.</li>
+<li>Prefixing the XML elements with <b>jwplayer:</b>, e.g. <em>&lt;jwplayer:captions.file&gt;</em></li>
+</ul>
+
+<p>You can set either the <b>captions.file</b> (single track) or the <b>captions.files</b> &amp; <b>captions.labels</b> (multiple tracks) options for each playlist entry.</p>
+
+<h3>Example</h3>
+
+<p>Here is an example RSS playlist. The <em>captions.file</em> option is set for both entries:</p>
+
+<pre>
+&lt;rss version="2.0" xmlns:jwplayer="http://developer.longtailvideo.com/"&gt;
+  &lt;channel&gt;
+    &lt;title&gt;Example RSS playlist with captions&lt;/title&gt;
+
+    &lt;item&gt;
+      &lt;title&gt;Coronation Street&lt;/title&gt;
+      &lt;description&gt;A episode clip, with captions.&lt;/description&gt;
+      &lt;enclosure url="/static/corrie.mp4" /&gt;
+      &lt;jwplayer:captions.file&gt;/static/corrie.srt&lt;/jwplayer:captions.file&gt;
+    &lt;/item&gt;
+
+    &lt;item&gt;
+      &lt;title&gt;Big Buck Bunny&lt;/title&gt;
+      &lt;description&gt;The official trailer, with captions.&lt;/description&gt;
+      &lt;enclosure url="/static/bunny.mp4" /&gt;
+      &lt;jwplayer:captions.file&gt;/static/bunny.srt&lt;/jwplayer:captions.file&gt;
+    &lt;/item&gt;
+
+  &lt;/channel&gt;
+&lt;/rss&gt;
+</pre>
+
+<p><em>Note the same crossdomain loading restrictions that apply to captions also <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/19824/playlist-support-in-the-jw-player#XML">apply to playlists</a>.</em></p>
+
+
+
+<h2>Styling the Captions</h2>
+
+<p>It is possible to change the styling of the captions with a couple of configuration options. Here's a screenshot of a video with styled captions:</p>
+
+<p><img src="assets/captions_styling.png" alt="A screenshot of player with styled captions" style="margin-left:20px"/></p>
+
+<p>The following six style properties can be set. Add them to the player embed code, just like the <em>back</em> and <em>state</em> options:</p>
+
+<dl>
+<dt><b>color</b> ( <em>#FFFFFF</em> )</dt>
+<dd>Can be any hexadecimal color value (e.g. <strong>#FFCC00</strong>).</dd>
+<dt><b>fontFamily</b> ( <em>Arian,sans-serif</em> )</dt>
+<dd>Can be any font installed <a href="http://www.fonttester.com/web_safe_fonts.html">on a user's computer</a> (e.g. <strong>Georgia,serif</strong>).</dd>
+<dt><b>fontSize</b> ( <em>15</em> )</dt>
+<dd>Can be any size in pixels (e.g. <strong>20</strong>). Note the captions are scaled to cover the video, with the actual pixel size used at a video width of 400px.</dd>
+<dt><b>fontStyle</b> ( <em>normal</em> )</dt>
+<dd>Can be set to <strong>italic</strong> for making the text italic.</dd>
+<dt><b>fontWeight</b> ( <em>normal</em> )</dt>
+<dd>Can be set to <strong>bold</strong> for boldening the text.</dd>
+<dt><b>textDecoration</b> ( <em>none</em> )</dt>
+<dd>Can be set to <strong>underline</strong> to add a line below the text.</dd>
+</dl>
+
+<p><em>Note these styling options do <strong>not</strong> work for MP4 captions on the iPad/iPhone, since these devices offer no control over rendering of the captions.</em></p>
+
+<h3>DFXP Styling</h3>
+
+<p>The DFXP format contains two different mechanisms for styling captions. Both are supported by the player, though solely in Flash mode:<p>
+
+<ul>
+<li>The <em>&lt;head&gt;</em> of a DFXP file can contain one or more style elements. These elements are all given an ID. The individual captions paragraphs can be linked to the style rules using the <em>style="xx"</em> attribute.</li>
+<li>Inside captions paragraphs, text snippets can be wrapped in <em>&lt;span&gt;</em> elements. These spans can contain a <em>style="xx"</em> attribute, or even list individual style rules (like <em>fontWeight="bold"</em>).</li>
+</ul>
+
+<p>Here is the example DFXP file, containing both styling methods. Note the individual rules (color, fontSize, etc.) need to be prefixed with a <b>tts:</b> namespace identifier. The according namespace declaration (<em>xmlns:tts</em>) needs to be set in the main XML element to make it a valid file:</p>
+
+<pre>
+&lt;tt xmlns="http://www.w3.org/2006/10/ttaf1" 
+  xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling"&gt;
+  &lt;head&gt;
+   &lt;styling&gt;
+      &lt;style id="normal" tts:fontSize="15" /&gt;
+      &lt;style id="warning" tts:color="#FF0000" tts:fontWeight="bold" tts:fontSize="20" /&gt;
+   &lt;/styling&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;div&gt;
+      &lt;p begin="00:00:08" end="00:00:10" style="normal"&gt;- Nothing is going on.&lt;/p&gt;
+      &lt;p begin="00:00:10.5" end="00:00:12.5" style="warning"&gt;You liar!&lt;/p&gt;
+      &lt;p begin="00:00:17" end="00:00:20" style="normal"&gt;Violet, please!&lt;br/&gt;
+          - I am &lt;span style="warning"&gt;not&lt;/span&gt; your babe!
+      &lt;/p&gt;
+      &lt;p begin="00:00:24" end="00:00:29" style="normal"&gt;
+          You &lt;span tts:fontStyle="italic"&gt;stupid cow&lt;/span&gt;, look what you did.&lt;/p&gt;
+    &lt;/div&gt;
+  &lt;/body&gt;
+&lt;/tt&gt;
+</pre>
+
+<p><em>Note the captions plugin does not support &lt;span&gt; tags inside &lt;span&gt; tags.</em></p>
+
+<h3>SRT Styling</h3>
+
+<p>The SRT file format does not support any styling, but this can be forces by inserting HTML tags. <em>&lt;b&gt;</em>, <em>&lt;i&gt;</em> and <em>&lt;u&gt;</em> can be used to set weight, style and decoration and  <em>&lt;font color="#ff0000" face="Courier" size="18"&gt;</em> can be used to set color, family and size. Use this as last resort, since compatibility with many tools <strong>will likely break</strong>.</p>
+
+
+
+<h2>Changelog</h2>
+
+<h3>Version 3.0</h3>
+
+<ul>
+<li>Added support for HTML5 mode: back/file/state options, SRT/MP4 formats, multiple tracks, captions styling and playlists.</li>
+</ul>
+<ul>
+<li>Enhanced support for dock button language shortcode in multitrack setups. The full label is simply shown.</li>
+<li>Made captions aware of controlbar in the "over" state. For player 5.7+, the captions will now scroll up if the controlbar shows and scroll down again if the controlbar hides.</li>
+<li>Added a timed transition to showing/hiding of the language selector.</li>
+<li>Added support for overriding the MP4 language labels with the "labels" option.</li>
+<li>Added a close button to the language selector menu.</li>
+<li>Added support for displaying filenames in language selector if labels are not shown.</li>
+<li>Added support for forcing a pre-set language through the "label" option.</li>
+<li>Enhanced scaling of the captions. For larger dimensions, they're now scaled relatively smaller.</li>
+</ul>
+<ul>
+<li>Fixed an issue with language selector tabbing that required two tabs for advancing one entry.</li>
+<li>Fixed an issue with OVA advertising that caused displaying captions on the preroll.</li>
+</ul>
+<ul>
+<li>Deprecated skinning the captions toggle (no skinning in HTML5). The feature still works, but only in Flash.</li>
+<li>Deprecated placing the toggle in the controlbar (no custom controlbar buttons in HTML5). The feature still works, but only in Flash.</li>
+</ul>
+
+
+
+</body></html>
Index: /tags/plugins/captions/3.0/doc/assets/playlist_captions.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/playlist_captions.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/assets/playlist_captions.xml	(revision 1769)
@@ -0,0 +1,29 @@
+<rss version="2.0" xmlns:jwplayer="http://developer.longtailvideo.com/trac/wiki/FlashFormats">
+  <channel>
+    <title>Example RSS playlist with captions</title>
+
+    <item>
+      <title>Coronation Street</title>
+      <description>This entry has external DFXP captions</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/7OCSON1y-393434.flv</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/7OCSON1y-480.jpg</jwplayer:image>
+      <jwplayer:captions.file>/support/sites/default/files/plain.xml</jwplayer:captions.file>
+    </item>
+
+    <item>
+      <title>Sintel (trailer)</title>
+      <description>This entry has external SRT captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/3XnJSIm4-364766.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/3XnJSIm4-480.jpg</jwplayer:image>
+      <jwplayer:captions.file>/support/sites/default/files/sintel.txt</jwplayer:captions.file>
+    </item>
+
+    <item>
+      <title>Big Buck Bunny (trailer)</title>
+      <description>This entry has embedded MP4 captions.</description>
+      <jwplayer:file>http://content.bitsontherun.com/videos/aytCR4cx-393434.mp4</jwplayer:file>
+      <jwplayer:image>http://content.bitsontherun.com/thumbs/aytCR4cx-480.jpg</jwplayer:image>
+    </item>
+
+  </channel>
+</rss>
Index: /tags/plugins/captions/3.0/doc/assets/captions_styled.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/captions_styled.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/assets/captions_styled.xml	(revision 1769)
@@ -0,0 +1,23 @@
+<tt xmlns="http://www.w3.org/2006/10/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
+  <head>
+   <styling>
+      <style id="jason" tts:color="#00FF00" />
+      <style id="violet" tts:color="#FF0000" />
+      <style id="sarah" tts:color="#FFCC00" />
+      <style id="eileen" tts:color="#3333FF" />
+   </styling>
+  </head>
+  <body>
+    <div>
+      <p begin="00:00:08" end="00:00:10" style="jason">Nothing is going on.</p>
+      <p begin="00:00:10.5" end="00:00:12.5" style="sarah">You liar!</p>
+      <p begin="00:00:13.5" end="00:00:15" style="violet">Are you?</p>
+      <p begin="00:00:17" end="00:00:20" style="jason">Violet, please!<br/><span style="violet">I am not your babe!</span></p>
+      <p begin="00:00:24" end="00:00:29" style="jason">You stupid cow,<br/>look what you have done now, ay.</p>
+      <p begin="00:00:34" end="00:00:36" style="jason">Vi, please.<br/><span style="violet">Leave me alone!</span></p>
+      <p begin="00:00:36" end="00:00:38.5" style="jason">We need to talk.<br/><span style="violet">Jason, are you deaf?</span></p>
+      <p begin="00:00:41" end="00:00:42.9" style="eileen">What's going on?</p>
+      <p begin="00:00:43" end="00:00:45" style="eileen"><span tts:textDecoration="underline">Get out there</span><br/>and try to salvage this!</p>
+    </div>
+  </body>
+</tt>
Index: /tags/plugins/captions/3.0/doc/assets/captions_srt.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/captions_srt.txt	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/assets/captions_srt.txt	(revision 1769)
@@ -0,0 +1,39 @@
+1
+00:00:08,000 --> 00:00:10,000
+- Nothing is going on.
+
+2
+00:00:10,500 --> 00:00:12,500
+You liar!
+
+3
+00:00:13,500 --> 00:00:15,000
+Are you?
+
+4
+00:00:17,000 --> 00:00:20,000
+Violet, please!
+- I am not your babe!
+
+5
+00:00:24,000 --> 00:00:29,000
+You stupid cow,
+look what you gone and done now, ay.
+
+6
+00:00:34,000 --> 00:00:36,000
+Vi, please.
+- Leave me alone!
+
+7
+00:00:36,000 --> 00:00:38,500
+- We need to talk.
+- Jason, are you deaf?!
+
+8
+00:00:41,000 --> 00:00:43,000
+What's going on?
+
+9
+00:00:43,000 --> 00:00:45,000
+Get out there and try to salvage this!
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-esp.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-esp.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-esp.txt	(revision 1819)
@@ -0,0 +1,115 @@
+1
+00:01:47,028 --> 00:01:51,005
+Esta cuchilla tiene un pasado oscuro
+
+2
+00:01:51,046 --> 00:01:55,064
+ha derramado demasiada sangre inocente
+
+3
+00:01:57,046 --> 00:02:01,034
+Eres una tonta por viajar sola, sin ninguna preparaciÃ³n
+
+4
+00:02:01,046 --> 00:02:05,010
+tienes suerte de que tu sangre siga corriendo
+
+5
+00:02:05,033 --> 00:02:06,047
+Gracias
+
+6
+00:02:07,069 --> 00:02:08,088
+Entonces,
+
+7
+00:02:09,052 --> 00:02:13,028
+Â¿QuÃ© te trae a la Tierra de los Guardianes de la Puerta?
+
+8
+00:02:13,040 --> 00:02:14,021
+Ehm...
+
+9
+00:02:15,017 --> 00:02:17,070
+Estoy buscando a alguien
+
+10
+00:02:17,094 --> 00:02:19,094
+Â¿Alguien muy querido?
+
+11
+00:02:19,094 --> 00:02:22,047
+Â¿Un espÃ­ritu perdido?
+
+12
+00:02:23,057 --> 00:02:25,082
+Un dragÃ³n
+
+13
+00:02:28,095 --> 00:02:33,066
+Una tarea peligrosa para una persona solitaria
+
+14
+00:02:33,066 --> 00:02:38,010
+He estado sola desde que tengo memoria...
+
+15
+00:03:26,083 --> 00:03:30,049
+Hey! Shh...ya casi termino.
+
+16
+00:03:31,058 --> 00:03:34,054
+QuÃ©date quieto
+
+17
+00:03:48,036 --> 00:03:51,068
+Buenas noches Skills
+
+18
+00:04:10,033 --> 00:04:14,011
+Â¡AtrÃ¡palo Skills! Â¡VÃ¡mos, atrÃ¡palo!
+
+19
+00:04:25,045 --> 00:04:27,050
+Â¿Skills?
+
+20
+00:05:05,078 --> 00:05:07,018
+Si! Vamos!
+
+21
+00:05:38,092 --> 00:05:39,085
+Â¡Skills!
+
+22
+00:07:25,039 --> 00:07:28,000
+He fallado
+
+23
+00:07:28,018 --> 00:07:29,061
+Hmm...
+
+24
+00:07:32,069 --> 00:07:36,009
+Solo has fallado en ver
+
+25
+00:07:37,049 --> 00:07:40,029
+Estas son tierras de dragones, Sintel
+
+26
+00:07:40,029 --> 00:07:44,064
+Te encuentras mÃ¡s cerca de lo que crees
+
+27
+00:09:18,004 --> 00:09:19,005
+Â¡Skills!
+
+28
+00:10:20,094 --> 00:10:22,064
+Â¿Skills?
+
+29
+00:10:26,026 --> 00:10:27,074
+Skills...
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-fra.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-fra.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-fra.txt	(revision 1819)
@@ -0,0 +1,108 @@
+1
+00:01:47,025 --> 00:01:50,050
+Cette lame a un sombre passÃ©.
+
+2
+00:01:51,079 --> 00:01:55,079
+Elle a fait couler bien du sang innocent.
+
+3
+00:01:58,000 --> 00:02:01,045
+Tu es bien idiote de voyager seule
+sans la moindre prÃ©paration.
+
+4
+00:02:01,075 --> 00:02:04,079
+Tu as de la chance que ton sang coule encore
+dans tes veines.
+
+5
+00:02:05,025 --> 00:02:06,029
+Merci.
+
+6
+00:02:07,050 --> 00:02:09,000
+Alors...
+
+7
+00:02:09,040 --> 00:02:13,080
+Qu'est-ce qui t'amÃšne
+sur la terre des gardiens ?
+
+8
+00:02:15,000 --> 00:02:17,050
+Je recherche quelqu'un.
+
+9
+00:02:18,000 --> 00:02:22,019
+Quelqu'un de trÃšs cher ?
+Une Ã¢me sÅur ?
+
+10
+00:02:23,040 --> 00:02:25,000
+Un dragon.
+
+11
+00:02:28,084 --> 00:02:31,075
+Une quÃªte dangereuse pour une chasseresse solitaire.
+
+12
+00:02:32,094 --> 00:02:35,087
+J'ai Ã©tÃ© seule
+aussi longtemps que je m'en souvienne.
+
+13
+00:03:27,025 --> 00:03:30,050
+C'est bientÃŽt fini. Chut...
+
+14
+00:03:30,075 --> 00:03:33,050
+Ne bouge pas !
+
+15
+00:03:48,025 --> 00:03:52,025
+Bonne nuit, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Attrape-la, Scales ! Vas-y !
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ouais ! Vas-y !
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales !
+
+20
+00:07:25,085 --> 00:07:27,050
+J'ai Ã©chouÃ©.
+
+21
+00:07:32,080 --> 00:07:36,050
+Tu n'as juste pas su ouvrir les yeux...
+
+22
+00:07:37,080 --> 00:07:40,050
+Ce sont des terres Ã  dragons, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Tu es plus proche que tu ne le crois.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-eng.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-eng.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-eng.txt	(revision 1819)
@@ -0,0 +1,107 @@
+1
+00:01:47,025 --> 00:01:50,050
+This blade has a dark past.
+
+2
+00:01:51,079 --> 00:01:55,079
+It has shed much innocent blood.
+
+3
+00:01:58,000 --> 00:02:01,045
+You're a fool for traveling alone,
+so completely unprepared.
+
+4
+00:02:01,075 --> 00:02:04,079
+You're lucky your blood's still flowing.
+
+5
+00:02:05,025 --> 00:02:06,029
+Thank you.
+
+6
+00:02:07,050 --> 00:02:09,000
+So...
+
+7
+00:02:09,040 --> 00:02:13,080
+What brings you to
+the land of the gatekeepers?
+
+8
+00:02:15,000 --> 00:02:17,050
+I'm searching for someone.
+
+9
+00:02:18,000 --> 00:02:22,019
+Someone very dear?
+A kindred spirit?
+
+10
+00:02:23,040 --> 00:02:25,000
+A dragon.
+
+11
+00:02:28,084 --> 00:02:31,075
+A dangerous quest for a lone hunter.
+
+12
+00:02:32,094 --> 00:02:35,087
+I've been alone for
+as long as I can remember.
+
+13
+00:03:27,025 --> 00:03:30,050
+We're almost done. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+Hey, sit still.
+
+15
+00:03:48,025 --> 00:03:52,025
+Good night, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Get him, Scales! Come on!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Yeah! Come on!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+I have failed.
+
+21
+00:07:32,080 --> 00:07:36,050
+You've only failed to see...
+
+22
+00:07:37,080 --> 00:07:40,050
+These are dragon lands, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+You are closer than you know.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-rus.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-rus.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-rus.txt	(revision 1819)
@@ -0,0 +1,109 @@
+1
+00:01:47,025 --> 00:01:50,050
+Ð! Ð­ÑÐŸ ÐºÐŸÐ¿ÑÑ Ñ ÑÐµÐŒÐœÑÐŒ Ð¿ÑÐŸÑÐ»ÑÐŒ.
+
+2
+00:01:51,079 --> 00:01:55,079
+ÐÐ³ÐŸ Ð»ÐµÐ·Ð²ÐžÐµ Ð²ÑÐ¿ÐžÐ»ÐŸ ÐœÐµÐŒÐ°Ð»ÐŸ ÐœÐµÐ²ÐžÐœÐœÐŸÐ¹ ÐºÑÐŸÐ²Ðž.
+
+3
+00:01:58,000 --> 00:02:01,045
+Ð¢ÐŸÐ»ÑÐºÐŸ Ð³Ð»ÑÐ¿ÐµÑ Ð¿ÑÑÐµÑÐµÑÑÐ²ÑÐµÑ Ð² ÐŸÐŽÐžÐœÐŸÑÐºÑ,
+ÐŽÐ° ÐµÑÐµ Ð±ÐµÐ· ÐŸÑÑÐ¶ÐžÑ.
+
+4
+00:02:01,075 --> 00:02:04,079
+Ð¢ÐµÐ±Ðµ Ð¿ÐŸÐ²ÐµÐ·Ð»ÐŸ, ÑÑÐŸ ÐŸÑÑÐ°Ð»Ð°ÑÑ Ð¶ÐžÐ²Ð°.
+
+5
+00:02:05,025 --> 00:02:06,029
+Ð¡Ð¿Ð°ÑÐžÐ±ÐŸ.
+
+6
+00:02:07,050 --> 00:02:09,000
+Ð Ð°ÑÐºÐ°Ð¶Ðž,
+
+7
+00:02:09,040 --> 00:02:13,080
+ÑÑÐŸ Ð¿ÑÐžÐ²ÐµÐ»ÐŸ ÑÐµÐ±Ñ Ð² ÑÑÑÐ°ÐœÑ
+Ñ
+ÑÐ°ÐœÐžÑÐµÐ»ÐµÐ¹?
+
+8
+00:02:15,000 --> 00:02:17,050
+Ð¯ ÐžÑÑ ÐºÐŸÐµ ÐºÐŸÐ³ÐŸ.
+
+9
+00:02:18,000 --> 00:02:22,019
+ÐÐŸÐ³ÐŸ-ÑÐŸ ÐŸÑÐµÐœÑ ÐŽÐŸÑÐŸÐ³ÐŸÐ³ÐŸ?
+Ð ÐŸÐŽÑÑÐ²ÐµÐœÐœÑÑ ÐŽÑÑÑ?
+
+10
+00:02:23,040 --> 00:02:25,000
+ÐÑÐ°ÐºÐŸÐœÐ°.
+
+11
+00:02:28,084 --> 00:02:31,075
+ÐÐ¿Ð°ÑÐœÐŸÐµ Ð·Ð°ÐœÑÑÐžÐµ ÐŽÐ»Ñ ÐŸÐŽÐžÐœÐŸÑÐºÐž.
+
+12
+00:02:32,094 --> 00:02:35,087
+Ð¡ÐºÐŸÐ»ÑÐºÐŸ ÑÐµÐ±Ñ Ð¿ÐŸÐŒÐœÑ, 
+Ñ Ð²ÑÐµÐ³ÐŽÐ° Ð±ÑÐ»Ð° ÐŸÐŽÐœÐ°.
+
+13
+00:03:27,025 --> 00:03:30,050
+Ð£Ð¶Ðµ Ð¿ÐŸÑÑÐž Ð²ÑÑ. ÐšÑÑÑ...
+
+14
+00:03:30,075 --> 00:03:33,050
+Ð¡Ð¿ÐŸÐºÐŸÐ¹ÐœÐŸ!
+
+15
+00:03:48,025 --> 00:03:52,025
+Ð¡Ð¿ÐŸÐºÐŸÐ¹ÐœÐŸÐ¹ ÐœÐŸÑÐž, Ð§ÐµÑÑÐ¹ÑÐžÐº.
+
+16
+00:04:10,034 --> 00:04:13,084
+ÐÐ·ÑÑÑ, Ð§ÐµÑÑÐ¹ÑÐžÐº! ÐÐ°Ð²Ð°Ð¹!
+
+17
+00:04:25,025 --> 00:04:28,025
+Ð§ÐµÑÑÐ¹ÑÐžÐº?
+
+18
+00:05:04,000 --> 00:05:07,050
+ÐÐ°! ÐÐ°Ð²Ð°Ð¹!
+
+19
+00:05:38,075 --> 00:05:42,000
+Ð§ÐµÑÑÐ¹ÑÐžÐº!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ð£ ÐŒÐµÐœÑ ÐœÐžÑÐµÐ³ÐŸ ÐœÐµ Ð¿ÐŸÐ»ÑÑÐžÐ»ÐŸÑÑ.
+
+21
+00:07:32,080 --> 00:07:36,050
+ÐÐµ Ð¿ÐŸÐ»ÑÑÐžÐ»ÐŸÑÑ ÑÐŸÐ»ÑÐºÐŸ Ð¿ÐŸÐœÑÑÑ,
+
+22
+00:07:37,080 --> 00:07:40,050
+ÑÑÐŸ ÑÑ ÐŽÐŸÑÐ»Ð° ÐŽÐŸ Ð·ÐµÐŒÐ»Ðž ÐŽÑÐ°ÐºÐŸÐœÐŸÐ², Ð¡ÐžÐœÑÑÐ»Ñ.
+
+23
+00:07:40,085 --> 00:07:44,000
+Ð ÑÐµÐ¿ÐµÑÑ Ð±Ð»ÐžÐ¶Ðµ Ðº ÑÐµÐ»Ðž,
+ÑÐµÐŒ ÑÑ ÐŽÑÐŒÐ°ÐµÑÑ.
+
+24
+00:09:17,060 --> 00:09:19,050
+Ð§ÐµÑÑÐ¹ÑÐžÐº!
+
+25
+00:10:21,060 --> 00:10:24,000
+Ð§ÐµÑÑÐ¹ÑÐžÐº?
+
+26
+00:10:26,020 --> 00:10:29,079
+Ð§ÐµÑÑÐ¹ÑÐžÐº...
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-deu.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-deu.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-deu.txt	(revision 1819)
@@ -0,0 +1,112 @@
+1
+00:01:47,025 --> 00:01:50,050
+Diese Klinge birgt eine finstere
+Vergangenheit.
+
+2
+00:01:51,079 --> 00:01:55,079
+Durch sie wurde viel unschuldiges Blut
+vergossen.
+
+3
+00:01:58,000 --> 00:02:01,045
+Es ist tÃ¶richt, so ganz allein und
+unvorbereitet zu reisen!
+
+4
+00:02:01,075 --> 00:02:04,079
+Du kannst von GlÃŒck sagen, dass dein
+Blut noch in deinen Adern flieÃt.
+
+5
+00:02:05,025 --> 00:02:06,029
+Danke.
+
+6
+00:02:07,050 --> 00:02:09,000
+Also...
+
+7
+00:02:09,040 --> 00:02:13,080
+...was fÃŒhrt dich in die Lande der
+Torwaechter?
+
+8
+00:02:15,000 --> 00:02:17,050
+Ich suche jemanden.
+
+9
+00:02:18,000 --> 00:02:22,019
+Ein teurer Freund?
+Eine verwandte Seele?
+
+10
+00:02:23,040 --> 00:02:25,000
+Ein Drache.
+
+11
+00:02:28,084 --> 00:02:31,075
+Ein gefÃ€hrliches Unterfangen fÃŒr eine
+einsame JÃ€gerin.
+
+12
+00:02:32,094 --> 00:02:35,087
+Ich bin einsam, solange ich mich
+erinnern kann.
+
+13
+00:03:27,025 --> 00:03:30,050
+Wir sind fast fertig. Ruhig...
+
+14
+00:03:30,075 --> 00:03:33,050
+He, halt still.
+
+15
+00:03:48,025 --> 00:03:52,025
+Gute Nacht, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Los, hol ihn dir, Scales! Komm schon!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Ja! VorwÃ€rts!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ich habe versagt.
+
+21
+00:07:32,080 --> 00:07:36,050
+Du hast es nur nicht vermocht, genauer
+hinzusehen.
+
+22
+00:07:37,080 --> 00:07:40,050
+Dies ist das Reich der Drachen, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Du bist nÃ€her, als du ahnst.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/doc/assets/example_captions_srt-ita.txt
===================================================================
--- /tags/plugins/captions/3.0/doc/assets/example_captions_srt-ita.txt	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/assets/example_captions_srt-ita.txt	(revision 1819)
@@ -0,0 +1,110 @@
+1
+00:01:47,025 --> 00:01:50,050
+Questa lama ha un oscuro passato.
+
+2
+00:01:51,079 --> 00:01:55,079
+Ha sparso molto sangue innocente.
+
+3
+00:01:58,000 --> 00:02:01,045
+Sei sciocca a viaggiare sola,
+completamente impreparata.
+
+4
+00:02:01,075 --> 00:02:04,079
+Sei fortunato che il tuo sangue
+scorra ancora.
+
+5
+00:02:05,025 --> 00:02:06,029
+Grazie.
+
+6
+00:02:07,050 --> 00:02:09,000
+Quindi...
+
+7
+00:02:09,040 --> 00:02:13,080
+Cosa ti porta nella terra
+dei guardiani?
+
+8
+00:02:15,000 --> 00:02:17,050
+Sto cercando qualcuno.
+
+9
+00:02:18,000 --> 00:02:22,019
+Qualcuno molto caro?
+Un'anima gemella?
+
+10
+00:02:23,040 --> 00:02:25,000
+Un drago.
+
+11
+00:02:28,084 --> 00:02:31,075
+Una ricerca pericolosa
+per una cacciatrice solitaria.
+
+12
+00:02:32,094 --> 00:02:35,087
+Sono stata sola per
+quanto possa ricordare.
+
+13
+00:03:27,025 --> 00:03:30,050
+Ci siamo quasi. Shhh...
+
+14
+00:03:30,075 --> 00:03:33,050
+Hey, siediti tranquilla.
+
+15
+00:03:48,025 --> 00:03:52,025
+Buona notte, Scales.
+
+16
+00:04:10,034 --> 00:04:13,084
+Prendilo, Scales! Avanti!
+
+17
+00:04:25,025 --> 00:04:28,025
+Scales?
+
+18
+00:05:04,000 --> 00:05:07,050
+Si! Avanti!
+
+19
+00:05:38,075 --> 00:05:42,000
+Scales!
+
+20
+00:07:25,085 --> 00:07:27,050
+Ho fallito.
+
+21
+00:07:32,080 --> 00:07:36,050
+Hai solo fallito nel vedere...
+
+22
+00:07:37,080 --> 00:07:40,050
+Queste sono le terre
+dei draghi, Sintel.
+
+23
+00:07:40,085 --> 00:07:44,000
+Sei piÂ vicino di quanto immagini.
+
+24
+00:09:17,060 --> 00:09:19,050
+Scales!
+
+25
+00:10:21,060 --> 00:10:24,000
+Scales?
+
+26
+00:10:26,020 --> 00:10:29,079
+Scales...
Index: /tags/plugins/captions/3.0/doc/examples/example_captions_srt.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/example_captions_srt.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/example_captions_srt.xml	(revision 1769)
@@ -0,0 +1,21 @@
+<example>
+    <player>
+        <flashplayer>http://player.longtailvideo.com/player.swf</flashplayer>
+        <id>playerID</id>
+        <width>480</width>
+        <height>294</height>
+        <flashvars>
+            <controlbar>bottom</controlbar>
+            <dock>false</dock>
+            <file embedvalue="http://content.bitsontherun.com/videos/7OCSON1y-393434.flv">/videos/corrie.flv</file>
+            <image embedvalue="http://content.bitsontherun.com/thumbs/7OCSON1y-480.jpg">/thumbs/corrie.jpg</image>
+        </flashvars>
+        <plugins>
+            <plugin name="captions-2">
+                <back>false</back>
+                <file embedvalue="http://www.longtailvideo.com/support/sites/default/files/plain.txt">/captions/corrie.txt</file>
+            </plugin>
+        </plugins>
+    </player>
+
+</example>
Index: /tags/plugins/captions/3.0/doc/examples/example_captions_styling.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/example_captions_styling.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/example_captions_styling.xml	(revision 1769)
@@ -0,0 +1,22 @@
+<example>
+    <player>
+        <flashplayer>http://player.longtailvideo.com/player.swf</flashplayer>
+        <id>playerID</id>
+        <width>480</width>
+        <height>294</height>
+        <flashvars>
+            <controlbar>bottom</controlbar>
+            <file embedvalue="http://content.bitsontherun.com/videos/7OCSON1y-393434.flv">/videos/corrie.flv</file>
+            <image embedvalue="http://content.bitsontherun.com/thumbs/7OCSON1y-480.jpg">/thumbs/corrie.jpg</image>
+        </flashvars>
+        <plugins>
+            <plugin name="captions-2">
+                <file embedvalue="http://www.longtailvideo.com/support/sites/default/files/captions_styled.xml">/captions/styled.xml</file>
+                <fontFamily>Georgia</fontFamily>
+                <fontSize>18</fontSize>
+                <fontStyle>italic</fontStyle>
+                <fontWeight>bold</fontWeight>
+            </plugin>
+        </plugins>
+    </player>
+</example>
Index: /tags/plugins/captions/3.0/doc/examples/mp4.html
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/mp4.html	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/mp4.html	(revision 1769)
@@ -0,0 +1,13 @@
+<p>Here is a basic setup of the Captions plugin displaying embedded <a href="http://www.longtailvideo.com/support/addons/captions-plugin/14974/captions-plugin-reference-guide#mp4">MP4</a> captions file. The on/off toggle is displayed in the dock and the captions background is enabled:</p>
+
+
+<script src="http://player.longtailvideo.com/jwplayer.js" type="text/javascript"></script>
+<script src="/content/js/examples/jwexample.js" type="text/javascript"></script>
+<div id="exampleHTML"></div>
+<script type="text/javascript">
+    $(document).ready(function() {
+        jwExample('/support/sites/default/files/example_captions_mp4_0.xml', 'exampleHTML');
+    });
+</script>
+
+<p>Since the captions are embedded in the video, the <b>captions.file</b> flashvar doesn't have to be set. The plugin simply listens to text events on the video file, and displays the texts as events arrive.</p>
Index: /tags/plugins/captions/3.0/doc/examples/playlist.html
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/playlist.html	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/playlist.html	(revision 1769)
@@ -0,0 +1,45 @@
+<p>Here is a setup of the audiodescription plugin in combination with an XML playlist:</p>
+
+
+<script src="http://player.longtailvideo.com/jwplayer.js" type="text/javascript"></script>
+<script src="/content/js/examples/jwexample.js" type="text/javascript"></script>
+<div id="exampleHTML"></div>
+<script type="text/javascript">
+    $(document).ready(function() {
+        jwExample('/support/sites/default/files/example_captions_playlist.xml', 'exampleHTML');
+    });
+</script>
+
+
+<p>And here are the contents of the XML playlist:</p>
+        <pre>
+&lt;rss version="2.0" xmlns:jwplayer="http://developer.longtailvideo.com/"&gt;
+  &lt;channel&gt;
+    &lt;title&gt;Example RSS playlist with captions&lt;/title&gt;
+
+    &lt;item&gt;
+      &lt;title&gt;Coronation Street&lt;/title&gt;
+      &lt;description&gt;This entry has external XML captions&lt;/description&gt;
+      &lt;jwplayer:file&gt;/assets/corrie.flv"&lt;/jwplayer:file&gt;
+      &lt;jwplayer:captions.file&gt;/assets/corrie.xml&lt;/jwplayer:captions.file&gt;
+    &lt;/item&gt;
+
+    &lt;item&gt;
+      &lt;title&gt;Big Buck Bunny (trailer)&lt;/title&gt;
+      &lt;description&gt;This entry has built-in MPEG-4 Timed Text.&lt;/description&gt;
+      &lt;jwplayer:file&gt;/assets/bunny.mp4&lt;/jwplayer:file&gt;
+    &lt;/item&gt;
+
+    &lt;item&gt;
+      &lt;title&gt;Sintel (trailer)&lt;/title&gt;
+      &lt;description&gt;This entry has external SRT captions.&lt;/description&gt;
+      &lt;jwplayer:file&gt;/assets/sintel.mp4&lt;/jwplayer:file&gt;
+      &lt;jwplayer:captions.file&gt;/assets/sintel.srt&lt;/jwplayer:captions.file&gt;
+    &lt;/item&gt;
+
+  &lt;/channel&gt;
+&lt;/rss&gt;
+</pre>
+
+
+<p>The playlist is in <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12537/xml-playlist-support#supportedxml">RSS format</a> and uses the <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12537/xml-playlist-support#jwplayernamespace">jwplayer: extension</a> to display the captions options.</p>
Index: /tags/plugins/captions/3.0/doc/examples/example_captions_multiple.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/example_captions_multiple.xml	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/examples/example_captions_multiple.xml	(revision 1819)
@@ -0,0 +1,20 @@
+<example>
+    <player>
+        <flashplayer>http://player.longtailvideo.com/player.swf</flashplayer>
+        <id>playerID</id>
+        <width>640</width>
+        <height>320</height>
+        <flashvars>
+            <controlbar>bottom</controlbar>
+            <dock>true</dock>
+            <file embedvalue="http://content.bitsontherun.com/jwp/a95zAVN1.xml">/videos/sintel.mp4</file>
+        </flashvars>
+        <plugins>
+            <plugin name="captions-2">
+                <files embedvalue="/support/sites/default/files/example_captions_srt-deu.txt,/support/sites/default/files/example_captions_srt-eng.txt,/support/sites/default/files/example_captions_srt-esp.txt,/support/sites/default/files/example_captions_srt-fra.txt,/support/sites/default/files/example_captions_srt-ita.txt,/support/sites/default/files/example_captions_srt-rus.txt">/captions/sintel-deu.txt,/captions/sintel-eng.txt,/captions/sintel-esp.txt,/captions/sintel-fra.txt,/captions/sintel-ita.txt,/captions/sintel-rus.txt</files>
+                <labels>Deutsch,English,EspaÃ±ol,FranÃ§ais,Italiano,Ð ÐŸÑÑÐžÑ</labels>
+            </plugin>
+        </plugins>
+    </player>
+
+</example>
Index: /tags/plugins/captions/3.0/doc/examples/example_captions_mp4.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/example_captions_mp4.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/example_captions_mp4.xml	(revision 1769)
@@ -0,0 +1,18 @@
+<example>
+    <player>
+        <flashplayer>http://player.longtailvideo.com/player.swf</flashplayer>
+        <id>playerID</id>
+        <width>480</width>
+        <height>294</height>
+        <flashvars>
+            <controlbar>bottom</controlbar>
+            <file embedvalue="http://content.bitsontherun.com/videos/aytCR4cx-393434.mp4">/videos/bunny.mp4</file>
+            <image embedvalue="http://content.bitsontherun.com/thumbs/aytCR4cx-480.jpg">/thumbs/bunny.jpg</image>
+        </flashvars>
+        <plugins>
+            <plugin name="captions-2">
+                <back>true</back>
+            </plugin>
+        </plugins>
+    </player>
+</example>
Index: /tags/plugins/captions/3.0/doc/examples/example_captions_playlist.xml
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/example_captions_playlist.xml	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/example_captions_playlist.xml	(revision 1769)
@@ -0,0 +1,21 @@
+<example>
+    <html>
+        <p>Here is a setup of the Captions plugin displaying captions for videos in a playlist:</p>
+    </html>
+    
+    <player>
+        <flashplayer>http://player.longtailvideo.com/player.swf</flashplayer>
+        <id>playerID</id>
+        <width>720</width>
+        <height>294</height>
+        <flashvars>
+            <playlist>right</playlist>
+            <controlbar>bottom</controlbar>
+            <playlistfile embedvalue="http://www.longtailvideo.com/support/sites/default/files/playlist_captions.xml">/assets/playlist.xml</playlistfile>
+            <playlistsize>240</playlistsize>
+        </flashvars>
+        <plugins>
+            <plugin name="captions-2" />
+        </plugins>
+    </player>
+</example>
Index: /tags/plugins/captions/3.0/doc/examples/srt.html
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/srt.html	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/srt.html	(revision 1769)
@@ -0,0 +1,57 @@
+<p>Here is a basic setup of the Captions plugin displaying an <a href="http://www.longtailvideo.com/support/addons/captions-plugin/14974/captions-plugin-reference-guide#srt">SRT</a> captions file. The on/off toggle is displayed in the controlbar and the captions background is disabled:</p>
+
+
+<script src="http://player.longtailvideo.com/jwplayer.js" type="text/javascript"></script>
+<script src="/content/js/examples/jwexample.js" type="text/javascript"></script>
+<div id="exampleHTML"></div>
+<script type="text/javascript">
+    $(document).ready(function() {
+        jwExample('/support/sites/default/files/example_captions_srt.xml', 'exampleHTML');
+    });
+</script>
+
+<p>And here are the contents of the SRT captions file:</p>
+
+<pre>
+1
+00:00:08,000 --> 00:00:10,000
+- Nothing is going on.
+
+2
+00:00:10,500 --> 00:00:12,500
+You liar!
+
+3
+00:00:13,500 --> 00:00:15,000
+Are you?
+
+4
+00:00:17,000 --> 00:00:20,000
+Violet, please!
+- I am not your babe!
+
+5
+00:00:24,000 --> 00:00:29,000
+You stupid cow,
+look what you gone and done now, ay.
+
+6
+00:00:34,000 --> 00:00:36,000
+Vi, please.
+- Leave me alone!
+
+7
+00:00:36,000 --> 00:00:38,500
+- We need to talk.
+- Jason, are you deaf?!
+
+8
+00:00:41,000 --> 00:00:43,000
+What's going on?
+
+9
+00:00:43,000 --> 00:00:45,000
+Get out there and try to salvage this!
+</pre>
+
+<p>Note that loading of the captions is subject to <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12541/crossdomain-file-loading-restrictions">crossdomain restrictions</a>. You need to place a <b>crossdomain.xml</b> file if your captions are hosted on another server than the player.</p>
Index: /tags/plugins/captions/3.0/doc/examples/styling.html
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/styling.html	(revision 1769)
+++ /tags/plugins/captions/3.0/doc/examples/styling.html	(revision 1769)
@@ -0,0 +1,46 @@
+<p>Here is a setup of the Captions plugin displaying heavily styled captions. The configuration options are used to define a basic style and the DFXP styling features are used to enhance this with a dedicated color for each speaker:</p>
+
+<script src="http://player.longtailvideo.com/jwplayer.js" type="text/javascript"></script>
+<script src="/content/js/examples/jwexample.js" type="text/javascript"></script>
+<div id="exampleHTML"></div>
+<script type="text/javascript">
+    $(document).ready(function() {
+        jwExample('/support/sites/default/files/example_captions_styling.xml', 'exampleHTML');
+    });
+</script>
+
+    
+<p>Here are the contents of the DFXP captions file. You'll see both styles applied to paragraphs and styles applied to inline &lt;span&gt; tags (in case one caption contains multiple speakers):</p>
+
+<pre>
+&lt;tt xmlns="http://www.w3.org/2006/10/ttaf1" xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling"&gt;
+  &lt;head&gt;
+   &lt;styling&gt;
+      &lt;style id="jason" tts:color="#00FF00" /&gt;
+      &lt;style id="violet" tts:color="#FF0000" /&gt;
+      &lt;style id="sarah" tts:color="#FFCC00" /&gt;
+      &lt;style id="eileen" tts:color="#3333FF" /&gt;
+   &lt;/styling&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;div&gt;
+      &lt;p begin="00:00:08" end="00:00:10" style="jason"&gt;Nothing is going on.&lt;/p&gt;
+      &lt;p begin="00:00:10.5" end="00:00:12.5" style="sarah"&gt;You liar!&lt;/p&gt;
+      &lt;p begin="00:00:13.5" end="00:00:15" style="violet"&gt;Are you?&lt;/p&gt;
+      &lt;p begin="00:00:17" end="00:00:20" style="jason"&gt;Violet, please!&lt;br/&gt;
+          &lt;span style="violet"&gt;I am not your babe!&lt;/span&gt;&lt;/p&gt;
+      &lt;p begin="00:00:24" end="00:00:29" style="jason"&gt;You stupid cow,&lt;br/&gt;
+          look what you have done now, ay.&lt;/p&gt;
+      &lt;p begin="00:00:34" end="00:00:36" style="jason"&gt;Vi, please.&lt;br/&gt;
+          &lt;span style="violet"&gt;Leave me alone!&lt;/span&gt;&lt;/p&gt;
+      &lt;p begin="00:00:36" end="00:00:38.5" style="jason"&gt;We need to talk.&lt;br/&gt;
+          &lt;span style="violet"&gt;Jason, are you deaf?&lt;/span&gt;&lt;/p&gt;
+      &lt;p begin="00:00:41" end="00:00:42.9" style="eileen"&gt;What's going on?&lt;/p&gt;
+      &lt;p begin="00:00:43" end="00:00:45" style="eileen"&gt;Get out there&lt;br/&gt;
+          and try to salvage this!&lt;/p&gt;
+    &lt;/div&gt;
+  &lt;/body&gt;
+&lt;/tt&gt;
+</pre>
+
+<p><em>Note it's best practice to use the configuration options for general styling and the DFXP styling (or HTML in SRT) for doing specific overrides.</em></p>
Index: /tags/plugins/captions/3.0/doc/examples/multiple.html
===================================================================
--- /tags/plugins/captions/3.0/doc/examples/multiple.html	(revision 1819)
+++ /tags/plugins/captions/3.0/doc/examples/multiple.html	(revision 1819)
@@ -0,0 +1,15 @@
+<p>Here is a setup of the Captions plugin displaying <a href="http://www.longtailvideo.com/support/addons/captions-plugin/14974/captions-plugin-reference-guide#srt">SRT</a> captions in 6 different languages. A language selection menu pops up when clicking the captions button:</p>
+
+
+<script src="http://player.longtailvideo.com/jwplayer.js" type="text/javascript"></script>
+<script src="/content/js/examples/jwexample.js" type="text/javascript"></script>
+<div id="exampleHTML"></div>
+<script type="text/javascript">
+    $(document).ready(function() {
+        jwExample('/support/sites/default/files/example_captions_multiple.xml', 'exampleHTML');
+    });
+</script>
+
+<p>(See the captions around the 2 minute mark)</p>
+
+<p>Note that loading of the captions is subject to <a href="http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12541/crossdomain-file-loading-restrictions">crossdomain restrictions</a>. You need to place a <b>crossdomain.xml</b> file if your captions are hosted on another server than the player.</p>
Index: /tags/plugins/captions/3.0/lib/jwplayer-5-classes.xml
===================================================================
--- /tags/plugins/captions/3.0/lib/jwplayer-5-classes.xml	(revision 1881)
+++ /tags/plugins/captions/3.0/lib/jwplayer-5-classes.xml	(revision 1881)
@@ -0,0 +1,1667 @@
+<report>
+  <scripts>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Stretcher.as" mod="1300363653000" size="1422" optimizedsize="882">
+      <def id="com.longtailvideo.jwplayer.utils:Stretcher" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="Math" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/LoadbalanceParser.as" mod="1300363653000" size="1274" optimizedsize="753">
+      <def id="com.longtailvideo.jwplayer.parsers:LoadbalanceParser" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/PlayerConfig.as" mod="1308912577000" size="13746" optimizedsize="5250">
+      <def id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="com.longtailvideo.jwplayer.controller:RepeatOptions" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:getQualifiedClassName" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerVersion" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+      <dep id="com.longtailvideo.jwplayer.utils:TypeChecker" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/XSPFParser.as" mod="1300363653000" size="1881" optimizedsize="1284">
+      <def id="com.longtailvideo.jwplayer.parsers:XSPFParser" />
+      <pre id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:FlexMovieClip)" mod="1265215569232" size="971" optimizedsize="577">
+      <def id="mx.core:FlexMovieClip" />
+      <pre id="flash.display:MovieClip" />
+      <dep id="AS3" />
+      <dep id="mx.core:mx_internal" />
+      <dep id="Error" />
+      <dep id="mx.utils:NameUtil" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/PluginInterface.as" mod="1300363653000" size="600" optimizedsize="221">
+      <def id="com.jeroenwijering.events:PluginInterface" />
+      <pre id="Object" />
+      <dep id="com.jeroenwijering.events:AbstractView" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/IControlbarComponent.as" mod="1308912577000" size="1620" optimizedsize="383">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/libs/as3corelib.swc(com.adobe.serialization.json:JSONTokenType)" mod="1259852018000" size="1069" optimizedsize="525">
+      <def id="com.adobe.serialization.json:JSONTokenType" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/ComponentEvent.as" mod="1308912577000" size="1498" optimizedsize="891">
+      <def id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <pre id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/ControlbarComponent.as" mod="1308912577000" size="20380" optimizedsize="11314">
+      <def id="com.longtailvideo.jwplayer.view.components:ControlbarComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ComponentButton" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.events:KeyboardEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ControlbarLayoutManager" />
+      <dep id="com.longtailvideo.jwplayer.view.components:Slider" />
+      <dep id="flash.accessibility:AccessibilityProperties" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="flash.text:TextFormat" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Animations" />
+      <dep id="flash.geom:ColorTransform" />
+      <dep id="flash.display:Sprite" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="flash.text:TextFieldAutoSize" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.utils:clearTimeout" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="Error" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="flash.text:TextField" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.ui:Mouse" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Animations.as" mod="1300363653000" size="2375" optimizedsize="1307">
+      <def id="com.longtailvideo.jwplayer.utils:Animations" />
+      <pre id="Object" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="Math" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/IPlayerComponent.as" mod="1308912577000" size="1996" optimizedsize="418">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/View.as" mod="1308912577000" size="15523" optimizedsize="9628">
+      <def id="com.longtailvideo.jwplayer.view:View" />
+      <pre id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.view:IPlayerComponents" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="com.longtailvideo.jwplayer.view:PlayerComponents" />
+      <dep id="com.longtailvideo.jwplayer.view:RightclickMenu" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="flash.text:TextFormat" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:Model" />
+      <dep id="com.longtailvideo.jwplayer.view:View_ErrorScreen" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <dep id="flash.events:TimerEvent" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="flash.display:StageAlign" />
+      <dep id="flash.display:Sprite" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerV4Emulation" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="com.longtailvideo.jwplayer.view:Logo" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.text:TextField" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.display:Stage" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stretcher" />
+      <dep id="flash.system:LoaderContext" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.display:StageDisplayState" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="com.longtailvideo.jwplayer.view:View_LoadingScreen" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerVersion" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="com.longtailvideo.jwplayer.view:PlayerLayoutManager" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.display:StageScaleMode" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="flash.utils:Timer" />
+      <dep id="flash.events:FocusEvent" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/DefaultSkin.as" mod="1300363653000" size="2060" optimizedsize="1324">
+      <def id="com.longtailvideo.jwplayer.view.skins:DefaultSkin" />
+      <pre id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <dep id="flash.events:Event" />
+      <dep id="mx.core:MovieClipLoaderAsset" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:DefaultSkin_EmbeddedSkin" />
+      <dep id="AS3" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.display:LoaderInfo" />
+      <dep id="Error" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/PlayerComponents.as" mod="1300363653000" size="2508" optimizedsize="1485">
+      <def id="com.longtailvideo.jwplayer.view:PlayerComponents" />
+      <pre id="com.longtailvideo.jwplayer.view:IPlayerComponents" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.view.components:DisplayComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <dep id="com.longtailvideo.jwplayer.view.components:PlaylistComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.components:DockComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ControlbarComponent" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ControlbarComponentV4" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/PlaylistComponent.as" mod="1308912577000" size="20477" optimizedsize="13173">
+      <def id="com.longtailvideo.jwplayer.view.components:PlaylistComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="flash.display:LoaderInfo" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="flash.accessibility:AccessibilityProperties" />
+      <dep id="flash.text:TextFormat" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:DefaultSkin" />
+      <dep id="flash.text:TextFormatAlign" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="com.longtailvideo.jwplayer.view:PlayerLayoutManager" />
+      <dep id="flash.geom:ColorTransform" />
+      <dep id="flash.utils:Dictionary" />
+      <dep id="flash.display:Sprite" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stacker" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:Loader" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="flash.text:TextField" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:PNGSkin" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stretcher" />
+      <dep id="flash.system:LoaderContext" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/ControlbarLayoutManager.as" mod="1300363653000" size="4260" optimizedsize="2386">
+      <def id="com.longtailvideo.jwplayer.view.components:ControlbarLayoutManager" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ComponentButton" />
+      <dep id="com.longtailvideo.jwplayer.view.components:Slider" />
+      <dep id="AS3" />
+      <dep id="flash.text:TextField" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.view.components:ControlbarComponent" />
+      <dep id="RegExp" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/MediaProviderLoader.as" mod="1300363653000" size="1888" optimizedsize="1068">
+      <def id="com.longtailvideo.jwplayer.controller:MediaProviderLoader" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="Error" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/CoreComponent.as" mod="1308912577000" size="5571" optimizedsize="2775">
+      <def id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="flash.display:MovieClip" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="AS3" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/JavascriptSerialization.as" mod="1307455274000" size="2447" optimizedsize="1553">
+      <def id="com.longtailvideo.jwplayer.utils:JavascriptSerialization" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:getQualifiedClassName" />
+      <dep id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:ByteArrayAsset)" mod="1265215569169" size="608" optimizedsize="298">
+      <def id="mx.core:ByteArrayAsset" />
+      <pre id="mx.core:IFlexAsset" />
+      <pre id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="mx.core:mx_internal" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/DockComponent.as" mod="1308912577000" size="7164" optimizedsize="4414">
+      <def id="com.longtailvideo.jwplayer.view.components:DockComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.utils:clearTimeout" />
+      <dep id="com.longtailvideo.jwplayer.view.components:DockButton" />
+      <dep id="flash.events:KeyboardEvent" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="Math" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="flash.accessibility:AccessibilityProperties" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Animations" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.view.components:DockJSButton" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/View_LoadingScreen_dataClass.as" mod="1300363650000" size="848" optimizedsize="301">
+      <def id="com.longtailvideo.jwplayer.view:View_LoadingScreen_dataClass" />
+      <pre id="mx.core:ByteArrayAsset" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/SWFSkin.as" mod="1300363653000" size="4811" optimizedsize="3090">
+      <def id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <pre id="com.longtailvideo.jwplayer.view.skins:SkinBase" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="flash.text:TextField" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <dep id="Error" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/ViewEvent.as" mod="1308912577000" size="1988" optimizedsize="1215">
+      <def id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <pre id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/ASXParser.as" mod="1300363653000" size="1740" optimizedsize="1169">
+      <def id="com.longtailvideo.jwplayer.parsers:ASXParser" />
+      <pre id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/nochump/util/zip/ZipError.as" mod="1300363653000" size="549" optimizedsize="246">
+      <def id="com.nochump.util.zip:ZipError" />
+      <pre id="flash.errors:IOError" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/ModelStates.as" mod="1300363653000" size="659" optimizedsize="317">
+      <def id="com.jeroenwijering.events:ModelStates" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:MovieClipLoaderAsset)" mod="1265215568966" size="2858" optimizedsize="1699">
+      <def id="mx.core:MovieClipLoaderAsset" />
+      <pre id="mx.core:IFlexAsset" />
+      <pre id="mx.core:MovieClipAsset" />
+      <pre id="mx.core:IFlexDisplayObject" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="mx.core:mx_internal" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.system:LoaderContext" />
+      <dep id="flash.system:ApplicationDomain" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/PlaylistEvent.as" mod="1300363653000" size="1436" optimizedsize="840">
+      <def id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <pre id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/plugins/V4Plugin.as" mod="1300363653000" size="1736" optimizedsize="1061">
+      <def id="com.longtailvideo.jwplayer.plugins:V4Plugin" />
+      <pre id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <pre id="flash.display:Sprite" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerV4Emulation" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.jeroenwijering.events:PluginInterface" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/Logo.as" mod="1308912577000" size="5174" optimizedsize="3225">
+      <def id="com.longtailvideo.jwplayer.view:Logo" />
+      <pre id="flash.display:MovieClip" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.utils:clearTimeout" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="flash.net:navigateToURL" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="RegExp" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Animations" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/nochump/util/zip/ZipEntry.as" mod="1300363653000" size="2782" optimizedsize="1204">
+      <def id="com.nochump.util.zip:ZipEntry" />
+      <pre id="Object" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="Date" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/PlayerEvent.as" mod="1300363653000" size="631" optimizedsize="281">
+      <def id="com.jeroenwijering.events:PlayerEvent" />
+      <pre id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/DockJSButton.as" mod="1302850620000" size="2811" optimizedsize="1551">
+      <def id="com.longtailvideo.jwplayer.view.components:DockJSButton" />
+      <pre id="com.longtailvideo.jwplayer.view.components:ComponentButton" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="AS3" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/LockManager.as" mod="1300363653000" size="1427" optimizedsize="671">
+      <def id="com.longtailvideo.jwplayer.controller:LockManager" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/YouTubeMediaProvider.as" mod="1308912577000" size="7243" optimizedsize="4457">
+      <def id="com.longtailvideo.jwplayer.media:YouTubeMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="Math" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:Loader" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.utils:Timer" />
+      <dep id="flash.events:TimerEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/nochump/util/zip/Inflater.as" mod="1300363653000" size="5533" optimizedsize="3650">
+      <def id="com.nochump.util.zip:Inflater" />
+      <pre id="Object" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="flash.utils:Endian" />
+      <dep id="Error" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/View_LoadingScreen.as" mod="1300363650000" size="1178" optimizedsize="715">
+      <def id="com.longtailvideo.jwplayer.view:View_LoadingScreen" />
+      <pre id="mx.core:MovieClipLoaderAsset" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.view:View_LoadingScreen_dataClass" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/JavascriptAPI.as" mod="1308912577000" size="14260" optimizedsize="7298">
+      <def id="com.longtailvideo.jwplayer.player:JavascriptAPI" />
+      <pre id="Object" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+      <dep id="com.longtailvideo.jwplayer.utils:JavascriptSerialization" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <dep id="flash.utils:Timer" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.events:TimerEvent" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/MediaEvent.as" mod="1301385039000" size="2601" optimizedsize="1681">
+      <def id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <pre id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/ZIPSkin.as" mod="1300363653000" size="3275" optimizedsize="2331">
+      <def id="com.longtailvideo.jwplayer.view.skins:ZIPSkin" />
+      <pre id="com.longtailvideo.jwplayer.view.skins:PNGSkin" />
+      <dep id="flash.events:Event" />
+      <dep id="com.nochump.util.zip:ZipEntry" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.nochump.util.zip:ZipFile" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="XMLList" />
+      <dep id="flash.events:SecurityErrorEvent" />
+      <dep id="Error" />
+      <dep id="flash.net:URLLoaderDataFormat" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="XML" />
+      <dep id="flash.net:URLLoader" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/JWParser.as" mod="1302611694000" size="1910" optimizedsize="1219">
+      <def id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/ViewEvent.as" mod="1300363653000" size="1215" optimizedsize="581">
+      <def id="com.jeroenwijering.events:ViewEvent" />
+      <pre id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/Model.as" mod="1307102531000" size="4486" optimizedsize="2206">
+      <def id="com.longtailvideo.jwplayer.model:Model" />
+      <pre id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.media:YouTubeMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.media:SoundMediaProvider" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.media:RTMPMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.media:ImageMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.model:Playlist" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.media:HTTPMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.media:VideoMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/plugins/IPlugin.as" mod="1300363653000" size="925" optimizedsize="319">
+      <def id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/SkinProperties.as" mod="1300363653000" size="876" optimizedsize="442">
+      <def id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Stacker.as" mod="1300363653000" size="2898" optimizedsize="1869">
+      <def id="com.longtailvideo.jwplayer.utils:Stacker" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:InteractiveObject" />
+      <dep id="Math" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/skins/DefaultSkin_EmbeddedSkin.as" mod="1306751023000" size="1246" optimizedsize="745">
+      <def id="com.longtailvideo.jwplayer.view.skins:DefaultSkin_EmbeddedSkin" />
+      <pre id="mx.core:MovieClipLoaderAsset" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:DefaultSkin_EmbeddedSkin_dataClass" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/RSSParser.as" mod="1300363653000" size="1749" optimizedsize="1182">
+      <def id="com.longtailvideo.jwplayer.parsers:RSSParser" />
+      <pre id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.parsers:MediaParser" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.parsers:ItunesParser" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/TaskQueue.as" mod="1300363653000" size="2426" optimizedsize="1315">
+      <def id="com.longtailvideo.jwplayer.controller:TaskQueue" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="flash.utils:Dictionary" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:IRepeaterClient)" mod="1265215569013" size="1209" optimizedsize="321">
+      <def id="mx.core:IRepeaterClient" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/PlayerStateEvent.as" mod="1300363653000" size="1269" optimizedsize="657">
+      <def id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <pre id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/AssetLoader.as" mod="1306751024000" size="4287" optimizedsize="2531">
+      <def id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:LoaderInfo" />
+      <dep id="flash.display:Loader" />
+      <dep id="flash.events:SecurityErrorEvent" />
+      <dep id="flash.system:ApplicationDomain" />
+      <dep id="flash.events:HTTPStatusEvent" />
+      <dep id="Error" />
+      <dep id="flash.system:SecurityDomain" />
+      <dep id="AS3" />
+      <dep id="flash.net:URLLoader" />
+      <dep id="flash.system:LoaderContext" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/libs/as3corelib.swc(com.adobe.serialization.json:JSONTokenizer)" mod="1259852018000" size="6750" optimizedsize="4053">
+      <def id="com.adobe.serialization.json:JSONTokenizer" />
+      <pre id="Object" />
+      <dep id="com.adobe.serialization.json:JSONParseError" />
+      <dep id="AS3" />
+      <dep id="com.adobe.serialization.json:JSONToken" />
+      <dep id="RegExp" />
+      <dep id="com.adobe.serialization.json:JSONTokenType" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/PlaylistItem.as" mod="1306751024000" size="5137" optimizedsize="2610">
+      <def id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+      <dep id="Error" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/View_ErrorScreen_dataClass.as" mod="1300363650000" size="833" optimizedsize="297">
+      <def id="com.longtailvideo.jwplayer.view:View_ErrorScreen_dataClass" />
+      <pre id="mx.core:ByteArrayAsset" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/SoundMediaProvider.as" mod="1307102530000" size="5598" optimizedsize="3384">
+      <def id="com.longtailvideo.jwplayer.media:SoundMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="flash.media:ID3Info" />
+      <dep id="Math" />
+      <dep id="flash.media:SoundTransform" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.media:SoundLoaderContext" />
+      <dep id="Error" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="flash.media:SoundChannel" />
+      <dep id="flash.events:ProgressEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.media:Sound" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/IPlaylistParser.as" mod="1300363653000" size="633" optimizedsize="220">
+      <def id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/nochump/util/zip/ZipFile.as" mod="1300363653000" size="3036" optimizedsize="1929">
+      <def id="com.nochump.util.zip:ZipFile" />
+      <pre id="Object" />
+      <dep id="com.nochump.util.zip:Inflater" />
+      <dep id="com.nochump.util.zip:ZipEntry" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="flash.utils:Endian" />
+      <dep id="Math" />
+      <dep id="com.nochump.util.zip:ZipConstants" />
+      <dep id="flash.utils:IDataInput" />
+      <dep id="com.nochump.util.zip:ZipError" />
+      <dep id="flash.utils:Dictionary" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/nochump/util/zip/ZipConstants.as" mod="1300363653000" size="1150" optimizedsize="596">
+      <def id="com.nochump.util.zip:ZipConstants" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/JavascriptCompatibilityAPI.as" mod="1300363653000" size="5978" optimizedsize="3161">
+      <def id="com.longtailvideo.jwplayer.player:JavascriptCompatibilityAPI" />
+      <pre id="com.longtailvideo.jwplayer.player:JavascriptAPI" />
+      <dep id="com.longtailvideo.jwplayer.utils:JavascriptSerialization" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="com.jeroenwijering.events:ViewEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerV4Emulation" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="com.jeroenwijering.events:ControllerEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.jeroenwijering.events:ModelEvent" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="Error" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/PlayerSetup.as" mod="1306751024000" size="7013" optimizedsize="4160">
+      <def id="com.longtailvideo.jwplayer.controller:PlayerSetup" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SWFSkin" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="com.longtailvideo.jwplayer.view:View" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:ZIPSkin" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.model:Model" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:DefaultSkin" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="com.jeroenwijering.events:PluginInterface" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.plugins:V4Plugin" />
+      <dep id="com.longtailvideo.jwplayer.controller:PluginLoader" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <dep id="com.longtailvideo.jwplayer.controller:TaskQueue" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:PNGSkin" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/Controller.as" mod="1308912577000" size="14828" optimizedsize="7917">
+      <def id="com.longtailvideo.jwplayer.controller:Controller" />
+      <pre id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.controller:MediaProviderLoader" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.controller:LockManager" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.view:View" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.model:Model" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="com.jeroenwijering.events:ModelStates" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.controller:RepeatOptions" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="com.longtailvideo.jwplayer.controller:PlayerSetup" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/ItunesParser.as" mod="1300363653000" size="1241" optimizedsize="777">
+      <def id="com.longtailvideo.jwplayer.parsers:ItunesParser" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/plugins/PluginConfig.as" mod="1301385039000" size="872" optimizedsize="394">
+      <def id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/ISkin.as" mod="1300363653000" size="1633" optimizedsize="503">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <pre id="flash.events:IEventDispatcher" />
+      <pre id="Object" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <dep id="flash.display:Sprite" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/TypeChecker.as" mod="1306751024000" size="2441" optimizedsize="1664">
+      <def id="com.longtailvideo.jwplayer.utils:TypeChecker" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="flash.utils:describeType" />
+      <dep id="AS3" />
+      <dep id="XML" />
+      <dep id="XMLList" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/ATOMParser.as" mod="1300363653000" size="1657" optimizedsize="1100">
+      <def id="com.longtailvideo.jwplayer.parsers:ATOMParser" />
+      <pre id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.parsers:MediaParser" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/VideoMediaProvider.as" mod="1306751024000" size="7183" optimizedsize="4489">
+      <def id="com.longtailvideo.jwplayer.media:VideoMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:NetClient" />
+      <dep id="flash.events:AsyncErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="flash.media:SoundTransform" />
+      <dep id="Math" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.net:NetStream" />
+      <dep id="flash.media:Video" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.net:NetConnection" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.events:NetStatusEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Logger.as" mod="1300363653000" size="2733" optimizedsize="1730">
+      <def id="com.longtailvideo.jwplayer.utils:Logger" />
+      <pre id="Object" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.net:LocalConnection" />
+      <dep id="flash.events:AsyncErrorEvent" />
+      <dep id="AS3" />
+      <dep id="trace" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="flash.events:StatusEvent" />
+      <dep id="flash.events:SecurityErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="Error" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/PlayerState.as" mod="1300363653000" size="657" optimizedsize="308">
+      <def id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/SMILParser.as" mod="1300363653000" size="2468" optimizedsize="1568">
+      <def id="com.longtailvideo.jwplayer.parsers:SMILParser" />
+      <pre id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/ControlbarComponentV4.as" mod="1308912577000" size="16123" optimizedsize="10007">
+      <def id="com.longtailvideo.jwplayer.view.components:ControlbarComponentV4" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.events:KeyboardEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="flash.accessibility:AccessibilityProperties" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Animations" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.view:PlayerLayoutManager" />
+      <dep id="flash.geom:ColorTransform" />
+      <dep id="flash.display:Sprite" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.utils:clearTimeout" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stacker" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="Error" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.text:TextField" />
+      <dep id="flash.ui:Mouse" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/DisplayComponent.as" mod="1308912577000" size="12008" optimizedsize="6913">
+      <def id="com.longtailvideo.jwplayer.view.components:DisplayComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.components:CoreComponent" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="Math" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="flash.text:TextFormat" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="flash.text:TextFormatAlign" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="flash.events:TimerEvent" />
+      <dep id="flash.display:Sprite" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.text:GridFitType" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="flash.net:navigateToURL" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.text:TextField" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.utils:Timer" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:PNGSkin" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/MediaProvider.as" mod="1306751024000" size="7236" optimizedsize="3153">
+      <def id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="flash.display:Sprite" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stretcher" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Draw.as" mod="1300363653000" size="2218" optimizedsize="1491">
+      <def id="com.longtailvideo.jwplayer.utils:Draw" />
+      <pre id="Object" />
+      <dep id="flash.utils:getQualifiedClassName" />
+      <dep id="flash.display:BitmapData" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="Error" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/IPlaylist.as" mod="1300363653000" size="1992" optimizedsize="481">
+      <def id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/NetClient.as" mod="1306751024000" size="3825" optimizedsize="1691">
+      <def id="com.longtailvideo.jwplayer.utils:NetClient" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:MovieClipAsset)" mod="1265215569310" size="1670" optimizedsize="929">
+      <def id="mx.core:MovieClipAsset" />
+      <pre id="mx.core:IFlexAsset" />
+      <pre id="mx.core:FlexMovieClip" />
+      <pre id="mx.core:IFlexDisplayObject" />
+      <pre id="mx.core:IBorder" />
+      <dep id="AS3" />
+      <dep id="Math" />
+      <dep id="mx.core:EdgeMetrics" />
+      <dep id="mx.core:mx_internal" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/ControllerEvent.as" mod="1300363653000" size="1105" optimizedsize="511">
+      <def id="com.jeroenwijering.events:ControllerEvent" />
+      <pre id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/PlaylistItemLevel.as" mod="1301651692000" size="791" optimizedsize="359">
+      <def id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/PlayerLayoutManager.as" mod="1300363653000" size="4126" optimizedsize="2478">
+      <def id="com.longtailvideo.jwplayer.view:PlayerLayoutManager" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/libs/as3corelib.swc(com.adobe.serialization.json:JSONToken)" mod="1259852018000" size="992" optimizedsize="369">
+      <def id="com.adobe.serialization.json:JSONToken" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/GlobalEventDispatcher.as" mod="1300363653000" size="1439" optimizedsize="726">
+      <def id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <pre id="flash.events:EventDispatcher" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.events:IEventDispatcher" />
+      <dep id="AS3" />
+      <dep id="flash.utils:Dictionary" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/RightclickMenu.as" mod="1308912577000" size="3581" optimizedsize="2184">
+      <def id="com.longtailvideo.jwplayer.view:RightclickMenu" />
+      <pre id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="flash.ui:ContextMenu" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="flash.net:navigateToURL" />
+      <dep id="flash.ui:ContextMenuItem" />
+      <dep id="Error" />
+      <dep id="flash.events:ContextMenuEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="AS3" />
+      <dep id="flash.system:Capabilities" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <dep id="com.longtailvideo.jwplayer.utils:Stretcher" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/View_ErrorScreen.as" mod="1300363650000" size="1163" optimizedsize="709">
+      <def id="com.longtailvideo.jwplayer.view:View_ErrorScreen" />
+      <pre id="mx.core:MovieClipLoaderAsset" />
+      <dep id="flash.utils:ByteArray" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.view:View_ErrorScreen_dataClass" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/RTMPMediaProvider.as" mod="1301925353000" size="16971" optimizedsize="10994">
+      <def id="com.longtailvideo.jwplayer.media:RTMPMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="flash.events:Event" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="flash.net:ObjectEncoding" />
+      <dep id="com.longtailvideo.jwplayer.utils:NetClient" />
+      <dep id="flash.events:AsyncErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="com.longtailvideo.jwplayer.parsers:LoadbalanceParser" />
+      <dep id="flash.media:SoundTransform" />
+      <dep id="Math" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItemLevel" />
+      <dep id="flash.net:NetStreamPlayTransitions" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="Date" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="flash.utils:Dictionary" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.net:NetConnection" />
+      <dep id="flash.events:NetStatusEvent" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.events:SecurityErrorEvent" />
+      <dep id="Error" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="flash.net:Responder" />
+      <dep id="flash.net:NetStream" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.net:NetStreamPlayOptions" />
+      <dep id="flash.media:Video" />
+      <dep id="XML" />
+      <dep id="com.wowza.encryptionAS3:TEA" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/Player.as" mod="1300363653000" size="6586" optimizedsize="2868">
+      <def id="com.longtailvideo.jwplayer.player:Player" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <pre id="flash.display:Sprite" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="com.longtailvideo.jwplayer.view:IPlayerComponents" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.player:JavascriptAPI" />
+      <dep id="com.longtailvideo.jwplayer.controller:Controller" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.view:View" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerVersion" />
+      <dep id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.model:Model" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="com.longtailvideo.jwplayer.player:JavascriptCompatibilityAPI" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Configger.as" mod="1300363653000" size="3886" optimizedsize="2126">
+      <def id="com.longtailvideo.jwplayer.utils:Configger" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="flash.net:SharedObject" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.net:URLLoader" />
+      <dep id="XML" />
+      <dep id="flash.events:SecurityErrorEvent" />
+      <dep id="Error" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/PlayerEvent.as" mod="1300363653000" size="1692" optimizedsize="1010">
+      <def id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <pre id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerVersion" />
+      <dep id="AS3" />
+      <dep id="flash.external:ExternalInterface" />
+      <dep id="flash.system:Capabilities" />
+      <dep id="Error" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/DockButton.as" mod="1300363653000" size="4250" optimizedsize="2198">
+      <def id="com.longtailvideo.jwplayer.view.components:DockButton" />
+      <pre id="com.longtailvideo.jwplayer.view.components:ComponentButton" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="flash.text:TextFormat" />
+      <dep id="AS3" />
+      <dep id="flash.text:TextField" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.text:TextFormatAlign" />
+      <dep id="flash.geom:ColorTransform" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/RootReference.as" mod="1302850619000" size="1065" optimizedsize="494">
+      <def id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <pre id="Object" />
+      <dep id="flash.system:Security" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:Stage" />
+      <dep id="Error" />
+    </script>
+    <script name="_56951b4ed28900084f68a7533f2ab3724d20e311d003f0cf1c541d07c325fef4_flash_display_Sprite.as" mod="1309794417707" size="1147" optimizedsize="511">
+      <def id="_56951b4ed28900084f68a7533f2ab3724d20e311d003f0cf1c541d07c325fef4_flash_display_Sprite" />
+      <pre id="flash.display:Sprite" />
+      <dep id="flash.system:Security" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/SkinBase.as" mod="1300363653000" size="2501" optimizedsize="1210">
+      <def id="com.longtailvideo.jwplayer.view.skins:SkinBase" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/Slider.as" mod="1306751024000" size="5675" optimizedsize="2980">
+      <def id="com.longtailvideo.jwplayer.view.components:Slider" />
+      <pre id="flash.display:Sprite" />
+      <dep id="com.longtailvideo.jwplayer.utils:RootReference" />
+      <dep id="ArgumentError" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="Math" />
+      <dep id="flash.geom:ColorTransform" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/PlayerV4Emulation.as" mod="1300363653000" size="13820" optimizedsize="8043">
+      <def id="com.longtailvideo.jwplayer.player:PlayerV4Emulation" />
+      <pre id="com.jeroenwijering.events:AbstractView" />
+      <dep id="com.jeroenwijering.events:ControllerEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.plugins:PluginConfig" />
+      <dep id="com.longtailvideo.jwplayer.utils:JavascriptSerialization" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerStateEvent" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="com.jeroenwijering.events:ModelEvent" />
+      <dep id="com.jeroenwijering.events:PlayerEvent" />
+      <dep id="com.longtailvideo.jwplayer.plugins:V4Plugin" />
+      <dep id="flash.utils:describeType" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.jeroenwijering.events:ModelStates" />
+      <dep id="flash.net:navigateToURL" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+      <dep id="com.jeroenwijering.events:ViewEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="flash.events:EventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="XML" />
+      <dep id="com.longtailvideo.jwplayer.player:IPlayer" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:EdgeMetrics)" mod="1265215569607" size="860" optimizedsize="413">
+      <def id="mx.core:EdgeMetrics" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="mx.core:mx_internal" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/PluginLoader.as" mod="1300363653000" size="3644" optimizedsize="1857">
+      <def id="com.longtailvideo.jwplayer.controller:PluginLoader" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="flash.events:Event" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="flash.utils:Dictionary" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/Color.as" mod="1300363653000" size="1075" optimizedsize="583">
+      <def id="com.longtailvideo.jwplayer.model:Color" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:TypeChecker" />
+      <dep id="Error" />
+    </script>
+    <script name="com/longtailvideo/jwplayer/view/skins/DefaultSkin_EmbeddedSkin_dataClass.as" mod="1306751023000" size="922" optimizedsize="325">
+      <def id="com.longtailvideo.jwplayer.view.skins:DefaultSkin_EmbeddedSkin_dataClass" />
+      <pre id="mx.core:ByteArrayAsset" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/ModelEvent.as" mod="1300363653000" size="956" optimizedsize="438">
+      <def id="com.jeroenwijering.events:ModelEvent" />
+      <pre id="flash.events:Event" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:IBorder)" mod="1265215569560" size="421" optimizedsize="153">
+      <def id="mx.core:IBorder" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="mx.core:EdgeMetrics" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/IDockComponent.as" mod="1308912577000" size="1278" optimizedsize="382">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/libs/as3corelib.swc(com.adobe.serialization.json:JSONParseError)" mod="1259852018000" size="887" optimizedsize="366">
+      <def id="com.adobe.serialization.json:JSONParseError" />
+      <pre id="Error" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/utils/Strings.as" mod="1308912577000" size="4401" optimizedsize="2556">
+      <def id="com.longtailvideo.jwplayer.utils:Strings" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="Math" />
+      <dep id="com.adobe.serialization.json:JSONDecoder" />
+      <dep id="XML" />
+      <dep id="Error" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flash-integration.swc(mx.core:mx_internal)" mod="1265215569279" size="182" optimizedsize="109">
+      <def id="mx.core:mx_internal" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.core:IFlexAsset)" mod="1265215569919" size="315" optimizedsize="98">
+      <def id="mx.core:IFlexAsset" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/IPlaylistComponent.as" mod="1308912577000" size="571" optimizedsize="162">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/jeroenwijering/events/AbstractView.as" mod="1300363653000" size="2195" optimizedsize="828">
+      <def id="com.jeroenwijering.events:AbstractView" />
+      <pre id="flash.events:EventDispatcher" />
+      <dep id="AS3" />
+      <dep id="flash.display:MovieClip" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/MediaParser.as" mod="1308912577000" size="1847" optimizedsize="1294">
+      <def id="com.longtailvideo.jwplayer.parsers:MediaParser" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="XML" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/interfaces/IDisplayComponent.as" mod="1308912577000" size="1194" optimizedsize="318">
+      <def id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.events:ComponentEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.events:ViewEvent" />
+      <dep id="flash.display:DisplayObject" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/parsers/ParserFactory.as" mod="1302611694000" size="1274" optimizedsize="819">
+      <def id="com.longtailvideo.jwplayer.parsers:ParserFactory" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.parsers:RSSParser" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.parsers:ASXParser" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <dep id="XML" />
+      <dep id="com.longtailvideo.jwplayer.parsers:XSPFParser" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.parsers:SMILParser" />
+      <dep id="com.longtailvideo.jwplayer.parsers:ATOMParser" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flex.swc(mx.utils:NameUtil)" mod="1265215574669" size="1894" optimizedsize="1264">
+      <def id="mx.utils:NameUtil" />
+      <pre id="Object" />
+      <dep id="mx.core:IRepeaterClient" />
+      <dep id="SecurityError" />
+      <dep id="flash.utils:getQualifiedClassName" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="mx.core:mx_internal" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/PlayerVersion.as" mod="1309333553000" size="709" optimizedsize="307">
+      <def id="com.longtailvideo.jwplayer.player:PlayerVersion" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/skins/PNGSkin.as" mod="1300363653000" size="6242" optimizedsize="3810">
+      <def id="com.longtailvideo.jwplayer.view.skins:PNGSkin" />
+      <pre id="com.longtailvideo.jwplayer.view.skins:SkinBase" />
+      <pre id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="com.longtailvideo.jwplayer.view.skins:SkinProperties" />
+      <dep id="XMLList" />
+      <dep id="Error" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="XML" />
+      <dep id="flash.utils:Dictionary" />
+      <dep id="flash.display:MovieClip" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/ImageMediaProvider.as" mod="1306751024000" size="3973" optimizedsize="2371">
+      <def id="com.longtailvideo.jwplayer.media:ImageMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="flash.net:URLRequest" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="Math" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.display:Loader" />
+      <dep id="Error" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="flash.events:ProgressEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:Draw" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.display:Bitmap" />
+      <dep id="flash.system:LoaderContext" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/components/ComponentButton.as" mod="1300363653000" size="4525" optimizedsize="2147">
+      <def id="com.longtailvideo.jwplayer.view.components:ComponentButton" />
+      <pre id="flash.display:MovieClip" />
+      <dep id="com.longtailvideo.jwplayer.model:Color" />
+      <dep id="flash.events:MouseEvent" />
+      <dep id="AS3" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="com.longtailvideo.jwplayer.utils:Logger" />
+      <dep id="Error" />
+      <dep id="flash.display:Sprite" />
+    </script>
+    <script name="/Developer/SDKs/flex_sdk_4/frameworks/libs/flash-integration.swc(mx.core:IFlexDisplayObject)" mod="1265215570044" size="6226" optimizedsize="1339">
+      <def id="mx.core:IFlexDisplayObject" />
+      <pre id="flash.events:IEventDispatcher" />
+      <pre id="flash.display:IBitmapDrawable" />
+      <pre id="Object" />
+      <dep id="flash.accessibility:AccessibilityProperties" />
+      <dep id="AS3" />
+      <dep id="flash.geom:Rectangle" />
+      <dep id="flash.display:DisplayObjectContainer" />
+      <dep id="flash.display:DisplayObject" />
+      <dep id="flash.display:LoaderInfo" />
+      <dep id="flash.display:Stage" />
+      <dep id="flash.geom:Point" />
+      <dep id="flash.geom:Transform" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/model/Playlist.as" mod="1300363653000" size="5106" optimizedsize="3098">
+      <def id="com.longtailvideo.jwplayer.model:Playlist" />
+      <pre id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <pre id="com.longtailvideo.jwplayer.events:GlobalEventDispatcher" />
+      <dep id="com.longtailvideo.jwplayer.media:YouTubeMediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.parsers:JWParser" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.events:Event" />
+      <dep id="com.longtailvideo.jwplayer.parsers:ParserFactory" />
+      <dep id="com.longtailvideo.jwplayer.parsers:IPlaylistParser" />
+      <dep id="Error" />
+      <dep id="com.longtailvideo.jwplayer.events:PlaylistEvent" />
+      <dep id="com.longtailvideo.jwplayer.events:PlayerEvent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.utils:AssetLoader" />
+      <dep id="XML" />
+      <dep id="flash.events:ErrorEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/events/IGlobalEventDispatcher.as" mod="1300363653000" size="936" optimizedsize="319">
+      <def id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="flash.events:IEventDispatcher" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/libs/as3corelib.swc(com.adobe.serialization.json:JSONDecoder)" mod="1259852018000" size="2899" optimizedsize="1818">
+      <def id="com.adobe.serialization.json:JSONDecoder" />
+      <pre id="Object" />
+      <dep id="com.adobe.serialization.json:JSONTokenizer" />
+      <dep id="com.adobe.serialization.json:JSONToken" />
+      <dep id="AS3" />
+      <dep id="com.adobe.serialization.json:JSONTokenType" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/view/IPlayerComponents.as" mod="1300363653000" size="1347" optimizedsize="429">
+      <def id="com.longtailvideo.jwplayer.view:IPlayerComponents" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlaylistComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDisplayComponent" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IControlbarComponent" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IDockComponent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/controller/RepeatOptions.as" mod="1300363653000" size="706" optimizedsize="338">
+      <def id="com.longtailvideo.jwplayer.controller:RepeatOptions" />
+      <pre id="Object" />
+      <dep id="AS3" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/media/HTTPMediaProvider.as" mod="1306751024000" size="10387" optimizedsize="6323">
+      <def id="com.longtailvideo.jwplayer.media:HTTPMediaProvider" />
+      <pre id="com.longtailvideo.jwplayer.media:MediaProvider" />
+      <dep id="com.longtailvideo.jwplayer.model:PlaylistItem" />
+      <dep id="flash.utils:setInterval" />
+      <dep id="com.longtailvideo.jwplayer.events:MediaEvent" />
+      <dep id="com.longtailvideo.jwplayer.utils:NetClient" />
+      <dep id="flash.events:AsyncErrorEvent" />
+      <dep id="flash.utils:clearTimeout" />
+      <dep id="com.longtailvideo.jwplayer.utils:Strings" />
+      <dep id="com.longtailvideo.jwplayer.utils:Configger" />
+      <dep id="flash.media:SoundTransform" />
+      <dep id="Math" />
+      <dep id="flash.events:IOErrorEvent" />
+      <dep id="flash.utils:setTimeout" />
+      <dep id="flash.utils:clearInterval" />
+      <dep id="Date" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.player:PlayerState" />
+      <dep id="flash.net:NetStream" />
+      <dep id="flash.media:Video" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+      <dep id="flash.net:NetConnection" />
+      <dep id="flash.events:ErrorEvent" />
+      <dep id="flash.events:NetStatusEvent" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/wowza/encryptionAS3/TEA.as" mod="1300363653000" size="3087" optimizedsize="1738">
+      <def id="com.wowza.encryptionAS3:TEA" />
+      <pre id="Object" />
+      <dep id="AS3" />
+      <dep id="Math" />
+    </script>
+    <script name="/Projects/player/trunk/fl5/src/com/longtailvideo/jwplayer/player/IPlayer.as" mod="1300363653000" size="3635" optimizedsize="991">
+      <def id="com.longtailvideo.jwplayer.player:IPlayer" />
+      <pre id="flash.events:IEventDispatcher" />
+      <pre id="com.longtailvideo.jwplayer.events:IGlobalEventDispatcher" />
+      <pre id="Object" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:ISkin" />
+      <dep id="com.longtailvideo.jwplayer.model:IPlaylist" />
+      <dep id="com.longtailvideo.jwplayer.view:IPlayerComponents" />
+      <dep id="AS3" />
+      <dep id="com.longtailvideo.jwplayer.plugins:IPlugin" />
+      <dep id="com.longtailvideo.jwplayer.view.interfaces:IPlayerComponent" />
+      <dep id="com.longtailvideo.jwplayer.model:PlayerConfig" />
+    </script>
+  </scripts>
+  <external-defs>
+    <ext id="flash.events:AsyncErrorEvent" />
+    <ext id="flash.utils:ByteArray" />
+    <ext id="Math" />
+    <ext id="RegExp" />
+    <ext id="flash.ui:ContextMenuItem" />
+    <ext id="flash.system:ApplicationDomain" />
+    <ext id="flash.display:Bitmap" />
+    <ext id="flash.display:StageAlign" />
+    <ext id="flash.net:navigateToURL" />
+    <ext id="XMLList" />
+    <ext id="flash.net:NetStream" />
+    <ext id="flash.utils:setInterval" />
+    <ext id="flash.events:Event" />
+    <ext id="flash.display:BitmapData" />
+    <ext id="AS3" />
+    <ext id="flash.utils:describeType" />
+    <ext id="flash.net:LocalConnection" />
+    <ext id="flash.net:URLRequest" />
+    <ext id="flash.events:IOErrorEvent" />
+    <ext id="flash.utils:setTimeout" />
+    <ext id="flash.events:FocusEvent" />
+    <ext id="XML" />
+    <ext id="flash.display:InteractiveObject" />
+    <ext id="flash.ui:ContextMenu" />
+    <ext id="flash.display:LoaderInfo" />
+    <ext id="flash.events:IEventDispatcher" />
+    <ext id="flash.geom:Rectangle" />
+    <ext id="flash.net:Responder" />
+    <ext id="flash.system:Capabilities" />
+    <ext id="ArgumentError" />
+    <ext id="flash.display:StageDisplayState" />
+    <ext id="flash.text:TextFormatAlign" />
+    <ext id="flash.utils:Dictionary" />
+    <ext id="flash.events:ErrorEvent" />
+    <ext id="flash.net:SharedObject" />
+    <ext id="trace" />
+    <ext id="Error" />
+    <ext id="flash.events:EventDispatcher" />
+    <ext id="flash.external:ExternalInterface" />
+    <ext id="flash.media:Video" />
+    <ext id="flash.media:SoundTransform" />
+    <ext id="flash.media:ID3Info" />
+    <ext id="flash.utils:clearInterval" />
+    <ext id="flash.system:SecurityDomain" />
+    <ext id="flash.display:IBitmapDrawable" />
+    <ext id="Date" />
+    <ext id="flash.events:StatusEvent" />
+    <ext id="flash.geom:ColorTransform" />
+    <ext id="flash.events:SecurityErrorEvent" />
+    <ext id="flash.net:URLLoaderDataFormat" />
+    <ext id="flash.events:ProgressEvent" />
+    <ext id="flash.media:SoundChannel" />
+    <ext id="flash.events:ContextMenuEvent" />
+    <ext id="flash.text:TextField" />
+    <ext id="flash.ui:Mouse" />
+    <ext id="flash.display:DisplayObject" />
+    <ext id="flash.net:ObjectEncoding" />
+    <ext id="flash.accessibility:AccessibilityProperties" />
+    <ext id="flash.net:URLLoader" />
+    <ext id="Object" />
+    <ext id="flash.net:NetConnection" />
+    <ext id="flash.display:MovieClip" />
+    <ext id="flash.events:NetStatusEvent" />
+    <ext id="SecurityError" />
+    <ext id="flash.text:GridFitType" />
+    <ext id="flash.utils:IDataInput" />
+    <ext id="flash.utils:Endian" />
+    <ext id="flash.utils:Timer" />
+    <ext id="flash.display:DisplayObjectContainer" />
+    <ext id="flash.media:SoundLoaderContext" />
+    <ext id="flash.net:NetStreamPlayTransitions" />
+    <ext id="flash.text:TextFormat" />
+    <ext id="flash.events:TimerEvent" />
+    <ext id="flash.errors:IOError" />
+    <ext id="flash.media:Sound" />
+    <ext id="flash.display:Sprite" />
+    <ext id="flash.display:Loader" />
+    <ext id="flash.geom:Point" />
+    <ext id="flash.events:MouseEvent" />
+    <ext id="flash.display:Stage" />
+    <ext id="flash.system:LoaderContext" />
+    <ext id="flash.geom:Transform" />
+    <ext id="flash.system:Security" />
+    <ext id="flash.events:KeyboardEvent" />
+    <ext id="flash.utils:getQualifiedClassName" />
+    <ext id="flash.display:StageScaleMode" />
+    <ext id="flash.text:TextFieldAutoSize" />
+    <ext id="flash.utils:clearTimeout" />
+    <ext id="flash.events:HTTPStatusEvent" />
+    <ext id="flash.net:NetStreamPlayOptions" />
+  </external-defs>
+</report>
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Captions.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Captions.as	(revision 1979)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Captions.as	(revision 1979)
@@ -0,0 +1,417 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import com.longtailvideo.jwplayer.events.*;
+    import com.longtailvideo.jwplayer.player.*;
+    import com.longtailvideo.jwplayer.plugins.*;
+    import com.longtailvideo.jwplayer.utils.*;
+    import com.longtailvideo.jwplayer.view.interfaces.*;
+
+    import flash.display.*;
+    import flash.events.*;
+    import flash.net.*;
+
+
+    /** Plugin for playing closed captions with a video. **/
+    public class Captions extends Sprite implements IPlugin {
+
+
+        /** Embeds of the default graphics. **/
+        [Embed(source="../../../../../../assets/controlbar.png")]
+        private const ControlbarIcon:Class;
+        [Embed(source="../../../../../../assets/dock.png")]
+        private const DockIcon:Class;
+
+
+        /** Reference to the controlbar/dock button. **/
+        private var _button:MovieClip;
+        /** Save the last resize dimensions. **/
+        private var _dimensions:Array;
+        /** List with configuration options. **/
+        private var _config:Object = {
+            back: false,
+            label: undefined,
+            file: undefined,
+            state: true
+        };
+        /** Cookie object for storing track prefs. **/
+        private var _cookie:SharedObject;
+        /** Default style properties. **/
+        private var _defaults:Object = {
+            color: '#FFFFFF',
+            fontFamily: 'Arial,sans-serif',
+            fontSize: 15,
+            fontStyle: 'normal',
+            fontWeight: 'normal',
+            leading: 5,
+            textAlign: 'center',
+            textDecoration: 'none'
+        };
+        /** Anomator instance that eases the renderer. **/
+        private var _easer:Animator;
+        /** Reference to dock/controlbar icon. **/
+        private var _icon:DisplayObject;
+        /** Currently active playlist item. **/
+        private var _item:Object;
+        /** XML connect and parse object. **/
+        private var _loader:URLLoader;
+        /* Reference to the JW Player. */
+        private var _player:IPlayer;
+        /** Reference to the captions renderer. **/
+        private var _renderer:Renderer;
+        /** Reference to the track selector. **/
+        private var _selector:Selector;
+        /** Current player state. **/
+        private var _state:String;
+        /** Map with style properties loaded by DFXP. **/
+        private var _styles:Object;
+        /** Currently active track. **/
+        private var _track:Number;
+        /** Current listing of tracks. **/
+        private var _tracks:Array;
+
+
+        /** Constructor; inits the parser, selector and renderer. **/
+        public function Captions() {
+            _cookie = SharedObject.getLocal('com.jeroenwijering','/');
+            _loader = new URLLoader();
+            _loader.addEventListener(Event.COMPLETE,_loaderHandler);
+            _loader.addEventListener(IOErrorEvent.IO_ERROR,_errorHandler);
+            _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,_errorHandler);
+            _tracks = new Array();
+        };
+
+
+        /** The controlbar is hiding. **/
+        private function _barHideHandler(evt:Event):void {
+            _easer.easeY(Math.round(_dimensions[1]*0.94));
+        };
+
+
+        /** The controlbar is showing. **/
+        private function _barShowHandler(evt:Event):void {
+            var yps:Number = evt['boundingRect'].y;
+            if(yps > 0) {
+                _easer.easeY(Math.round(yps * 0.94));
+            }
+        };
+
+
+        /** Clicking the controlbar icon or dock button. **/
+        private function _clickHandler(evt:MouseEvent):void {
+            if(_tracks.length > 1) {
+                _selector.alpha = 0;
+                _renderer.visible = false;
+                new Animator(_selector).fade(1,0.2);
+                try { 
+                    (_player.controls.display as Object).hide();
+                    (_player.controls.dock as Object).hide();
+                } catch (error:Error) {}
+            } else if(_tracks.length == 1) {
+                _config.state = !_config.state;
+                _cookie.data['captions.state'] = _config.state;
+                _cookie.flush();
+                _redraw();
+            }
+        };
+
+
+        /** The captions loader returns errors (file not found or security error. **/
+        private function _errorHandler(event:ErrorEvent):void { 
+            Logger.log(event.text);
+        };
+
+
+        /** Identifier string of this plugin in the JW Player. **/
+        public function get id():String {
+            return "captions";
+        };
+
+
+        /** Initialize as a JW Player 5 plugin. */
+        public function initPlugin(player:IPlayer, config:PluginConfig):void {
+            // Connect to the player API.
+            _player = player;
+            _player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_ITEM,_itemHandler);
+            _player.addEventListener(MediaEvent.JWPLAYER_MEDIA_META,_metaHandler);
+            _player.addEventListener(PlaylistEvent.JWPLAYER_PLAYLIST_LOADED,_playlistHandler);
+            _player.addEventListener(PlayerStateEvent.JWPLAYER_PLAYER_STATE,_stateHandler);
+            _player.addEventListener(MediaEvent.JWPLAYER_MEDIA_TIME,_timeHandler);
+            // Load the configuration options and styling defaults.
+            for (var entry:String in config) {
+                _config[entry] = config[entry];
+            }
+            for (var rule:String in _defaults) {
+                if (config[rule.toLowerCase()] != undefined) {
+                    // Fix for colors, since the player automatically converts to HEX.
+                    if(rule == 'color') {
+                        _defaults['color'] = '#'+String(config['color']).substr(-6);
+                    } else {
+                        _defaults[rule] = config[rule.toLowerCase()];
+                    }
+                }
+            }
+            // Show button in either the dock or the controlbar.
+            if (_player.config.dock) {
+                _icon = _player.skin.getSkinElement('captions', 'dockIcon');
+                if(!_icon) { _icon = new DockIcon(); }
+                _button = _player.controls.dock.addButton(_icon, 'is on', _clickHandler);
+            } else {
+                _icon = _player.skin.getSkinElement('captions', 'controlbarButton');
+                if(!_icon) { _icon = new ControlbarIcon(); }
+                _player.controls.controlbar.addButton(_icon, 'captions', _clickHandler);
+            }
+            // Try connecting to controlbar show/hide events (5.7+) 
+            try { 
+                _player.controls.controlbar.addEventListener(ComponentEvent.JWPLAYER_COMPONENT_SHOW,_barShowHandler);
+                _player.controls.controlbar.addEventListener(ComponentEvent.JWPLAYER_COMPONENT_HIDE,_barHideHandler);
+            } catch (e:Error) {}
+            // Place renderer and selector.
+            _renderer = new Renderer(_defaults,_config.back);
+            addChild(_renderer);
+            _easer = new Animator(_renderer);
+            _selector = new Selector(_selectorHandler);
+            addChild(_selector);
+            _selector.visible = false;
+            _redraw();
+        };
+
+
+        /** Check playlist item for captions. **/
+        private function _itemHandler(event:PlaylistEvent):void {
+            _track = 0;
+            _tracks = new Array();
+            _renderer.setPosition(0);
+            _item = _player.playlist.currentItem;
+            if(_item['captions.files']) {
+                // Load multiple captions
+                var files:Array = _item['captions.files'].split(',');
+                var found:Boolean = false;
+                if(_item['captions.labels']) {
+                    var labels:Array = _item['captions.labels'].split(',');
+                }
+                for(var i:Number = 0; i < files.length; i++) {
+                    var entry:Object = { file: files[i] };
+                    // Set label.
+                    if(labels && labels[i]) {
+                        entry.label = labels[i];
+                    } else {
+                        var slash:Number = files[i].lastIndexOf('/');
+                        var dot:Number = files[i].indexOf('.');
+                        entry.label = files[i].substr(slash+1,1).toUpperCase()+files[i].substr(slash+2,dot-slash-2);
+                    }
+                    if(_config.label == entry.label) {
+                        _track = _tracks.length;
+                        found = true;
+                        _loader.load(new URLRequest(entry.file));
+                    }
+                    _tracks.push(entry);
+                }
+                if(found == false) { _config.state = false; }
+                _populateSelector();
+            } else if(_item['captions.file']) {
+                // Load single caption
+                _tracks.push({file:_item['captions.file']});
+                _loader.load(new URLRequest(_item['captions.file']));
+            }
+            _redraw();
+        };
+
+
+        /** Parse and display external captions. **/
+        private function _loaderHandler(event:Event):void {
+            try {
+                if(XML(event.target.data).localName().toString().toLowerCase() == DFXP.NAME) {
+                    _tracks[_track].data = DFXP.parseCaptions(XML(event.target.data),_defaults);
+                } else {
+                    _tracks[_track].data = SRT.parseCaptions(String(event.target.data));
+                }
+            } catch (error:Error) {
+                _tracks[_track].data = SRT.parseCaptions(String(event.target.data));
+            }
+            if (!_tracks[_track].data.length) {
+                Logger.log('No captions entries found in file. Probably not a valid SRT or DFXP file?');
+            } else {
+                _renderer.setCaptions(_tracks[_track].data);
+            }
+            _redraw();
+        };
+
+
+        /** Check for captions in metadata. **/
+        private function _metaHandler(event:MediaEvent):void {
+            if(_state == PlayerState.IDLE) { return; }
+            if(event.metadata.type == 'textdata') {
+                if(event.metadata.trackid == _tracks[_track].id) {
+                    _renderer.setCaptions(event.metadata.text.replace(/\n$/,''));
+                }
+            } else if (event.metadata.trackinfo && _tracks.length == 0) {
+                _metaTracks(event.metadata.trackinfo);
+            }
+        };
+
+
+        /** Parse track info from MP4 metadata. **/
+        private function _metaTracks(info:Object):void {
+            var found:Boolean = false;
+            for(var i:Number = 0; i < info.length; i++) {
+                if(info[i].sampledescription[0].sampletype == 'tx3g') {
+                    if(_config.label == ISO639.label(info[i].language)) {
+                        _track = _tracks.length;
+                        found = true;
+                    }
+                    _tracks.push({
+                        data: undefined,
+                        file: undefined,
+                        id: i,
+                        label: ISO639.label(info[i].language)
+                    });
+                    // Override the ISO codes with labels
+                    if(_item['captions.labels']) {
+                        var index:Number = _tracks.length - 1;
+                        _tracks[index].label = _item['captions.labels'].split(',')[index];
+                    }
+                }
+            }
+            if(_tracks.length > 1) {
+                if(found == false) { _config.state = false; }
+                _populateSelector();
+            }
+            _redraw();
+        };
+
+
+        /** Check for global captions upon playlsit load. **/
+        private function _playlistHandler(event:PlaylistEvent):void {
+            if(_player.playlist.getItemAt(0)['ova.hidden']) {
+                return;
+            }
+            // Set the file, files, labels flashvar to the first playlistitem.
+            if(_config.file) {
+                _player.playlist.getItemAt(0)['captions.file'] = _config.file;
+            }
+            if(_config.files) {
+                _player.playlist.getItemAt(0)['captions.files'] = _config.files;
+            }
+            if(_config.labels) {
+                _player.playlist.getItemAt(0)['captions.labels'] = _config.labels;
+            }
+        };
+
+
+        /** Populate the selector. **/
+        private function _populateSelector():void { 
+            var options:Array = new Array({label:'(Off)'});
+            for(var j:Number=0; j<_tracks.length; j++) {
+                options.push({label:_tracks[j].label});
+            }
+            if(_config.state) {
+                _selector.populate(options,_track + 1);
+            } else {
+                _selector.populate(options,0);
+            }
+        };
+
+
+        /** Show/hide the captions, update the button, save state in cookie. **/
+        private function _redraw():void {
+            if(!_tracks.length) {
+                _icon.alpha = 0.3;
+                if (_button) { 
+                    _button.field.alpha = 0.3;
+                    _button.field.text = 'not set';
+                }
+                _renderer.visible = false;
+            } else if (!_config.state) {
+                if (_button) {
+                    if(_tracks.length > 1) { 
+                        _button.field.text = '(off)';
+                    } else { 
+                        _button.field.text = 'is off';
+                    }
+                    _button.field.alpha = 1;
+                    _icon.alpha = 1;
+                } else {
+                    _icon.alpha = 0.3;
+                }
+                _renderer.visible = false;
+            } else {
+                _icon.alpha = 1;
+                if (_button) {
+                    _button.field.alpha = 1;
+                    if(_tracks.length > 1) { 
+                        _button.field.text = _tracks[_track].label.toLowerCase();
+                    } else { 
+                        _button.field.text = 'is on';
+                    }
+                }
+                if(_state == PlayerState.IDLE) {
+                    _renderer.visible = false;
+                } else {
+                    _renderer.visible = true;
+                }
+            }
+        };
+
+
+        /** Resize the captions, relatively smaller as the screen grows */
+        public function resize(width:Number, height:Number):void {
+            _dimensions = new Array(width,height);
+            _renderer.width = Math.round(400 * Math.pow(width/400,0.6));
+            _renderer.x = Math.round(width/2 -_renderer.width/2);
+            _renderer.scaleY = _renderer.scaleX;
+            _renderer.y = Math.round(height * 0.94);
+            _selector.resize(width,height);
+        };
+
+
+        /** Clicking the selector. **/
+        private function _selectorHandler(index:Number):void {
+            _selector.alpha = 1;
+            new Animator(_selector).fade(0,0.2);
+            try {
+                (_player.controls.display as Object).show();
+                (_player.controls.dock as Object).show();
+            } catch (error:Error) {}
+            // Set and cookie state/label
+            if(index > 0) {
+                _config.state = true;
+                _track = index - 1;
+                _config.label = _tracks[_track].label;
+            } else {
+                _config.state = false;
+            }
+            _cookie.data['captions.state'] = _config.state;
+            _cookie.data['captions.label'] = _config.label;
+            _cookie.flush();
+            // Update UI
+            if(_tracks[_track].file) {
+                if(_tracks[_track].data) {
+                    _renderer.setCaptions(_tracks[_track].data);
+                } else { 
+                    _loader.load(new URLRequest(_tracks[_track].file));
+                }
+            } else {
+                _renderer.setCaptions('');
+            }
+            _redraw();
+        };
+
+
+        /** Hide the renderer when idle. **/
+        private function _stateHandler(event:PlayerStateEvent):void {
+            _state = event.newstate;
+            _redraw();
+        };
+
+
+        /** Update the position in the video. **/
+        private function _timeHandler(event:MediaEvent):void {
+            _renderer.setPosition(event.position);
+        };
+
+
+    };
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Selector.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Selector.as	(revision 1973)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Selector.as	(revision 1973)
@@ -0,0 +1,110 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import com.longtailvideo.jwplayer.utils.Logger;
+
+    import flash.display.*;
+    import flash.events.*;
+
+
+    /** Component that renders a select box. **/
+    public class Selector extends MovieClip {
+
+
+        /** Compiles of the default graphics. **/
+        [Embed(source="../../../../../../assets/divider.png")]
+        private const DividerRow:Class;
+        [Embed(source="../../../../../../assets/sheet.png")]
+        private const BackSheet:Class;
+        [Embed(source="../../../../../../assets/close.png")]
+        private const CloseButton:Class;
+
+
+        /** currently active option. **/
+        private var _active:Number;
+        /** Background graphic. **/
+        private var _back:Sprite;
+        /** Close button. **/
+        private var _close:Sprite;
+        /** Container for the buttons. **/
+        private var _container:Sprite;
+        /** Function to call when a selection is made. **/
+        private var _callback:Function;
+        /** List with options from the selector. **/
+        private var _options:Array;
+
+
+        /** Constructor. **/
+        public function Selector(callback:Function) {
+            _callback = callback;
+            _back = new Sprite();
+            _back.addChild(new BackSheet());
+            addChild(_back);
+            _back.buttonMode = true;
+            _back.addEventListener(MouseEvent.CLICK,_backHandler);
+            _close = new Sprite();
+            _close.addChild(new CloseButton());
+            addChild(_close);
+            _close.mouseEnabled = false;
+            _container = new Sprite();
+            addChild(_container);
+            _container.buttonMode = true;
+        };
+
+
+        /** Background was clicked. **/
+        private function _backHandler(event:MouseEvent):void {
+            _buttonHandler(_active);
+        }; 
+
+
+        /** Button was clicked. **/
+        private function _buttonHandler(index:Number):void {
+            _options[_active].button.activate(false);
+            _options[index].button.activate(true);
+            _active = index;
+            _callback(index);
+        };
+
+
+        /** Populate the selector with a number of items. **/
+        public function populate(options:Array,active:Number=0):void {
+            _options = options;
+            _active = active;
+            // Remove existing buttons.
+            while(_container.numChildren > 0) {
+                _container.removeChildAt(0);
+            }
+            // Draw new buttons.
+            for(var i:Number = 0; i<_options.length; i++) {
+                _options[i].button = new SelectorButton(_buttonHandler,i,_options[i].label);
+                _container.addChild(_options[i].button);
+                _options[i].button.y = i*25;
+                if(i < _options.length - 1) {
+                    var divider:DisplayObject = new DividerRow();
+                    divider.y = i*25 + 24;
+                    _container.addChild(divider);
+                }
+            }
+            // Set active button and center the list
+            _options[_active].button.activate(true);
+            resize(_back.width,_back.height);
+        };
+
+
+        /** Resize the selector screen. **/
+        public function resize(width:Number,height:Number):void {
+            _back.height = height;
+            _back.width = width;
+            _close.x = width - 50;
+            if(_options) {
+                _container.x = Math.round(_back.width/2 - _container.width/2);
+                _container.y = Math.round(_back.height/2 - _container.height/2);
+            }
+        };
+
+
+};
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/DFXP.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/DFXP.as	(revision 1813)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/DFXP.as	(revision 1813)
@@ -0,0 +1,138 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import com.longtailvideo.jwplayer.utils.Strings;
+
+
+    /** Parse styling and contents of W3C Timed Text XML files. **/
+    public class DFXP {
+
+
+        /** Name of the main XMl node. **/
+        public static const NAME:String = 'tt';
+
+
+        /** Parse stylesheets from the head. */
+        public static function parseStyles(data:XML,defaults:Object):Object {
+            var styles:Object = {};
+            for each (var i:XML in data.children()) {
+                if (i.localName() == "head") {
+                    for each (var node:XML in i.children()[0].children()) {
+                        if (node.localName() == 'style') {
+                            // Set the defaults.
+                            var rules:Object = {};
+                            for(var rule:String in defaults) {
+                                rules[rule] = defaults[rule];
+                            }
+                            // Loop through all attributes for overrides.
+                            for each (var attrib:XML in node.attributes()) {
+                                var name:String = attrib.name();
+                                if (name.indexOf("::") > -1) {
+                                    name = name.substring(name.indexOf("::") + 2);
+                                }
+                                rules[name] = attrib.toString();
+                            }
+                            // Save to listing
+                            if (node.@id) {
+                                styles[node.@id] = rules;
+                            }
+                        }
+                    }
+                }
+            }
+            return styles;
+        };
+
+
+        /** Parse captions from the TT XML, returning a list with {begin:Number,text:String} objects. **/
+        public static function parseCaptions(data:XML,style:Object):Array {
+            var styles:Object = DFXP.parseStyles(data,style);
+            var array:Array = new Array({begin:0,text:''});
+            for each (var i:XML in data.children()) {
+                if (i.localName() == "body") {
+                    for each (var j:XML in i.children()) {
+                        for each (var k:XML in j.children()) {
+                            // Paragraphs are single captions. They live inside dividers.
+                            if (k.localName() == 'p') {
+                                var entry:Object = DFXP.parseCaption(k);
+                                array.push(entry);
+                                // Amend global styling.
+                                if(entry.style && styles[entry.style]) {
+                                    entry.style = styles[entry.style];
+                                } else { 
+                                    entry.style = style;
+                                }
+                                // Convert inline styles to HTML.
+                                while (entry.text.indexOf("<span") > -1) {
+                                    entry.text = DFXP.parseSpan(entry.text,styles,entry.style);
+                                }
+                                // End with a new, empty caption, accounting for duration or end set.
+                                if (entry['end']) {
+                                    array.push({begin:entry['end'],text:''});
+                                    delete entry['end'];
+                                } else if (entry['dur']) {
+                                    array.push({begin:entry['begin']+entry['dur'],text:''});
+                                    delete entry['dur'];
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return array;
+        };
+
+
+        /** Parse a single captions entry. **/
+        private static function parseCaption(data:XML):Object {
+            var pattern:RegExp = /(\n)+/;
+            var entry:Object = {
+                begin:Strings.seconds(data.@begin),
+                dur:Strings.seconds(data.@dur),
+                end:Strings.seconds(data.@end),
+                style:data.@style.toString(),
+                text:data.children().toXMLString().replace(/\n/g,' ')
+            };
+            return entry;
+        };
+
+
+        /** Convert a span entry into HTML. **/
+        private static function parseSpan(text:String,styles:Object,defaults:Object):String {
+            var rules:Object = {};
+            var newtext:String = '';
+            // Find the span bounds and convert to XML.
+            var left:Number = text.indexOf("<span ");
+            var right:Number = text.indexOf("</span>",left);
+            if (left > -1 && right > -1) {
+                var span:XML = new XML(text.substring(left,right+7));
+                // Use style if defined, else set defaults.
+                var style:String = span.@style;
+                if(style && styles[style]) {
+                    for(var i:String in styles[style]) { rules[i] = styles[style][i]; }
+                } else {
+                    for(var j:String in defaults) { rules[j] = defaults[j]; }
+                }
+                // Override style with inline declarations
+                for each (var attrib:XML in span.@*) {
+                    var name:String = attrib.localName().toString();
+                    if (rules[name]) {
+                        rules[name] = attrib.toString();
+                    }
+                }
+                // Wrap plain text with font and b/i/u tags.
+                newtext = '<font family="'+rules.fontFamily+'" size="'+rules.fontSize+'" color="'+rules.color+'">';
+                newtext +=  text.substring(text.indexOf('>',left)+1, right);
+                newtext += "</font>";
+                if(rules.fontWeight == 'bold') { newtext = '<b>'+newtext+'</b>'; }
+                if(rules.fontStyle == 'italic') { newtext = '<i>'+newtext+'</i>'; }
+                if(rules.textDecoration == 'underline') { newtext = '<u>'+newtext+'</u>'; }
+            }
+            return text.substr(0,left)+newtext+text.substr(right+7);
+        };
+
+
+    }
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Renderer.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Renderer.as	(revision 1973)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Renderer.as	(revision 1973)
@@ -0,0 +1,137 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import flash.display.*;
+    import flash.filters.DropShadowFilter;
+    import flash.text.*;
+
+
+    /** Captions component that renders the actual lines. **/
+    public class Renderer extends MovieClip {
+
+
+        /** Array with captions. **/
+        private var _captions:Array;
+        /** Current index in the captions array. **/
+        private var _current:Number;
+        /** Textfield that contains the captions. **/
+        private var _field:TextField;
+        /** Caption text format. **/
+        private var _format:TextFormat;
+        /** Sprite that contains the text outlines. **/
+        private var _outline:Sprite;
+        /** The main element with the captions. **/
+        private var _element:Sprite
+        /** Current position inside the video. **/
+        private var _position:Number;
+        /** The default stylesheet. **/
+        private var _sheet:StyleSheet;
+        /** Default captions style. **/
+        private var _style:Object;
+
+
+        /** Constructor; solely inits the captions file loader. **/
+        public function Renderer(style:Object,outline:Boolean) {
+            // Create the text outline sprite.
+            _outline = new Sprite();
+            addChild(_outline);
+            // Create the textfield sprite.
+            _field = new TextField();
+            _field.width = 400;
+            _field.height = 10;
+            _field.autoSize = TextFieldAutoSize.CENTER;
+            _field.multiline = true;
+            _field.selectable = false;
+            _field.wordWrap = true;
+            addChild(_field);
+            // Set the style and outline.
+            _style = style;
+            _sheet = new StyleSheet();
+            _field.styleSheet = _sheet;
+            if(outline) {
+                _outline.alpha = 1;
+                _field.filters = new Array();
+            } else { 
+                _outline.alpha = 0;
+                _field.filters = new Array(new DropShadowFilter(0,45,0,1,2,2,10,3));
+            }
+        };
+
+
+        /** Render the caption into the field. */
+        private function _renderCaption(text:String,style:Object=null):void {
+            if (style) {
+                _sheet.setStyle("p",style);
+            } else { 
+                _sheet.setStyle("p",_style);
+            }
+            // Place the text and align bottom
+            _field.htmlText = '<p>'+text+'</p>';
+            _field.y = _outline.y = -_field.height;
+            _outline.graphics.clear();
+            // Render the text outline.
+            for (var i:Number = 0; i < _field.numLines; i++) {
+                var metrics:TextLineMetrics = _field.getLineMetrics(i);
+                if(metrics.width > 16) {
+                    _outline.graphics.beginFill(0x000000);
+                    _outline.graphics.drawRect(
+                        200 - metrics.width/2 - 8,
+                        i * metrics.height - 2,
+                        metrics.width + 16,
+                        metrics.height + 4
+                    );
+                    _outline.graphics.endFill();
+                }
+            }
+        };
+
+
+        /** Select the caption to be rendered. **/
+        private function _selectCaption():void {
+            var found:Number = -1;
+            // Check which caption to use.
+            for (var i:Number=0; i<_captions.length; i++) {
+                if (_captions[i]['begin'] <= _position && 
+                    (i == _captions.length-1 || _captions[i+1]['begin'] >= _position)) {
+                    found = i;
+                    break;
+                }
+            }
+            // If none, empty the text. If not current, re-render.
+            if(found == -1) {
+                _renderCaption('');
+            } else if (found != _current) {
+                _current = found;
+                _renderCaption(_captions[i]['text'],_captions[i]['style']);
+            }
+        };
+
+
+        /** Set the array with captions. **/
+        public function setCaptions(captions:*):void {
+            _current = -1;
+            if(captions is String) {
+                _captions = new Array({
+                    begin:0,
+                    text: captions
+                });
+            } else if(captions is Array) {
+                _captions = captions;
+            }
+            _selectCaption();
+        };
+
+
+        /** Change the captions in response to the time. **/
+        public function setPosition(position:Number):void {
+            _position = position;
+            if(_captions) {
+                _selectCaption();
+            }
+        };
+
+
+    };
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SRT.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SRT.as	(revision 1769)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SRT.as	(revision 1769)
@@ -0,0 +1,61 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import com.longtailvideo.jwplayer.utils.Strings;
+
+    /** Parse an Subrip caption file and return an array of captions. **/
+    public class SRT {
+
+
+        /** Parse SRT captions string into an array. **/
+        public static function parseCaptions(dat:String):Array {
+            var arr:Array = new Array({begin:0,text:''});
+            // Trim whitespace and split the list by returns.
+            dat = dat.replace(/^\s+/, '').replace(/\s+$/, '');
+            var lst:Array = dat.split("\r\n\r\n");
+            if(lst.length == 1) { lst = dat.split("\n\n"); }
+            for(var i:Number=0; i<lst.length; i++) {
+                // Parse the caption
+                var obj:Object = SRT.parseCaption(lst[i]);
+                if(obj['begin'] && obj['text']) {
+                    arr.push(obj);
+                    // Insert empty caption at the end.
+                    if(obj['end']) {
+                        arr.push({begin:obj['end'],text:''});
+                        delete obj['end'];
+                    }
+                }
+            }
+            return arr;
+        };
+
+
+        /** Parse a single captions entry. **/
+        private static function parseCaption(dat:String):Object {
+            var obj:Object = new Object();
+            var arr:Array = dat.split("\r\n");
+            if(arr.length == 1) { arr = dat.split("\n"); }
+            try {
+                // First line contains the start and end.
+                var idx:Number = arr[1].indexOf(' --> ');
+                if(idx > 0) {
+                    obj['begin'] = Strings.seconds(arr[1].substr(0,idx));
+                    obj['end'] = Strings.seconds(arr[1].substr(idx+5));
+                }
+                // Second line starts the text.
+                if(arr[2]) {
+                    obj['text'] = arr[2];
+                    // Arbitrary number of additional lines.
+                    for (var i:Number = 3; i < arr.length; i++) {
+                        obj['text'] += '<br/>'+arr[i];
+                    }
+                }
+            } catch (err:Error) {}
+            return obj;
+        };
+
+
+    }
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Animator.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Animator.as	(revision 1964)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/Animator.as	(revision 1964)
@@ -0,0 +1,78 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import flash.display.MovieClip;
+    import flash.events.Event;
+
+
+    public class Animator {
+
+
+        /** Target MovieClip **/
+        private var _tgt:MovieClip;
+        /** Transition speed **/
+        private var _spd:Number;
+        /** Final Alpha **/
+        private var _end:Number;
+        /** Y position **/
+        private var _yps:Number;
+
+
+        /** Store target to animate. **/
+        public function Animator(tgt:MovieClip) {
+            _tgt = tgt;
+        }
+
+
+        /** Fade function for MovieClip. **/
+        public function fade(end:Number = 1, spd:Number = 0.25):void {
+            _end = end;
+            if (_tgt.alpha > _end) {
+                _spd = -Math.abs(spd);
+            } else {
+                _spd = Math.abs(spd);
+            }
+            _tgt.addEventListener(Event.ENTER_FRAME, fadeHandler);
+        }
+
+
+        /** The fade enterframe function. **/
+        private function fadeHandler(evt:Event):void {
+            if ((_tgt.alpha >= _end - _spd && _spd > 0) || (_tgt.alpha <= _end + _spd && _spd < 0)) {
+                _tgt.removeEventListener(Event.ENTER_FRAME, fadeHandler);
+                _tgt.alpha = _end;
+                if (_end == 0) {
+                    _tgt.visible = false;
+                }
+            } else {
+                _tgt.visible = true;
+                _tgt.alpha += _spd;
+            }
+        }
+
+
+        /** Smoothly move a Movielip to a certain position. **/
+        public function easeY(yps:Number, spd:Number = 2):void {
+            _spd = spd;
+            if (!yps) {
+                _yps = _tgt.y;
+            } else {
+                _yps = yps;
+            }
+            _tgt.addEventListener(Event.ENTER_FRAME, easeYHandler);
+        }
+
+
+        /** The ease enterframe function. **/
+        private function easeYHandler(evt:Event):void {
+            if (Math.abs(_tgt.y - _yps) < 1) {
+                _tgt.removeEventListener(Event.ENTER_FRAME, easeYHandler);
+                _tgt.y = _yps;
+            } else {
+                _tgt.y = _yps - (_yps - _tgt.y) / _spd;
+            }
+        }
+
+
+    }
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/ISO639.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/ISO639.as	(revision 1979)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/ISO639.as	(revision 1979)
@@ -0,0 +1,84 @@
+package com.longtailvideo.plugins.captions {
+
+
+    /** Mapping table for MP4 TimedText ISO639-2 language codec. **/
+    public class ISO639 {
+
+
+        /** Most common codes (hat tip to Google Translate). **/
+        private static const MAP:Object = {
+            afr: 'Afrikaans',
+            alb: 'Albanian',
+            ara: 'Arabic',
+            aze: 'Azerbaijani',
+            baq: 'Basque',
+            bel: 'Belarusian',
+            bul: 'Bulgarian',
+            cat: 'Catalan',
+            chi: 'Chinese',
+            cze: 'Czech',
+            dan: 'Danish',
+            deu: 'German',
+            dut: 'Dutch',
+            eng: 'English',
+            esp: 'Spanish',
+            est: 'Estonian',
+            fil: 'Filipino',
+            fin: 'Finnish',
+            fra: 'French',
+            fre: 'French',
+            geo: 'Georgian',
+            ger: 'Deutsch',
+            gle: 'Irish',
+            glg: 'Galician',
+            gre: 'Greek',
+            hat: 'Haitian',
+            heb: 'Hebrew',
+            hin: 'Hindi',
+            hrv: 'Croatian',
+            hun: 'Hungarian',
+            ice: 'Icelandic',
+            ind: 'Indonesian',
+            ita: 'Italian',
+            jpn: 'Japanese',
+            kor: 'Korean',
+            lat: 'Latin',
+            lav: 'Latvian',
+            lit: 'Lithuanian',
+            mac: 'Macedonian',
+            may: 'Malay',
+            mlt: 'Maltese',
+            nor: 'Norwegian',
+            per: 'Persian',
+            pol: 'Polish',
+            por: 'Portuguese',
+            rum: 'Romanian',
+            rus: 'Russian',
+            slo: 'Slovak',
+            slv: 'Slovenian',
+            spa: 'Spanish',
+            srp: 'Serbian',
+            swa: 'Swahili',
+            swe: 'Swedish',
+            tha: 'Thai',
+            tur: 'Turkish',
+            ukr: 'Ukrainian',
+            urd: 'Urdu',
+            vie: 'Vietnamese'
+        };
+
+
+        /** Get the name of a specific language code. **/
+        public static function label(code:String):String { 
+            if(ISO639.MAP[code]) { 
+                return ISO639.MAP[code];
+            } else {
+                return "Captions on";
+            }
+        };
+
+
+    };
+
+
+}
Index: /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SelectorButton.as
===================================================================
--- /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SelectorButton.as	(revision 1973)
+++ /tags/plugins/captions/3.0/src/as/com/longtailvideo/plugins/captions/SelectorButton.as	(revision 1973)
@@ -0,0 +1,115 @@
+package com.longtailvideo.plugins.captions {
+
+
+    import flash.accessibility.AccessibilityProperties;
+    import flash.display.*;
+    import flash.events.*;
+    import flash.filters.DropShadowFilter;
+    import flash.text.*;
+
+
+    /** A single selector button. **/
+    public class SelectorButton extends Sprite {
+
+
+        /** Embeds of the default graphics. **/
+        [Embed(source="../../../../../../assets/back.png")]
+        private const ButtonBack:Class;
+        [Embed(source="../../../../../../assets/active.png")]
+        private const ActiveIcon:Class;
+
+
+        /** The icon that indicates the item is active. **/
+        private var _active:DisplayObject;
+        /** Background of the button. **/
+        private var _back:DisplayObject;
+        /** Textfield of the button. **/
+        private var _field:TextField;
+        /** Label of the textfield. **/
+        private var _label:String;
+        /** Formatting of the textfield. **/
+        private var _format:TextFormat;
+        /** Handler to call when the button is clicked. **/
+        private var _handler:Function;
+        /** Index of the button. **/
+        private var _index:Number;
+
+
+        /** Constructor. **/
+        public function SelectorButton(handler:Function,index:Number,label:String) {
+            _handler = handler;
+            _index = index;
+            _label = label;
+            _back = new ButtonBack();
+            _back.alpha = 0;
+            addChild(_back);
+            _field = new TextField();
+            _field.filters = new Array(new DropShadowFilter(1,45,0,1,0,0));
+            addChild(_field);
+            // Create the text formatting.
+            _format = new TextFormat();
+            _format.color = 0xFFFFFF;
+            _format.size = 12;
+            _format.bold = true;
+            _format.align = TextFormatAlign.CENTER;
+            _format.font = "_sans";
+            _field.defaultTextFormat = _format;
+            // Set other textfield props.
+            _field.selectable = false;
+            _field.height = 20;
+            _field.width = 180;
+            _field.y = 2;
+            _field.text = _label;
+            // Add active indicator (small dot).
+            _active = new ActiveIcon();
+            _active.x = 30;
+            _active.y = 0;
+            _active.visible = false;
+            addChild(_active);
+            // Insert accessibility options (tabbing / screenreader label).
+            var acs:AccessibilityProperties = new AccessibilityProperties();
+            acs.name = label;
+            accessibilityProperties = acs;
+            buttonMode = true;
+            mouseChildren = false;
+            tabEnabled = true;
+            tabChildren = false;
+            tabIndex = index + 501;
+            // Set event handlers.
+            addEventListener(MouseEvent.CLICK,_clickHandler);
+            addEventListener(MouseEvent.MOUSE_OUT,_outHandler);
+            addEventListener(MouseEvent.MOUSE_OVER,_overHandler);
+        };
+
+
+        /** (de)activate the button. **/
+        public function activate(state:Boolean):void {
+            if(state) {
+                _active.visible = true;
+            } else {
+                _active.visible = false;
+            }
+        };
+
+
+        /** Register the click. **/
+        private function _clickHandler(event:MouseEvent):void { 
+            _handler(_index);
+        };
+
+
+        /** Fade the back on rollover. **/
+        private function _outHandler(event:MouseEvent):void { 
+            _back.alpha = 0;
+        };
+
+
+        /** Fade the back on rollover. **/
+        private function _overHandler(event:MouseEvent):void {
+            _back.alpha = 1;
+        };
+
+    };
+
+
+}
Index: /tags/plugins/captions/3.0/src/js/captions.renderer.js
===================================================================
--- /tags/plugins/captions/3.0/src/js/captions.renderer.js	(revision 2017)
+++ /tags/plugins/captions/3.0/src/js/captions.renderer.js	(revision 2017)
@@ -0,0 +1,153 @@
+(function(jwplayer) {
+
+
+    /** Component that renders the actual captions on screen. **/
+    jwplayer.captions.renderer = function(_options,_div) {
+
+
+        /** Captions bottom position. **/
+        var _bottom;
+        /** Current list with captions. **/
+        var _captions;
+        /** Container of captions. **/
+        var _container;
+        /** Current actie captions entry. **/
+        var _current;
+        /** Height of a single line. **/
+        var _line;
+        /** Current video position. **/
+        var _position;
+        /** Should the captions be visible or not. **/
+        var _visible = 'visible';
+        /** Width of the display. **/
+        var _width;
+
+
+        /** Hide the rendering component. **/
+        this.hide = function() {
+            _style({display:'none'});
+        };
+
+
+        /** Assign list of captions to the renderer. **/
+        this.populate = function(captions) {
+            _current = -1;
+            _captions = captions;
+            _select();
+        };
+
+
+        /** Render the active caption. **/
+        function _render(html) {
+            _container.innerHTML = html;
+            if(html == '') { 
+                _visible = 'hidden';
+            } else { 
+                _visible = 'visible';
+            }
+            setTimeout(_resize,20);
+        };
+
+
+        /** Store new dimensions. **/
+        this.resize = function(width,bottom) {
+            _width = width;
+            _bottom = bottom;
+            _resize();
+        };
+
+
+        /** Resize the captions. **/
+        function _resize() {
+            var size = Math.round(_options.fontSize * Math.pow(_width/400,0.6));
+            var line = Math.round(size * 1.4);
+            _style({
+                fontSize: size + 'px',
+                lineHeight: line + 'px',
+                visibility: _visible
+            });
+            var left = Math.round(_width/2 - _container.clientWidth/2);
+            var top = Math.round(_bottom - _container.clientHeight);
+            _style({
+                left: left + 'px',
+                top: top + 'px'
+            });
+        };
+
+
+        /** Select a caption for rendering. **/
+        function _select() {
+            var found = -1;
+            for (var i=0; i < _captions.length; i++) {
+                if (_captions[i]['begin'] <= _position && 
+                    (i == _captions.length-1 || _captions[i+1]['begin'] >= _position)) {
+                    found = i;
+                    break;
+                }
+            }
+            // If none, empty the text. If not current, re-render.
+            if(found == -1) {
+                _render('');
+            } else if (found != _current) {
+                _current = found;
+                _render(_captions[i]['text']);
+            }
+        };
+
+
+        /** Constructor for the renderer. **/
+        function _setup() {
+            _container = document.createElement("div");
+            _div.appendChild(_container);
+            _style({
+                color: '#'+_options.color.substr(-6),
+                display: 'block',
+                fontFamily: _options.fontFamily,
+                fontStyle: _options.fontStyle,
+                fontWeight: _options.fontWeight,
+                height: 'auto',
+                margin: '0 0 0 0',
+                padding: '3px 9px',
+                position: 'absolute',
+                textAlign: 'center',
+                textDecoration: _options.textDecoration,
+                whiteSpace: 'nowrap',
+                width: 'auto'
+            });
+            if(_options.back) {
+                _style({background:'#000'});
+            } else {
+                _style({textShadow: '-2px 0px 1px #000,2px 0px 1px #000,0px -2px 1px #000,0px 2px 1px #000,-1px 1px 1px #000,1px 1px 1px #000,1px -1px 1px #000,1px 1px 1px #000'});
+            }
+        };
+        _setup();
+
+
+        /** Show the rendering component. **/
+        this.show = function() {
+            _style({display:'block'});
+            _resize();
+        };
+
+
+        /** Apply CSS styles to elements. **/
+        function _style(styles) {
+            for(var property in styles) {
+              _container.style[property] = styles[property];
+            }
+        };
+
+
+        /** Update the video position. **/
+        this.update = function(position) {
+            _position = position;
+            if(_captions) {
+                _select();
+            }
+        };
+
+
+    };
+
+
+})(jwplayer);
Index: /tags/plugins/captions/3.0/src/js/captions.srt.js
===================================================================
--- /tags/plugins/captions/3.0/src/js/captions.srt.js	(revision 1973)
+++ /tags/plugins/captions/3.0/src/js/captions.srt.js	(revision 1973)
@@ -0,0 +1,133 @@
+(function(jwplayer) {
+
+
+    /** Component that loads and parses an SRT file. **/
+    jwplayer.captions.srt = function(_success, _failure) {
+
+
+        /** XMLHTTP Object. **/
+        var _request;
+        /** URL of the SRT file. **/
+        var _url;
+
+
+        /** Handle errors. **/
+        function _error(status) {
+            if(status == 0) {
+                _failure("Crossdomain loading denied: "+_url);
+            } else if (status == 404) { 
+                _failure("SRT File not found: "+_url);
+            } else { 
+                _failure("Error "+status+" loading SRT file: "+_url);
+            }
+        };
+
+
+        /** Load a new SRT file. **/
+        this.load = function(url) {
+            _url = url;
+            try {
+                _request.open("GET", url, true);
+                _request.send(null);
+            } catch (error) {
+                _failure("Error loading SRT File: "+url);
+            }
+        };
+
+
+        /** Proceed from loading to parsing. **/
+        function _parse(data) {
+            _captions = [{begin:0,text:''}];
+            // Trim whitespace and split the list by returns.
+            data = data.replace(/^\s+/, '').replace(/\s+$/, '');
+            var list = data.split("\r\n\r\n");
+            if(list.length == 1) { list = data.split("\n\n"); }
+            for(var i=0; i<list.length; i++) {
+                // Parse each entry
+                var entry = _entry(list[i]);
+                if(entry['begin'] && entry['text']) {
+                    _captions.push(entry);
+                    // Insert empty caption at the end.
+                    if(entry['end']) {
+                        _captions.push({begin:entry['end'],text:''});
+                        delete entry['end'];
+                    }
+                }
+            }
+            if(_captions.length > 1) {
+                _success(_captions);
+            } else {
+                _failure("Invalid SRT file: "+_url);
+            }
+        };
+
+
+        /** Parse a single captions entry. **/
+        function _entry(data) {
+            var entry = {};
+            var array = data.split("\r\n");
+            if(array.length == 1) { array = data.split("\n"); }
+            try {
+                // Second line contains the start and end.
+                var index = array[1].indexOf(' --> ');
+                if(index > 0) {
+                    entry['begin'] = _seconds(array[1].substr(0,index));
+                    entry['end'] = _seconds(array[1].substr(index+5));
+                }
+                // Third line starts the text.
+                if(array[2]) {
+                    entry['text'] = array[2];
+                    // Arbitrary number of additional lines.
+                    for (var i=3; i<array.length; i++) {
+                        entry['text'] += '<br/>' + array[i];
+                    }
+                }
+            } catch (error) {}
+            return entry;
+        };
+
+
+        /** Convert timecode to seconds. **/
+        function _seconds(string) {
+            string = string.replace(',', '.');
+            var array = string.split(':');
+            var number = 0;
+            if (string.substr(-1) == 's') {
+                number = Number(string.substr(0, string.length - 1));
+            } else if (string.substr(-1) == 'm') {
+                number = Number(string.substr(0, string.length - 1)) * 60;
+            } else if (string.substr(-1) == 'h') {
+                number = Number(string.substr(0, string.length - 1)) * 3600;
+            } else if (array.length > 1) {
+                number = Number(array[array.length - 1]);
+                number += Number(array[array.length - 2]) * 60;
+                if (array.length == 3) {
+                    number += Number(array[array.length - 3]) * 3600;
+                }
+            } else {
+                number = Number(string);
+            }
+            return number;
+        };
+
+
+        /** Setup the SRT parser. **/
+        function _setup() {
+            _request = new XMLHttpRequest();
+            _request.onreadystatechange = function() {
+                if (_request.readyState === 4) {
+                    if (_request.status === 200) {
+                        _parse(_request.responseText);
+                    } else {
+                        _error(_request.status);
+                    }
+                }
+            };
+        };
+        _setup();
+
+
+    };
+
+
+})(jwplayer);
Index: /tags/plugins/captions/3.0/src/js/captions.selector.js
===================================================================
--- /tags/plugins/captions/3.0/src/js/captions.selector.js	(revision 1980)
+++ /tags/plugins/captions/3.0/src/js/captions.selector.js	(revision 1980)
@@ -0,0 +1,210 @@
+(function(jwplayer) {
+
+
+    /** Component that renders a selection menu. **/
+    jwplayer.captions.selector = function(_callback,_div) {
+
+        /** Currently active item. **/
+        var _active;
+        /** Reference to the container div. **/
+        var _container;
+        /** Reference to the close button. **/
+        var _close;
+        /** Dimensions of the display. **/
+        var _dimensions;
+        /** Reference to the track listing. **/
+        var _list;
+        /** The list with options. **/
+        var _options = [];
+
+
+        /** Set backgrounds on a menu entry. **/
+        function _background(index,over) {
+            var backgrounds = [];
+            if(index > 0) {
+                backgrounds.push('url(../assets/divider.png) no-repeat 0 0');
+            }
+            if(index == _active) {
+                backgrounds.push('url(../assets/active.png) no-repeat 20px 0');
+            }
+            if(over) {
+                backgrounds.push('url(../assets/back.png) no-repeat 0 1px');
+            }
+            _style(_options[index].button,{
+                background: backgrounds.join(',')
+            });
+        };
+
+
+        /** One of the buttons was clicked. **/
+        function _clickHandler(event) {
+            var old = _active;
+            var index = _index(event);
+            _active = index;
+            _background(old);
+            _background(index);
+            _callback(index);
+        };
+
+
+        /** Close button or container are clicked. **/
+        function _closeHandler(event) {
+            if(event.target == _container || event.target == _close) { 
+                _callback(_active);
+            }
+        };
+
+
+        /** Hide the language selector. **/
+        this.hide = function() {
+            _container.style.opacity = 0;
+            setTimeout(function(){
+                _container.style.display = 'none';
+            },200);
+        };
+
+
+        /** Retrieve the index for a button. **/
+        function _index(event) { 
+            for(var i=0; i<_options.length; i++) {
+                if(event.target == _options[i].button) { 
+                    return i;
+                }
+            }
+        };
+
+
+        /** Swap background on mouse over. **/
+        function _overHandler(event) {
+            _background(_index(event),true);
+        };
+
+
+        /** Restore background on mouse out. **/
+        function _outHandler(event) {
+            _background(_index(event),false);
+        };
+
+
+        /** Polulate the selector with a list of options. **/
+        this.populate = function(options, active) {
+            _options = options;
+            _active = active;
+            _list.innerHTML = '';
+            for(var i=0; i<options.length; i++) { 
+                var button = document.createElement('li');
+                button.innerHTML = options[i].label;
+                _options[i].button = button;
+                _list.appendChild(button);
+                _style(button,{
+                    color: '#FFF',
+                    cursor: 'pointer',
+                    display:'block',
+                    font: '12px/25px Arial,sans-serif',
+                    fontWeight: 'bold',
+                    height: '25px',
+                    textShadow: '1px 1px 0 #000',
+                    textAlign: 'center',
+                    width: '180px'
+                });
+                button.onclick = _clickHandler;
+                button.onmouseover = _overHandler;
+                button.onmouseout = _outHandler;
+                _background(i);
+            }
+            _resize();
+        };
+
+
+        /** Resize the selector to fit the display. **/
+        this.resize = function(width, height) {
+            _dimensions = [width,height];
+            _resize();
+        };
+
+
+        /** Resize the selector. **/
+        function _resize() {
+            _style(_container,{
+                height: _dimensions[1]+'px',
+                width: _dimensions[0]+'px'
+            });
+            _style(_close,{
+                left: (_dimensions[0]-50)+'px'
+            });
+            _style(_list,{
+                left: Math.round(_dimensions[0]/2 - 90)+'px',
+                top: Math.round(_dimensions[1]/2 - _options.length*12.5)+'px'
+            });
+        };
+
+
+        /** Draw the initial selector graphics. **/
+        function _setup() {
+            _container = document.createElement('div');
+            _container.onclick = _closeHandler;
+            _div.appendChild(_container);
+            _style(_container,{
+                backgroundImage: 'url(../assets/sheet.png)',
+                backgroundRepeat: 'no-repeat',
+                backgroundSize: '100% 100%',
+                cursor: 'pointer',
+                display: 'none',
+                opacity: 0,
+                position: 'relative',
+                webkitTransition: 'opacity 150ms linear',
+                MozTransition: 'opacity 150ms linear',
+                oTransition: 'opacity 150ms linear',
+                transition: 'opacity 150ms linear'
+            });
+            _close = document.createElement("div");
+            _close.onclick = _closeHandler;
+            _container.appendChild(_close);
+            _style(_close,{
+                background: 'transparent url(../assets/close.png)',
+                cursor: 'pointer',
+                position: 'absolute',
+                left: '0px',
+                top: '0px',
+                margin: '0px',
+                padding: '0px',
+                display: 'block',
+                width: '50px',
+                height: '50px'
+            });
+            _list = document.createElement("ul");
+            _container.appendChild(_list);
+            _style(_list,{
+                display: 'block',
+                height: 'auto',
+                listStyle: 'none',
+                margin: '0px',
+                padding: '0px',
+                position: 'absolute',
+                width: '180px'
+            });
+        };
+        _setup();
+
+
+        /** Show the language selector. **/
+        this.show = function() {
+            _container.style.display = 'block';
+            setTimeout(function(){
+                _container.style.opacity =  1;
+            },20);
+        };
+
+
+        /** Apply CSS styles to elements. **/
+        function _style(element,styles) {
+            for(var property in styles) {
+              element.style[property] = styles[property];
+            }
+        };
+
+
+    };
+
+
+})(jwplayer);
Index: /tags/plugins/captions/3.0/src/js/captions.js
===================================================================
--- /tags/plugins/captions/3.0/src/js/captions.js	(revision 1980)
+++ /tags/plugins/captions/3.0/src/js/captions.js	(revision 1980)
@@ -0,0 +1,319 @@
+(function(jwplayer) {
+
+
+    /** Displays closed captions or subtitles on top of the video. **/
+    var template = function(_player, options, _div) {
+
+
+        /** Dimensions of the display. **/
+        var _dimensions;
+        /** Dock icons. **/
+        var _icons = [
+            '../assets/not_set.png',
+            '../assets/is_off.png',
+            '../assets/is_on.png'
+        ];
+        /** Default configuration options. **/
+        var _options = {
+            back: false,
+            color: '#FFFFFF',
+            fontFamily: 'Arial,sans-serif',
+            fontSize: 15,
+            fontStyle: 'normal',
+            fontWeight: 'normal',
+            state: true,
+            textDecoration: 'none'
+        };
+        /** Reference to the text renderer. **/
+        var _renderer;
+        /** Reference to the language selector. **/
+        var _selector;
+        /** Current player state. **/
+        var _state;
+        /** Currently active captions track. **/
+        var _track;
+        /** List with all tracks. **/
+        var _tracks = [];
+
+
+        /** Read or write a cookie. **/
+        function _cookie(name,value) {
+            name = 'jwplayercaptions' + name;
+            if(value !== undefined) {
+                var c = name+'='+value+'; expires=Wed, 1 Jan 2020 00:00:00 UTC; path=/';
+                document.cookie = c;
+            } else {
+                // http://www.quirksmode.org/js/cookies.html
+                var list = document.cookie.split(';');
+                for(var i=0; i< list.length; i++) {
+                    var c = list[i];
+                    while (c.charAt(0) == ' ') {
+                        c = c.substring(1,c.length);
+                    }
+                    if (c.indexOf(name) == 0) {
+                        return c.substring(name.length+1, c.length);
+                    }
+                }
+            }
+            return null;
+        };
+
+
+        /** Dock button was clicked. **/
+        var dockHandler = function() {
+            if(_tracks.length > 1) {
+                _selector.show();
+                _renderer.hide();
+                try {
+                    _player.getPlugin('display').hide();
+                    _player.getPlugin('dock').hide();
+                } catch (error) {}
+            } else if(_tracks.length == 1) {
+                _options.state = !_options.state;
+                _cookie('state',_options.state);
+                _redraw();
+            }
+        };
+
+
+        /** Error loading/parsing the captions. **/
+        function _errorHandler(error) {
+            console.log("CAPTIONS(" + error + ")");
+        };
+
+
+        /** Controlbar is hiding. **/
+        function _hideHandler(event) {
+            _renderer.resize(_dimensions[0],Math.round(_dimensions[1]*.94));
+        };
+
+
+        /** Player jumped to idle state. **/
+        function _idleHandler(event) {
+            _state = 'idle';
+            _redraw();
+        };
+
+
+        /** Check if the device is touch, in which case captions are not rendered. **/
+        function _isTouch() {
+            try {
+                document.createEvent("TouchEvent");
+                return true;
+            } catch (e) {
+                return false;
+            }
+        };
+
+
+        /** Listen to playlist item updates. **/
+        function _itemHandler(event) {
+            _track = 0;
+            _tracks = [];
+            _renderer.update(0);
+            _selector.hide();
+            try {
+                _player.getPlugin('display').show();
+                _player.getPlugin('dock').show();
+            } catch (error) {}
+            try {
+                _player.getPlugin('display').show();
+                _player.getPlugin('dock').show();
+            } catch (error) {}
+            var item = _player.getPlaylist()[event.index];
+            // Load multiple captions
+            if(item['captions.files']) {
+                var found = false;
+                var files = item['captions.files'].split(',');
+                if(item['captions.labels']) {
+                    var labels = item['captions.labels'].split(',');
+                }
+                for(var i=0; i<files.length; i++) {
+                    var entry = { file: files[i] };
+                    // Set label
+                    if(labels && labels[i]) {
+                        entry.label = labels[i];
+                    } else {
+                        entry.label = files[i].substring(files[i].lastIndexOf('/')+1,files[i].indexOf('.')-1);
+                    }
+                    // Matched label from cookie.
+                    if(_options.label == entry.label) {
+                        found = true;
+                        _track = _tracks.length;
+                        _load(entry.file);
+                    }
+                    _tracks.push(entry);
+                }
+                if(found == false) {
+                    _options.state = false;
+                }
+                // populate selector
+                var options = [{label:'(Off)'}];
+                for(var j=0; j<_tracks.length; j++) {
+                    options.push({label:_tracks[j].label});
+                }
+                if(_options.state) {
+                    _selector.populate(options, _track+1);
+                } else {
+                    _selector.populate(options, 0);
+                }
+            // Load single caption
+            } else if(item['captions.file']) {
+                _tracks.push({file:item['captions.file']});
+                _load(_tracks[0].file);
+            }
+            _redraw();
+        };
+
+
+        /** Load captions. **/
+        function _load(file) {
+            var loader = new jwplayer.captions.srt(_loadHandler,_errorHandler);
+            loader.load(file);
+        };
+
+
+        /** Captions were loaded. **/
+        function _loadHandler(data) {
+            _renderer.populate(data);
+            _tracks[_track].data = data;
+            _redraw();
+        };
+
+
+        /** Player started playing. **/
+        function _playHandler(event) {
+            _state = 'playing';
+            _redraw();
+        };
+
+
+        /** Insert global file/files on playlist update. **/
+        function _playlistHandler(event) {
+            if(_options.file) {
+                _player.getPlaylist()[0]['captions.file'] = _options.file;
+            }
+            if(_options.files) {
+                _player.getPlaylist()[0]['captions.files'] = _options.files;
+            } 
+            if(_options.labels) {
+                _player.getPlaylist()[0]['captions.labels'] = _options.labels;
+            }
+        };
+
+
+        /** Update the interface. **/
+        function _redraw() {
+            if(!_tracks.length) {
+                _player.getPlugin("dock").setButton('captions',dockHandler,_icons[0]);
+                _renderer.hide();
+            } else if (_options.state) {
+                _player.getPlugin("dock").setButton('captions',dockHandler,_icons[2]);
+                if(_state == 'playing') {
+                    _renderer.show();
+                } else {
+                    _renderer.hide();
+                }
+            } else {
+                _player.getPlugin("dock").setButton('captions',dockHandler,_icons[1]);
+                _renderer.hide();
+            }
+        };
+
+
+        /** Reposition elements upon a resize. **/
+        this.resize = function(width,height) {
+            if(_player.getRenderingMode() == 'flash' || _isTouch()) { return; }
+            _selector.resize(width,height);
+            _renderer.resize(width,Math.round(height*0.94));
+            _dimensions = [width,height];
+        };
+
+
+        /** Set dock buttons when player is ready. **/
+        function _setup() {
+            if(_player.getRenderingMode() == 'flash' || _isTouch()) { return; }
+            // Listen to player events
+            _player.onPlaylist(_playlistHandler);
+            _player.onPlaylistItem(_itemHandler);
+            _player.onIdle(_idleHandler);
+            _player.onPlay(_playHandler);
+            _player.onTime(_timeHandler);
+            try { 
+                _player.getPlugin('controlbar').onHide(_hideHandler);
+                _player.getPlugin('controlbar').onShow(_showHandler);
+            } catch (error) {}
+            // Grab cookies and config options
+            if(_cookie('state') !== null) {
+                if(_cookie('state') == 'true') { 
+                    _options.state = true;
+                } else {
+                    _options.state = false;
+                }
+            }
+            if(_cookie('label') !== null) {
+                _options.label = _cookie('label');
+            }
+            for (var option in options) {
+                _options[option] = options[option];
+            }
+            // Place renderer and selector.
+            _renderer = new jwplayer.captions.renderer(_options,_div);
+            _selector = new jwplayer.captions.selector(_selectorHandler,_div);
+            _redraw();
+        };
+        _player.onReady(_setup);
+
+
+        /** Selection menu was closed. **/
+        function _selectorHandler(index) {
+            // Show dock/display for 5.7+
+            _selector.hide();
+            try {
+                _player.getPlugin('display').show();
+                _player.getPlugin('dock').show();
+            } catch (error) {}
+            // Store new state and track
+            if(index > 0) {
+                _options.state = true;
+                _track = index - 1;
+                _options.label = _tracks[_track].label;
+            } else {
+                _options.state = false;
+            }
+            _cookie('label',_options.label);
+            _cookie('state',_options.state);
+            // Load new captions
+            if(_tracks[_track].data) {
+                _renderer.populate(_tracks[_track].data);
+            } else {
+                _load(_tracks[_track].file);
+            }
+            _redraw();
+        };
+
+
+        /** Controlbar is showing. **/
+        function _showHandler(event) {
+            var yps = event.boundingRect.y;
+            if(yps > 0) { 
+                _renderer.resize(_dimensions[0],Math.round(yps*.94));
+            }
+        };
+
+
+        /** Listen to player time updates. **/
+        function _timeHandler(event) {
+            _renderer.update(event.position);
+        };
+
+
+    };
+
+
+    /** Claim the namespace and register the plugin. **/
+    jwplayer.captions = {};
+    jwplayer().registerPlugin('captions', template,'./captions.swf');
+
+
+})(jwplayer);
Index: /tags/plugins/captions/3.0/captions.js
===================================================================
--- /tags/plugins/captions/3.0/captions.js	(revision 2017)
+++ /tags/plugins/captions/3.0/captions.js	(revision 2017)
@@ -0,0 +1,1 @@
+(function(a){var b=function(d,h,u){var i;var o=["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA6ZJREFUeNrsWM9LVFEUfm8cU7NsxkwU+zGhRQWB1aY29RYtXIVRUO1mKW1qE/inCG2ENq0qCMJFCxcupBYFQQxSYog1CPkDC8ccnb5D37XD5YmPeU9fxD3wcd67c+be85177r3nPs9z4sSJEydOnPw/4kcxqtVqYrcPaCZagENAm2proo3oLNBIbcsvoEq9RlSIH8Ay8BNYZdua7/ubO/mYjUj4HtBDR7NRAxBTNoB1YA54khSRDqB1m98kiiVgnoML2aNAL2fKdu4LMM2IS0DywGngiGXbQOSjOJiNGbUp4DmmfjUkHQ9D3SQpj2nyDLZTIbavoa4BQb2OZGKQWAFeGhJwJgM0cz15aP8O9Qow+T2uScCuCcjStgaM4/FDGkQ+YfAV9X4deASc3dpJfP8rVJmv04pEN9QD4JbdZxpEFq3348zpcyFrqMoZNHIM2C/rCKTaVPtqvc7EWSOb22zlB+FcJ/uucsFXLfuMWtA9sG/h7+1pENlOTgD3Q9ZTmAiRO0kMmkmQwF6cLXtCJFXS2V1wbgF4wyDJAXiRpUxo9QNMsizxeCheSo2IOTsoy9h2J9VvPSGL2FdE3sF+nrYn6yUSJ7Ua1HlRo1OmKLTHyFhj1VTJUk0i5eLMSIf1/pH9vbXa8ySdU+fEZxaDcwjCgrJtS4NIH1Kh3TgCPQE1YaVcL6tmkVPAN9pKKj22bGXGzqexa8khNggH8mFrBpBSZVA1X0XbhW3WmNxtbrNiTmXXkrJkCI7MsoyvMoW6mXq+NdYN2F6BnmXpIqd+p7rr7Pr2u8jaqFEvcorcCPuIKFt0JxH1YrWY5FU3Q4dbGMUDjHyrddU119us2ql81lFmZ9tQu9V6UlddJ06cOIlVROaAwQT6OQNcTvxkR6ddAqtNvpwURKvmHBHWR5i9IV+wzLtCvo3VfyBigCI7lH1dyLzA3l6SiLEMKbP9Kdpn8Fzk/wJ+5tkKBNRdYAkQMqNiD93Pb1pLQgh6lIEI+L8Z9ht7iovilJpu4+iQiSKjPKSeiyH9BCbl2E+OM/TQzJCkEjCg7IPEZoRiIlLRU28ixch27dDHe5kt2A17fz6zlpk+Ev1htNtj7VnRWJFIgkSFEa3sZA+MqLSRyEvqldHHiFlDaXx8KLGUL3CtlNRvzcx3LQO0M6QrIFCmbcB+JCX1TpWLQi4qkbKKdsX7+xl0jM8B9ZiylwXdb/Uzxv8H6t2zFndJbRAlthfcoebEiRMn/6T8FmAAOmqqRlH6QggAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA09JREFUeNrsmEtIVFEYx+fOjI1WNmkUPUxDjR4USZIUFANBtigoqn1R0Np9C1u2y0XQKrCNKwmJoLDAhOhBhEG1U9Qg7YHNlJaPKaf/B/+Rj8O9Oc29M2N1Pvhx7jn3u/ee/3l+54ZC1qxZs2bNmrV/x5xcnDKZTBjJCrAaVIFqUAs2MR8Hq8BKpuVgOVP9jQz4BqbBFPhKvoAk+ADeMk2SScdxfixWx2iOgm+DFoqpyLUBfNoc+A6eg9aghGwHaz3uvQc94DU/Lr2yHxxlT2lLg37wAHwGEVAPjoMdhu8yUh9Y02BoDWbc7Q6o9nhmK3iqfJPgmNfQBe0e3xgstJAxsEH5REAcOKqsGaTp32a8sxKUG2Vd+QoJ+9B3F5NwXOWvgE/g9MJK4jgvkLxk9r6q8F4kw6DLeOe9fCvjR8iwkT8IysAZo1xWoBkwpsoOgDXgCETVqPKJfCsT9SEkbeQjTDeicruQxihAluxZ8NPluzKZ93GeyRLbWAohXkvwIfDKKBv38BUht4KYx+FQcOYUyPf/EhItgJAhcI3vlg3yAtjs4SshSwfDErneCS4WW0hGLaeOqtwolt0Oda/FZRJnfWUBuAH/N/Q9nK8QP0MrpvYLETXP7JTLalZmNNq8Wvlmghhyfnpkm5HvZrR73ShvoJA6xlfZzVGCwWdohCHlW1PQMNQjRJkADYs816r8Ly3iKyFObyliLbFHoN7F3wGnwDvlOw3Oe7y/FnT7CRpzPVgNcoi42SR4zE1wlkOomUMv7LJAyMR+wvBfwvzdsrsz/HezIQy/xqCE9PJgVcHduBi2cLCCkNaghER5hK0i69ny65iXeKqSJ8gYBUe4mIQZR2VXtjn23AwrKkfdFJEAcxR8/NOjrjVr1gq3Se6RM3pA70mY18UUclU+7PMdJ/h3pU9fl7qHEqDuN/fj9ImrMvkF1G5eF7vifdmKgQHmk26VMVo+yecSKgzpU9ftpRKSoJC41xjn/YTquYGge8T3URe7br/amS97uDXRL+vftFTP7OfAFv6M63G5n8rODaapJScEFTvLyjepnjFN7ndyeHV6iC3Zzwdp/RSGyk1UUHqjjSJOuvi2ERl6D/nDQWxE+YzY3dmaNWvW/jr7JcAAj0e1BA7EkwQAAAAASUVORK5CYII=","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA0tJREFUeNrsmM9LVFEUx30zY2pl/oiiH6YxGv2gUJKkoFCCbFFgVH9AFLSefQtdtpxF0CqalSuJiKCwwIToBxEK1U4Rg7QfmFNajlpO3wPfkcPlPZ3mvXHM7oEPZ+6d89475917zz33FRVZsWLFihUrVtaOONkYpdPpENQGUAmqQDWoBTvZrgCbwEbqUrCeWj8jDX6AGTANvpNvYBJ8Au+pJ8mU4zi/lvMxkmXA90ALgynL9gX4lDnwE7wC7UEFsg9s8fjvI7gL3vLhMipHwWmOlJZ50A8eg68gDKLgLNhv2K4j0cBeDabWUNpd7oNqj2v2gBfKdhKc8Zq6oNPjGUP5DmQMbFc2YVABHNXXDOZpHzPuWQ5Kjb7uXAMJ+YjvARbhuGpfB1/AhcVM4jivoQbZfKQcPgw1ArqNez7M1Rk/gYwY7eOgGFw0+iUDpcCY6jsGNoNTCKpG9U/k6kzERyDzRjtMvQPOHYQuYQCSsmfBb5fnymI+wnUmKbahEIF4peAT4I3RN+5hK4HcCWIdh4qCEydPtv9XIJE8BDIMbvDeskFeAbs8bKVkibMskd8HwNWVDiSt0qmjnBtF2o2r/1pcFnHGVhLALdi/o+3JXAPxM7VK1H4hQS2wOe2SzYqNl7agMl8qiCnnZ0T2Gu0eVrs3jf56BlLH+iqzOUox+BIvYVjZ1uS1DPUoUSZA/TLXtSv7a8vYSonTW4haS+QpiLrYO+A8+KBsZ8Blj/vXgh4/RWO2B6shThE3mQLPuAnOcgo1c+qFXBKELOznLP+lzD8kuzvLfzcZxvRrCCqQXh6syrgbr4QsHqwQSHtQgUR4hK0i2/jmt7It9VQ5T5AlDDjMZBJiHZXJbHMcuRQdlaNukkiBOQo+/+1R14oVK/nbJBvljL5a/PFTa10Cu9fa6MjXk9alRmgpG45uY6Gc76Nj4sQI2yKtLrYd/K7VR92q7jGg+jsKGYh8WLutHK5zsR1Qzss1A+oeneravkIedROgTd4o9DkPmybszv08u4huUv89oU4W+syepGNtLFXibjaZtUGdXE1ZKyNxjkqlqplMkY/cCU6vBNurJpBBOh2j7mJ/zMU2Rvsu6phxj8zIDtod2ooVK1b+KfkjwAC9JXx/mwsoAgAAAABJRU5ErkJggg=="];var r={back:false,color:"#FFFFFF",fontFamily:"Arial,sans-serif",fontSize:15,fontStyle:"normal",fontWeight:"normal",state:true,textDecoration:"none"};var y;var B;var x;var j;var f=[];function l(D,G){D="jwplayercaptions"+D;if(G!==undefined){var H=D+"="+G+"; expires=Wed, 1 Jan 2020 00:00:00 UTC; path=/";document.cookie=H}else{var F=document.cookie.split(";");for(var E=0;E<F.length;E++){var H=F[E];while(H.charAt(0)==" "){H=H.substring(1,H.length)}if(H.indexOf(D)==0){return H.substring(D.length+1,H.length)}}}return null}var A=function(){if(f.length>1){B.show();y.hide();try{d.getPlugin("display").hide();d.getPlugin("dock").hide()}catch(D){}}else{if(f.length==1){r.state=!r.state;l("state",r.state);e()}}};function s(D){console.log("CAPTIONS("+D+")")}function q(D){y.resize(i[0],Math.round(i[1]*0.94))}function p(D){x="idle";e()}function m(){try{document.createEvent("TouchEvent");return true}catch(D){return false}}function t(D){j=0;f=[];y.update(0);B.hide();try{d.getPlugin("display").show();d.getPlugin("dock").show()}catch(I){}try{d.getPlugin("display").show();d.getPlugin("dock").show()}catch(I){}var K=d.getPlaylist()[D.index];if(K["captions.files"]){var M=false;var E=K["captions.files"].split(",");if(K["captions.labels"]){var H=K["captions.labels"].split(",")}for(var G=0;G<E.length;G++){var J={file:E[G]};if(H&&H[G]){J.label=H[G]}else{J.label=E[G].substring(E[G].lastIndexOf("/")+1,E[G].indexOf(".")-1)}if(r.label==J.label){M=true;j=f.length;C(J.file)}f.push(J)}if(M==false){r.state=false}var L=[{label:"(Off)"}];for(var F=0;F<f.length;F++){L.push({label:f[F].label})}if(r.state){B.populate(L,j+1)}else{B.populate(L,0)}}else{if(K["captions.file"]){f.push({file:K["captions.file"]});C(f[0].file)}}e()}function C(E){var D=new a.captions.srt(w,s);D.load(E)}function w(D){y.populate(D);f[j].data=D;e()}function k(D){x="playing";e()}function v(D){if(r.file){d.getPlaylist()[0]["captions.file"]=r.file}if(r.files){d.getPlaylist()[0]["captions.files"]=r.files}if(r.labels){d.getPlaylist()[0]["captions.labels"]=r.labels}}function e(){if(!f.length){d.getPlugin("dock").setButton("captions",A,o[0]);y.hide()}else{if(r.state){d.getPlugin("dock").setButton("captions",A,o[2]);if(x=="playing"){y.show()}else{y.hide()}}else{d.getPlugin("dock").setButton("captions",A,o[1]);y.hide()}}}this.resize=function(E,D){if(d.getRenderingMode()=="flash"||m()){return}B.resize(E,D);y.resize(E,Math.round(D*0.94));i=[E,D]};function g(){if(d.getRenderingMode()=="flash"||m()){return}d.onPlaylist(v);d.onPlaylistItem(t);d.onIdle(p);d.onPlay(k);d.onTime(c);try{d.getPlugin("controlbar").onHide(q);d.getPlugin("controlbar").onShow(z)}catch(D){}if(l("state")!==null){if(l("state")=="true"){r.state=true}else{r.state=false}}if(l("label")!==null){r.label=l("label")}for(var E in h){r[E]=h[E]}y=new a.captions.renderer(r,u);B=new a.captions.selector(n,u);e()}d.onReady(g);function n(E){B.hide();try{d.getPlugin("display").show();d.getPlugin("dock").show()}catch(D){}if(E>0){r.state=true;j=E-1;r.label=f[j].label}else{r.state=false}l("label",r.label);l("state",r.state);if(f[j].data){y.populate(f[j].data)}else{C(f[j].file)}e()}function z(D){var E=D.boundingRect.y;if(E>0){y.resize(i[0],Math.round(E*0.94))}}function c(D){y.update(D.position)}};a.captions={};a().registerPlugin("captions",b,"./captions.swf")})(jwplayer);(function(a){a.captions.renderer=function(p,g){var i;var o;var f;var j;var n;var k;var b="visible";var e;this.hide=function(){c({display:"none"})};this.populate=function(q){j=-1;o=q;d()};function l(q){f.innerHTML=q;if(q==""){b="hidden"}else{b="visible"}setTimeout(m,20)}this.resize=function(r,q){e=r;i=q;m()};function m(){var r=Math.round(p.fontSize*Math.pow(e/400,0.6));var q=Math.round(r*1.4);c({fontSize:r+"px",lineHeight:q+"px",visibility:b});var t=Math.round(e/2-f.clientWidth/2);var s=Math.round(i-f.clientHeight);c({left:t+"px",top:s+"px"})}function d(){var r=-1;for(var q=0;q<o.length;q++){if(o[q]["begin"]<=k&&(q==o.length-1||o[q+1]["begin"]>=k)){r=q;break}}if(r==-1){l("")}else{if(r!=j){j=r;l(o[q]["text"])}}}function h(){f=document.createElement("div");g.appendChild(f);c({color:"#"+p.color.substr(-6),display:"block",fontFamily:p.fontFamily,fontStyle:p.fontStyle,fontWeight:p.fontWeight,height:"auto",margin:"0 0 0 0",padding:"3px 9px",position:"absolute",textAlign:"center",textDecoration:p.textDecoration,whiteSpace:"nowrap",width:"auto"});if(p.back){c({background:"#000"})}else{c({textShadow:"-2px 0px 1px #000,2px 0px 1px #000,0px -2px 1px #000,0px 2px 1px #000,-1px 1px 1px #000,1px 1px 1px #000,1px -1px 1px #000,1px 1px 1px #000"})}}h();this.show=function(){c({display:"block"});m()};function c(q){for(var r in q){f.style[r]=q[r]}}this.update=function(q){k=q;if(o){d()}}}})(jwplayer);(function(a){a.captions.selector=function(r,j){var p;var i;var e;var b;var k;var q=[];function c(s,u){var t=[];if(s>0){t.push("url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAABCAYAAAB3yoT0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAC5JREFUeNpi/P//PxMDAwM7EuZA4+PC6OpYGEbBKCAf/APinzjwDzxyKGoAAgwAImkVA8XMdAAAAAAASUVORK5CYII=) no-repeat 0 0")}if(s==p){t.push("url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASlJREFUeNrsVU1vwjAMrTOqCcalTLtyYj+SX8Cf5LQrYlxYK1RIcKQXybLyVbbDDlh6SiS778WJ7TbN0wpGNUHOuWgcEblfCYCYErGB3OWEqHBio0CC3CpEM5plEjDwtwIGPk84ClyDSFEApw/kr4wF4w1rizBP2jN+sHq78rdWZzFLXJsBmSddMd4ZHWOOmIFxYhxFRhZXlxZQd9/i5J78k7FlbODfM3bYXwCf1c1zyCxMRQadIm+w38K3EO9DsYdsCiJzRS5F1jnynECtHUoBKQEnSnHAnWvbwzeKB64SkOQ9qmWnRMIjnxCTFKFIH3jRF/TAMlKmH4wvUabfjDMq6cYVZEsCjzTaJXSzbrTcLJo8KqbOIitmzFgz7P7PuP7LH87TinYXYABVOIZoLrBbUwAAAABJRU5ErkJggg==) no-repeat 20px 0")}if(u){t.push("url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAAYCAYAAABTE9enAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOJJREFUeNrs3NEKgzAMQFE7/P9fztjLqNJsWrsy5FwYwzYmrb34FktELBVl2fLt+sp9PTE9tWau+UitaMwfGTt73Zu3t9bMNae51sYDL9X/frw0YrLYETlKsr4r9Ubk6Nl36yCi+u3nI4kdneNT7IgcMWnfr2cca+NNUpJDPzs3IsedamcHFMlhno37xdw/126+sR8LcCMIDUIDhAYIDRAahAYIDRAaIDRAaBAaIDRAaIDQAKFBaIDQAKGBsex7Cj9112qS1STbkyMm7vst9KZzthrzGYPxtXzG4Pqa01xPAQYALYzIMaVqNUoAAAAASUVORK5CYII=) no-repeat 0 1px")}g(q[s].button,{background:t.join(",")})}function n(u){var s=p;var t=o(u);p=t;c(s);c(t);r(t)}function d(s){if(s.target==i||s.target==e){r(p)}}this.hide=function(){i.style.opacity=0;setTimeout(function(){i.style.display="none"},200)};function o(t){for(var s=0;s<q.length;s++){if(t.target==q[s].button){return s}}}function h(s){c(o(s),true)}function f(s){c(o(s),false)}this.populate=function(s,v){q=s;p=v;k.innerHTML="";for(var u=0;u<s.length;u++){var t=document.createElement("li");t.innerHTML=s[u].label;q[u].button=t;k.appendChild(t);g(t,{color:"#FFF",cursor:"pointer",display:"block",font:"12px/25px Arial,sans-serif",fontWeight:"bold",height:"25px",textShadow:"1px 1px 0 #000",textAlign:"center",width:"180px"});t.onclick=n;t.onmouseover=h;t.onmouseout=f;c(u)}m()};this.resize=function(t,s){b=[t,s];m()};function m(){g(i,{height:b[1]+"px",width:b[0]+"px"});g(e,{left:(b[0]-50)+"px"});g(k,{left:Math.round(b[0]/2-90)+"px",top:Math.round(b[1]/2-q.length*12.5)+"px"})}function l(){i=document.createElement("div");i.onclick=d;j.appendChild(i);g(i,{backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAGQCAYAAACJccGfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJlJREFUeNrskksKwDAIRFV6/+v1Nv0sQymkBD+jVchGdOY5hIlop6GEHrXd75hOnNqNIA5Y0cQaPisLGiZgQbbzFdhrS0/ksUUhhb02aKW0Rh6w0i55OCqRdmLd6Mb4C7nzKJkYCqkPh4nLv0QXNIJsg9BRVkpz+Nj6oKOQ+qSuYZuH9HVCcka4qCEgiYnLtWze+Garfu0lwAArHE4YPfyZuAAAAABJRU5ErkJggg==)",backgroundRepeat:"no-repeat",backgroundSize:"100% 100%",cursor:"pointer",display:"none",opacity:0,position:"relative",webkitTransition:"opacity 150ms linear",MozTransition:"opacity 150ms linear",oTransition:"opacity 150ms linear",transition:"opacity 150ms linear"});e=document.createElement("div");e.onclick=d;i.appendChild(e);g(e,{background:"transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA0xJREFUeNrsVz1IW1EUjtKtQyh0yRQr2kFCIlHB7cUMBhpCXKKY5UVBnfwZWgUppFvHOEUkg84ucXBxeg1ChiKmUCQ0EV+K1Q4BnyKImujtOem95fp8pvTHeIX7weHlnXNeON+955x7rs0mISEhISEhISEh0UgQQoIgOyBvfuPnBvkM8lZEEiHCYWpqioA6buHnrVQqVeY3MzODfglhiFxfX1eICX19fRikypF4fnV1VTX7oQnELgSR9fX198QC/f39p2D2wM+nZ2dnJbN9aGiIEVFE2RRlcHCQwIrfIjMxMVG+vLz8aNZHIhFGQigimBqK1+vNn5yckHo4Pz8n4McI5EQicYNQR0fHzt7eniWJ3d1d4na7eRJ2m8Cw+/3+L1ZEVFV9NCSwOz07PDwsWhEBPenu7r7RzUQl8bJarX6tVyMXFxckEAgUhN0RiNEP58mNtgUtl8RiMbK/v3+L0MjIiC4cGYjrlTlQbMVdXV21mnA6neTo6OguMuIAVv67Ocienh5W2Bis4nK5vlmlmlDnyNLS0ms+uPHxcRaggSc7dfOEQqFT3m92dla8AxGCJNvb23xwKGGTnxoMBkmhUCDz8/O8n1C1kuACs5x+KeImv4RNQkLiUd3ZNZAHaaPN//sPfT7fh4c4E5r/YfXjIAY91xJ17CjTnD5Bv9FBwlRnp7tJ6NPTqBTCO7gOc9Rya2uroes66e3txQA1RVHI5OTktNlOdQoI3kMSeC+Zm5vDUz8MujQckEhWQ30+n89x08C9EolvbGyk6QzlpKJDMDoSWV1d1Xg7+gOIgkbYoVwuhys/3dbWhsEjQTzp9a2tLYPtDOjTfxLTk78lk81mB+DxDgTvHs6mpqYX7e3tGry3mO3sm0wm40P74uJiaXh4eKFYLJbgu07QLYyNjbWwMqPPgUbUyBrcMWywwLX8xndN036NI5ubm7wddysGxNZGR0cxuBWHw9GZTCYXjo+PMfhP+D00iRrRaDS6kkqlShyhe08v1TB+1vrBwcEy3sGBDKZPbZLFdKJ2A1IG7TpNLVbUBqQgNgl08pTL5RxrApFIBPVaI7ueSsd0fvDTuPYbp3aDGyDt1IeN+Ozu7uH0ekOKXUJCQkJCguKHAAMAvduPUQLB93IAAAAASUVORK5CYII=)",cursor:"pointer",position:"absolute",left:"0px",top:"0px",margin:"0px",padding:"0px",display:"block",width:"50px",height:"50px"});k=document.createElement("ul");i.appendChild(k);g(k,{display:"block",height:"auto",listStyle:"none",margin:"0px",padding:"0px",position:"absolute",width:"180px"})}l();this.show=function(){i.style.display="block";setTimeout(function(){i.style.opacity=1},20)};function g(s,t){for(var u in t){s.style[u]=t[u]}}}})(jwplayer);(function(a){a.captions.srt=function(g,b){var d;var c;function h(k){if(k==0){b("Crossdomain loading denied: "+c)}else{if(k==404){b("SRT File not found: "+c)}else{b("Error "+k+" loading SRT file: "+c)}}}this.load=function(l){c=l;try{d.open("GET",l,true);d.send(null)}catch(k){b("Error loading SRT File: "+l)}};function f(n){_captions=[{begin:0,text:""}];n=n.replace(/^\s+/,"").replace(/\s+$/,"");var m=n.split("\r\n\r\n");if(m.length==1){m=n.split("\n\n")}for(var k=0;k<m.length;k++){var l=j(m[k]);if(l.begin&&l.text){_captions.push(l);if(l.end){_captions.push({begin:l.end,text:""});delete l.end}}}if(_captions.length>1){g(_captions)}else{b("Invalid SRT file: "+c)}}function j(o){var n={};var p=o.split("\r\n");if(p.length==1){p=o.split("\n")}try{var l=p[1].indexOf(" --> ");if(l>0){n.begin=i(p[1].substr(0,l));n.end=i(p[1].substr(l+5))}if(p[2]){n.text=p[2];for(var m=3;m<p.length;m++){n.text+="<br/>"+p[m]}}}catch(k){}return n}function i(k){k=k.replace(",",".");var m=k.split(":");var l=0;if(k.substr(-1)=="s"){l=Number(k.substr(0,k.length-1))}else{if(k.substr(-1)=="m"){l=Number(k.substr(0,k.length-1))*60}else{if(k.substr(-1)=="h"){l=Number(k.substr(0,k.length-1))*3600}else{if(m.length>1){l=Number(m[m.length-1]);l+=Number(m[m.length-2])*60;if(m.length==3){l+=Number(m[m.length-3])*3600}}else{l=Number(k)}}}}return l}function e(){d=new XMLHttpRequest();d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){f(d.responseText)}else{h(d.status)}}}}e()}})(jwplayer);
