/*
 *  (c) Copyright 2000-2005
 *      everstream, Inc.
 *      All rights reserved.
 */

//=============================================================================================
//                  Media Player Library
//=============================================================================================

var MediaPlayerType="WindowsMedia";
var wantMute = false;
var mplayer = new WindowsMediaPlayer();

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

var curTimer;
function XPlayerInit()
{
    mplayer.create();
    var tuner = mplayer.obj;
    addEvent(tuner,"Error", mplayer_handleError, false, false);
    addEvent(tuner,"CurrentPlaylistChange", mplayer_playlistChange, false, false);
    addEvent(tuner,"CurrentItemChange", mplayer_currentItemChange, false, false);
    addEvent(tuner,"ScriptCommand", mplayer_scriptEvent, false, false);
    addEvent(tuner,"OpenStateChange", mplayer_openStateChange, false, false);
    addEvent(tuner,"PlayStateChange", mplayer_playStateChange, false, false);
    addEvent(tuner,"Click", mplayer_click, false, false);
    curTimer = window.setTimeout("mplayer_timer()", 500);
}

function mplayer_playlistChange(change)
{
    if ((change == playlistChangeInfoChange) || (change == playlistChangeNameChange))
        playLoaded = true;
}

function mplayer_click(nButton, nShift, fX, fY)
{
    getCD();
}

function mplayer_currentItemChange()
{
    if (!playLoaded)
        return;

    SNX.WM_CurrentItemChanged(mplayer.obj, mplayer.obj.currentMedia);
}

var mplayer_lastState = 0;

function mplayer_timer()
{
    curTimer = window.setTimeout("mplayer_timer()", 500)
    var curState;
    curState = mplayer.obj.playState;

    var countUpText = "";
    if (curState == playStatePlaying) { //Playing
        countUpText = mplayer.obj.controls.currentPositionString;
    }

    var elem = document.getElementById("playerStatus");
    if (elem) {
        var stat = mplayer.obj.status;
        if (stat != elem.innerHTML)
            elem.innerHTML = stat;
    }

    elem = document.getElementById("countUp");
    if (elem) {
        if (countUpText != elem.innerHTML)
            elem.innerHTML = countUpText;
    }

    if (curState != mplayer_lastState) {
        if (curState == playStatePlaying || curState == playStateBuffering || curState == playStateTransitioning) {
	    SNX.WM_Playing(true);
        } else {
	    SNX.WM_Playing(false);
        }

        if (curState == playStatePlaying) {
            SNX.WM_CurrentItemChanged(mplayer.obj, mplayer.obj.currentMedia);
	}
    }
    mplayer_lastState = curState;
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\

var mplayer_bRecon = 0;
function mplayer_handleError()
{
    var mp = mplayer.obj;

    if (mp == null)
        return;

    if (mp.errorCount != 0 ) {
        var curError = mp.error.item(0);
        var eCode = curError.errorCode;
        if (mplayer_bRecon == 0) {
            if (eCode == "-1072889815") {
                for(var recon = 0; recon < 40; recon++) {
                    setTimeout("XPlayerPlay();", 500);
                    if (mp.openState == openStatePlaylistLoading || mp.playState == playStatePaused) break;
                }
            } else if (eCode == "-2147024894") {
                alert("The format you requested is currently unavailable.\nPlease choose another.");
            } else if (eCode != "-2147024894") {
                if (mp.openState != openStatePlaylistLoading || mp.playState != playStatePaused || mp.openState != openStatePlaylistOpening) {
                    if (mp.openState == openStateUndefined) {
                        if (aff_alias == "") {
                            alert("Tuner Error!\nMissing default channel.\n\nPlease select a channel to start the tuner.");
                        }
                    } else {
                        alert(curError.errorDescription + "\n" + eCode + "\n" + mp.openState + " " + mp.playState);
                        alert("Connection Failure!\nIt appears your connection to the Internet has been lost!\nPress the \"F5\" key when your connection has been restored.");
                        mplayer_bRecon = 1;                 // fatal error, exit error trapping
                    }
                }
            }
        }
        mp.error.clearErrorQueue();
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
// Live Stream Code
function mplayer_scriptEvent(evType,evData)
{
    SNX.WM_Event(evType, evData);
}

function mplayer_openStateChange(newState)
{
}

function mplayer_playStateChange(newState)
{
    if (wantMute)
        if (mplayer.obj != null) 
            if (mplayer.obj.settings != null)
                mplayer.obj.settings.mute = wantMute;

    switch (newState) {
	case playStateStopped: Custom_PlayerEvent("stop");  break;
	case playStatePaused:  Custom_PlayerEvent("pause"); break;
	case playStatePlaying: Custom_PlayerEvent("play");  break;
    }
}

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=||=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\\
// MediaPlayer "class"

function XPlayerGetVolume()
{
    return mplayer.GetVolume();
}

function XPlayerSetVolume(n)
{
    mplayer.SetVolume(n);
}

function XPlayerGetStation()
{
    return mplayer.GetURL();
}

function XPlayerSetStation(channel)
{
    mplayer.Position = getCookie(escape(SNX.StationName + channel.Name));
    mplayer.SetURL(channel.Url);
}

function XPlayerSetURL(url)
{
    mplayer.Position = null;
    mplayer.SetURL(url);
}

function XPlayerIsPaused()
{
    return mplayer.IsPaused();
}

function XPlayerCanSkip()
{
    return mplayer.CanSkip();
}

function XPlayerPlay()
{
    mplayer.Play();
}

function XPlayerPause()
{
    mplayer.Pause();
}

function XPlayerStop()
{
    mplayer.Stop();
}

function XPlayerMuted()
{
    return mplayer.GetMute();
}

function XPlayerMute(v)
{
    mplayer.SetMute(v);
}

function XPlayerMoveNext()
{
    mplayer.MoveNext();
}

function XPlayerIsLiveStream()
{
    return mplayer.IsLiveStream();
}

function XPlayerGetMediaIndex()
{
    return mplayer.GetMediaIndex();
}

function XPlayerMediaOpened()
{
    return mplayer.obj.openState == openStateMediaOpen;
}
