
var favoritesIconBaseUri = ALBase.make_static_uri('/icons/platform/');
var favoritesIconStar    = favoritesIconBaseUri + 'star.png';
var favoritesIconOff     = favoritesIconBaseUri + 'star_off.png';
var favoritesIconOver    = favoritesIconBaseUri + 'star_off_over.png';

function updateFavoritesStar (el, action)
{
    el = $(el);

    if (action == 'add') {
        el.addClassName('isfavorite');
        el.title       = 'Remove from Favorites';
        el.src         = favoritesIconStar;
        el.onmouseout  = null;
        el.onmouseover = null;
    }
    else {
        el.removeClassName('isfavorite');
        el.title       = 'Add to Favorites';
        el.src         = favoritesIconOff;
        el.onmouseout  = function () {this.src = favoritesIconOff; };
        el.onmouseover = function () {this.src = favoritesIconOver;};
    }
}

var favoritesButtonBaseUri    = ALBase.make_static_uri('/images/movieplayer/');
var favoritesButton           = favoritesButtonBaseUri + 'favorites_btn.png';
var favoritesButtonOver       = favoritesButtonBaseUri + 'favorites_btn_over.png';
var favoritesButtonRemove     = favoritesButtonBaseUri + 'remove_favorites_btn.png';
var favoritesButtonRemoveOver = favoritesButtonBaseUri + 'remove_favorites_btn_over.png';

function updateFavoritesButton (el, action)
{
    el = $(el);

    if (action == 'add') {
        el.addClassName('isfavorite');
        el.title       = 'Remove from Favorites';
        el.src         = favoritesButtonRemove;
        el.onmouseout  = function () {this.src = favoritesButtonRemove; };
        el.onmouseover = function () {this.src = favoritesButtonRemoveOver;};
    }
    else {
        el.removeClassName('isfavorite');
        el.title       = 'Add to Favorites';
        el.src         = favoritesButton;
        el.onmouseout  = function () {this.src = favoritesButton; };
        el.onmouseover = function () {this.src = favoritesButtonOver;};
    }
}

// action = 'add' or 'del'
// type   = 'movie' or 'series'
//
// callback expects args: action, type, id
//
function doFavoritesAjaxRequest (action, type, id, callback)
{
    var url = ALBase.make_uri('/favorites/' + action + '_' + type + '/'  + id);

    new Ajax.Request(url, {
        method: 'post',
        onSuccess: function (transport)
        {
            var json = transport.responseText.evalJSON(true);
            if (json.status == 'success') {
                callback(action, type, id);
            }
            else {
                genericError('The attempt to modify your favorites failed,\r\n' + 
				'please try again.');
            }
        },
        onFailure: function (transport)
        {
            ajaxTransportError();
        }
    });
}

