
/*
======================================================
         Functions for media info display
======================================================
*/

var selectedMediaId = -1;
var infoUpdated = false;
var commentsUpdated = false;
var newCommentUpdated = false;
var relatedThumbnailsDim = new Dimension(60, 45);
var externalThumbnailsDim = new Dimension(120, 90);
var tabButtons = new Array('tabDetalhes', 'tabComments', 'tabNewComment');
var tabs = new Array('mediaInfo','mediaComments','mediaNewComment');

/*
    Used for stats. Counts plays on a media.
*/
function countPlay(mediaId)
{
    var XHR = new XHRConnection();
    var sessionId = $("sessionId").innerText || $("sessionId").textContent;

    XHR.appendData("mediaId", mediaId);
    XHR.appendData("jsessionid", sessionId);
    XHR.sendAndLoad("CountPlays.do", "POST", new function() {});
}

/*
    Called when a user plays a media.
*/
function setSelectedMedia(mediaId)
{

    if (mediaId == selectedMediaId) return;

    infoUpdated = false;
    commentsUpdated = false;
    newCommentUpdated = false;
    selectedMediaId = mediaId;
    countPlay(mediaId);
    showInfoArea();
    setBandwidthMediaId(mediaId);
}

/* Customizacao Alerj : handle live and audio controls */
function displayWMVPlayerControl(playlist, live, audio, video){

    if($("controlColor") && $("wmvPlayerControlImage")){
        var image = $("wmvPlayerControlImage");
        var isLivePage = window.location.href.indexOf("Web") != -1 || window.location.href.indexOf("SearchVideo") != -1 || window.location.href.indexOf("SearchAudio") != -1;
        
        if (!isLivePage) {
            var controlColor = $("controlColor").innerText || $("controlColor").textContent;
            if (playlist) {
                // image.setAttribute("usemap", "#playlistMap");  does not work in IE6
                image.src = "images/backgrounds/player_control_wmv_"+controlColor+".jpg";
                image.useMap = "#playlistMap";
            } else {
                image.src = "images/backgrounds/player_control_02_wmv_"+controlColor+".jpg";
                image.useMap = "#simpleMap";
            }
        }
        else {
            if (live) {
                image.src = "images/backgrounds/player_control_aovivo.jpg";
                image.useMap = "#aovivoMap";
            }
            else if (playlist) {
                image.src = "images/backgrounds/player_control_aovivo_playlist.jpg";
                image.useMap = "#playlistMap";
            }
            else if (video) {
                image.src = "images/backgrounds/player_control_aovivo_video.jpg";
                image.useMap = "#videoMap";
            }
            else if (audio) {
                image.src = "images/backgrounds/player_control_aovivo_audio.jpg";
                image.useMap = "#audioMap";
            }
        }
    }       
}

/*
    Called when user play media and set the bandwidth media id
*/
function setBandwidthMediaId(mediaId){

    if ($('changeBandwithLinkParams') == null) return;
    var linkParams;
    if ($('changeBandwithLinkParams').firstChild == null) {
        $('changeBandwithLinkParams').appendChild(document.createTextNode(""));
        linkParams = "";
    } 
    else {
        linkParams = $('changeBandwithLinkParams').innerText || $('changeBandwithLinkParams').textContent;
        linkParams = linkParams.trim();
    }

    var mediaIdIndex = linkParams.indexOf("&mediaId=");
    if (mediaIdIndex != -1) {
        linkParams = linkParams.substring(0, mediaIdIndex) + "&mediaId=" + mediaId + "&autoplay=" + mediaId;
    }
    else {
        linkParams += "&mediaId=" + mediaId+ "&autoplay=" + mediaId;
    }
    $('changeBandwithLinkParams').firstChild.nodeValue = linkParams;

}


/**
    Shows the media info area
*/
function showInfoArea()
{
    Element.hide('infoAreaDefault');
    Element.show('infoTabs');
    selectDetailsTab();
}

