/**
 * Silverlight Player. Wrapper for JWPlayer
 * @see com.metafusion.VideoPlayer
 * @author m.donay@meta-fusion.com
 */
com.metafusion.SilverlightPlayer = function(){

    //-----// public members //-----//
    
    com.metafusion.SilverlightPlayer.prototype.classname = "com.metafusion.SilverlightPlayer";
    com.metafusion.SilverlightPlayer.prototype.target = "";
    
    
    //-----// private members //-----//
    
    /**
     * _name: DOM id of the player object
     */
    var _name = "silverlightplayer";
    
    /**
     * _player: points to the player object
     * call registerPlayer() to initialize.
     * @see registerPlayer()
     */
    var _player = null;
    
    
    //-----// public functions //-----//
    
    /**
     * switch visibility of the player object
     * @param {Object} visible
     */
    com.metafusion.SilverlightPlayer.prototype.setVisible = function(visible){
        if ((typeof visible) == (typeof true)) {
            _player.style.visibility = visible ? 'visible' : 'hidden';
        }
    }
    
    /**
     * assigns parameters to the player object.
     * called by com.metafusion.PlayerApplication.showPlayer(target)
     * @param {String} key
     * @param {Object} value
     */
    com.metafusion.SilverlightPlayer.prototype.addVariable = function(key, value){
        switch (key) {
            case "src":{
                src = value;
                break;
            }
            case "width":{
                width = value;
                break;
            }
            case "height":{
                height = value;
                break;
            }
            case "stateChangeEventListener":{
                stateChangeEventListener = value;
                break;
            }
            case "errorEventListener":{
                errorEventListener = value;
                break;
            }
            case "scriptEventListener":{
                scriptEventListener = value;
                break;
            }
            case "positionChangeEventListener":{
                positionChangeEventListener = value;
                break;
            }
            default:
                {
                    break;
                }
        }
    }
    
    /**
     * gets the total length of the clip currently loaded
     * @return time in milliseconds
     */
    com.metafusion.SilverlightPlayer.prototype.getLength = function(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return "error";
        }
        return Math.round(_player.model.configuration['duration'] * 1000);
    }
    
    /**
     * gets the current playhead position
     * @return time in milliseconds
     */
    com.metafusion.SilverlightPlayer.prototype.getPosition = function(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return "error";
        }
        //return Math.round(_player.Position * 1000);
        return Math.round(_player.model.video.Position.Seconds * 1000);
    }
    
    /**
     * sets the playhead position
     * @param {Number} position: new position in milliseconds
     */
    com.metafusion.SilverlightPlayer.prototype.setPosition = function(position){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return "error";
        }
        _player.sendEvent('SCRUB', (position / 1000));
        return "new position: " + Math.round(_player.model.video.Position.Seconds * 1000);
    }
    /**
     * 091102_1747_malte hotfix for backend:workprogramme/agenda link compatibility
     * document.MediaPlayer.SetPosition(0*1000);
     */
    com.metafusion.SilverlightPlayer.prototype.SetPosition = com.metafusion.SilverlightPlayer.prototype.setPosition;
    
    /**
     * starts the videoplayback
     */
    com.metafusion.SilverlightPlayer.prototype.play = function(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return;
        }
        _player.sendEvent('PLAY');
    }
    
    /**
     * gets some available metadata.
     */
    com.metafusion.SilverlightPlayer.prototype.getMetadata = function(){
        return "currently not implemented";
    }
    
    /**
     * stops the videoplayback
     */
    com.metafusion.SilverlightPlayer.prototype.stop = function(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return;
        }
        _player.sendEvent('STOP');
        
    }
    
    /**
     * pause (well - stops) the videoplayback
     */
    com.metafusion.SilverlightPlayer.prototype.pause = function(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return;
        }
        _player.sendEvent('STOP');
    }
    
    /**
     * writes the player object into the DOM.
     * @see lib/jwplayer/silverlight.js
     * @see lib/jwplayer/wmplayer.js
     * @see lib/jwplayer/wmvlayer.xaml
     *
     * @param {String} target: id of the HTMLObject to contain the player
     */
    com.metafusion.SilverlightPlayer.prototype.write = function(_target, sessionType){
    
        var exec = 'lib/jwplayer/wmvplayer.xaml';
        var cfg = {
            width: width,
            height: height,
            file: src,
            shownavigation: 'false',
           // logo: 'assets/img/COP15_videooverlay_FIN_ALT.png',
            autostart: 'true'
        };
        targetElement = document.getElementById(_target);
        _player = new jeroenwijering.Player(targetElement, exec, cfg);
        setTimeout(registerEventListeners, 0);
        /*
         event="ScriptCommand(scType, Param)";
         scriptEventListener(scType, Param);;
         
         event="PlayStateChange(NewState)";
         stateChangeEventListener(NewState);;
         
         event="PositionChange(oldPosition, newPosition)";
         positionChangeEventListener(oldPosition, newPosition);;
         */
        this.target = _target;
    }
    
    
    /**
     * Shows or hides the player controls
     */
    com.metafusion.SilverlightPlayer.prototype.showControls = function(show){
        //not implemented
    }
    
    /**
     * sets up an DOM pointer to the player object, referenced by _name
     */
    function registerEventListeners(){
        if (!_player) {
            debug(this.classname + ': Player object not registered');
            return;
        }
        if (_player.view) {
            _player.addListener('TIME', positionChangeEventListener);
            _player.addListener('STATE', stateChangeEventListener);
        }
        else {
            setTimeout(registerEventListeners, 100);
        }
    }
}
