]> git.sesse.net Git - vlc/blob - projects/activex/test.html
Release the display mode when we are done with it.
[vlc] / projects / activex / 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     onPlay();
141 }
142
143 function handle_MediaPlayerPaused()
144 {
145     onPause();
146 }
147
148 function handle_MediaPlayerStopped()
149 {
150     onStop();
151 }
152
153 function handle_MediaPlayerForward()
154 {
155     document.getElementById("state").innerHTML = "Forward...";
156 }
157
158 function handle_MediaPlayerBackward()
159 {
160     document.getElementById("state").innerHTML = "Backward...";
161 }
162
163 function handle_MediaPlayerEndReached()
164 {
165     onEnd();
166 }
167
168 function handle_MediaPlayerEncounteredError()
169 {
170     onError();
171 }
172
173 function handle_MediaPlayerTimeChanged(time)
174 {
175     var vlc = getVLC("vlc");
176     var info = document.getElementById("info");
177     if( vlc )
178     {
179         var mediaLen = vlc.input.length;
180         if( mediaLen > 0 )
181         {
182             // seekable media
183             info.innerHTML = formatTime(time)+"/"+formatTime(mediaLen);
184         }
185     }
186 }
187
188 function handle_MediaPlayerPositionChanged(val)
189 {
190     // set javascript slider to correct position
191 }
192
193 function handle_MediaPlayerSeekableChanged(val)
194 {
195     setSeekable(val);
196 }
197
198 function handle_MediaPlayerPausableChanged(val)
199 {
200     setPauseable(val);
201 }
202
203 function handle_MediaPlayerTitleChanged(val)
204 {
205     //setTitle(val);
206     document.getElementById("info").innerHTML = "Title: " + val;
207 }
208
209 function handle_MediaPlayerLengthChanged(val)
210 {
211     //setMediaLength(val);
212 }
213
214 // VLC Plugin
215 function onVLCPluginReady()
216 {
217     registerVLCEvent("MediaPlayerMediaChanged", handleMediaPlayerMediaChanged);
218     registerVLCEvent("MediaPlayerNothingSpecial", handle_MediaPlayerNothingSpecial);
219     registerVLCEvent("MediaPlayerOpening", handle_MediaPlayerOpening);
220     registerVLCEvent("MediaPlayerBuffering", handle_MediaPlayerBuffering);
221     registerVLCEvent("MediaPlayerPlaying", handle_MediaPlayerPlaying);
222     registerVLCEvent("MediaPlayerPaused", handle_MediaPlayerPaused);
223     registerVLCEvent("MediaPlayerStopped", handle_MediaPlayerStopped);
224     registerVLCEvent("MediaPlayerForward", handle_MediaPlayerForward);
225     registerVLCEvent("MediaPlayerBackward", handle_MediaPlayerBackward);
226     registerVLCEvent("MediaPlayerEndReached", handle_MediaPlayerEndReached);
227     registerVLCEvent("MediaPlayerEncounteredError", handle_MediaPlayerEncounteredError);
228     registerVLCEvent("MediaPlayerTimeChanged", handle_MediaPlayerTimeChanged);
229     registerVLCEvent("MediaPlayerPositionChanged", handle_MediaPlayerPositionChanged);
230     registerVLCEvent("MediaPlayerSeekableChanged", handle_MediaPlayerSeekableChanged);
231     registerVLCEvent("MediaPlayerPausableChanged", handle_MediaPlayerPausableChanged);
232     registerVLCEvent("MediaPlayerTitleChanged", handle_MediaPlayerTitleChanged);
233     registerVLCEvent("MediaPlayerLengthChanged", handle_MediaPlayerLengthChanged);
234 }
235
236 function close()
237 {
238     unregisterVLCEvent('MediaPlayerMouseGrab', handleMouseGrab);
239     unregisterVLCEvent('MediaPlayerMouseRelease', handleMouseRelease);
240     unregisterVLCEvent('MediaPlayerMouseClick', handleMouseClick);
241
242     unregisterVLCEvent("MediaPlayerMediaChanged", handleMediaPlayerMediaChanged);
243     unregisterVLCEvent("MediaPlayerNothingSpecial", handle_MediaPlayerNothingSpecial);
244     unregisterVLCEvent("MediaPlayerOpening", handle_MediaPlayerOpening);
245     unregisterVLCEvent("MediaPlayerBuffering", handle_MediaPlayerBuffering);
246     unregisterVLCEvent("MediaPlayerPlaying", handle_MediaPlayerPlaying);
247     unregisterVLCEvent("MediaPlayerPaused", handle_MediaPlayerPaused);
248     unregisterVLCEvent("MediaPlayerStopped", handle_MediaPlayerStopped);
249     unregisterVLCEvent("MediaPlayerForward", handle_MediaPlayerForward);
250     unregisterVLCEvent("MediaPlayerBackward", handle_MediaPlayerBackward);
251     unregisterVLCEvent("MediaPlayerEndReached", handle_MediaPlayerEndReached);
252     unregisterVLCEvent("MediaPlayerEncounteredError", handle_MediaPlayerEncounteredError);
253     unregisterVLCEvent("MediaPlayerTimeChanged", handle_MediaPlayerTimeChanged);
254     unregisterVLCEvent("MediaPlayerPositionChanged", handle_MediaPlayerPositionChanged);
255     unregisterVLCEvent("MediaPlayerSeekableChanged", handle_MediaPlayerSeekableChanged);
256     unregisterVLCEvent("MediaPlayerPausableChanged", handle_MediaPlayerPausableChanged);
257     unregisterVLCEvent("MediaPlayerTitleChanged", handle_MediaPlayerTitleChanged);
258     unregisterVLCEvent("MediaPlayerLengthChanged", handle_MediaPlayerLengthChanged);
259 }
260
261 //--></SCRIPT>
262
263 <BODY onLoad="init();" onClose="close();>
264 <TABLE>
265 <TR><TD colspan="2">
266 MRL:
267 <INPUT size="90" id="targetTextField" value="">
268 <INPUT type=submit value="Go" onClick="doGo(document.getElementById('targetTextField').value);">
269 <INPUT type=submit value="Add" onClick="doAdd(document.getElementById('targetTextField').value);">
270 </TD></TR>
271 <TR><TD align="center" colspan="2">
272 <!--
273 Insert VideoLAN.VLCPlugin.2
274 -->
275 <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
276         width="640"
277         height="480"
278         id="vlc"
279         events="True">
280 <param name="MRL" value="" />
281 <param name="ShowDisplay" value="True" />
282 <param name="AutoLoop" value="False" />
283 <param name="AutoPlay" value="False" />
284 <param name="Volume" value="50" />
285 <param name="toolbar" value="true" />
286 <param name="StartTime" value="0" />
287 <EMBED pluginspage="http://www.videolan.org"
288        type="application/x-vlc-plugin"
289        version="VideoLAN.VLCPlugin.2"
290        width="640"
291        height="480"
292        toolbar="true"
293        text="Waiting for video"
294        name="vlc">
295 </EMBED>
296 </OBJECT>
297 </TD></TR>
298 <TR><TD colspan="2">
299 <TABLE><TR>
300 <TD valign="top" width="550">
301 <!--
302 Insert Slider widget
303 -->
304 <DIV id="inputTrackerDiv"</DIV>
305 </TD><TD width="15%">
306 <DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV>
307 <DIV id="state" style="text-align:center">Stopped...</DIV>
308 </TD></TR></TABLE>
309 </TD></TR>
310 <TR><TD>
311 <INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause();'>
312 <INPUT type=button value="Stop" onClick='doStop();'>
313 &nbsp;
314 <INPUT type=button value=" << " onClick='doPlaySlower();'>
315 <INPUT type=button value="Reverse" onClick='doReverse();'>
316 <INPUT type=button value=" >> " onClick='doPlayFaster();'>
317 &nbsp;
318 <INPUT type=button value="Fullscreen" onClick='getVLC("vlc").video.toggleFullscreen();'>
319 <INPUT type=button value="Version" onClick='alert("vlc " + getVLC("vlc").VersionInfo);'>
320 <INPUT type=button value=" State " onClick='alert("state: " + getVLC("vlc").input.state);'>
321 </TD><TD align="right">
322 <SPAN style="text-align:center">Volume:</SPAN>
323 <INPUT type=button value=" - " onClick='updateVolume(-10)'>
324 <SPAN id="volumeTextField" style="text-align:center">--</SPAN>
325 <INPUT type=button value=" + " onClick='updateVolume(+10)'>
326 <INPUT type=button value="Mute" onClick='getVLC("vlc").audio.toggleMute();'>
327 </TD>
328 </TR>
329 <TR><TD>Playlist:
330 <INPUT type=button value="Prev" onClick='getVLC("vlc").playlist.prev();'>
331 <INPUT type=button value="Next" onClick='getVLC("vlc").playlist.next();'>
332 <INPUT type=button value="Clear All" onClick='doPlaylistClearAll();'>
333     Aspect Ratio:
334     <SELECT readonly onChange='doAspectRatio(this.value)'>
335       <OPTION value="default">Default</OPTION>
336       <OPTION value="1:1">1:1</OPTION>
337       <OPTION value="4:3">4:3</OPTION>
338       <OPTION value="16:9">16:9</OPTION>
339       <OPTION value="221:100">221:100</OPTION>
340       <OPTION value="5:4">5:4</OPTION>
341     </SELECT>
342 </TD><TD align="right">
343 <INPUT type=button id="itemCount" value=" Items 0 " onClick='doItemCount();'>
344 <INPUT size=4 value="" id="removeid"><INPUT type=submit value="Delete" onClick="doRemoveItem(document.getElementById('removeid').value);">
345 </TD>
346 </TR>
347 <TR><TD>Audio Channel:
348   <SELECT readonly onClick='doAudioChannel(this.value);'>
349     <OPTION value=1>Stereo</OPTION>
350     <OPTION value=2>Reverse Stereo</OPTION>
351     <OPTION value=3>Left</OPTION>
352     <OPTION value=4>Right</OPTION>
353     <OPTION value=5>Dolby</OPTION>
354   </SELECT>
355 </TD>
356 <TD>
357 <INPUT type=button value="current channel" onClick='alert(getVLC("vlc").audio.channel);'>
358 </TD>
359 </TR>
360 <TR><TD> Audio Track:
361 <INPUT type=button value=" + " onClick='doAudioTrack(1);'>
362 <SPAN id="trackTextField" style="text-align:center">--</SPAN>
363 <INPUT type=button value=" - " onClick='doAudioTrack(-1);'>
364 <INPUT type=button value="current track" onClick='alert(getVLC("vlc").audio.description(vlc.audio.track));'>
365 <INPUT type=button value="number of track" onClick='alert(getVLC("vlc").audio.count);'>
366 </TD>
367 <TD>
368 <INPUT type=button value="set slider" onClick='doSetSlider();'>
369 <INPUT type=button value="get position" onClick='doGetPosition();'>
370 </TD>
371 </TR>
372 <TR>
373 <TD>Video Subtitle:
374     <INPUT type=button value=" + " onClick='doSubtitle(1);'>
375     <SPAN id="spuTextField" style="text-align:center">--</SPAN>
376     <INPUT type=button value=" - " onClick='doSubtitle(-1);'>
377     <INPUT type=button value="current subtitle" onClick='alert(getVLC("vlc").subtitle.description(vlc.subtitle.track));'>
378     <INPUT type=button value="number of subtitle" onClick='alert(getVLC("vlc").subtitle.count);'>
379 </TD>
380 </TR>
381 <TR>
382 <TD>Deinterlacing:
383     <INPUT type=button value="BLEND" onClick='getVLC("vlc").video.deinterlace.enable("blend");'>
384     <INPUT type=button value="  X  " onClick='getVLC("vlc").video.deinterlace.enable("x");'>
385     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.deinterlace.disable();'>
386 </TD>
387 </TR>
388 <TR>
389 <TD>Marquee video filter:
390     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.marquee.enable();'>
391     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.marquee.disable();'>
392     <INPUT size=4 value="" id="marqueeIntValue">
393     <SELECT readonly onClick="doMarqueeOption(this.value,document.getElementById('marqueeIntValue').value);">
394         <OPTION value=1>Color</OPTION>
395         <OPTION value=2>Opacity</OPTION>
396         <OPTION value=3>Position</OPTION>
397         <OPTION value=4>Refresh</OPTION>
398         <OPTION value=5>Size</OPTION>
399         <OPTION value=6>Text</OPTION>
400         <OPTION value=7>Timeout</OPTION>
401         <OPTION value=8>X</OPTION>
402         <OPTION value=9>Y</OPTION>
403     </SELECT>
404 </TD>
405 </TR>
406 <TR>
407 <TD>Logo video filter:
408     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.logo.enable();'>
409     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.logo.disable();'>
410     <INPUT size=4 value="" id="logoIntValue">
411     <SELECT readonly onClick="doLogoOption(this.value,document.getElementById('logoIntValue').value);">
412         <OPTION value=1>File</OPTION>
413         <OPTION value=2>Position</OPTION>
414         <OPTION value=3>Opacity</OPTION>
415         <OPTION value=4>Repeat</OPTION>
416         <OPTION value=5>Delay</OPTION>
417         <OPTION value=6>X</OPTION>
418         <OPTION value=7>Y</OPTION>
419     </SELECT>
420 </TD>
421 </TR>
422 <TR>
423 <TD>
424     <INPUT type=button id="telx" value="Teletext off" onClick='doToggleTeletext();'>
425     Teletext page:
426     <INPUT size=4 value="100" id="telxPage" onClick='doTelxPage(document.getElementById("telxPage").value);'>
427 </TD>
428 </TR>
429 </TABLE>
430 <SCRIPT language="javascript">
431 <!--
432
433 var rate = 0;
434 var prevState = 0;
435 var monitorTimerId = 0;
436 var inputTracker;
437 var inputTrackerScrolling = false;
438 var inputTrackerIgnoreChange = false;
439 var telxState = false;
440 var canPause = true;
441 var canSeek = true;
442
443 function setPauseable(val)
444 {
445     canPause = val;
446 }
447
448 function setSeekable(val)
449 {
450     canSeek = val;
451 }
452
453 function doSetSlider()
454 {
455     var vlc = getVLC("vlc");
456
457     // set slider to new position
458     if( vlc )
459         vlc.input.time = (vlc.input.length/2);
460 }
461
462 function doGetPosition()
463 {
464     var vlc = getVLC("vlc");
465
466     // set slider to new position
467     if (vlc)
468         alert( "position is " + vlc.input.time);
469 }
470
471 function doReverse(rate)
472 {
473     var vlc = getVLC("vlc");
474     if( vlc )
475         vlc.input.rate = -1.0 * vlc.input.rate;
476 }
477
478 function doAudioChannel(value)
479 {
480     var vlc = getVLC("vlc");
481     if( vlc )
482         vlc.audio.channel = parseInt(value);
483 }
484
485 function doAudioTrack(value)
486 {
487     var vlc = getVLC("vlc");
488     if( vlc )
489     {
490         vlc.audio.track = vlc.audio.track + value;
491         document.getElementById("trackTextField").innerHTML = vlc.audio.track;
492     }
493 }
494
495 function doAspectRatio(value)
496 {
497     var vlc = getVLC("vlc");
498     if( vlc )
499         vlc.video.aspectRatio = value;
500 }
501
502 function doSubtitle(value)
503 {
504     var vlc = getVLC("vlc");
505     if( vlc )
506     {
507         vlc.subtitle.track = vlc.subtitle.track + value;
508         document.getElementById("spuTextField").innerHTML = vlc.subtitle.track;
509     }
510 }
511
512 function doTelxPage(value)
513 {
514     var vlc = getVLC("vlc");
515     if( vlc )
516         vlc.video.teletext = parseInt(value);
517 }
518
519 function doToggleTeletext()
520 {
521     var vlc = getVLC("vlc");
522
523     if( vlc )
524     {
525         vlc.video.toggleTeletext();
526         if (telxState)
527         {
528             document.getElementById("telx").innerHTML = "Teletext on";
529             telxState = true;
530         }
531         else
532         {
533             document.getElementById("telx").innerHTML = "Teletext off";
534             telxState = false;
535         }
536     }
537 }
538
539 function doItemCount()
540 {
541     var vlc = getVLC("vlc");
542     if( vlc )
543     {
544         var count = vlc.playlist.items.count;
545         document.getElementById("itemCount").value = " Items " + count + " ";
546     }
547 }
548
549 function doRemoveItem(item)
550 {
551     var vlc = getVLC("vlc");
552     if( vlc )
553         vlc.playlist.items.remove(item);
554 }
555
556 function doPlaylistClearAll()
557 {
558     var vlc = getVLC("vlc");
559     if( vlc )
560     {
561         vlc.playlist.items.clear();
562         while( vlc.playlist.items.count > 0)
563         {
564             // wait till playlist empties.
565         }
566         doItemCount();
567     }
568 }
569
570 function updateVolume(deltaVol)
571 {
572     var vlc = getVLC("vlc");
573     if( vlc )
574     {
575         vlc.audio.volume += deltaVol;
576         document.getElementById("volumeTextField").innerHTML = vlc.audio.volume+"%";
577     }
578 }
579
580 function formatTime(timeVal)
581 {
582     if( typeof timeVal != 'number' )
583         return "-:--:--";
584
585     var timeHour = Math.round(timeVal / 1000);
586     var timeSec = timeHour % 60;
587     if( timeSec < 10 )
588         timeSec = '0'+timeSec;
589     timeHour = (timeHour - timeSec)/60;
590     var timeMin = timeHour % 60;
591     if( timeMin < 10 )
592         timeMin = '0'+timeMin;
593     timeHour = (timeHour - timeMin)/60;
594     if( timeHour > 0 )
595         return timeHour+":"+timeMin+":"+timeSec;
596     else
597         return timeMin+":"+timeSec;
598 }
599
600 function doState()
601 {
602     var vlc = getVLC("vlc");
603     var newState = 0;
604
605     if( vlc )
606         newState = vlc.input.state;
607
608     if( newState == 0 )
609     {
610         // current media has stopped
611         onEnd();
612     }
613     else if( newState == 1 )
614     {
615         // current media is openning/connecting
616         onOpen();
617     }
618     else if( newState == 2 )
619     {
620         // current media is buffering data
621         onBuffer();
622     }
623     else if( newState == 3 )
624     {
625         // current media is now playing
626         onPlay();
627     }
628     else if( newState == 4 )
629     {
630         // current media is now paused
631         onPause();
632     }
633     else if( newState == 5 )
634     {
635         // current media has stopped
636         onStop();
637     }
638     else if( newState == 6 )
639     {
640         // current media has ended
641         onEnd();
642     }
643     else if( newState == 7 )
644     {
645         // current media encountered error
646         onError();
647     }
648 }
649
650 function monitor()
651 {
652     var vlc = getVLC("vlc");
653     var newState = 0;
654
655     if( vlc )
656     {
657         newState = vlc.input.state;
658     }
659
660     if( prevState != newState )
661     {
662         if( newState == 0 )
663         {
664             // current media has stopped
665             onEnd();
666         }
667         else if( newState == 1 )
668         {
669             // current media is openning/connecting
670             onOpen();
671         }
672         else if( newState == 2 )
673         {
674             // current media is buffering data
675             onBuffer();
676         }
677         else if( newState == 3 )
678         {
679             // current media is now playing
680             onPlay();
681         }
682         else if( newState == 4 )
683         {
684             // current media is now paused
685             onPause();
686         }
687         else if( newState == 5 )
688         {
689             // current media has stopped
690             onStop();
691         }
692         else if( newState == 6 )
693         {
694             // current media has ended
695             onEnd();
696         }
697         else if( newState == 7 )
698         {
699             // current media encountered error
700             onError();
701         }
702         prevState = newState;
703     }
704     else if( newState == 3 )
705     {
706         // current media is playing
707         onPlaying();
708     }
709     if( monitorTimerId == 0 )
710     {
711         monitorTimerId = setInterval("monitor()", 1000);
712     }
713 };
714
715 /* actions */
716
717 function doGo(targetURL)
718 {
719     var vlc = getVLC("vlc");
720
721     if( vlc )
722     {
723         vlc.playlist.items.clear();
724         while( vlc.playlist.items.count > 0 )
725         {
726             // clear() may return before the playlist has actually been cleared
727             // just wait for it to finish its job
728         }
729         var options = [":rtsp-tcp"];
730         var itemId = vlc.playlist.add(targetURL,"",options);
731         options = [];
732         if( itemId != -1 )
733         {
734             // play MRL
735             vlc.playlist.playItem(itemId);
736             if( monitorTimerId == 0 )
737             {
738                 monitor();
739             }
740         }
741         else
742         {
743             alert("cannot play at the moment !");
744         }
745         doItemCount();
746     }
747 }
748
749 function doAdd(targetURL)
750 {
751     var vlc = getVLC("vlc");
752     var options = [":vout-filter=deinterlace", ":deinterlace-mode=linear"];
753     if( vlc )
754     {
755         vlc.playlist.add(targetURL, "", options);
756         options = [];
757         doItemCount();
758     }
759 }
760
761 function doPlayOrPause()
762 {
763     var vlc = getVLC("vlc");
764     if( vlc )
765     {
766         if( vlc.playlist.isPlaying && canPause )
767         {
768             vlc.playlist.togglePause();
769             //monitor();
770         }
771         else if( vlc.playlist.items.count > 0 )
772         {
773             vlc.playlist.play();
774             //monitor();
775         }
776         else
777         {
778             alert('nothing to play !');
779         }
780     }
781 }
782
783 function doStop()
784 {
785     var vlc = getVLC("vlc");
786
787     if( vlc )
788         vlc.playlist.stop();
789
790     if( monitorTimerId != 0 )
791     {
792         clearInterval(monitorTimerId);
793         monitorTimerId = 0;
794     }
795     onStop();
796 }
797
798 function doPlaySlower()
799 {
800     var vlc = getVLC("vlc");
801     if( vlc )
802         vlc.input.rate = vlc.input.rate / 2;
803 }
804
805 function doPlayFaster()
806 {
807     var vlc = getVLC("vlc");
808     if( vlc )
809         vlc.input.rate = vlc.input.rate * 2;
810 }
811
812 function doMarqueeOption(option, value)
813 {
814     var vlc = getVLC("vlc");
815     val = parseInt(value);
816     if( vlc )
817     {
818         if (option == 1)
819             vlc.video.marquee.color = val;
820         if (option == 2)
821             vlc.video.marquee.opacity = val;
822         if (option == 3)
823             vlc.video.marquee.position = value;
824         if (option == 4)
825             vlc.video.marquee.refresh = val;
826         if (option == 5)
827             vlc.video.marquee.size = val;
828         if (option == 6)
829             vlc.video.marquee.text = value;
830         if (option == 7)
831             vlc.video.marquee.timeout = val;
832         if (option == 8)
833             vlc.video.marquee.x = val;
834         if (option == 9)
835             vlc.video.marquee.y = val;
836     }
837 }
838
839 function doLogoOption(option, value)
840 {
841     var vlc = getVLC("vlc");
842     if( vlc )
843     {
844         if (option == 1)
845             vlc.video.logo.file(value);
846         if (option == 2)
847             vlc.video.logo.position = value;
848         val = parseInt(value);
849         if (option == 3)
850             vlc.video.logo.opacity = val;
851         if (option == 4)
852             vlc.video.logo.repeat = val;
853         if (option == 5)
854             vlc.video.logo.delay = val;
855         if (option == 6)
856             vlc.video.logo.x = val;
857         if (option == 7)
858             vlc.video.logo.y = val;
859     }
860 }
861
862 /* events */
863
864 function onOpen()
865 {
866     document.getElementById("state").innerHTML = "Opening...";
867     document.getElementById("PlayOrPause").value = "Pause";
868 }
869
870 function onBuffer()
871 {
872     document.getElementById("state").innerHTML = "Buffering...";
873     document.getElementById("PlayOrPause").value = "Pause";
874 }
875
876 function onPlay()
877 {
878     document.getElementById("state").innerHTML = "Playing...";
879     document.getElementById("PlayOrPause").value = "Pause";
880     onPlaying();
881 }
882
883 function onEnd()
884 {
885     document.getElementById("state").innerHTML = "End...";
886 }
887
888 var liveFeedText = ["Live", "((Live))", "(( Live ))", "((  Live  ))"];
889 var liveFeedRoll = 0;
890
891 function onPlaying()
892 {
893     if( !inputTrackerScrolling )
894     {
895         var vlc = getVLC("vlc");
896         var info = document.getElementById("info");
897         if( vlc )
898         {
899             var mediaLen = vlc.input.length;
900             inputTrackerIgnoreChange = true;
901             if( mediaLen > 0 )
902             {
903                 // seekable media
904                 if( inputTracker )
905                 {
906                     if( inputTracker.maxVal == 1.0 )
907                     {
908                         inputTracker.setDisabled(false);
909                         inputTracker.maxVal = 1.0;
910                     }
911                     inputTracker.setValue(vlc.input.position);
912                 }
913                 info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(mediaLen);
914             }
915             else
916             {
917                 // non-seekable "live" media
918                 if( inputTracker )
919                 {
920                     if( inputTracker.maxVal != 0.0 )
921                     {
922                         inputTracker.maxVal = 0.0;
923                         inputTracker.setValue(0.0);
924                         inputTracker.setDisabled(true);
925                     }
926                 }
927                 liveFeedRoll = liveFeedRoll & 3;
928                 info.innerHTML = liveFeedText[liveFeedRoll++];
929             }
930             inputTrackerIgnoreChange  = false;
931         }
932     }
933 }
934
935 function onPause()
936 {
937     document.getElementById("state").innerHTML = "Paused...";
938     document.getElementById("PlayOrPause").value = " Play ";
939 }
940
941 function onStop()
942 {
943     var vlc = getVLC("vlc");
944
945     if( inputTracker )
946     {
947         if( !inputTracker.disabled )
948         {
949             inputTracker.setValue(inputTracker.minVal);
950             inputTracker.setDisabled(true);
951         }
952     }
953
954     document.getElementById("info").innerHTML = "-:--:--/-:--:--";
955     document.getElementById("state").innerHTML = "Stopped...";
956     document.getElementById("PlayOrPause").value = " Play ";
957 }
958
959 function onError()
960 {
961     var vlc = getVLC("vlc");
962
963     document.getElementById("state").innerHTML = "Error...";
964 }
965
966 function onInputTrackerScrollStart()
967 {
968     inputTrackerScrolling = true;
969 }
970
971 function onInputTrackerScrollEnd(inputTracker, value, pos)
972 {
973     inputTrackerScrolling = false;
974 }
975
976 function onInputTrackerChange(inputTracker, value, pos)
977 {
978     if( !inputTrackerIgnoreChange )
979     {
980         var vlc = getVLC("vlc");
981         if( vlc )
982         {
983             if( (vlc.input.state == 3) && (vlc.input.position != value) )
984             {
985                 var info = document.getElementById("info");
986                 vlc.input.position = value;
987                 info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(vlc.input.length);
988             }
989         }
990     }
991 }
992
993 //-->
994 </SCRIPT>
995 </BODY>
996 </HTML>