<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<TITLE>VLC Plugin test page</TITLE>
<STYLE>
  .inputTrackerInput {
        height:20;
        width:30;
        font-family : Arial, Helvetica, sans-serif;
        font-size : 12px;
  }
</STYLE>

<SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/lib/LibCrossBrowser.js"></SCRIPT>
<SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/lib/EventHandler.js"></SCRIPT>
<SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/core/form/Bs_FormUtil.lib.js"></SCRIPT>
<SCRIPT type="text/javascript" src="blueshoes-4.5/javascript/components/slider/Bs_Slider.class.js"></SCRIPT>

<SCRIPT language="JavaScript"><!--
function init(){
    inputTracker = new Bs_Slider();
    inputTracker.attachOnChange(onInputTrackerChange);
    inputTracker.attachOnSlideStart(onInputTrackerScrollStart);
    inputTracker.attachOnSlideEnd(onInputTrackerScrollEnd);
    inputTracker.width         = 530 ;
    inputTracker.height        = 15;
    inputTracker.minVal        = 0;
    inputTracker.maxVal        = 1.0;
    inputTracker.valueDefault  = 0;
    inputTracker.valueInterval = 1/530;
    inputTracker.setDisabled(true);
    inputTracker.imgDir   = 'blueshoes-4.5/javascript/components/slider/img/';
    inputTracker.setBackgroundImage('aluminumalloyvolcanic/horizontal_background.gif', 'repeat');
    inputTracker.setArrowIconLeft('aluminumalloyvolcanic/horizontal_backgroundLeft.gif', 2, 19);
    inputTracker.setArrowIconRight('aluminumalloyvolcanic/horizontal_backgroundRight.gif', 2, 19);
    inputTracker.setSliderIcon('aluminumalloyvolcanic/horizontal_knob.gif', 15, 19);
    inputTracker.useInputField = 0;
    inputTracker.draw('inputTrackerDiv');

    if( navigator.appName.indexOf("Microsoft Internet")==-1 )
    {
        onVLCPluginReady()
    }
    else if( document.readyState == 'complete' )
    {
        onVLCPluginReady();
    }
    else
    {
        /* Explorer loads plugins asynchronously */
        document.onreadystatechange=function() {
            if( document.readyState == 'complete' )
            {
                onVLCPluginReady();
            }
        }
    }
};

function getVLC(name)
{
    if (window.document[name]) 
    {
        return window.document[name];
    }
    if (navigator.appName.indexOf("Microsoft Internet")==-1)
    {
        if (document.embeds && document.embeds[name])
            return document.embeds[name]; 
    }
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
    {
        return document.getElementById(name);
    }
};

function onVLCPluginReady()
{
    updateVolume(0);
};

//--></SCRIPT>

<BODY onLoad="init();">
<TABLE>
<TR><TD colspan="2">
MRL:
<INPUT size="90" id="targetTextField" value="">
<INPUT type=submit value="Go" onClick="doGo(document.getElementById('targetTextField').value);">
<INPUT type=submit value="Add" onClick="doAdd(document.getElementById('targetTextField').value);">
</TD></TR>
<TR><TD align="center" colspan="2">
<!--
Insert VideoLAN.VLCPlugin.2 
-->
<OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
        width="640"
        height="480"
        id="vlc"
        events="True">
<param name="MRL" value="" />
<param name="ShowDisplay" value="True" />
<param name="AutoLoop" value="False" />
<param name="AutoPlay" value="False" />
<param name="Volume" value="50" />
<param name="StartTime" value="0" />
<EMBED pluginspage="http://www.videolan.org"
       type="application/x-vlc-plugin"
       version="VideoLAN.VLCPlugin.2"
       width="640"
       height="480"
       name="vlc">
