﻿/************************************** Splendid *************************************
 * Created By:		Steve Doggett
 * Creation Date:	26th September 2007
 * Edited ----------------------------------------------------------------------------
 *      By:               On:
 * Description -----------------------------------------------------------------------
 *      This file creates and has all the event handlers for the media players
 *      
 *      Events Handlers:
 *          onBasePlayerLoaded(sender, evtArgs)
 *          onPlayClick(sender, evtArgs)
 *          onPauseClick(sender, evtArgs)
 *          onMediaOpen(sender, evtArgs)
 *          onMediaEnd(sender, evtArgs)
 *          onNextClick(sender, evtArgs)
 *          onPreviousClick(sender, evtArgs)
 *          onMute(sender, evtArgs)
 *          onButtonMouseEnter(sender, eventArgs)
 *          onButtonMouseLeave(sender, eventArgs)
 *          onVolumeClick(sender, eventArgs)
 *      
 **************************************************************************************/

/*************************************** Globals **************************************/
var currently = '';
var autoStart = true;
var videoControl = null;
var audioControl = null;
var videoQuality = 'hi';
var mouseDownPosition = 0;
var mouseDownValue = -1;


/*********************************** Player Functions **********************************/

/****
 *  Changes the video tracks and plays them in the player
 ****/   
function changeVideoTrack( track )
{
    BasePlayer.Stop();
    if( currently == 'video' )
    {
        BasePlayer.ChangeTrack(track);
        BasePlayer.Play();
    }else
    {
        currently = 'video';
        if( videoQuality == 'hi' )
            BasePlayer.Initialise(videoControl, videoPlaylistLo, autoStart, true);
        else
            BasePlayer.Initialise(videoControl, videoPlaylistHi, autoStart, true);
        BasePlayer.ChangeTrack(track);
        BasePlayer.Play();
    }
}

/****
 *  Changes the audio tracks and plays them in the player
 ****/   
function changeAudioTrack( track )
{
    BasePlayer.Stop();
    if( currently == 'audio' )
    {
        BasePlayer.InitPlaylist(audioPlaylist);
        BasePlayer.ChangeTrack(track);
        BasePlayer.Play();
    }else
    {
        currently = 'audio';
        BasePlayer.Initialise(audioControl, audioPlaylist, autoStart, false);
        BasePlayer.ChangeTrack(track);
        BasePlayer.Play();
    }
}

function onDefChange(sender, evtArgs)
{
    BasePlayer.Stop();
    if( videoQuality == 'hi' )
    {
        sender.findName(XAMLELEMENT_HIDEF).Foreground = '#FF717171';
        sender.findName(XAMLELEMENT_LODEF).Foreground = '#FFFFFFFF';
        BasePlayer.Initialise(videoControl, videoPlaylistLo, autoStart, true);
        videoQuality = 'lo';
    } else
    {
        sender.findName(XAMLELEMENT_HIDEF).Foreground = '#FFFFFFFF';
        sender.findName(XAMLELEMENT_LODEF).Foreground = '#FF717171';
        BasePlayer.Initialise(videoControl, videoPlaylistHi, autoStart, true);
        videoQuality = 'hi';
    }
    BasePlayer.Play();
}

/*********************************** Player Handlers **********************************/

/****
 * Called when the audio player xaml has been loaded successfully
 ****/
function onAudioPlayerLoaded( sender, evtArgs )
{   
    // Create and Initialise a new audio player object
    audioControl = sender;
    if( currently == 'audio' )
        BasePlayer.Initialise(sender, audioPlaylist, autoStart, false);
}

/****
 * Called when the audio player xaml has been loaded successfully
 ****/
function onVideoPlayerLoaded( sender, evtArgs )
{
    videoControl = sender;
    if( currently == 'video')
    {
        if( videoQuality == 'hi' )
            BasePlayer.Initialise(sender, videoPlaylistHi, autoStart, true);
        else
            BasePlayer.Initialise(sender, videoPlaylistLo, autoStart, true);
    }
}
 
