]> git.sesse.net Git - vlc/blob - projects/mozilla/test.html
mozilla/test.html: kill monitorTimer use MediaPlayer* events only
[vlc] / projects / mozilla / test.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2 <HTML>
3 <TITLE>VLC Plugin test page</TITLE>
4 <STYLE>
5   .inputTrackerInput {
6         height:20;
7         width:30;
8         font-family : Arial, Helvetica, sans-serif;
9         font-size : 12px;
10   }
11 </STYLE>
12
13 <SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/lib/LibCrossBrowser.js"></SCRIPT>
14 <SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/lib/EventHandler.js"></SCRIPT>
15 <SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/core/form/Bs_FormUtil.lib.js"></SCRIPT>
16 <SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/components/slider/Bs_Slider.class.js"></SCRIPT>
17
18 <SCRIPT language="JavaScript"><!--
19 function init()
20 {
21     inputTracker = new Bs_Slider();
22     if (inputTracker)
23     {
24         inputTracker.attachOnChange(onInputTrackerChange);
25         inputTracker.attachOnSlideStart(onInputTrackerScrollStart);
26         inputTracker.attachOnSlideEnd(onInputTrackerScrollEnd);
27         inputTracker.width         = 530;
28         inputTracker.height        = 15;
29         inputTracker.minVal        = 0;
30         inputTracker.maxVal        = 1.0;
31         inputTracker.valueDefault  = 0;
32         inputTracker.valueInterval = 1/530;
33         inputTracker.setDisabled(true);
34         inputTracker.imgDir   = 'blueshoes-4.5/javascript/components/slider/img/';
35         inputTracker.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat');
36         inputTracker.setArrowIconLeft('aluminumalloyvolcanic/horizontal_backgroundLeft.gif', 2, 19);
37         inputTracker.setArrowIconRight('aluminumalloyvolcanic/horizontal_backgroundRight.gif', 2, 19);
38         inputTracker.setSliderIcon('aluminumalloyvolcanic/horizontal_knob.gif', 15, 19);
39         inputTracker.useInputField = 0;
40         inputTracker.draw('inputTrackerDiv');
41     }
42
43     if( navigator.appName.indexOf("Microsoft Internet")==-1 )
44     {
45         onVLCPluginReady()
46     }
47     else if( document.readyState == 'complete' )
48     {
49         onVLCPluginReady();
50     }
51     else
52     {
53         /* Explorer loads plugins asynchronously */
54         document.onreadystatechange=function()
55         {
56             if( document.readyState == 'complete' )
57             {
58                 onVLCPluginReady();
59             }
60         }
61     }
62 }
63
64 function getVLC(name)
65 {
66     if (window.document[name])
67     {
68         return window.document[name];
69     }
70     if (navigator.appName.indexOf("Microsoft Internet")==-1)
71     {
72         if (document.embeds && document.embeds[name])
73             return document.embeds[name];
74     }
75     else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
76     {
77         return document.getElementById(name);
78     }
79 }
80
81 function registerVLCEvent(event, handler)
82 {
83     var vlc = getVLC("vlc");
84
85     if (vlc) {
86         if (vlc.attachEvent) {
87             // Microsoft
88             vlc.attachEvent (event, handler);
89         } else if (vlc.addEventListener) {
90             // Mozilla: DOM level 2
91             vlc.addEventListener (event, handler, true);
92         } else {
93             // DOM level 0
94             eval("vlc.on" + event + " = handler");
95         }
96     }
97 }
98
99 function unregisterVLCEvent(event, handler)
100 {
101     var vlc = getVLC("vlc");
102
103     if (vlc) {
104         if (vlc.detachEvent) {
105             // Microsoft
106             vlc.detachEvent (event, handler);
107         } else if (vlc.removeEventListener) {
108             // Mozilla: DOM level 2
109             vlc.removeEventListener (event, handler, true);
110         } else {
111             // DOM level 0
112             eval("vlc.on" + event + " = null");
113         }
114     }
115 }
116
117 // JS VLC API callbacks
118 function handleMediaPlayerMediaChanged()
119 {
120     document.getElementById("info").innerHTML = "Media Changed";
121 }
122
123 function handle_MediaPlayerNothingSpecial()
124 {
125     document.getElementById("state").innerHTML = "Idle...";
126 }
127
128 function handle_MediaPlayerOpening()
129 {
130     onOpen();
131 }
132
133 function handle_MediaPlayerBuffering(val)
134 {
135     document.getElementById("info").innerHTML = val + "%";
136 }
137
138 function handle_MediaPlayerPlaying()
139 {
140         alert(" Playing ");
141     onPlay();
142 }
143
144 function handle_MediaPlayerPaused()
145 {
146         alert(" Paused ");
147         onPause();
148 }
149
150 function handle_MediaPlayerStopped()
151 {
152     onStop();
153 }
154
155 function handle_MediaPlayerForward()
156 {
157     document.getElementById("state").innerHTML = "Forward...";
158 }
159
160 function handle_MediaPlayerBackward()
161 {
162     document.getElementById("state").innerHTML = "Backward...";
163 }
164
165 function handle_MediaPlayerEndReached()
166 {
167     onEnd();
168 }
169
170 function handle_MediaPlayerEncounteredError()
171 {
172     onError();
173 }
174
175 function handle_MediaPlayerTimeChanged(time)
176 {
177     var vlc = getVLC("vlc");
178     var info = document.getElementById("info");
179     if( vlc )
180     {
181         var mediaLen = vlc.input.length;
182         if( mediaLen > 0 )
183         {
184             // seekable media
185             info.innerHTML = formatTime(time)+"/"+formatTime(mediaLen);
186         }
187     }
188 }
189
190 function handle_MediaPlayerPositionChanged(val)
191 {
192     // set javascript slider to correct position
193 }
194
195 function handle_MediaPlayerSeekableChanged(val)
196 {
197     setSeekable(val);
198 }
199
200 function handle_MediaPlayerPausableChanged(val)
201 {
202     setPauseable(val);
203 }
204
205 function handle_MediaPlayerTitleChanged(val)
206 {
207     //setTitle(val);
208     document.getElementById("info").innerHTML = "Title: " + val;
209 }
210
211 function handle_MediaPlayerLengthChanged(val)
212 {
213     //setMediaLength(val);
214 }
215
216 // VLC Plugin
217 function onVLCPluginReady()
218 {
219     registerVLCEvent("MediaPlayerMediaChanged", handleMediaPlayerMediaChanged);
220     registerVLCEvent("MediaPlayerNothingSpecial", handle_MediaPlayerNothingSpecial);
221     registerVLCEvent("MediaPlayerOpening", handle_MediaPlayerOpening);
222     registerVLCEvent("MediaPlayerBuffering", handle_MediaPlayerBuffering);
223     registerVLCEvent("MediaPlayerPlaying", handle_MediaPlayerPlaying);
224     registerVLCEvent("MediaPlayerPaused", handle_MediaPlayerPaused);
225     registerVLCEvent("MediaPlayerStopped", handle_MediaPlayerStopped);
226     registerVLCEvent("MediaPlayerForward", handle_MediaPlayerForward);
227     registerVLCEvent("MediaPlayerBackward", handle_MediaPlayerBackward);
228     registerVLCEvent("MediaPlayerEndReached", handle_MediaPlayerEndReached);
229     registerVLCEvent("MediaPlayerEncounteredError", handle_MediaPlayerEncounteredError);
230     registerVLCEvent("MediaPlayerTimeChanged", handle_MediaPlayerTimeChanged);
231     registerVLCEvent("MediaPlayerPositionChanged", handle_MediaPlayerPositionChanged);
232     registerVLCEvent("MediaPlayerSeekableChanged", handle_MediaPlayerSeekableChanged);
233     registerVLCEvent("MediaPlayerPausableChanged", handle_MediaPlayerPausableChanged);
234     registerVLCEvent("MediaPlayerTitleChanged", handle_MediaPlayerTitleChanged);
235     registerVLCEvent("MediaPlayerLengthChanged", handle_MediaPlayerLengthChanged);
236 }
237
238 function close()
239 {
240     unregisterVLCEvent("MediaPlayerMediaChanged", handleMediaPlayerMediaChanged);
241     unregisterVLCEvent("MediaPlayerNothingSpecial", handle_MediaPlayerNothingSpecial);
242     unregisterVLCEvent("MediaPlayerOpening", handle_MediaPlayerOpening);
243     unregisterVLCEvent("MediaPlayerBuffering", handle_MediaPlayerBuffering);
244     unregisterVLCEvent("MediaPlayerPlaying", handle_MediaPlayerPlaying);
245     unregisterVLCEvent("MediaPlayerPaused", handle_MediaPlayerPaused);
246     unregisterVLCEvent("MediaPlayerStopped", handle_MediaPlayerStopped);
247     unregisterVLCEvent("MediaPlayerForward", handle_MediaPlayerForward);
248     unregisterVLCEvent("MediaPlayerBackward", handle_MediaPlayerBackward);
249     unregisterVLCEvent("MediaPlayerEndReached", handle_MediaPlayerEndReached);
250     unregisterVLCEvent("MediaPlayerEncounteredError", handle_MediaPlayerEncounteredError);
251     unregisterVLCEvent("MediaPlayerTimeChanged", handle_MediaPlayerTimeChanged);
252     unregisterVLCEvent("MediaPlayerPositionChanged", handle_MediaPlayerPositionChanged);
253     unregisterVLCEvent("MediaPlayerSeekableChanged", handle_MediaPlayerSeekableChanged);
254     unregisterVLCEvent("MediaPlayerPausableChanged", handle_MediaPlayerPausableChanged);
255     unregisterVLCEvent("MediaPlayerTitleChanged", handle_MediaPlayerTitleChanged);
256     unregisterVLCEvent("MediaPlayerLengthChanged", handle_MediaPlayerLengthChanged);
257 }
258
259 //--></SCRIPT>
260
261 <BODY onLoad="init();" onClose="close();">
262 <TABLE>
263 <TR><TD colspan="2">
264 MRL:
265 <INPUT size="90" id="targetTextField" value="">
266 <INPUT type=submit value="Go" onClick="doGo(document.getElementById('targetTextField').value);">
267 <INPUT type=submit value="Add" onClick="doAdd(document.getElementById('targetTextField').value);">
268 </TD></TR>
269 <TR><TD align="center" colspan="2">
270 <!--
271 Insert VideoLAN.VLCPlugin.2
272 -->
273 <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
274         width="640"
275         height="480"
276         id="vlc"
277         events="True">
278 <param name="MRL" value="" />
279 <param name="ShowDisplay" value="True" />
280 <param name="AutoLoop" value="False" />
281 <param name="AutoPlay" value="False" />
282 <param name="Volume" value="50" />
283 <param name="toolbar" value="true" />
284 <param name="StartTime" value="0" />
285 <EMBED pluginspage="http://www.videolan.org"
286        type="application/x-vlc-plugin"
287        version="VideoLAN.VLCPlugin.2"
288        width="640"
289        height="480"
290        toolbar="true"
291        text="Waiting for video"
292        name="vlc">
293 </EMBED>
294 </OBJECT>
295 </TD></TR>
296 <TR><TD colspan="2">
297 <TABLE><TR>
298 <TD valign="top" width="550">
299 <!--
300 Insert Slider widget
301 -->
302 <DIV id="inputTrackerDiv"</DIV>
303 </TD><TD width="15%">
304 <DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV>
305 <DIV id="state" style="text-align:center">Stopped...</DIV>
306 </TD></TR></TABLE>
307 </TD></TR>
308 <TR><TD>
309 <INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause();'>
310 <INPUT type=button value="Stop" onClick='doStop();'>
311 &nbsp;
312 <INPUT type=button value=" << " onClick='doPlaySlower();'>
313 <INPUT type=button value="Reverse" onClick='doReverse();'>
314 <INPUT type=button value=" >> " onClick='doPlayFaster();'>
315 &nbsp;
316 <INPUT type=button value="Fullscreen" onClick='getVLC("vlc").video.toggleFullscreen();'>
317 <INPUT type=button value="Version" onClick='alert("vlc " + getVLC("vlc").VersionInfo);'>
318 <INPUT type=button value=" State " onClick='alert("state: " + getVLC("vlc").input.state);'>
319 </TD><TD align="right">
320 <SPAN style="text-align:center">Volume:</SPAN>
321 <INPUT type=button value=" - " onClick='updateVolume(-10)'>
322 <SPAN id="volumeTextField" style="text-align:center">--</SPAN>
323 <INPUT type=button value=" + " onClick='updateVolume(+10)'>
324 <INPUT type=button value="Mute" onClick='getVLC("vlc").audio.toggleMute();'>
325 </TD>
326 </TR>
327 <TR><TD>Playlist:
328 <INPUT type=button value="Prev" onClick='getVLC("vlc").playlist.prev();'>
329 <INPUT type=button value="Next" onClick='getVLC("vlc").playlist.next();'>
330 <INPUT type=button value="Clear All" onClick='doPlaylistClearAll();'>
331     Aspect Ratio:
332     <SELECT readonly onChange='doAspectRatio(this.value)'>
333       <OPTION value="default">Default</OPTION>
334       <OPTION value="1:1">1:1</OPTION>
335       <OPTION value="4:3">4:3</OPTION>
336       <OPTION value="16:9">16:9</OPTION>
337       <OPTION value="221:100">221:100</OPTION>
338       <OPTION value="5:4">5:4</OPTION>
339     </SELECT>
340 </TD><TD align="right">
341 <INPUT type=button id="itemCount" value=" Items 0 " onClick='doItemCount();'>
342 <INPUT size=4 value="" id="removeid"><INPUT type=submit value="Delete" onClick="doRemoveItem(document.getElementById('removeid').value);">
343 </TD>
344 </TR>
345 <TR><TD>Audio Channel:
346   <SELECT readonly onClick='doAudioChannel(this.value);'>
347     <OPTION value=1>Stereo</OPTION>
348     <OPTION value=2>Reverse Stereo</OPTION>
349     <OPTION value=3>Left</OPTION>
350     <OPTION value=4>Right</OPTION>
351     <OPTION value=5>Dolby</OPTION>
352   </SELECT>
353 </TD>
354 <TD>
355 <INPUT type=button value="current channel" onClick='alert(getVLC("vlc").audio.channel);'>
356 </TD>
357 </TR>
358 <TR><TD> Audio Track:
359 <INPUT type=button value=" + " onClick='doAudioTrack(1);'>
360 <SPAN id="trackTextField" style="text-align:center">--</SPAN>
361 <INPUT type=button value=" - " onClick='doAudioTrack(-1);'>
362 <INPUT type=button value="current track" onClick='alert(getVLC("vlc").audio.description(vlc.audio.track));'>
363 <INPUT type=button value="number of track" onClick='alert(getVLC("vlc").audio.count);'>
364 </TD>
365 <TD>
366 <INPUT type=button value="set slider" onClick='doSetSlider();'>
367 <INPUT type=button value="get position" onClick='doGetPosition();'>
368 </TD>
369 </TR>
370 <TR>
371 <TD>Video Subtitle:
372     <INPUT type=button value=" + " onClick='doSubtitle(1);'>
373     <SPAN id="spuTextField" style="text-align:center">--</SPAN>
374     <INPUT type=button value=" - " onClick='doSubtitle(-1);'>
375     <INPUT type=button value="current subtitle" onClick='alert(getVLC("vlc").subtitle.description(vlc.subtitle.track));'>
376     <INPUT type=button value="number of subtitle" onClick='alert(getVLC("vlc").subtitle.count);'>
377 </TD>
378 </TR>
379 <TR>
380 <TD>Deinterlacing:
381     <INPUT type=button value="BLEND" onClick='getVLC("vlc").video.deinterlace.enable("blend");'>
382     <INPUT type=button value="  X  " onClick='getVLC("vlc").video.deinterlace.enable("x");'>
383     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.deinterlace.disable();'>
384 </TD>
385 </TR>
386 <TR>
387 <TD>Marquee video filter:
388     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.marquee.enable();'>
389     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.marquee.disable();'>
390     <INPUT size=4 value="" id="marqueeIntValue">
391     <SELECT readonly onClick="doMarqueeOption(this.value,document.getElementById('marqueeIntValue').value);">
392         <OPTION value=1>Color</OPTION>
393         <OPTION value=2>Opacity</OPTION>
394         <OPTION value=3>Position</OPTION>
395         <OPTION value=4>Refresh</OPTION>
396         <OPTION value=5>Size</OPTION>
397         <OPTION value=6>Text</OPTION>
398         <OPTION value=7>Timeout</OPTION>
399         <OPTION value=8>X</OPTION>
400         <OPTION value=9>Y</OPTION>
401     </SELECT>
402 </TD>
403 </TR>
404 <TR>
405 <TD>Logo video filter:
406     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.logo.enable();'>
407     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.logo.disable();'>
408     <INPUT size=4 value="" id="logoIntValue">
409     <SELECT readonly onClick="doLogoOption(this.value,document.getElementById('logoIntValue').value);">
410         <OPTION value=1>File</OPTION>
411         <OPTION value=2>Position</OPTION>
412         <OPTION value=3>Opacity</OPTION>
413         <OPTION value=4>Repeat</OPTION>
414         <OPTION value=5>Delay</OPTION>
415         <OPTION value=6>X</OPTION>
416         <OPTION value=7>Y</OPTION>
417     </SELECT>
418 </TD>
419 </TR>
420 <TR>
421 <TD>
422     <INPUT type=button id="telx" value="Teletext off" onClick='doToggleTeletext();'>
423     Teletext page:
424     <INPUT size=4 value="100" id="telxPage" onClick='doTelxPage(document.getElementById("telxPage").value);'>
425 </TD>
426 </TR>
427 </TABLE>
428 <SCRIPT language="javascript">
429 <!--
430
431 var rate = 0;
432 var prevState = 0;
433 var inputTracker;
434 var inputTrackerScrolling = false;
435 var inputTrackerIgnoreChange = false;
436 var telxState = false;
437 var canPause = true;
438 var canSeek = true;
439
440 function setPauseable(val)
441 {
442     canPause = val;
443 }
444
445 function setSeekable(val)
446 {
447     canSeek = val;
448 }
449
450 function doSetSlider()
451 {
452     var vlc = getVLC("vlc");
453
454     // set slider to new position
455     if( vlc )
456         vlc.input.time = (vlc.input.length/2);
457 }
458
459 function doGetPosition()
460 {
461     var vlc = getVLC("vlc");
462
463     // set slider to new position
464     if (vlc)
465         alert( "position is " + vlc.input.time);
466 }
467
468 function doReverse(rate)
469 {
470     var vlc = getVLC("vlc");
471     if( vlc )
472         vlc.input.rate = -1.0 * vlc.input.rate;
473 }
474
475 function doAudioChannel(value)
476 {
477     var vlc = getVLC("vlc");
478     if( vlc )
479         vlc.audio.channel = parseInt(value);
480 }
481
482 function doAudioTrack(value)
483 {
484     var vlc = getVLC("vlc");
485     if( vlc )
486     {
487         vlc.audio.track = vlc.audio.track + value;
488         document.getElementById("trackTextField").innerHTML = vlc.audio.track;
489     }
490 }
491
492 function doAspectRatio(value)
493 {
494     var vlc = getVLC("vlc");
495     if( vlc )
496         vlc.video.aspectRatio = value;
497 }
498
499 function doSubtitle(value)
500 {
501     var vlc = getVLC("vlc");
502     if( vlc )
503     {
504         vlc.subtitle.track = vlc.subtitle.track + value;
505         document.getElementById("spuTextField").innerHTML = vlc.subtitle.track;
506     }
507 }
508
509 function doTelxPage(value)
510 {
511     var vlc = getVLC("vlc");
512     if( vlc )
513         vlc.video.teletext = parseInt(value);
514 }
515
516 function doToggleTeletext()
517 {
518     var vlc = getVLC("vlc");
519
520     if( vlc )
521     {
522         vlc.video.toggleTeletext();
523         if (telxState)
524         {
525             document.getElementById("telx").innerHTML = "Teletext on";
526             telxState = true;
527         }
528         else
529         {
530             document.getElementById("telx").innerHTML = "Teletext off";
531             telxState = false;
532         }
533     }
534 }
535
536 function doItemCount()
537 {
538     var vlc = getVLC("vlc");
539     if( vlc )
540     {
541         var count = vlc.playlist.items.count;
542         document.getElementById("itemCount").value = " Items " + count + " ";
543     }
544 }
545
546 function doRemoveItem(item)
547 {
548     var vlc = getVLC("vlc");
549     if( vlc )
550         vlc.playlist.items.remove(item);
551 }
552
553 function doPlaylistClearAll()
554 {
555     var vlc = getVLC("vlc");
556     if( vlc )
557     {
558         vlc.playlist.items.clear();
559         while( vlc.playlist.items.count > 0)
560         {
561             // wait till playlist empties.
562         }
563         doItemCount();
564     }
565 }
566
567 function updateVolume(deltaVol)
568 {
569     var vlc = getVLC("vlc");
570     if( vlc )
571     {
572         vlc.audio.volume += deltaVol;
573         document.getElementById("volumeTextField").innerHTML = vlc.audio.volume+"%";
574     }
575 }
576
577 function formatTime(timeVal)
578 {
579     if( typeof timeVal != 'number' )
580         return "-:--:--";
581
582     var timeHour = Math.round(timeVal / 1000);
583     var timeSec = timeHour % 60;
584     if( timeSec < 10 )
585         timeSec = '0'+timeSec;
586     timeHour = (timeHour - timeSec)/60;
587     var timeMin = timeHour % 60;
588     if( timeMin < 10 )
589         timeMin = '0'+timeMin;
590     timeHour = (timeHour - timeMin)/60;
591     if( timeHour > 0 )
592         return timeHour+":"+timeMin+":"+timeSec;
593     else
594         return timeMin+":"+timeSec;
595 }
596
597 function doState()
598 {
599     var vlc = getVLC("vlc");
600     var newState = 0;
601
602     if( vlc )
603         newState = vlc.input.state;
604
605     if( newState == 0 )
606     {
607         // current media has stopped
608         onEnd();
609     }
610     else if( newState == 1 )
611     {
612         // current media is openning/connecting
613         onOpen();
614     }
615     else if( newState == 2 )
616     {
617         // current media is buffering data
618         onBuffer();
619     }
620     else if( newState == 3 )
621     {
622         // current media is now playing
623         onPlay();
624     }
625     else if( newState == 4 )
626     {
627         // current media is now paused
628         onPause();
629     }
630     else if( newState == 5 )
631     {
632         // current media has stopped
633         onStop();
634     }
635     else if( newState == 6 )
636     {
637         // current media has ended
638         onEnd();
639     }
640     else if( newState == 7 )
641     {
642         // current media encountered error
643         onError();
644     }
645 }
646
647 /* actions */
648
649 function doGo(targetURL)
650 {
651     var vlc = getVLC("vlc");
652
653     if( vlc )
654     {
655         vlc.playlist.items.clear();
656         while( vlc.playlist.items.count > 0 )
657         {
658             // clear() may return before the playlist has actually been cleared
659             // just wait for it to finish its job
660         }
661         var options = [":rtsp-tcp"];
662         var itemId = vlc.playlist.add(targetURL,"",options);
663         options = [];
664         if( itemId != -1 )
665         {
666             // play MRL
667             vlc.playlist.playItem(itemId);
668         }
669         else
670         {
671             alert("cannot play at the moment !");
672         }
673         doItemCount();
674     }
675 }
676
677 function doAdd(targetURL)
678 {
679     var vlc = getVLC("vlc");
680     var options = [":vout-filter=deinterlace", ":deinterlace-mode=linear"];
681     if( vlc )
682     {
683         vlc.playlist.add(targetURL, "", options);
684         options = [];
685         doItemCount();
686     }
687 }
688
689 function doPlayOrPause()
690 {
691     var vlc = getVLC("vlc");
692     if( vlc )
693     {
694         if( vlc.playlist.isPlaying && canPause )
695         {
696             vlc.playlist.togglePause();
697         }
698         else if( vlc.playlist.items.count > 0 )
699         {
700             vlc.playlist.play();
701         }
702         else
703         {
704             alert('nothing to play !');
705         }
706     }
707 }
708
709 function doStop()
710 {
711     var vlc = getVLC("vlc");
712     if( vlc )
713         vlc.playlist.stop();
714 }
715
716 function doPlaySlower()
717 {
718     var vlc = getVLC("vlc");
719     if( vlc )
720         vlc.input.rate = vlc.input.rate / 2;
721 }
722
723 function doPlayFaster()
724 {
725     var vlc = getVLC("vlc");
726     if( vlc )
727         vlc.input.rate = vlc.input.rate * 2;
728 }
729
730 function doMarqueeOption(option, value)
731 {
732     var vlc = getVLC("vlc");
733     val = parseInt(value);
734     if( vlc )
735     {
736         if (option == 1)
737             vlc.video.marquee.color = val;
738         if (option == 2)
739             vlc.video.marquee.opacity = val;
740         if (option == 3)
741             vlc.video.marquee.position = value;
742         if (option == 4)
743             vlc.video.marquee.refresh = val;
744         if (option == 5)
745             vlc.video.marquee.size = val;
746         if (option == 6)
747             vlc.video.marquee.text = value;
748         if (option == 7)
749             vlc.video.marquee.timeout = val;
750         if (option == 8)
751             vlc.video.marquee.x = val;
752         if (option == 9)
753             vlc.video.marquee.y = val;
754     }
755 }
756
757 function doLogoOption(option, value)
758 {
759     var vlc = getVLC("vlc");
760     if( vlc )
761     {
762         if (option == 1)
763             vlc.video.logo.file(value);
764         if (option == 2)
765             vlc.video.logo.position = value;
766         val = parseInt(value);
767         if (option == 3)
768             vlc.video.logo.opacity = val;
769         if (option == 4)
770             vlc.video.logo.repeat = val;
771         if (option == 5)
772             vlc.video.logo.delay = val;
773         if (option == 6)
774             vlc.video.logo.x = val;
775         if (option == 7)
776             vlc.video.logo.y = val;
777     }
778 }
779
780 /* events */
781
782 function onOpen()
783 {
784     document.getElementById("state").innerHTML = "Opening...";
785     document.getElementById("PlayOrPause").value = "Pause";
786 }
787
788 function onBuffer()
789 {
790     document.getElementById("state").innerHTML = "Buffering...";
791     document.getElementById("PlayOrPause").value = "Pause";
792 }
793
794 function onPlay()
795 {
796     document.getElementById("state").innerHTML = "Playing...";
797     document.getElementById("PlayOrPause").value = "Pause";
798     onPlaying();
799 }
800
801 function onEnd()
802 {
803     document.getElementById("state").innerHTML = "End...";
804 }
805
806 var liveFeedText = ["Live", "((Live))", "(( Live ))", "((  Live  ))"];
807 var liveFeedRoll = 0;
808
809 function onPlaying()
810 {
811     if( !inputTrackerScrolling )
812     {
813         var vlc = getVLC("vlc");
814         var info = document.getElementById("info");
815         if( vlc )
816         {
817             var mediaLen = vlc.input.length;
818             inputTrackerIgnoreChange = true;
819             if( mediaLen > 0 )
820             {
821                 // seekable media
822                 if( inputTracker )
823                 {
824                     if( inputTracker.maxVal == 1.0 )
825                     {
826                         inputTracker.setDisabled(false);
827                         inputTracker.maxVal = 1.0;
828                     }
829                     inputTracker.setValue(vlc.input.position);
830                 }
831                 info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(mediaLen);
832             }
833             else
834             {
835                 // non-seekable "live" media
836                 if( inputTracker )
837                 {
838                     if( inputTracker.maxVal != 0.0 )
839                     {
840                         inputTracker.maxVal = 0.0;
841                         inputTracker.setValue(0.0);
842                         inputTracker.setDisabled(true);
843                     }
844                 }
845                 liveFeedRoll = liveFeedRoll & 3;
846                 info.innerHTML = liveFeedText[liveFeedRoll++];
847             }
848             inputTrackerIgnoreChange  = false;
849         }
850     }
851 }
852
853 function onPause()
854 {
855     document.getElementById("state").innerHTML = "Paused...";
856     document.getElementById("PlayOrPause").value = " Play ";
857 }
858
859 function onStop()
860 {
861     var vlc = getVLC("vlc");
862
863     if( inputTracker )
864     {
865         if( !inputTracker.disabled )
866         {
867             inputTracker.setValue(inputTracker.minVal);
868             inputTracker.setDisabled(true);
869         }
870     }
871
872     document.getElementById("info").innerHTML = "-:--:--/-:--:--";
873     document.getElementById("state").innerHTML = "Stopped...";
874     document.getElementById("PlayOrPause").value = " Play ";
875 }
876
877 function onError()
878 {
879     var vlc = getVLC("vlc");
880
881     document.getElementById("state").innerHTML = "Error...";
882 }
883
884 function onInputTrackerScrollStart()
885 {
886     inputTrackerScrolling = true;
887 }
888
889 function onInputTrackerScrollEnd(inputTracker, value, pos)
890 {
891     inputTrackerScrolling = false;
892 }
893
894 function onInputTrackerChange(inputTracker, value, pos)
895 {
896     if( !inputTrackerIgnoreChange )
897     {
898         var vlc = getVLC("vlc");
899         if( vlc )
900         {
901             if( (vlc.input.state == 3) && (vlc.input.position != value) )
902             {
903                 var info = document.getElementById("info");
904                 vlc.input.position = value;
905                 info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(vlc.input.length);
906             }
907         }
908     }
909 }
910
911 //-->
912 </SCRIPT>
913 </BODY>
914 </HTML>