</EMBED>
</OBJECT>
</TD></TR>
<TR><TD colspan="2">
<TABLE><TR>
<TD valign="top" width="550">
<!--
Insert Slider widget
-->
<DIV id="inputTrackerDiv"</DIV>
</TD><TD width="15%">
<DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV>
<DIV id="state" style="text-align:center">Stopped...</DIV>
</TD></TR></TABLE>
</TD></TR>
<TR><TD>
<INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause();'>
<INPUT type=button value="Stop" onClick='doStop();'>
&nbsp;
<INPUT type=button value=" << " onClick='doPlaySlower();'>
<INPUT type=button value=" >> " onClick='doPlayFaster();'>
<INPUT type=button value="Backward" onClick='doBackwardPlay(500);'>
<INPUT type=button value="Forward" onClick='doForwardPlay(500);'>
<INPUT type=button value="Fullscreen" onClick='getVLC("vlc").video.toggleFullscreen();'>
<INPUT type=button value="Version" onClick='alert("vlc " + getVLC("vlc").VersionInfo);'>
<INPUT type=button value=" State " onClick='doState();'>
</TD><TD align="right"> 
<SPAN style="text-align:center">Volume:</SPAN>
<INPUT type=button value=" - " onClick='updateVolume(-10)'>
<SPAN id="volumeTextField" style="text-align:center">--</SPAN>
<INPUT type=button value=" + " onClick='updateVolume(+10)'>
<INPUT type=button value="Mute" onClick='getVLC("vlc").audio.toggleMute();'>
</TD>
</TR>
<TR><TD>Playlist: 
<INPUT type=button value="Prev" onClick='getVLC("vlc").playlist.prev();'>
<INPUT type=button value="Next" onClick='getVLC("vlc").playlist.next();'>
<INPUT type=button value="Clear All" onClick='getVLC("vlc").playlist.clear(); doItemCount();'>
<INPUT size=4 value="1:1" id="aspect"><INPUT type=submit value="AspectRatio" onClick="doAspectRatio(document.getElementById('aspect').value);">
</TD><TD align="right">
<INPUT type=button id="itemCount" value=" Items 0 " onClick='doItemCount();'>
<INPUT size=4 value="" id="removeid"><INPUT type=submit value="Delete" onClick="doRemoveItem(document.getElementById('removeid').value);">
</TD>
</TR>
<TR><TD>Messages:
<INPUT type=button value="Messages" onClick='doMessages();'>
Verbosity:
<INPUT size=2 value="1" id="verbosity" onClick="doVerbosity(document.getElementById('verbosity').value);">
<INPUT type=button value=" + " onClick='doVerbosity(1);'>
<INPUT type=button value=" - " onClick='doVerbosity(-1);'>
</TD>
<TD>
<DIV id="message" style="text-align:center">no message</DIV>
</TD>
</TR>
<TR><TD>Audio Channel:
  <SELECT readonly onClick='doAudioChannel(this.value);'>
    <OPTION value=1>Stereo</OPTION>
    <OPTION value=2>Reverse Stereo</OPTION>
    <OPTION value=3>Left</OPTION>
    <OPTION value=4>Right</OPTION>
    <OPTION value=5>Dolby</OPTION>
  </SELECT>
</TD>
<TD>
<INPUT type=button value="current channel" onClick='alert(getVLC("vlc").audio.channel);'>
</TD>
</TR>
<TR><TD> Audio Track:
<INPUT type=button value=" + " onClick='doAudioTrack(1);'>
<SPAN id="trackTextField" style="text-align:center">--</SPAN>
<INPUT type=button value=" - " onClick='doAudioTrack(-1);'>
</TD>
<TD>
<INPUT type=button value="set slider" onClick='doSetSlider();'>
<INPUT type=button value="get position" onClick='doGetPosition();'>
</TD>
</TR>
</TABLE>
<SCRIPT language="javascript">
<!--

var rate = 0;
var prevState = 0;
var monitorTimerId = 0;
var rateTimerId = 0;
var inputTrackerScrolling = false;
var inputTrackerIgnoreChange = false;