function selectDetailsTab()
{
    showTab(0);
    if (!infoUpdated) getMediaInfo();
}

function selectCommentsTab()
{
    showTab(1);
    if (!commentsUpdated) getComments();
    if (!newCommentUpdated) getNewCommentForm(); // better transition
}

function selectNewCommentTab()
{
    showTab(2);
    if (!newCommentUpdated) getNewCommentForm();
}

/**
    Shows and hide the divs corresponding to the tab contents.
	Changes the class name of the corresponding button.
*/
function showTab(tabN)
{
    for (var i=0; i<tabs.length; i++)
    {
        if ($(tabs[i]) != null) Element.hide(tabs[i]);
        if ($(tabButtons[i]) != null) $(tabButtons[i]).className = 'tabItemPesq';
    }
    if (tabN >= 0 && tabN < tabs.length) Element.show(tabs[tabN]);
    if (tabN >= 0 && tabN < tabButtons.length) $(tabButtons[tabN]).className = 'tabItemPesqSelected';
}


/**
    Sends an Ajax Request to retrieve profile of a media
*/
function getMediaInfo()
{

    var XHR = new XHRConnection();
    var sessionId = $("sessionId").innerText || $("sessionId").textContent;
    var host = $("host").innerText || $("host").textContent;

    setWaiting(true);
    
    XHR.appendData("mediaId", selectedMediaId);
    XHR.appendData("jsessionid", sessionId);
    XHR.appendData("host", host);
    XHR.appendData("nocache", Math.random());
    XHR.sendAndLoad("GetMediaLinks.do", "GET", displayMediaLinks);

    var XHR2 = new XHRConnection();
    XHR2.appendData("mediaId", selectedMediaId);
    XHR2.appendData("jsessionid", sessionId);
    XHR2.appendData("host", host);
    XHR2.appendData("nocache", Math.random());
    XHR2.sendAndLoad("GetMediaInfo.do", "GET", displayMediaInfo);
    
    if($('listaRelacionadas')){
        var XHR3 = new XHRConnection();
        XHR3.appendData("mediaId", selectedMediaId);
        XHR3.appendData("jsessionid", sessionId);
        XHR3.appendData("nRelated", 6);
        if ($('onlySameUserForRelatedMedias') != null) XHR3.appendData("sameOwner", "true");
        if ($('relatedCategories') != null) XHR3.appendData("relatedCategories", $('relatedCategories').innerHTML);

        XHR3.appendData("host", host);
        XHR3.appendData("nocache", Math.random());
        XHR3.sendAndLoad("GetRelatedMediaFiles.do", "GET", displayRelatedMediaFiles);
    }

    var XHR4 = new XHRConnection();
    XHR4.appendData("mediaId", selectedMediaId);
    XHR4.appendData("jsessionid", sessionId);
    XHR4.appendData("host", host);
    XHR4.appendData("nocache", Math.random());
    XHR4.sendAndLoad("GetPlaylistParts.do", "GET", displayPlaylistParts);

    infoUpdated = true;
    return true;
}


