/*globals define*/

/**
 * @class de_epages.presentation.tray.contenttrayview
 * @author Copyright 2006-2013, epages GmbH, All Rights Reserved
 *
 * The tray's content tray view displays all elements which where saved via batch action
 *
 * ### Example
 * HTML:
 *     <div class="container"></div>
 *
 * JavaScript:
 *     var view = new ContentTrayView();
 *     view.render().$el.appendTo('.container');
 *
 * @uses jQuery.ui.accordion
 * @uses Backbone
 *
 * @return {Object} ContentTrayView
 */

define('de_epages/presentation/tray/tray-view', [
    'jquery/ui/accordion',
    'backbone',
    'ep/ajax',
    '$tmpl!./tray-view',
    '$dict!../dictionary',

    'ep/ui/input',
    'ep/ui/tooltip'
], function ($, Backbone, ep, template, dict) {
    'use strict';

    return Backbone.View.extend({
        tagname: 'div',
        template: template,

        /**
         * Render stored data from object tray and use an accordion for displaing the items.
         *
         * @since 6.17.0
         * @chainable
         * @return {Object} ContentTrayView
         */
        render: function () {
            var self = this,
                renderedTemplate;

            ep.ajax({
                type: 'POST',
                dataType: 'json',
                data: {
                    'ObjectID': ep.config.siteId,
                    'ViewAction': 'JSONGetTray'
                }
            }).done(function (data) {
                self.selectedElements = data;
                renderedTemplate = self.template({
                    items: data
                }).dictParse(dict, true);

                self.$el.html(renderedTemplate);
                $.extend(self, $.tmplItem(renderedTemplate).elements);

                if (data.length) {
                    self.trayNode.accordion({
                        animate: false,
                        collapsible: true,
                        heightStyle: "content"
                    });

                    self.useTray.uiInput();
                }
                self.tooltip.uiTooltip();
            });

            return self;
        },

        /**
         * Get all elements which are stored in the tray
         * @return {Array} Contains all elements which are stored in the tray
         */
        getSelectedElements: function () {
            return this.selectedElements;
        }
    });
});