
// WM7 MediaPlayer Area

WM7PlayerArea = function(container, containingWindow, id) {
    WM7PlayerArea.initializeBase(this, [container, containingWindow, id]);

    this.SetupPlayer = function() {
        var initDelay = 100;

        if (mPlayer.PlayerDetect.GetPlayerType() == SfKernel.MediaPlayerType.WM7) {
            var wm7Player = document.createElement("OBJECT");
            wm7Player.setAttribute("id", "EmbeddedPlayer");
            wm7Player.setAttribute("classid", "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6");
            var wm7PlayerUI = document.createElement("PARAM");
            wm7PlayerUI.setAttribute("name", "uiMode");
            wm7PlayerUI.setAttribute("value", "none");
            wm7Player.appendChild(wm7PlayerUI);
            $('PlayerVideo').appendChild(wm7Player);
            $('EmbeddedPlayer').uiMode = "none";
        }
        else if (mPlayer.PlayerDetect.GetPlayerType() == SfKernel.MediaPlayerType.Port25) {
            var port25Player = document.createElement("OBJECT");
            port25Player.setAttribute("id", "EmbeddedPlayer");
            port25Player.setAttribute("data", "");
            port25Player.setAttribute("type", "application/x-ms-wmp");
            var styleFormat = String.format("width:{0}px;height:{1}px", LayoutOptions.VideoWidth, LayoutOptions.VideoHeight);
            port25Player.setAttribute("style", styleFormat);
            var port25PlayerUI = document.createElement("PARAM");
            port25PlayerUI.setAttribute("name", "uiMode");
            port25PlayerUI.setAttribute("value", "none");
            port25Player.appendChild(port25PlayerUI);
            $('PlayerVideo').appendChild(port25Player);

            initDelay = 750;
        }

        this.embeddedPlayer = $('EmbeddedPlayer');
        this.pci = new SfMediaPlayer.WM7.PlayerControl(this.embeddedPlayer);
        this.AdjustSize();

        window.setTimeout(this.WaitForPlayerInit.bind(this), initDelay);
    }

    this.WaitForPlayerInit = function() {
        if (!this.embeddedPlayer.settings) {
            window.setTimeout(this.WaitForPlayerInit.bind(this), 200);
            return;
        }
        this.LoadPlayer();
    }

    this.LoadPlayer = function() {
        this.embeddedPlayer.enableContextMenu = GlobalOptions.EnableContextMenuForPlayer;
        this.embeddedPlayer.windowlessVideo = true;
        this.embeddedPlayer.settings.invokeURLs = false;
        this.embeddedPlayer.stretchToFit = true;


        this.AttachMediaEvents();
        this.AddEventHandlers();

        this.SetMediaSource();

        this.Volume = new SfMediaPlayer.Volume(this.pci);
        this.timerManager = new SfMediaPlayer.TimerManager(this);

        if (mPlayer.CurrentSlidePanelInstance && Manifest.PlayStatus == SfKernel.PresentationPlayStatus.OnDemand) {
            mPlayer.EventManager.Events.addHandler(SfKernel.EventType.TimerLoop, this.TimerLoopEventHandler.bind(this));
        }
    }

    this.AttachMediaEvents = function() {
        if (document.attachEvent) {
            this.embeddedPlayer.attachEvent("OpenStateChange", this.OnMediaOpenStateChange.bind(this));
            this.embeddedPlayer.attachEvent("MediaError", this.OnMediaError.bind(this));
            this.embeddedPlayer.attachEvent("PlayStateChange", this.OnMediaPlayStateChange.bind(this));

            if (!GlobalOptions.UseLiveEventPolling) {
                this.embeddedPlayer.attachEvent("ScriptCommand", this.OnScriptCommand.bind(this));
            }
        }
    }

    this.TimerLoopEventHandler = function(sender, args) {
        this.HandleSlideChangeWhenPositionChanges(args["Position"]);
    }

    this.OnMediaOpenStateChange = function(openState) {
        if (openState != 13) {
            return;
        }

        mPlayer.VolumeSliderInstance.OnLoad();
        mPlayer.PlayerSliderInstance.OnLoad();
        mPlayer.ReportViewerPageOpened();

        if (this.embeddedPlayer.currentMedia.getItemInfo("MediaType") == 'audio') {
            Manifest.HasVideo = false;
        }
        else {
            Manifest.HasVideo = true;
        }

        mPlayer.EventManager.PostEvent(SfKernel.EventType.MediaOpened, this, null);

        this.InitVolume();
        this.HandleAudioOnly();
        this.LoadAudioLanguages();

        if ((Manifest.PlayStatus == SfKernel.PresentationPlayStatus.Live || Manifest.PlayStatus == SfKernel.PresentationPlayStatus.LivePaused) && GlobalOptions.UseLiveEventPolling) {
            this.timerManager.pollLiveEvents = true;
        }

        this.PostMediaLengthObtainedEvent();
        this.CheckStartStopTimes();

        this.timerManager.Start();
    }

    this.LoadAudioLanguages = function() {
        var languageCount = this.pci.GetAudioLanguageCount();
        if (languageCount > 1) {
            var currentIndex = this.pci.GetCurrentAudioLanguageIndex();
            var AudioLanguages = new Array(languageCount);

            for (var i = 0; i < languageCount; ++i) {
                var lcid = this.pci.GetAudioLanguageID(i + 1);
                AudioLanguages[i] = new SfKernel.AudioLanguageEntry(i + 1, lcid, this.pci.GetAudioLanguageName(lcid));
            }

            mPlayer.LoadAudioLanguages(AudioLanguages, currentIndex);
        }
    }

    this.OnMediaError = function() {
        this.HandleMediaPlayerError(this.FormatErrorMessage(this.embeddedPlayer.currentMedia.error));
    }

    this.OnMediaPlayStateChange = function(playState) {
        if (this.currentMediaState != playState) {
            this.currentMediaState = playState;
            mPlayer.EventManager.PostEvent(SfKernel.EventType.PlayStateChanged, this, playState);
            this.CheckIfLiveEnded(playState);
        }
    }

    this.OnScriptCommand = function(sType, sParam) {
        this.ScriptParser.ParseScriptFromStream(sType, sParam);
    }

    this.FormatErrorMessage = function(error) {
        if (!error.errorCode) {
            return Localization.MediaPlayer.GeneralError;
        }

        var errorDescription;

        switch (error.errorCode) {
            case -1072885294: //C00D11D2
            case -1072885353: //C00D1197			
                errorDescription = Localization.MediaPlayer.FileNotFoundError;
                break;
            case -1072885352: //C00D1198
                errorDescription = Localization.MediaPlayer.ServerConnectionError;
                break;
            case -1072885328: //C00D11B0 
                errorDescription = Localization.MediaPlayer.ServerNotAvailable;
                break;
            default:
                errorDescription = error.errorDescription + " (" + error.errorCode + ")";
                break;
        }

        return errorDescription;
    }

}
WM7PlayerArea.registerClass('WM7PlayerArea', MediaPlayerArea);