/**
    Displays received links.
*/
function displayMediaLinks(obj)
{
    var response = new AjaxResponse(obj);

    if (response.hasMessage()) {
        //do not display error message. Not critical.
        //displayMessage(response.getMessages());
    }
    if (response.isSuccess() && response.hasMediaLinks()) {

        var links = response.getMediaLinks();

        if (links.canPlay() && $('playLink')) {
            links.getPlayLink().copyToLinkElement($('playLink'));
            $('playLink').title = "Play";
            Element.show('playLink');
        }
        else if ($('playLink')) Element.hide('playLink');

        if (links.canDownload() && $('downloadLink')) {
            links.getDownloadLink().copyToLinkElement($('downloadLink'));
            // 1.8.6 : o texto e preenchido com as informacoes da midia -> ver displayMediaInfo()
            // $('downloadLink').title = "Baixar";
            Element.show('downloadLink');
        }
        else if ($('downloadLink')) Element.hide('downloadLink');

        if (links.canEdit() && $('editLink')) {
            links.getEditLink().copyToLinkElement($('editLink'));
            $('editLink').title = "Editar";
            Element.show('editLink');
        }
        else if ($('editLink')) Element.hide('editLink');

        if (links.canEmail() && $('emailLink')) {
            links.getEmailLink().copyToLinkElement($('emailLink'));
            $('emailLink').title = "Enviar por email";
            Element.show('emailLink');
        }
        else if ($('emailLink')) Element.hide('emailLink');

        if (links.canSeeProfile() && $('seeProfileLink')) {
            links.getSeeProfileLink().copyToLinkElement($('seeProfileLink'));
            Element.show('seeProfileLink');
        }
        else if ($('seeProfileLink')) Element.hide('seeProfileLink');
        
        if (links.canDelete() && $('deleteLink')) {
            links.getDeleteLink().copyToLinkElement($('deleteLink'));
            $('deleteLink').title = "Apagar";
            Element.show('deleteLink');
        }
        else if ($('deleteLink')) Element.hide('deleteLink');
    }
}

