/*

- Javascript Enabled?
- Flash Version
- Operating System
- Browser
- Connection Speed?*
- Connectivity?*

- Plugins enabled? (This looks exactly like Flash not being installed, so need to leave it up to user discretion)

- Player Loaded successfully?
- Player reports playback?
- How long does it take play session to become ready

- User reports video playback?
- User reports audio playback?
- User comments

*/

function notify(message, answer)
{
    var dt = document.createElement("dt");
    dt.innerHTML = message;
    
    var dd = document.createElement("dd");
    dd.innerHTML = answer;

    $("form dl").append(dt);
    $("form dl").append(dd);
}

function embedPlayer()
{
    var flashvars = {};
    flashvars.seed_name = "demo";
    flashvars.presentation_id = "38";
    flashvars.AUTOLOAD = "true";
    
    var params = {};
    params.name = "vjPlayer";
    params.allowFullScreen = "true";
    params.allowscriptaccess = "always";
    params.wmode = "transparent";
    
    var attributes = {};
    attributes.id = "vjPlayer";
    
    swfobject.embedSWF("http://player.videojuicer.com/bootstrap.swf", "videoContainer", "450px", "283px", "9.0.0", false, flashvars, params, attributes);
    notify('Tried to embed player', 'Yes');
}

function checkForPlayer()
{
    var videoPlayer = swfobject.getObjectById("vjPlayer");
    
    if((videoPlayer != null) && (videoPlayer.isSessionReady != null) && videoPlayer.getVersion() != undefined)
    {
        notify('Videojuicer Player', videoPlayer.getVersion()+" loaded");
    
        checkForPlayerSession();
        
        return;
    }
    
    setTimeout(checkForPlayer,500);
}

var sessionTestTried = 0;

function checkForPlayerSession()
{
    var videoPlayer = swfobject.getObjectById("vjPlayer");

    if (videoPlayer.isSessionReady()) {
        // found player
        notify('SMIL Loaded?', 'Yes');
        
        notify('Buffer', 'Checking ...');
        
        setTimeout(bufferTest, 1500);
        
        return;
    }
    
    if (sessionTestTried >= 30)
    {
        notify('SMIL Loaded?', 'Failed after 60 seconds');
        // is there any diagnostic information we can provide here?
        return;
    }
    
    setTimeout(checkForPlayerSession, 500);
}

var loadTestTried = 0;
var loadStarted = false;


function bufferTest()
{
     var videoPlayer = swfobject.getObjectById("vjPlayer");

    if (loadTestTried == 0)
    {
        videoPlayer.load();

        notify('Buffer', 'Starting');
    }

    loadTestTried++;

	if (videoPlayer.hasStartedLoading() && !loadStarted) {
		notify('Buffer', 'Request has started');
		
		loadStarted = true;
	}
    
    if (videoPlayer.getBufferPercent() > 50) {
        notify('Buffer', 'Successfully buffered '+videoPlayer.getBufferPercent()+'% ('+videoPlayer.getBytesLoaded()+'/'+videoPlayer.getBytesTotal()+')');
        
        notify('Playback', 'Checking playback in 2 seconds');
        
        setTimeout(playbackTest, 2000);
        return;
    }
    
    if (loadTestTried >= 240)
    {
        notify('Buffer', 'Failed after 120 seconds');
        return;
    }
    
    setTimeout(bufferTest, 500);	
}

var playbackTestTried = 0;
var playbackStarted = false;

function playbackTest()
{
     var videoPlayer = swfobject.getObjectById("vjPlayer");

    if (playbackTestTried == 0)
    {
        videoPlayer.resume();
        notify('Playback', 'Starting');
    }

    playbackTestTried++;

	if (videoPlayer.hasStartedPlayback() && !playbackStarted) {
		notify('Playback', 'Request has started');
		
		playbackStarted = true;
	}
    
    if (videoPlayer.isPlaying()) {
        notify('Playback', 'Successful');
        
        notify('Playback', 'Checking pause in 2 seconds');
        
        setTimeout(pausePlaybackTest, 2000);
        return;
    }
    
    if (playbackTestTried >= 240)
    {
        notify('Playback', 'Failed after 120 seconds');
        return;
    }
    
    setTimeout(playbackTest, 500);
}

var pauseTestTried = 0;

function pausePlaybackTest()
{
     var videoPlayer = swfobject.getObjectById("vjPlayer");

    if (pauseTestTried == 0)
    {
        videoPlayer.pause();
        notify('Playback', 'Pausing');
    }

    pauseTestTried++;
    
    if (!videoPlayer.isPlaying()) {
        notify('Playback', 'Paused Successfully');

		alert("Player tests ran successfully, see output for diagnostics.");
        return;
    }
    
    if (pauseTestTried >= 240)
    {
        notify('Playback', 'Failed to pause after 120 seconds');
        return;
    }
    
    setTimeout(pausePlaybackTest, 500);
}

function notifyOperatingSystem()
{
    if (swfobject.ua.win)
    {
        notify('Operating System', 'Windows');
    }
    else if (swfobject.ua.mac)
    {
        notify('Operating System', 'Mac OS X'); // assume they're using a modern version of macOS
    }
    else
    {
        notify('Operating System', 'Other');
    }
}

function notifyBrowser()
{   
	var dt = document.createElement("dt");
    dt.innerHTML = 'Browser';
	$(dt).addClass('browser');
    
    var dd = document.createElement("dd");
    dd.innerHTML = window.navigator.userAgent;
	$(dd).addClass('browser');

    $("form dl").append(dt);
    $("form dl").append(dd);
}

function run_test_suite() {
	notify('Javascript Enabled?', 'Yes');
    notifyOperatingSystem();
    notifyBrowser();
    
    // use swfobject to detect flash version
    var flashVersion = swfobject.getFlashPlayerVersion();
    if (flashVersion.major == 0)
    {
        notify('Flash Version', 'Flash is not installed or disabled');
        // Provide instructions on how to enable Flash, if they know they have Flash installed.
    }
    else
    {
        notify('Flash Version', flashVersion.major + "." + flashVersion.minor + "." + flashVersion.release);
        if (flashVersion.major < 9 || flashVersion.major == 9 && flashVersion.minor <= 0 && flashVersion.release <= 124 )
        {
            // User has an old version of flash.  Notify user to update
            notify('Flash Version', 'is too old, please <a href="http://get.adobe.com/flashplayer/">update</a> Flash');

			alert("Player tests ran successfully, see output for diagnostics.");
        }
        else
        {
            // Flash version is acceptable
            // Embed player
            embedPlayer();
            checkForPlayer();
        }
    }
}

$(document).ready(function(){ 
   	if (confirm("Are you sure you want to run the player tests? This will take a few minutes.")) {
		run_test_suite();
	}
});
