/*
 Contains javascript functions for displaying and controlling video player and image player.
 26/05/06
 Julien Roubieu
 Rodrigo Budzinsky
*/

var BIG_WIDTH = '1000px';
var BIG_HEIGHT = '562.5px';
var BIG_HEIGHT_WITH_CONTROL = '640px';
var NORMAL_WIDTH = '512px';
var NORMAL_HEIGHT = '288px';
var NORMAL_HEIGHT_WITH_CONTROL = '318px';
var is_ie;

var currentImageRatio;

var playerObjectString = '<object type="video/x-ms-wmv" '
            + 'id="Player" '
            + 'name="Player" '
            + 'CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"  '
            + 'height=288 width=512 >'
                + '<param name="url" value="%%url%%"/>'
                + '<param name="AutoStart" value="True"/>'
                + '<param name="uiMode" value="none"/>'
                + '<param name="controller" value="true" />'
                + '<param name="qtsrcdontusebrowser" value="true" />'
                + '<param name="enablejavascript" value="true">'
                + '<param name="stretchToFit" value="true">'
            + '</object>';


var playerObjectStringFireFox = '<object type="application/x-ms-wmp" '
            + 'data="%%url%%"'
            + 'id="Player" '
            + 'height=288 width=512 >'
                + '<param name="url" value="%%url%%"/>'
                + '<param name="uiMode" value="none"/>'
                + '<param name="stretchToFit" value="true">'
            + '</object>';


function writePlayer(){

    if(isIE()){

        document.write(playerObjectString);
    }else{

        document.write(playerObjectStringFireFox);
    }

}

function writeEmptyPlayer(){

    if(!isIE()) document.write('<object type="application/x-ms-wmp"/>');

}

var inter;
function changeState(){

    if(!isIE()){
        inter = setInterval("playerStatus();", 1000);
    }

}

function playerStatus(){

        if($("Player").playState == 6){
            Element.show('PlayerWMIndicator');
        }else{
            if ($("PlayerWMIndicator"))
                Element.hide('PlayerWMIndicator');
        }
}


var interval;

function writeMiniPlayer(wPlayerIE, wPlayerFF){

            var emptyPlayer = $('homeEmptyPlayer');
            Element.hide(emptyPlayer);

           
            if(isIE()){

                document.write(wPlayerIE);
            }else{

                document.write(wPlayerFF);
            }
            if ($("Player")) $("Player").settings.volume = 0;
            interval = setInterval("miniPlayerPause();", 2000);
}

function miniPlayerPause(){

    if ($("Player").playState == 6){
        Element.show('waitingIndicator');
    }else{
        $("Player").controls.stop();
        clearInterval(interval);
        Element.hide('waitingIndicator');
    }

}
/*
    Shows image player with given image
    @param imageSource source uri of the image
    @param imageRatio ratio of the image (width / height)
*/
function viewImage(imageSource, imageRatio)
{
    showPlayerArea();

    currentImageRatio = imageRatio;

    var imagePlayer = $('imagePlayer');

    var availableWidth = NORMAL_WIDTH;
    var availableHeight = NORMAL_HEIGHT;

    if (isMaximized())
    {
        availableWidth = BIG_WIDTH;
        availableHeight = BIG_HEIGHT;
    }

    stopVideo();

    hideVideoPlayer();

    if (!isImageVisible()) show(imagePlayer);

    var dim = getImageDimensionsToFitIn(availableWidth, availableHeight);
    changeImage(imageSource, dim[0], dim[1]);
}

function changeImage(source, w, h)
{
    var image = $('viewedImage');
    Element.hide(image);
    image.width = w;
    image.height = h;
    if (isMaximized()) {
        image.style.marginTop = ((BIG_HEIGHT.replace('px', '') - h) / 2) + 'px';
    }
    else {
        image.style.marginTop = ((NORMAL_HEIGHT.replace('px', '') - h) / 2) + 'px';
    }
    var newImage = new Image();
    newImage.onload = function() {
        $('viewedImage').src = source;
        MyEffect.Appear('viewedImage');
        newImage.onload = function() {};
    };
    newImage.src = source;
}

function isMaximized()
{
    return $("playerArea").style.height == BIG_HEIGHT_WITH_CONTROL;
}

function isImageVisible()
{
    return $('imagePlayer').style.display != 'none';
}

function isVideoVisible()
{
    return $('Player').style.display != 'none';
}