/**
    Displays received info.
*/
function displayMediaInfo(obj)
{
    var response = new AjaxResponse(obj);

    if (response.hasMessage()) {
        //do not display error message. Not critical.
        //displayMessage(response.getMessages());
    }
    if (response.isSuccess() && response.hasMedia()) {

        var media = response.getMedia();
        var mm = response.getMetaFieldsManager();

        if ($('mTitle')) {
            setTextContent($('mTitle'), media.getTitle());
            Element.show('mTitleDiv');
        } else if ($('mTitleDiv')) {
            Element.hide('mTitleDiv');
        }


        /* Customizacao Alerj - Don't display details for streamings */
        /* Customizacao Alerj - Change controls depending of media type */
        var isLive = media.getPlayRepExtension() == "wra" || media.getPlayRepExtension() == "wtv";
        var isAudio = media.getPlayRepExtension() == "mp3";
        var isVideo = media.getPlayRepExtension() == "wmv";
        if (isLive) {

            if ($('mUploadDateDiv')) Element.hide('mUploadDateDiv');
            if ($('mDescriptionDiv')) Element.hide('mDescriptionDiv');
            if ($('mKeyWordsDiv')) Element.hide('mKeyWordsDiv');
            if ($('mUploadDateDiv')) Element.hide('mUploadDateDiv');
            if ($('mVisibilityDiv')) Element.hide('mVisibilityDiv');
        }
        else {

            if ($('mOwner')) {
                if (media.getOwnerHasProfile()) {
                    $('mOwner').innerHTML = "<span class='videoPortfolioLink'><a href='PortfolioProfile.do?uid=" + media.getOwnerId() + "' title='Ver o perfil'>" + media.getOwnerSmartName() + "</a></span>";
                }
                else {
                    setTextContent($('mOwner'), media.getOwnerSmartName());
                }
                Element.show('mOwnerDiv');
            } else  if ($('mOwnerDiv')) {
                Element.hide('mOwnerDiv');
            }

            if ($('mUploadDate')) {
                setTextContent($('mUploadDate'), media.getUploadDate());
                Element.show('mUploadDateDiv');
            } else  if ($('mUploadDateDiv')) {
                Element.hide('mUploadDateDiv');
            }

            if ($('mDescription') && isNotNullOrEmpty(media.getDescription())) {
                // the following is complex since escapeHTML eats the LF in IE.
                $('mDescription').innerHTML = media.getDescription().smartCut2(-1,"",35).replace(/&shy;/g, "@@shy@@").replace(/\n/g, "@@lf@@").escapeHTML().replace(/@@lf@@/g, '<br/>').replace(/@@shy@@/g, '&shy;');
                Element.show('mDescriptionDiv');
            } else if ($('mDescriptionDiv')) {
                Element.hide('mDescriptionDiv');
            }

            if ($('mKeyWords') && isNotNullOrEmpty(media.getKeyWords())) {
                setTextContent($('mKeyWords'), media.getKeyWordsEscaped());
                Element.show('mKeyWordsDiv');
            }
            else if ($('mKeyWordsDiv')) {
                Element.hide('mKeyWordsDiv');
                Element.hide('mUploadDateDiv');
                Element.hide('mVisibilityDiv');
            }
            else {

                if ($('mExpireDate') && isNotNullOrEmpty(media.getExpireDate()) ) {
                    setTextContent($('mExpireDate'), media.getExpireDate());
                    Element.show('mExpireDateDiv');
                } else  if ($('mExpireDateDiv')) {
                    Element.hide('mExpireDateDiv');
                }

                if ($('mDescription') && isNotNullOrEmpty(media.getDescription())) {
                    // the following is complex since escapeHTML eats the LF in IE.
                    $('mDescription').innerHTML = media.getDescription().smartCut2(-1,"",35).replace(/&shy;/g, "@@shy@@").replace(/\n/g, "@@lf@@").escapeHTML().replace(/@@lf@@/g, '<br/>').replace(/@@shy@@/g, '&shy;');
                    Element.show('mDescriptionDiv');
                } else if ($('mDescriptionDiv')) {
                    Element.hide('mDescriptionDiv');
                }

                if ($('mKeyWords') && isNotNullOrEmpty(media.getKeyWords())) {
                    setTextContent($('mKeyWords'), media.getKeyWordsEscaped());
                    Element.show('mKeyWordsDiv');
                } else if ($('mKeyWordsDiv')) {
                    Element.hide('mKeyWordsDiv');
                }

                if ($('mExpireDate') && isNotNullOrEmpty(media.getExpireDate()) ) {
                    setTextContent($('mExpireDate'), media.getExpireDate());
                    Element.show('mExpireDateDiv');
                } else  if ($('mExpireDateDiv')) {
                    Element.hide('mExpireDateDiv');
                }

                if ($('mVisibility') && isNotNullOrEmpty(media.getVisibilityType()) ) {
                    var content = media.getVisibilityType();
                    if (content != "Publica") {
                        var groups = media.getVisibilityGroups(); // array of strings
                        if (groups != null && groups.length > 0) {
                            content += " (" + groups[0];
                            for (var i=1; i<groups.length; i++) {
                                content += ","+groups[i];
                            }
                            content += ")";
                        }
                        setTextContent($('mVisibility'), content);
                        Element.show('mVisibilityDiv');
                    }
                    else Element.hide('mVisibilityDiv');
                } else  if ($('mVisibilityDiv')) {
                    Element.hide('mVisibilityDiv');
                }
                else Element.hide('mVisibilityDiv');

                for (var i = 1; i<=14; i++)
                {
                    if (mm.isActive(i) && isNotNullOrEmpty(media.getMeta(i))) {
                        if ($('meta'+i+'Desc'))
                            setTextContent($('meta'+i+'Desc'), mm.getDescription(i) + ':');
                        if ($('mMeta'+i))
                            setTextContent($('mMeta'+i), media.getMeta(i));
                        if ($('mMeta'+i+'Div'))
                            Element.show('mMeta'+i+'Div');
                    }
                    else {
                        if ($('mMeta'+i+'Div'))
                            Element.hide('mMeta'+i+'Div');
                    }
                }
            }
		}
        
        if ($('mediaEmbedInput')) {
            var url = systemUrl + "PlayMedia.do?mediaId=" + media.getId();
            var size = '';
            if (media.getRatio() > 0) {
                var thumbDim = getProportionalDimension(media.getRatio(), externalThumbnailsDim);
                size = " width='"+thumbDim.width+"' height='"+thumbDim.height+"'";
            }
            var image = "<img src='"+media.getThumbnailPath()+"' alt='"+media.getTitle()+"'"+size+"/>";
            $('mediaEmbedInput').value = "<a href='"+url+"' title='Play'>"+image+"</a>";
        }
        if ($('mediaUrlInput')) {
            $('mediaUrlInput').value = systemUrl + "PlayMedia.do?mediaId=" + media.getId();
        }

        if ($('downloadLink')) {
            $('downloadLink').title = getDownloadLinkTitle(media);
        }
        
        displayWMVPlayerControl(media.isPlaylist(), isLive, isAudio, isVideo);

        displayNComments(media.getNComments());

        displayBandwithBar(media.getPlayMBR());
    }
    setWaiting(false);
}

