﻿$namespace('System.Page.Util');
$namespace('System.Page.HttpContext');
//$namespace('System.Controls.MediaPlayer');

var player;
var eRecepcao;
var ePlay;
var ePause;
var eTimer;
var eMute;
var root;
var divDebug;
var language;

var isIE7 = (navigator.userAgent.indexOf('MSIE 7') != -1);
var isMac = (navigator.platform.indexOf('Mac') != -1);
var isOSX = (navigator.userAgent.indexOf('Mac OS X') != -1);
var isChrome = (navigator.userAgent.indexOf('Chrome') != -1);
var isSafari = !isChrome && (navigator.userAgent.indexOf('Safari') != -1);
var isLinux = (navigator.userAgent.indexOf('Linux') != -1);
var isWindows = (navigator.userAgent.indexOf('Windows') != -1);
var isFirefox = (navigator.userAgent.indexOf('Firefox') != -1);

var PlayStateNames = {
    pt: ["Parado", "Pausa", "Reproduzindo", "Carregando...", "Buscando pra frente", "Buscando pra tras", "Adiantando", "Voltando", "Fechado"],
    en: ["Stopped", "Paused", "Playing", "Buffering...", "ScanForward", "ScanReverse", "SkipForward", "SkipReverse", "Closed"],
    es: ["Parado", "Pausa", "Reproduzindo", "Carregando...", "Buscando pra frente", "Buscando pra tras", "Adiantando", "Voltando", "Fechado"]
};

function describeObject(obj, div){
    var s = '<div>'; 
    for (var p in obj)
        //if (!isNaN(parseInt(obj[p])))
        if ( typeof(obj[p]) != 'function')
            s += p + ': ' + obj[p] + ';<br />';
    s +='</div>';
    if (div)
        div.innerHTML = s;
    else
        document.body.innerHTML += s;
};

function debug(text){
    if (divDebug) { 
        var t = divDebug.innerHTML;
        divDebug.innerHTML = text + '<br />' + t;
    }
}

function getPlayStateName(){
    try {
        var lang = "";
        var playState = player.obj.PlayState;
        lang = (language ? language : 'pt');
        lang = lang.toLowerCase().substr(0,2);
        switch (lang) {
            case 'en': return PlayStateNames.en[playState];
            case 'es': return PlayStateNames.es[playState];
            default: return PlayStateNames.pt[playState];
        }
    }
    catch (e) { return ""; }
};

function onBuffering(progress){
    $html(eRecepcao, getPlayStateName());
    $html(eTimer, progress + '%');
    debug('onBuffering');
};

function onError(err) { 
    // erro do player
    $html(eRecepcao, getPlayStateName());
    player.dispose();
    debug('Error CODE:' + err.code + ', DESCRIPTION: ' + err.description)
};

function onStop(){
    $hide(ePause);
    $show(ePlay);
    $html(eRecepcao, getPlayStateName());
    debug('onStop');
};

function onPause() {
    $hide(ePause);
    $show(ePlay);
    $html(eRecepcao, getPlayStateName());
    debug('onPause');
};

function onPlay() { 
    $hide(ePlay);
    $show(ePause);
    $html(eRecepcao, getPlayStateName());
    $html(eTimer, '');
    verificaOnDemand();
    debug('onPlay');
};

function onReady() { 
    debug('onReady');
};

function onChangeVolume() { 
    debug('onChangeVolume');
};

function onChangePosition(pos) {
    // pos = { position:int, time:string, duration:string }
    $html(eTimer, (pos ? strDuration(pos.time, pos.duration) : ''));
    debug('onChangePosition');
};
    
function onMute(isMute) {
    if (eMute) {
        if (isMute) {
            eMute.src = root + 'images/btn_mute_ass.gif';
            eMute.alt = 'Liga Som';
        }
        else{
            eMute.src = root + 'images/btn_vol_ass.gif';
            eMute.alt = 'Desliga Som';
        }
    }
    debug('onMute ' + isMute);
}

