/*global jQuery */
 (function($) {

      // Display the view's UI.	
     function display() {
         var content = this.getContent();
         root = $.freemix.getTemplate("table-view-template");
         content.empty();
         root.appendTo(content);
         this.findWidget().recordTitle().recordPager(
             function(row, model, metadata) {
                  t = $("<td class='inner'></td>").insertAfter(row.find("td.visible")).createChildCheck({
                         radio: true,
                         checked: model.config['sortProperty'] === metadata.property && model.config['asc'],
                         change: function() {
                             if ($(this).is(":checked")) {
                                 model.config['sortProperty'] = metadata.property;
                                 model.config['asc'] = true;
                             }
                         },
                         name: 'sortProperty'
                     });

                     $("<td class='inner'></td>").insertAfter(t).createChildCheck({
                         radio: true,
                         checked: model.config['sortProperty'] === metadata.property && !model.config['asc'],
                         change: function() {
                             if ($(this).is(":checked")) {
                                 model.config['sortProperty'] = metadata.property;
                                 model.config['asc'] = false;
                             }
                         },
                         name: 'sortProperty'
                     });
                 }
         );
     }

    function generateExhibitHTML() {
        var config = this.config;
        var empty = true;

        var props = $.freemix.property.enabledProperties();
        $.each(config.metadata,
        function(index, metadata) {
            var property = metadata.property;
            var identify = props[property];
            if (!metadata.hidden && identify) {
                empty = false;
            }

        });
        if (empty) {
            return $("<div ex:role='view' ex:viewLabel='Columns Missing'></div>");
        }
        var view = $("<div ex:role='view' ex:viewClass='Tabular' ex:viewLabel='" + this.config.name + "'></div>");
        var labels = [];
        var columns = [];
        $.each(config.metadata,
        function(index, metadata) {
            var property = metadata.property;
            var identify = props[property];
            if (!metadata.hidden && identify) {
                labels[labels.length] = identify.label();
                columns[columns.length] = identify.expression();
            }

        });
        view.attr("ex:columnLabels", labels.join(', '));
        view.attr("ex:columns", columns.join(', '));
        if (config.sortProperty) {
            $.each(config.metadata,
            function(index, metadata) {
                var property = metadata.property;
                if (config.sortProperty == property) {
                    view.attr("ex:sortColumn", index);
                }
            });
        }
        view.attr("ex:sortAscending", config.asc);
        return view;
    }

    $.freemix.view.addViewType({
        label: "Table",
        thumbnail: "/site_media/images/table-icon.png",
        display: display,
        generateExhibitHTML: generateExhibitHTML,

        config: {
            type: "table",
            sortProperty: undefined,
            asc: true,
            metadata: []
        }
    });

})(jQuery);