
// viostream.playlist.js 
// version: 1.0
// requires:
//      - viostream.js
//      - viostream.mediabase.js

Viostream.PlayList = {
    /// <summary> All functions that interact with the playlist </summary>

    ClientSidePlaylist : { },

    MediaGetHandleSuccess : function(o){
        /// <summary> AJAX success event for getting a single media item. Adds the item to the playlist. </summary>
        if(!Viostream.AjaxObject.DisplayErrors(o,"MediaGet")){
            var mb = new Viostream.MediaBase( $(o).find("MediaBase")[0] );
            mb.AddToPlayList();
        }
    },

    MediaGet :  function(mediaId){
        /// <summary> Gets a single media item for adding to the playlist </summary>
        $.ajax({
            url : Viostream.WSUrl + "MediaGet", 
            success : this.MediaGetHandleSuccess,
            data : { mediaId : mediaId }
        });
    },

    AddHandleSuccess : function(o, playListId, mediaId, playNow){
        if(!Viostream.AjaxObject.DisplayErrors(o,"AddtoPlaylist")){            
            if(playNow){
                addToPlayList(playListId,mediaId);
                //update currently playing
                //currentlyPlaying(mb.MediaTitle, 0, mb.MediaDescription, mb.Created, mb.MediaId, mb.AverageVotes)
            }else{
                addToPlayList(playListId); //mediaId --> addToPlaylist is flash function - playerobject.js
            }
            
            Viostream.hideLoader();
        }
    },

    AddMedia : function(playListId, mediaId, playNow){
        // <summary> Add a media item to the playlist </summary>
        if(typeof(playNow) == "undefined") playNow = false;
        Viostream.showLoader();
        $.ajax({
            url: Viostream.PlayListWSUrl + "PlayListAddMedia", 
            data : { playListId : playListId, mediaId : mediaId },
            success : function(o){ Viostream.PlayList.AddHandleSuccess(o, playListId, mediaId, playNow);  }
        });
    },

    CreateHandleSuccess : function(o, playGUID, txtPlayListId, playNow){
        /// <summary> AJAX success event for creating a new playlist </summary>
        if(!Viostream.AjaxObject.DisplayErrors(o,"PlayList Create")){
            txtPlayListId.value = $(o).find("Id").text();
            //add mediId GUID to playlist
            this.AddMedia(txtPlayListId.value, playGUID, playNow);
         }
    },

    Create : function(portalId, playGUID, txtPlayListId, playNow){
        /// <summary> Creates a new playlist and then adds the media item to it </summary>
        if(typeof(playNow) == "undefined") playNow = false;
        Viostream.showLoader();
        $.ajax({
            url: Viostream.PlayListWSUrl + "PlayListCreate", 
            success : function(o){ Viostream.PlayList.CreateHandleSuccess(o, playGUID, txtPlayListId, playNow); },
            data : { portalId : portalId }
        });
    },
    
    RemoveMediaSuccess : function(o, mediaId){
        if(!Viostream.AjaxObject.DisplayErrors(o,"PlayList Delete")){
            if(typeof(this.ClientSidePlaylist[mediaId]) != "undefined"){
                this.ClientSidePlaylist[mediaId] = null;
                delete this.ClientSidePlaylist[mediaId];
            }
            $("li", "#ulMediaPlaylistWrapper").each(function(){
                if(this.mediaId && this.mediaId == mediaId){
                    $(this).remove();
                }
            });
         }
         Viostream.hideLoader();
    },
    
    RemoveMedia : function(playListId, mediaId){
        Viostream.showLoader();
        $.ajax({
            url: Viostream.PlayListWSUrl + "PlayListRemoveMedia", 
            data : { playListId : playListId, mediaId : mediaId },
            success : function(o){ Viostream.PlayList.RemoveMediaSuccess(o, mediaId);  }
        });
    },


    AddByMediaId : function(playGUID){
        /// <summary>
        /// Add a single media item to the playlist. Used by the AutoPlay at onload.
        /// </summary>
        try
        {
            this.MediaGet(playGUID)
        }
        catch(e)
        {
            if(Viostream.isDebug)
            {
                alert("Playlist.AddByMediaId(playGUID) " + e.message);
                throw e;
            }
        }
    }
};