function onPlaying(pos) {
    try {
        // pos = { position:string, duration:string }
        var banda = player.getBandwidth();
        var bitRate = player.getBandwidth();

        if (eRecepcao) {
            if (player.obj.ReceptionQuality)
                eRecepcao.className = player.obj.ReceptionQuality > 75 ? 'recepcaoBoa' : 'recepcaoRuim' ;
            else
                eRecepcao.className = ((banda == 0) || (banda > 0.75 * bitRate) ? 'recepcaoBoa' : 'recepcaoRuim' );
            
            eRecepcao.innerHTML = getPlayStateName() + ' ' + (banda != 0 ? banda + ' Kbps' : (bitRate != 0 ? bitRate + ' Kbps' : ''));
        }
        $html(eTimer, (pos ? strDuration(pos.position, pos.duration) : ''));
    } catch (e) { }
};

function strDuration(posicao, duracao){
    return posicao + (duracao == '00:00' ? '': '/' + duracao);
}

function updateVolume(step){
    player.setVolume(player.getVolume() + step);
}

function existePlayer(){
    var existe = false;
    try { if (player && !player.disposed) { existe = true;  } } catch (e) { }
    return existe;
}

function verificaOnDemand(){
    if (existePlayer()) {
        //if (!player.obj.IsBroadcast) { // player.obj.IsBroadcast dá pau no FF
        if (player.getDuration(true) > 0) { // se duracao > 0s é ondemand.
            if(!player.slider.video) {
                player.setSliderVideo($('SliderVideo'), $('SliderVideoBtn'));
            }
            $show('OnDemand');
        }
        else {
            if(player.slider.video) {
                player.slider.video.dispose()
            }
            $hide('OnDemand');
        }
    }
    debug('verificaOnDemand');
}

function HidePlayer(){
    if (existePlayer()) {
        player.stop();
        player.dispose();
    }
};

function Pause(){
    if (existePlayer()) {
        if (player.obj.IsBroadcast) {
            player.stop();
        }
        else {
            player.pause();
        }
    }
};

function InitPlayer(largura, altura, larguraMax, alturaMax, URL, rootDir, idioma) {
    language = idioma;
    root = rootDir;
    
    ePlay = $('botaoPlay');
    ePause = $('botaoPause');
    eMute = $('imgAudio');
    eRecepcao = $('recepcao');
    eTimer = $('timer');
    divDebug = $('divDebug');

    player = new MediaPlayer($('divPlayer'));

    player.maxHeight = alturaMax;
    player.maxWidth = larguraMax;

    player.autoStart = true;
    player.enableEmbed = true;
    player.fullscreenMessage = null;
    
    player.sliderVideoBgColor = null;
    player.sliderVideoBgImage = root + 'images/tvarquivoslbgverde.gif';
    player.sliderVolumeBgColor = null;
    player.sliderVolumeBgImage = null;
    
    player.onBuffering = onBuffering;
    player.onPlaying = onPlaying;
    player.onPause = onPause;
    player.onPlay = onPlay;
    player.onStop = onStop;
    player.onMute = onMute;
    player.onError = onError;
//    player.onReady = onReady;
//    player.onChangeVolume = onChangeVolume;
//    player.onChangePosition = onChangePosition;

    SetPlayer(URL, largura, altura);

    if (player.player.exists) {
        if (player.isEmbedPlayer) {
            $hide("BarraControleVideo");
        }
        else {
            $show("BarraControleVideo");
            $("BarraControleVideo").style.width = larguraMax + "px";
            player.setSliderVolume($('sliderVolume'), $('sliderVolumeBtn'));
            player.setVolume(50);
        }
    }
    else {
        $show('MensagemPlayer');
        $hide('divPlayer');
        $display('MensagemMacOS', isMac);
        $display('MensagemLinux', isLinux);
        $display('MensagemWindows', isWindows);
        $display('MensagemIE7', isIE7);
        $display('LinkFirefoxOSX', isOSX);
        $display('LinkFirefoxMac', !isOSX);
        $display('MensagemFirefoxMac', isFirefox && isMac);
    }
    //describeObject(navigator, $('divDebug'));
};

function SetPlayer(URL, Largura, Altura){
    if (Largura) {
        player.width = Largura;
        player.minWidth = Largura;
    }
    if (Altura) {
        player.height = Altura;
        player.minHeight = Altura;
    }
    player.setUrl(URL);
    player.actualSize();
};