function doSetSlider()
{
   var vlc = getVLC("vlc");

   if (vlc.input)
   {
     // set slider to new position
     vlc.input.time = (vlc.input.length/2);
   }
};

function doGetPosition()
{
   var vlc = getVLC("vlc");

   if (vlc.input)
   {
     // set slider to new position
     alert( "position is " + vlc.input.time);
   }
};

function doForwardPlay(speed)
{
   if (rateTimerId == 0)
   {
       rateTimerId = setInterval("ratechange()", speed);
       rate = speed;
   }
   else rate = rate + speed;
};

function doBackwardPlay(speed)
{
   if (rateTimerId == 0)
   {
       rateTimerId = setInterval("ratechange()", speed);
       rate = -speed;
   }
   else rate = rate - speed;
};

function ratechange()
{
    if (rateTimerId != 0)
    {
        var vlc = getVLC("vlc");
        vlc.input.time = vlc.input.time + rate;
    }
};

function doVerbosity(value)
{
    var vlc = getVLC("vlc");
    vlc.log.verbosity = vlc.log.verbosity + value;
    document.getElementById("verbosity").value = vlc.log.verbosity;
};

function doAudioChannel(value)
{
    var vlc = getVLC("vlc");
    vlc.audio.channel = parseInt(value);
};

function doAudioTrack(value)
{
    var vlc = getVLC("vlc");
    vlc.audio.track = vlc.audio.track + value;
    document.getElementById("trackTextField").innerHTML = vlc.audio.track;
};

function doAspectRatio(value)
{
   var vlc = getVLC("vlc");
   vlc.video.aspectRatio = value;
   document.getElementById("aspect").value = vlc.video.aspectRatio;
}

function doItemCount()
{
   var vlc = getVLC("vlc");
   var count = vlc.playlist.itemCount;
   document.getElementById("itemCount").value = " Items " + count + " ";
};

function doRemoveItem(item)
{
   var vlc = getVLC("vlc");
   vlc.playlist.removeItem(item);
};

function doMessages()
{
    var vlc = getVLC("vlc");

    if( vlc.log.messages.count > 0 )
    {
        // there is one or more messages in the log
        var iter = vlc.log.messages.iterator();
        while( iter.hasNext )
        {
            var msg = iter.next();
            if( msg.severity <= 1 )
            {
                document.getElementById("message").innerHTML = msg.message;
            }
        }
        // clear the log once finished to avoid clogging
        vlc.log.messages.clear();
    }
};

function updateVolume(deltaVol)
{
    var vlc = getVLC("vlc");
    vlc.audio.volume += deltaVol;
    document.getElementById("volumeTextField").innerHTML = vlc.audio.volume+"%";
};

function formatTime(timeVal)
{
    var timeHour = Math.round(timeVal / 1000);
    var timeSec = timeHour % 60;
    if( timeSec < 10 )
        timeSec = '0'+timeSec;
    timeHour = (timeHour - timeSec)/60;
    var timeMin = timeHour % 60;
    if( timeMin < 10 )
        timeMin = '0'+timeMin;
    timeHour = (timeHour - timeMin)/60;
    if( timeHour > 0 )
        return timeHour+":"+timeMin+":"+timeSec;
    else
        return timeMin+":"+timeSec;
};

function doState()
{
    var vlc = getVLC("vlc");
    var newState = vlc.input.state;

    if( newState == 0 )
    {
        // current media has stopped 
        onEnd();
    }
    else if( newState == 1 )
    {
        // current media is openning/connecting
        onOpen();
    }
    else if( newState == 2 )
    {
        // current media is buffering data
        onBuffer();
    }
    else if( newState == 3 )
    {
        // current media is now playing
        onPlay();
    }
    else if( newState == 4 )
    {
        // current media is now paused
        onPause();
    }
    else if( newState == 5 )
    {
        // current media has stopped
        onStop();
    }
    else if( newState == 6 )
    {
        // current media is playing forward
	onForward();
    }
    else if( newState == 7 )
    {
        // current media is playing backward
	onBackward();
    }
    else if( newState == 8 )
    {
	// current media has ended
	onEnd();
    }
    else if( newState == 9 )
    {
        // current media encountered error
        onError();
    }
};