function getDownloadLinkTitle(media)
{
    if (media.isPlaylist()) return "Baixar Playlist";

    var type = media.getDownloadType();
    var size = media.getSize();
    return "Baixar: formato "
                    + (isNotNullOrEmpty(type) ? type : "desconhecido")
                    +" - tamanho "
                    + (isNotNullOrEmpty(size) ? size : "desconhecido");
}

/**
    Hides or show the bandwith bar
*/
function displayBandwithBar(display)
{
    if ($('banda') == null) return;
    if (display) {
        Element.show('banda');
    }
    else {
        Element.hide('banda');
    }
}

/**
    Displays received list or related medias.
*/
function displayRelatedMediaFiles(obj)
{
    var response = new AjaxResponse(obj);

    if (response.hasMessage()) {
        //do not display error message. Not critical.
        displayMessage(response.getMessages());
    }
    if (response.isSuccess() && response.hasMediaList()) {

        var relatedMedias = response.getMediaList();
        var redirect = ($('redirectRelatedMedias') != null)

        var container = $('listaRelacionadas');
        removeAllChildren(container);
        var mediaTitle = document.createElement("div");
        mediaTitle.id = "relacionadaTitle";
        relatedMedias.each(function (relatedMedia)
        {
            var link = relatedMedia.getMediaLinks().getPlayLink();

            if (link == null) {
                // media cannot be played, make download
                link = relatedMedia.getMediaLinks().getDownloadLink();
                if (link == null) return;
            }
            else if (redirect) {
                // override link
                link.setHref("PlayMediaInPortfolio.do?mediaId="+relatedMedia.getId());
                link.setOnclick("");
            }
            var mediaDiv = document.createElement("a");
            mediaDiv.className = "midiaRelacionada";
            var mediaThumb = document.createElement("img");
            mediaThumb.className = "relacionadaThumbnail";

            mediaDiv.setAttribute("href", link.getHref());
            mediaDiv.onclick = function() {
                eval(link.getOnclick());
            };
            mediaDiv.onmouseover = function() {
                setTextContent(mediaTitle, relatedMedia.getTitleEscaped());
            };
            mediaDiv.onmouseout = function() {
                removeAllChildren(mediaTitle);
            };
            var thumbDim = getProportionalDimension(relatedMedia.getRatio(), relatedThumbnailsDim);
            mediaThumb.setAttribute("src", relatedMedia.getThumbnailPath());
            mediaThumb.setAttribute("width", thumbDim.width);
            mediaThumb.setAttribute("height", thumbDim.height);

            mediaDiv.appendChild(mediaThumb);
            container.appendChild(mediaDiv);
        });
        container.appendChild(mediaTitle);
    }
}