/****
 * Event handler for the xaml play button click
 ****/
function onPlayClick( sender, evtArgs )
{
    var senderType = 'audio';
    
    // REALLY BAD HACK ALERT!!!
    // Need to know which play button has been clicked, so audio has Canvas.Left of 0.5
    if( sender.GetValue('Canvas.Left') == '0' )
        senderType = 'video';
    
    if( senderType == currently )
    {
        BasePlayer.Play();
    } else if( currently == 'audio')
    {
        try{
            BasePlayer.Stop();
        } catch(e){}
        currently = 'video';
        BasePlayer.SetTrack( 0 );
        if( videoQuality == 'hi' )
            BasePlayer.Initialise(videoControl, videoPlaylistHi, autoStart, true);
        else
            BasePlayer.Initialise(videoControl, videoPlaylistLo, autoStart, true);
    } else
    {
        try{
            BasePlayer.Stop();
        } catch(e){}
        currently = 'audio';
        BasePlayer.SetTrack( 0 );
        BasePlayer.Initialise(audioControl, audioPlaylist, true, false);
    }
}

/****
 * Event handler for the xaml pause button click
 ****/
function onPauseClick( sender, evtArgs )
{
    BasePlayer.Pause();
}

/****
 * Event handler for the xaml media element on media loaded event
 ****/
function onMediaOpen( sender, evtArgs )
{
    BasePlayer.MediaLoaded();
}

function onMediaLoaded( sender, evtArgs )
{
    BasePlayer.MediaLoaded();
}

/****
 * Event handler for the xaml media element on media end event
 ****/
function onMediaEnd( sender, evtArgs )
{
    BasePlayer.Next();
}

/****
 * Event handler for the xaml next button click
 ****/
function onNextClick( sender, evtArgs )
{
    BasePlayer.Next();
}

/****
 * Event handler for the xaml previous button click
 ****/
function onPreviousClick( sender, evtArgs )
{
    BasePlayer.Previous();
}

/****
 * Event handler for the xaml mute button click
 ****/
function onMute( sender, evtArgs )
{
    if( BasePlayer.GetMuted() )
        BasePlayer.UnMute();
    else
        BasePlayer.Mute();
}

/****
 * Defines the mouse enter events for the buttons
 ****/
function onButtonMouseEnter(sender, eventArgs)
{  
    var oObject = null;
    
    switch( sender.name.toLowerCase() )
    {
        case 'nextbuttonover':
            oObject = sender.findName("NextSymbol");
            oObject.Fill = '#FF999999';
            break;
        case 'previousbuttonover':
            oObject = sender.findName("PreviousSymbol");
            oObject.Fill = '#FF999999';
            break;
        case 'volumethumbover':
            oObject = sender.findName("VolumeThumb");
            oObject.Fill = '#FF999999';
            break;
        case 'playbuttonover':
            oObject = sender.findName("PlaySymbol");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("PlayBg");
            oObject.Stroke = '#FF999999';
            break;
        case 'pausebuttonover':
            oObject = sender.findName("PauseRect1");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("PauseRect2");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("PauseBg");
            oObject.Stroke = '#FF999999';
            break;
        case 'mutebuttonover':
            oObject = sender.findName("MuteSpeakerPath1");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("MuteSpeakerPath2");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("MuteSpeakerPath3");
            oObject.Fill = '#FF999999';
            break;
        case 'volumebar1over':
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#FF999999';
            break;
        case 'volumebar2over':
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#FF999999';
            break;
        case 'volumebar3over':
            oObject = sender.findName("VolumeBar3");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#FF999999';
            break;
        case 'volumebar4over':
            oObject = sender.findName("VolumeBar4");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar3");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#FF999999';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#FF999999';
            break;
	    case 'slider_thumb':
            oObject = sender.findName("RectGrey");
            oObject.Fill = '#FF999999';
            break;
    }
}

/****
 * Defines the mouse leave events for the buttons
 ****/