function monitor()
{
    var vlc = getVLC("vlc");
    var newState = vlc.input.state;

    if( vlc.log.messages.count > 0 )
    {
        // there is one or more messages in the log
        var iter = vlc.log.messages.iterator();
        while( iter.hasNext )
        {
            var msg = iter.next();
            if( msg.severity == 1 )
            {
                alert( msg.message );
            }
	    document.getElementById("message").innerHTML = msg.message;
        }
        // clear the log once finished to avoid clogging
        vlc.log.messages.clear();
    }

    if( prevState != newState )
    {
        if( newState == 0 )
        {
            // current media has stopped 
            onEnd();
        }
        else if( newState == 1 )
        {
            // current media is openning/connecting
            onOpen();
        }
        else if( newState == 2 )
        {
            // current media is buffering data
            onBuffer();
        }
        else if( newState == 3 )
        {
            // current media is now playing
            onPlay();
        }
        else if( newState == 4 )
        {
            // current media is now paused
            onPause();
        }
	else if( newState == 5 )
	{
	    // current media has stopped
            onStop();
	}
	else if( newState == 6 )
	{
	    // current media is playing forward
	    onForward();
	}
	else if( newState == 7 )
	{
	    // current media is playing backward
	    onBackward();
	}
	else if( newState == 8 )
	{
	    // current media has ended
            onEnd();
        }
	else if( newState == 9 )
        {
            // current media encountered error
            onError();
        }
        prevState = newState;
    }
    else if( newState == 3 )
    {
        // current media is playing
        onPlaying();
    }
    if( monitorTimerId == 0 )
    {
        monitorTimerId = setInterval("monitor()", 1000);
    }
};

/* actions */

function doGo(targetURL)
{
    var vlc = getVLC("vlc");

    vlc.playlist.clear();
    while( vlc.playlist.itemCount > 0 )
    {
        // clear() may return before the playlist has actually been cleared
        // just wait for it to finish its job
    }
    //vlc.playlist.add(targetURL);
    //vlc.playlist.play();

    var itemId = vlc.playlist.add(targetURL);
    if( itemId != -1 )
    {
        // clear the message log and enable error logging
        vlc.log.verbosity = 1;
        vlc.log.messages.clear();
        // play MRL
        vlc.playlist.play();
        if( monitorTimerId == 0 )
        {
            monitor();
        }
    }
    else
    {
        // disable log
        vlc.log.verbosity = -1;
        alert("cannot play at the moment !");
    }
    doItemCount();

    if (rateTimerId != 0)
    {
        clearInterval("ratechange()");
    }
    rateTimerId = 0;
};

function doAdd(targetURL)
{
    var vlc = getVLC("vlc");
    var options = new Array(":vout-filter=deinterlace", ":deinterlace-mode=linear");
    vlc.playlist.add(targetURL);
    doItemCount();
};

function doPlayOrPause()
{
    var vlc = getVLC("vlc");
    if( vlc.playlist.isPlaying )
    {
        vlc.playlist.togglePause();
	monitor();
    }
    else if( vlc.playlist.itemCount > 0 )
    {
	// clear the message log and enable error logging
        vlc.log.verbosity = 1;
        vlc.log.messages.clear();
        vlc.playlist.play();
        monitor();
    }
    else
    {
	// disable log
        vlc.log.verbosity = -1;
        alert('nothing to play !');
    }
    if (rateTimerId != 0)
    {
        clearInterval("ratechange()");
    }
    rateTimerId = 0;
};

function doStop()
{
    getVLC("vlc").playlist.stop();
    if( monitorTimerId != 0 )
    {
        clearInterval(monitorTimerId);
        monitorTimerId = 0;
    }
    onStop();
};