/* Calculate image dimensions that should be used so as the image has good ratio
   and fits in available space, for the current image being displayed.
   @param availableWitdh
   @param availableHeight
   @return an array [width, height].
*/
function getImageDimensionsToFitIn(availableWidth, availableHeight)
{
    availableHeight = availableHeight.replace("px", "");
    availableWidth = availableWidth.replace("px", "");
    var resizedHeight = availableHeight;
    var resizedWidth = availableWidth;

    var playerRatio = availableWidth / availableHeight;
    var imageRatio = currentImageRatio;
    if (playerRatio < imageRatio) {
      resizedHeight = availableWidth / imageRatio;
    } else {
      resizedWidth = availableHeight * imageRatio;
    }

    return new Array(resizedWidth, resizedHeight);
}

/*
    Hides image player
*/
function hideImage()
{
	var imagePlayer = $('imagePlayer');
	var image =  $('viewedImage');

    hide(image);
    image.height = '0';
    image.width = '0';

    hide(imagePlayer);
}


/*
    Hides the video player object and controls
*/
function hideVideoPlayer()
{
    if (!isVideoVisible()) return;

    var player = $("Player");
    var controls = $("playerButtonsDiv");

    hide(player); // not sufficient in Safari and IE
    player.style.visibility = "hidden";
    player.style.position = "absolute";

    hide(controls); // not sufficient in Safari and IE
    //controls.style.visibility = "hidden";
    //controls.style.position = "absolute";
}

function showPlayerArea()
{
    hidePrompt();
    if ($('playerArea').style.display == 'none') {
        MyEffect.BlindDown('playerArea');
    }
}

/*
    Hides the success or error message
*/
function hidePrompt()
{
    if ($('successMessage')) Effect.Fade('successMessage'); 
    if ($('errorMessage')) Effect.Fade('errorMessage');
}

/*
    Shows a message related to the player
    @param msg the message to display
*/
var playerMessageTimeout;
function playerMessage(msg)
{
    if ($('playerMessage').innerText) $('playerMessage').innerText = msg;
    else $('playerMessage').textContent = msg;
    Effect.Appear('playerMessage');
    clearTimeout(playerMessageTimeout);
    playerMessageTimeout = setTimeout("Effect.Fade('playerMessage');", 3000);
}

/*
    Show the video player at normal size
*/
function showVideoPlayer()
{
    showPlayerArea();

    var player = $('Player');
	var playerDiv = $("playerDiv");
	var playerArea = $("playerArea");
	var controls = $('playerButtonsDiv');

	hideImage();

    if (isMaximized()) {
        player.width = NORMAL_WIDTH;
        player.height = NORMAL_HEIGHT;

        playerArea.height = NORMAL_HEIGHT;
        playerDiv.height=NORMAL_HEIGHT;
    }

    show(playerArea);
    show(playerDiv);
    show(player);
    // timeout only for esthetical reasons : to let the help disappear
    setTimeout("$('Player').style.visibility = 'visible';", 1000);
    setTimeout("$('Player').style.position = 'relative';", 1000);
    show(controls);

}

function recreatePlayerAndPlay(address)
{
    $('wmvPlayer').innerHTML = playerObjectStringFireFox.replace('%%url%%', address);

}

function removePlayer()
{
    Element.remove('Player');
}

/* Hides an element */
function hide(element)
{
	Element.hide(element);
}

/* Show an element */
function show(element)
{
	Element.show(element);
}


/*
    Maximizes and mimizes player area
*/
function resize(color)
{
    if (isVideoVisible()) {
       fullScreen();
    }
    else {
        if (isMaximized()) {
           minimizeImagePlayer(color);
        }
        else {
           maximizeImagePlayer(color);
        }
    }
}

function maximizeImagePlayer(color)
{
    var info = $("infoArea");
	var player = $("Player");
	var embedded = $("wmvEmbed");
	var imagePlayer = $('imagePlayer');
    var image = $('viewedImage');
	var playerDiv = $("playerDiv");
	var playerArea = $("playerArea");
    var playerControlImage = $('maxMinPlayerImage');

	playerArea.style.height = BIG_HEIGHT_WITH_CONTROL;
	playerDiv.style.height = BIG_HEIGHT;
	playerDiv.style.width = BIG_WIDTH;

    hide(info);

    player.width = BIG_WIDTH.replace("px", "");
    player.height = BIG_HEIGHT.replace("px", "");
    if (embedded) {
        alert("embedded");
        embedded.setAttribute('width', BIG_WIDTH);
        embedded.setAttribute('height', BIG_HEIGHT);
    }

    imagePlayer.style.width = BIG_WIDTH;
    imagePlayer.style.height = BIG_HEIGHT;

    var dim = getImageDimensionsToFitIn(BIG_WIDTH, BIG_HEIGHT);
    image.width = dim[0];
    image.height = dim[1];
    image.style.marginTop = ((BIG_HEIGHT.replace('px', '') - image.height) / 2) + 'px';

    playerControlImage.src = "images/backgrounds/player_control_grande_"+color+".jpg";
    playerControlImage.setAttribute("useMap","#minimizarMap");
}