/**
    Displays the parts of the playlist, if there is any.
*/
function displayPlaylistParts(obj)
{
    // Classes CSS da tabela das midias do playlist
    var CLASSE_LINHA_PAR = 'rowEven'; // mesma classe que nas estatisticas
    var CLASSE_LINHA_IMPAR = 'rowOdd'; // mesma classe que nas estatisticas
    var CLASSE_TD_INDEX = 'partIndex';
    var CLASSE_TD_TITULO = 'partTitle';
    var CLASSE_TD_LINK = 'partLink';

    var response = new AjaxResponse(obj);
    var container = $('playlistParts');

    if (response.hasMessage()) {
        //do not display error message. Not critical.
        //displayMessage(response.getMessages());
    }
    if (response.isSuccess())
    {
        if (! response.hasMediaList()) {
            // hide the playlist parts
            Element.hide(container);
            removeAllChildren(container);
        }
        else
        {
            var parts = response.getMediaList();
            removeAllChildren(container);
            var partsTable = document.createElement("table");
            var partsTableBody = document.createElement("tbody"); // necessary in IE
            partsTable.appendChild(partsTableBody);
            var i = 0;
            parts.each(function (partMedia)
            {
                var tr = document.createElement("tr");
                tr.className = ++i%2==0 ? CLASSE_LINHA_PAR : CLASSE_LINHA_IMPAR;
                var indexTd = document.createElement("td");
                indexTd.className = CLASSE_TD_INDEX;
                var titleTd = document.createElement("td");
                titleTd.className = CLASSE_TD_TITULO;
                var linkTd = document.createElement("td");
                linkTd.className = CLASSE_TD_LINK;

                var indexSpan = document.createElement("span");
                indexSpan.id = "partIndex"+partMedia.getId();
                indexSpan.className = "notPlayingPart";
                var titleSpan = document.createElement("span");
                titleSpan.id = "partTitle"+partMedia.getId();
                titleSpan.className = "notPlayingPart";
                setTextContent(indexSpan, i);
                setTextContent(titleSpan, partMedia.getTitleEscaped().smartCut2(60, '...', 30));
                indexTd.appendChild(indexSpan);
                titleTd.appendChild(titleSpan);

                var link = partMedia.getMediaLinks().getDownloadLink();
                if (link != null) {
                    var fileSize = partMedia.getSize();
                    var linkTag = document.createElement("a");
                    linkTag.setAttribute("href", link.getHref());
                    linkTag.setAttribute("onclick", link.getOnclick());
                    linkTag.setAttribute("title", getDownloadLinkTitle(partMedia));
                    var linkSpan = document.createElement("span");
                    linkSpan.className='videoButton';
                    var downloadLinkImage = document.createElement('img');
                    downloadLinkImage.setAttribute('alt', getDownloadLinkTitle(partMedia));
                    downloadLinkImage.setAttribute('src','images/icons/bt_baixar.png');
                    linkSpan.appendChild(downloadLinkImage);
                    linkTag.appendChild(linkSpan);
                    linkTd.appendChild(linkTag);
                }
                tr.appendChild(indexTd);
                tr.appendChild(titleTd);
                tr.appendChild(linkTd);
                partsTableBody.appendChild(tr);
            })
            container.appendChild(partsTable);
            try {
                Effect.Appear(container);
            }
            catch (e) {
                Element.show(container);
            }
        }
    }
}

function isNotNullOrEmpty(string)
{
    return string != null && string != '' && string != 'null';
}

/**
    Displays the number of comments of the current media in the tab.
*/
function displayNComments(nComments)
{
    setTextContent($('nComments'), '(' + nComments + ')');
}

/**
    Set the source of the comments iframe
*/
function getComments()
{
    setWaiting(true);
    $('commentsFrame').src = "SeeComments.do?mediaId="+selectedMediaId+"&nocache="+Math.random();
    commentsUpdated = true;
}

/**
    Set the source of the new comment form iframe
*/
function getNewCommentForm()
{
    if ($('newCommentFrame') == null) return;
    setWaiting(true);
    $('newCommentFrame').src = "NewComment.do?mediaId="+selectedMediaId+"&nocache="+Math.random();
    newCommentUpdated = true;
}

/*
    Called by new comment iframe when a comment was added successfully.
*/
function reloadComments()
{
    newCommentUpdated = false;
    commentsUpdated = false;
}

/**
    Displays or hide a visual element showing that the user should wait.
    @param waiting true | false
*/
function setWaiting(waiting)
{
    if (waiting) {
        MyEffect.Appear('waitFlag');
    }
    else {
        MyEffect.Fade('waitFlag');
    }
}

/**
    Alerts a message
*/
function displayMessage(msg)
{
    alert(msg);
}