function doPlaySlower()
{
    var vlc = getVLC("vlc");
    vlc.input.rate = vlc.input.rate / 2;
};

function doPlayFaster()
{
    var vlc = getVLC("vlc");
    vlc.input.rate = vlc.input.rate * 2;
};

/* events */

function onOpen()
{
    document.getElementById("state").innerHTML = "Opening...";
    document.getElementById("PlayOrPause").value = "Pause";
};

function onBuffer()
{
    document.getElementById("state").innerHTML = "Buffering...";
    document.getElementById("PlayOrPause").value = "Pause";
};

function onPlay()
{
    document.getElementById("state").innerHTML = "Playing...";
    document.getElementById("PlayOrPause").value = "Pause";
    onPlaying();
};

function onForward()
{   // Event is reserved for future enhancements
    document.getElementById("state").innerHTML = "Forward playing...";
};

function onBackward()
{   // Event is reserved for future enhancements
    document.getElementById("state").innerHTML = "Backward playing...";
};

function onEnd()
{
    document.getElementById("state").innerHTML = "End...";
};


var liveFeedText = new Array("Live", "((Live))", "(( Live ))", "((  Live  ))");
var liveFeedRoll = 0;

function onPlaying()
{
    if( ! inputTrackerScrolling )
    {
        var vlc = getVLC("vlc");
        var info = document.getElementById("info");
        var mediaLen = vlc.input.length;
        inputTrackerIgnoreChange  = true;
        if( mediaLen > 0 )
        {
            // seekable media
            if( inputTracker.maxVal == 1.0 )
            {
                inputTracker.setDisabled(false);
                inputTracker.maxVal = 1.0;
            }
            inputTracker.setValue(vlc.input.position);
            info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(mediaLen);
        }
        else
        {
            // non-seekable "live" media
            if( inputTracker.maxVal != 0.0 )
            {
                inputTracker.maxVal = 0.0;
                inputTracker.setValue(0.0);
                inputTracker.setDisabled(true);
            }
            liveFeedRoll = liveFeedRoll & 3;
            info.innerHTML = liveFeedText[liveFeedRoll++];
        }
        inputTrackerIgnoreChange  = false;
    }
};

function onPause()
{
    document.getElementById("state").innerHTML = "Paused...";
    document.getElementById("PlayOrPause").value = " Play ";
};

function onStop()
{
    // disable logging
    vlc.log.verbosity = -1;

    if( ! inputTracker.disabled )
    {
        inputTracker.setValue(inputTracker.minVal);
        inputTracker.setDisabled(true);
    }
    document.getElementById("info").innerHTML = "-:--:--/-:--:--";
    document.getElementById("state").innerHTML = "Stopped...";
    document.getElementById("PlayOrPause").value = " Play ";
};

function onError()
{
    var vlc = getVLC("vlc");

    document.getElementById("state").innerHTML = "Error...";
    if( vlc.log.messages.count > 0 )
    {
        // there is one or more messages in the log
        var iter = vlc.log.messages.iterator();
        while( iter.hasNext )
        {
            var msg = iter.next();
            if( msg.severity <= 1 )
            {
                alert( msg.message );
            }
            document.getElementById("message").innerHTML = msg.message;
        }
        // clear the log once finished to avoid clogging
        vlc.log.messages.clear();
    }
};

function onInputTrackerScrollStart()
{
    inputTrackerScrolling = true;
};

function onInputTrackerScrollEnd(inputTracker, value, pos)
{
    inputTrackerScrolling = false;
};

function onInputTrackerChange(inputTracker, value, pos)
{
    if( ! inputTrackerIgnoreChange )
    {
        var vlc = getVLC("vlc");
        if( (vlc.input.state == 3) && (vlc.input.position != value) )
        {
            var info = document.getElementById("info");
            vlc.input.position = value;
            info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(vlc.input.length);
        }
    }
};
//-->
</SCRIPT>
</BODY>
</HTML>