Type.registerNamespace('SfMediaPlayer.WM7');
SfMediaPlayer.WM7.PlayerControl = function(objEmbeddedPlayer)
{
	this.objEmbedded = objEmbeddedPlayer;
	
	this.GetVersionInfo = function()
	{
		return this.objEmbedded.versionInfo;
	}

	this.Play = function()
	{
		this.objEmbedded.controls.play();
	}
	
	this.Stop = function()
	{
		this.objEmbedded.controls.stop();
	}
	
	this.Pause = function()
	{
		this.objEmbedded.controls.pause();
	}

    this.GetCurrentAudioLanguageIndex = function()
    {
		try
		{
		    return this.objEmbedded.controls.currentAudioLanguageIndex;
		}
		catch(ex)
		{
		    return 0;
		}        
    
    }
    
    this.GetAudioLanguageCount = function()
    {
		try
		{
		    return this.objEmbedded.controls.audioLanguageCount;
		}
		catch(ex)
		{
		    return 1;
		}        
    
    }
    this.GetAudioLanguageID = function(index)
    {
		try
		{
		    return this.objEmbedded.controls.getAudioLanguageID(index);
		}
		catch(ex)
		{
		    return 0;
		}            
    }

    this.GetAudioLanguageName = function(lcid)
    {
		try
		{
		    return this.objEmbedded.controls.getLanguageName(lcid);
		}
		catch(ex)
		{
		}        
    }
        
	this.SetAudioLanguageIndex = function(index)
	{
		try
		{
			this.objEmbedded.controls.currentAudioLanguageIndex = index;
		}
		catch(ex)
		{
		}
	}
	
	this.GetPlayState = function()
	{
		return this.objEmbedded.playState;
	}
	
	this.SetFullScreen = function(f)
	{
		this.objEmbedded.fullScreen = f;
	}
	
	this.SetPosition = function(positionInMS)
	{	    
		this.objEmbedded.controls.currentPosition=positionInMS/1000;	
	}

	this.GetPosition = function()
	{
		return this.objEmbedded.controls.currentPosition * 1000;
	}
	
	this.GetMediaDuration = function()
	{
		if (this.objEmbedded.currentMedia)
		{
			return this.objEmbedded.currentMedia.duration * 1000;
		}
		
		return 0;
	}

	this.SetMedia = function(sMedia)
	{
		this.objEmbedded.URL=sMedia;
	}
	
	this.GetCurrentMarker = function()
	{
		return this.objEmbedded.controls.currentMarker;
	}
	
	this.GetMediaMarkerCount = function()
	{
		if (this.objEmbedded.currentMedia)
		{
			return this.objEmbedded.currentMedia.markerCount;
		}
		
		return 0;
	}
	
	this.GetMediaMarkerName = function(nIndex)
	{
		if (this.objEmbedded.currentMedia)
		{
			return this.objEmbedded.currentMedia.getMarkerName(nIndex);
		}
		
		return null;
	}
	
	this.GetMediaMarkerTime = function(nIndex)
	{
		if (this.objEmbedded.currentMedia)
		{
			return this.objEmbedded.currentMedia.getMarkerTime(nIndex);
		}
		
		return 0;
	}
	
	this.GetVolume = function()
	{
		return this.objEmbedded.settings.volume;
	}
	
	this.SetVolume = function(nVolume)
	{
		this.objEmbedded.settings.volume = Math.round(nVolume);
	}
	
	this.SetMute = function(fMute)
	{
		this.objEmbedded.settings.mute = fMute;
	}
	
	this.SetPlaybackSpeed = function(speed)
	{
		this.objEmbedded.settings.rate = speed;
	}
}

/// Port25 Media Event Handlers
function OnDSPlayStateChangeEvt(newState)
{
    mPlayer.PlayerAreaInstance.OnMediaPlayStateChange(newState);
}
function OnDSOpenStateChangeEvt(newState)
{
    mPlayer.PlayerAreaInstance.OnMediaOpenStateChange(newState);
}
function OnDSScriptCommandEvt(scriptType, scriptParam)
{
   mPlayer.PlayerAreaInstance.OnScriptCommand(scriptType, scriptParam);
}
function OnDSMediaErrorEvt()
{
   mPlayer.PlayerAreaInstance.OnMediaError();
}