function onButtonMouseLeave(sender, eventArgs)
{  
    var oObject = null;

    switch( sender.name.toLowerCase() )
    {
        case 'nextbuttonover':
            oObject = sender.findName("NextSymbol");
            oObject.Fill = '#FFFFFFFF';
            break;
        case 'previousbuttonover':
            oObject = sender.findName("PreviousSymbol");
            oObject.Fill = '#FFFFFFFF';
            break;
        case 'volumethumbover':
            oObject = sender.findName("VolumeThumb");
            oObject.Fill = '#FFFFFFFF';
            break;
        case 'playbuttonover':
            oObject = sender.findName("PlaySymbol");
            oObject.Fill = '#FFFFFFFF';
            oObject = sender.findName("PlayBg");
            oObject.Stroke = '#FFFFFFFF';
            break;
        case 'pausebuttonover':
            oObject = sender.findName("PauseRect1");
            oObject.Fill = '#FFFFFFFF';
            oObject = sender.findName("PauseRect2");
            oObject.Fill = '#FFFFFFFF';
            oObject = sender.findName("PauseBg");
            oObject.Stroke = '#FFFFFFFF';
            break;
        case 'mutebuttonover':
            oObject = sender.findName("MuteSpeakerPath1");
            oObject.Fill = '#FFFFFFFF';
            oObject = sender.findName("MuteSpeakerPath2");
            oObject.Fill = '#FFFFFFFF';
            oObject = sender.findName("MuteSpeakerPath3");
            oObject.Fill = '#FFFFFFFF';
            break;
        case 'volumebar1over':
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#00FFFFFF';
            break;
        case 'volumebar2over':
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#00FFFFFF';
            break;
        case 'volumebar3over':
            oObject = sender.findName("VolumeBar3");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#00FFFFFF';
            break;
        case 'volumebar4over':
            oObject = sender.findName("VolumeBar4");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar3");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar2");
            oObject.Fill = '#00FFFFFF';
            oObject = sender.findName("VolumeBar1");
            oObject.Fill = '#00FFFFFF';
            break;    
	    case 'slider_thumb':
            oObject = sender.findName("RectGrey");
            oObject.Fill = '#00999999';
            break;
    }
}

/****
 * Defines the click events for volume
 ****/
function onVolumeClick(sender, eventArgs)
{      
    switch( sender.name.toLowerCase() )
    {
        case 'volumebar1over':
            BasePlayer.SetVolume(1);
            break;
        case 'volumebar2over':
            BasePlayer.SetVolume(2);
            break;
        case 'volumebar3over':
            BasePlayer.SetVolume(3);
            break;
        case 'volumebar4over':
            BasePlayer.SetVolume(4);
            break;
    }
}

/************************************ Slider Handlers **********************************/

function onSliderLeftButtonUp(sender, evtArgs)
{
    var coordinate = evtArgs.getPosition(null).x;
    coordinate -= sender["Canvas.Left"];
    BasePlayer.SetSliderValue(coordinate);
    BasePlayer.Pause();
    BasePlayer.SeekTo();
    BasePlayer.Play();
}

function onThumbMouseLeftButtonDown(sender, evtArgs) 
{
    BasePlayer.Pause();
    var slider = sender.findName(XAMLELEMENT_SLIDER);
    sender.captureMouse();
    mouseDownValue = BasePlayer.GetSliderValue();
    mouseDownPosition = evtArgs.getPosition(null).x;
}

function onThumbMouseLeftButtonUp(sender, v) 
{
    var slider = sender.findName(XAMLELEMENT_SLIDER);
    sender.releaseMouseCapture();
    mouseDownValue = -1;
    BasePlayer.SeekTo();
    BasePlayer.Play();
}

function onThumbMouseMove(sender, evtArgs) 
{
    var newValue = 0;
    var slider = sender.findName(XAMLELEMENT_SLIDER);
    
    if (mouseDownValue != -1) {
        newValue = mouseDownValue
        + (evtArgs.getPosition(null).x - mouseDownPosition);
       BasePlayer.SetSliderValue(newValue);
    }
}