function minimizeImagePlayer(color)
{
	var info = $("infoArea");
	var player = $("Player");
	var embedded = $("wmvEmbed");
	var imagePlayer = $('imagePlayer');
    var image = $('viewedImage');
	var playerDiv = $("playerDiv");
	var playerArea = $("playerArea");
    var playerControlImage =  $('maxMinPlayerImage') ;

	playerArea.style.height = NORMAL_HEIGHT_WITH_CONTROL;
	playerDiv.style.height = NORMAL_HEIGHT;
	playerDiv.style.width = NORMAL_WIDTH;

    player.width = NORMAL_WIDTH.replace("px", "");
    player.height = NORMAL_HEIGHT.replace("px", "");
    if (embedded) {
        embedded.setAttribute('width', NORMAL_WIDTH);
        embedded.setAttribute('height', NORMAL_HEIGHT);
    }

    imagePlayer.style.width = NORMAL_WIDTH;
	imagePlayer.style.height = NORMAL_HEIGHT;

    var dim = getImageDimensionsToFitIn(NORMAL_WIDTH, NORMAL_HEIGHT);
    image.width = dim[0];
    image.height = dim[1];
    image.style.marginTop = ((NORMAL_HEIGHT.replace('px', '') - image.height) / 2) + 'px';

    show(info);

    playerControlImage.src = "images/backgrounds/player_control_peq_"+color+".jpg";
    playerControlImage.setAttribute("useMap","#maximizarMap");

}


///////////WINDOWS MEDIA PLAYER//////////////

// Player states
var UNDEFINED = 0;
var STOPPED = 1;
var PAUSED = 2;
var PLAYING = 3;
var FORWARD = 4;
var REVERSE = 5;
var BUFFERING = 6;
var WAITING = 7;
var ENDOFMEDIA = 8;
var PREPARING = 9;
var READY = 10;

function getPlayerState()
{
    return $("Player").playState;
}

function play(address)
{
    if (isIE()) {
       $("Player").URL = address;
    } else {
       recreatePlayerAndPlay(address);
    }
    showVideoPlayer();
}


function stopVideo ()
{
    if ($("Player").controls) $("Player").controls.stop();
}

function PlayPauseMe()
{
    	var state = getPlayerState();
        if (state == PLAYING || state == FORWARD || state == REVERSE) {
		$("Player").controls.pause();
	}
	else if (state == PAUSED) {
		$("Player").controls.play();
	}
}


function playMiniPlayer(mediaPath)
{
    $("Player").settings.volume = 40;

    $("Player").URL = mediaPath;

}

function playLoadedVideo(){
    $("Player").controls.play();
}

function volUp()
{
    $("Player").settings.volume += 30;
}

function volDown()
{
    $("Player").settings.volume -= 30;
}

function fullScreen()
{
     if (getPlayerState() == PLAYING)
       $("Player").fullScreen = true;
}

function nextTrack()
{
	if (getPlayerState() != PLAYING) {
		// next() is not available
		PlayPauseMe();
		return;
	}
    if ($("Player").controls.isAvailable('Next')) $("Player").controls.next();
    else playerMessage("Carregando. Por favor espere...");
}

function previousTrack()
{
	if (getPlayerState() != PLAYING) {
		// previous() is not available
		PlayPauseMe();
		return;
	}
    if ($("Player").controls.isAvailable('Previous')) $("Player").controls.previous();
    else playerMessage("Carregando. Por favor espere...");
}

function forward ()
{
    if( getPlayerState() == FORWARD )
    {
        $("Player").controls.play();
    }
    else
    {
    	if ($("Player").controls.isAvailable('fastForward'))
            $("Player").controls.fastForward();
    }
}


function back ()
{
    if( getPlayerState() == REVERSE)
    {
        $("Player").controls.play();
    }
    else
    {
        if ($("Player").controls.isAvailable('fastReverse'))
            $("Player").controls.fastReverse();
    }
}

function isIE()
{
    var agt=navigator.userAgent.toLowerCase();
    is_ie     = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));

    return is_ie;
}