function confirmFavoritesDelete (type, title)
{
    var t = title.replace(/"/g, '\\"');
    t = t.replace(/%22/g, '"');

    return confirm('Are you sure you want to remove the ' + type + '\r\n' + 
		' "' + t + '"\r\n' +
		' from your list of favorites?');
}


// Called with an element
//
// If called from player window, "doParent" may be true,
// in which case the star on the parent page must also be toggled.
//
function _toggleFavoriteEl (elem, favType, doParent)
{
    var el = $(elem.id);    // turn 'elem' into a Prototype object

    var type  = el.readAttribute('data-favorite-type');   // 'series' or 'movie'
    var id    = el.readAttribute('data-favorite-id');
    var title = unescape(el.readAttribute('data-favorite-title'));

    var action = el.hasClassName('isfavorite') ? 'del' : 'add';

    if (action == 'del') {
        var answer = confirmFavoritesDelete(type, title);
        if (!answer) { return; }
    }

    var callback;
    if (favType == 'star') {
        callback = function (action, type, id) {
                updateFavoritesStar(el, action);
                if (doParent) {
                    var parentElId = type + '_' + id + '_star';
                    parent.updateFavoritesStar(parentElId, action);
                }
        };
    }
    else {
        callback = function (action, type, id) {
                updateFavoritesButton(el, action);
                if (doParent) {
                    var parentElId = type + '_' + id + '_star';
                    parent.updateFavoritesStar(parentElId, action);
                }
        };
    }

    doFavoritesAjaxRequest(action, type, id, callback);
}

// Called with an element
//
function toggleFavoriteEl (elem)
{
    _toggleFavoriteEl(elem, 'star');
}

// Called as an event handler with event argument
//
function toggleFavorite (e)
{
    toggleFavoriteEl(Event.element(e));
}

// Called with an element
//
function toggleFavoriteButtonEl (elem, doParent)
{
    _toggleFavoriteEl(elem, 'button', doParent);
}


Ext.onReady(function () {

    // Function to add event observe function to any clicks on star images:
    function addEventToStar (star)
    {
        Event.observe(star, 'click', toggleFavorite.bindAsEventListener());
    }

    var star_classes = new Array('favorite_movie_star', 'favorite_series_star');

    // Iterate over all class elements and add events to each star:
    $$('.favorite_movie_star').each( function (star) { addEventToStar(star); });
    $$('.favorite_series_star').each(function (star) { addEventToStar(star); });
});

//----------------------------------------------------------

var myTrainingFavoritesGrid;

function createMyTrainingFavoritesGrid (myData, divId)
{
    var store = new Ext.data.GroupingStore(
        {
            reader:     new Ext.data.ArrayReader({},
                [
                    {name: 'series_title',   type: 'string'},
                    {name: 'series_url'},
                    {name: 'series_id'},
                    {name: 'series_type'},
                    {name: 'tutorial_title', type: 'string'},
                    {name: 'key'},
                    {name: 'application',    type: 'string'},
                    {name: 'del_func'},
                    {name: 'del_id'},
                    {name: 'del_title'},
                    {name: 'user_can_play_movie'},
                    {name: 'isDocument'},
                    {name: 'url'},
                    {name: 'isSeriesHidden'},
                    {name: 'isSeriesDeleted'},
                    {name: 'isMovieHidden'},
                    {name: 'isMovieDeleted'}
                ]
            ),
            sortInfo:   { field: 'application' },
            groupField: 'application'
        }
    );

    store.loadData(myData);

    var icon = ALBase.make_static_uri('/icons/famfamfam/silk/bin_closed.png');

    myTrainingFavoritesGrid = new Ext.grid.GridPanel(
        {
            renderTo: divId,

            store: store,

            columns: [
                {
                    id:        'series_title',
                    dataIndex: 'series_title',
                    header:    'Series Title',
                    renderer:  renderSeriesTitle,
                    width:     215,
                    sortable:  true
                },
                {
                    id:        'tutorial_title',
                    dataIndex: 'tutorial_title',
                    header:    'Tutorial Title',
                    renderer:  renderTutorialTitle,
                    width:     378,
                    sortable:  true
                },
                {
                    id:        'del_func',
                    dataIndex: 'del_func',
                    header:    '<img src="' + icon + '" alt="remove" />',
                    renderer:  renderFavoritesDeleteFunc,
                    width:     30,
                    align:     'center',
                    fixed:     true,
                    sortable:  false
                },
                {
                    id:        'application',
                    dataIndex: 'application',
                    header:    'Application',
                    hidden:    true,
                    sortable:  true
                }
            ],

            view: new Ext.grid.GroupingView(
                {
                    autoFill:           true,
                    deferEmptyText:     false,
                    emptyText:          'No favorites are defined',
                    enableGroupingMenu: false,
                    enableNoGroups:     false,
                    groupTextTpl:       '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})',
                    hideGroupedColumn:  true,
                    showGroupName:      true,
                    startCollapsed:     false
                }
            ),

            autoExpandColumn: 'tutorial_title',
            autoHeight:       true,
            enableColumnHide: false,
            enableColumnMove: false,
            enableHdMenu:     false,
            collapsible:      false,
            iconCls:          'icon-grid',
            stripeRows:       true,
            width:            644
        }
    );

    //myTrainingFavoritesGrid.render(divId);
}

//----------------------------------------------------------

function deleteMovieFromFavoritesTable (id, title)
{
    var answer = confirmFavoritesDelete('movie', title);
    if (!answer) { return; }

    doFavoritesAjaxRequest('del', 'movie', id,
            function (action, type, id) {
                var store = myTrainingFavoritesGrid.store;
                var rowId = store.find('key', id);
                if (rowId == -1) { return; }
                store.removeAt(rowId);
            }
    );
}

function deleteSeriesFromFavoritesTable (id, title)
{
    var answer = confirmFavoritesDelete('series', title);
    if (!answer) { return; }

    doFavoritesAjaxRequest('del', 'series', id,
            function (action, type, id) {
                var store = myTrainingFavoritesGrid.store;
                var rowId = store.findBy(
                    function (record, ix) {
                        if (record.get('key')       != '') { return false; }
                        if (record.get('series_id') != id) { return false; }
                        return true;
                    }
                );
                if (rowId == -1) { return; }
                store.removeAt(rowId);
            }
    );
}

//----------------------------------------------------------

function myTrainingFavoritesExpandAllGroups ()
{
    myTrainingFavoritesGrid.getView().expandAllGroups();
}

function myTrainingFavoritesCollapseAllGroups ()
{
    myTrainingFavoritesGrid.getView().collapseAllGroups();
}

