diff --git a/beat/web/plotters/static/plotters/app/directives/plotterparameterItemView.js b/beat/web/plotters/static/plotters/app/directives/plotterparameterItemView.js
index 27fb3e8bf5d3aab1efb7e80448d9530dd8305124..4e0144aa44792111d0615d7b5fb3c2732039b073 100644
--- a/beat/web/plotters/static/plotters/app/directives/plotterparameterItemView.js
+++ b/beat/web/plotters/static/plotters/app/directives/plotterparameterItemView.js
@@ -22,673 +22,774 @@
 //Directive that returns an element which adds buttons on click which adds items
 var app = angular.module('plotterparameterApp');
 
-app.directive('loadedcontent', function()
-{
-    //return {
-    //    link: function (scope, elem, attrs, ctrl) {
-    //        angular.element(document).ready(function() {
-    //            console.info(scope.report.content);
-    //
-    //            });
-    //        //$(window).load(function() {
-    //        //
-    //        //    console.info(scope.report.content);
-    //        //
-    //        //    });
-    //    }
-    //}
-});
+//valid code for now
+//Directive used to plot a graph
+app.directive("plotinfo", function(){
 
-//Directive for opening smart_selector list on "Add a report item" button click that displays options
-app.directive("removeexperiment", function($compile)
-{
-	return function(scope, element, attrs)
-    {
-        //add new report item
-		element.bind("click", function()
+    return {
+        restrict: 'E',
+        scope: true,
+        replace: true,
+        //templateUrl: "/reports/partials/reportTable/",
+        templateUrl: function(scope, elem, attrs)
         {
-            removeExperiment(attrs.id);
-		});
-
-
-        function removeExperiment(experiment_name)
+            var prefix = elem['urlprefix'];
+            var the_url = prefix + "/plotters/partials/plotinfo/";
+            return the_url;
+        },
+        link: function(scope, elem, attrs)
         {
-             beat.ui.report.remove_experiment('report_remove_experiment', experiment_name, scope);
-        }
-    }
+            console.log("--");
+            console.log(scope.plotterparameter);
+            console.log("--");
+            var data_to_plot = scope.plotters.selected.sample_data;
+            $('td#td_' + scope.plotterparameter.name).ready(function(){
+              beat.experiments.utils.displayPlot(
+                  scope.url_prefix,
+                  $('td#td_figure_plot')[0],
+                  {
+                    output: scope.plotterparameter,
+                    plotter: scope.plotters.selected.name,
+                    parameter: scope.plotterparameter,
+                    merged: true,
+                    sample_data: scope.plotters.selected.sample_data,
+                  },
+                  [scope.plotters.selected], // available plotters
+                  true, // replace contents of tag above?
+                  function(){$(this).find('i.fa-spin').hide();});
+            });
+
+        },
+        controller: ['$scope', function ($scope) {
+        }],
+    };
 });
 
-//Directive for opening smart_selector list on "Add a report item" button click that displays options
-app.directive("savereportitems", function($compile)
+//Directive used to generate the selector for plotting graph
+app.directive("selectplotter", function($compile)
 {
-	return function(scope, element, attrs)
-    {
-        //add new report item
-		element.bind("click", function()
+    return {
+        link:function(scope, element, attrs)
         {
-            //var savecontent = [];
-            var savecontent = {};
-            if(scope.plots_details != undefined)
-            {
-                angular.forEach(scope.plots_details, function(value, key)
-                {
-                    //savecontent.push(key, value);
-                    savecontent[key] = value;
-                });
-            }
-            if(scope.tables_details != undefined)
-            {
-                angular.forEach(scope.tables_details, function(value, key)
-                {
-                    savecontent[key] = value;
-                    //savecontent.push(key, value);
-                });
-
-                if(scope.floating_point_precision.selected != undefined)
-                {
-                    savecontent["floating_point_precision"] = scope.floating_point_precision.selected;
-                }
-            }
-            if(scope.report_experiments_alias != undefined)
+            element.bind("change", function()
             {
-                var alias_experiments = {};
-                angular.forEach(scope.report_experiments_alias, function(value, key)
-                {
-                    alias_experiments[key] = value;
-                });
-                savecontent["alias_experiments"] = alias_experiments;
-            }
+                var plotter_graph_element = document.getElementById('space-for-plotterparameter-graph');
+                generate_graph(plotter_graph_element);
 
-            if(!(jQuery.isEmptyObject(scope.sorted_experiments_keys_tables)) && !(jQuery.isEmptyObject(scope.sorted_experiments_keys_reverse)) && !(jQuery.isEmptyObject(scope.sorted_experiments_keys_tables_sortkey)))
-            {
-                savecontent["sorted_tables_experiments"] = scope.sorted_experiments_keys_tables;
-                savecontent["sorted_tables_alias_experiments"] = scope.sorted_experiments_alias_keys_tables;
-                savecontent["sorted_tables_keys_reverse"] = scope.sorted_experiments_keys_reverse;
-                savecontent["sorted_tables_sortkey"] = scope.sorted_experiments_keys_tables_sortkey;
-            }
-            //call set report content from factory
-            var mydict = {};
-            mydict["experiments"] = scope.report.experiments;
-            mydict["content"] = savecontent;
+            });
 
-            for(var i = 0; i < scope.report.experiments.length; i++)
+            function generate_graph(head_id)
             {
-                scope.report_experiments_alias_from_content[scope.report.experiments[i]] = scope.report_experiments_alias[scope.report.experiments[i]];
+                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
+                $(head_id ).empty();
+                angular.element(head_id).append($compile(html_div_code)(scope));
             }
 
-            updateReport(mydict);
-		});
-
-
-        function updateReport(data)
-        {
-            scope.reportFactory.updateReport(scope.user, scope.report_id, data, scope.url_prefix)
-                .success(function (reportData)
-                {
-                    //alert("The report "+ scope.report_id +" has been saved.");
-
-                    beat.ui.report.report_saved('report_saved', scope);
-                })
-                .error(function (error)
-                {
-                    scope.status = 'Unable to update report data: ' + error.message;
-
-                });
-
-        }
-    }
-});
-
-//Directive for opening smart_selector list on "Add a report item" button click that displays options
-app.directive("lockreport", function($compile)
-{
-	return function(scope, element, attrs)
-    {
-        //add new report item
-		element.bind("click", function()
-        {
-            lockReport();
-		});
-
-
-        function lockReport()
-        {
-             beat.ui.report.lock_report('report_lock', scope);
         }
-    }
+    };
 });
 
-//Directive for opening smart_selector list on "Add a report item" button click that displays options
-app.directive("publishreport", function($compile)
+//Directive used to generate the selected plotting graph
+app.directive("selectedplotter", function($compile)
 {
-	return function(scope, element, attrs)
-    {
-        //add new report item
-		element.bind("click", function()
-        {
-            publishReport();
-		});
-
-
-        function publishReport()
+    return {
+        link:function(scope, element, attrs)
         {
-            scope.reportFactory.publishReportAlgorithms(scope.user, scope.report_id, scope.url_prefix)
-               .success(function (reportData)
-               {
-                    beat.ui.report.publish_report('report_publish', scope, reportData);
-               })
-               .error(function (error)
-               {
-                    scope.status = 'Unable to publish report data: ' + error;
-                    $(".explanation_text").hide();
-                    $("#report_publish .warnings").hide();
-                    $("#report_publish .errors").show();
-                    if(error.detail != undefined)
-                        scope.status = 'Unable to publish report data: ' + error.detail;
-                    $("#report_publish .errors .errorslist").append(scope.status);
-                    $("#button-report_publish-cancel").hide();
-               });
+            var plotter_graph_element = document.getElementById('space-for-plotterparameter-graph');
+            generate_graph(plotter_graph_element);
 
+            function generate_graph(head_id)
+            {
+                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
+                $(head_id ).empty();
+                angular.element(head_id).append($compile(html_div_code)(scope));
+            }
 
         }
-    }
+    };
 });
 
-//Directive for opening smart_selector list on "Add a report item" button click that displays options
-app.directive("addreportitem", function($compile)
+//Directive used to handle save plotterparameter click
+app.directive("saveplotterparameter", function()
 {
-	return function(scope, element, attrs)
-    {
-        scope.$on("addSavedElement", function(event, id_content, type)
+    return {
+        link:function(scope, element, attrs)
         {
-            var num_tables_in_content = 0;
-            var num_figures_in_content = 0;
-            for(var i = 0; i < Object.keys(scope.report.content).length; i++)
+            element.bind("click", function()
             {
-                if(Object.keys(scope.report.content)[i].indexOf("table_") == 0)
+                //console.log(scope);
+                //console.log(element);
+                //console.log(attrs);
+
+                //No plotter is selected
+                if(attrs.plotter == "None")
                 {
-                    num_tables_in_content++;
+                    if($("#plotter-selection :selected").text().length == 0)
+                    {
+                        console.log("Please select a plotter first")
+                    }
+                    else
+                    {
+                        //console.log($("#plotter-selection").find(":selected").text());
+                        console.log(scope.plotters.selected);
+                        scope.plotterparameterData.plotter = scope.plotters.selected.id;
+
+                        updatePlotterParameter();
+                    }
                 }
-                else if(Object.keys(scope.report.content)[i].indexOf("chart_") == 0)
+                else
                 {
-                    num_figures_in_content++;
+                    //plotter is selected: parameter tuning
                 }
-            }
+            });
 
-            if(type == "table")
+            function updatePlotterParameter()
             {
-                var table_id = id_content;
-                var table_details = undefined;
-
-                //take the one with more elements
-                if(Object.keys(scope.tables_details).length > num_tables_in_content)
-                {
-                    table_details = scope.tables_details[id_content];
-                }
-                else
-                {
-                    table_details = scope.report.content[id_content];
-                }
+                console.log(scope.plotterparameterData);
+                scope.plotterparameterFactory.updatePlotterParameter(scope.user, scope.plotterparameter_user, scope.plotterparameter_name, scope.plotterparameter_version, scope.plotterparameterData, scope.url_prefix)
+                    .success(function (reportData)
+                    {
+                        //alert("The report "+ scope.report_id +" has been saved.");
 
-                var name_to_remove = "experiment";
-                for(var i = 0; i < table_details.length; i++)
-                {
-                    if(table_details[i].name == "experiment")
+                        beat.ui.plotterparameter.plotterparameter_saved('plotterparameter_saved', scope);
+                    })
+                    .error(function (error)
                     {
-                        table_details.splice(i,1);
-                        break;
+                        scope.status = 'Unable to update plotterparameter data: ' + error.message;
+
+                    });
+
+            }
+
+        }
+    };
+});
+
+//Directive used to append parameters
+app.directive("plotparams", function($compile){
+
+    return {
+        restrict: 'E',
+        scope: true,
+        replace: true,
+        //templateUrl: "/reports/partials/reportTable/",
+        templateUrl: function(scope, elem, attrs)
+        {
+            var prefix = elem['urlprefix'];
+            var the_url = prefix + "/plotters/partials/plotparamsinfo/";
+            return the_url;
+        },
+        link: function(scope, elem, attrs)
+        {
+            $('#table_plotparams tr:last').ready(function(){
+                var params_from_plotter = scope.$parent.plotters.selected.declaration.parameters;
+
+                //Iterate through each plotter parameters and add them
+                $.each(params_from_plotter, function( key, value ) {
+
+                    if(key != "content_type" )
+                    {
+                        //index in table
+                        var tag_id = (scope.textdata).indexOf(key);
+                        var html_div_code = '';
+
+                        var current_value = value.default;
+                        if(key in scope.plotterparams_update)
+                        {
+                            current_value = scope.plotterparams_update[key];
+                        }
+
+                        if(value.type == "string")
+                        {
+                            console.log(value.default);
+                            console.log(JSON.stringify(value.default));
+                            console.log(scope);
+                            console.log("icicc");
+                            console.log("key:");
+                            console.log(key);
+                            console.log("value:");
+                            console.log(value);
+                            console.log("-----");
+
+                            html_div_code = '<tr><td>'+ key +'</td><td><input id="tag_input_'+ key +'" class="form-control input-sm" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput></td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
+                        }
+                        else if(value.type == "float64")
+                        {
+                            var minus_button_plus = '<div style="width:15em" class="input-group"><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="minus" buttonplusminus><button type="button" class="btn btn-danger btn-number" data-type="minus" data-field="quant[2]"><span class="glyphicon glyphicon-minus"></span></button></span><input style="text-align:center" id="tag_input_'+ key +'" class="form-control input-number" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="plus" buttonplusminus><button type="button" class="btn btn-success btn-number" data-type="plus" data-field="quant[2]"><span class="glyphicon glyphicon-plus"></span></button></span></div>';
+                            html_div_code = '<tr><td>'+ key +'</td><td>'+ minus_button_plus +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
+                        }
+                        else if(value.type == "uint16")
+                        {
+                            var minus_button_plus = '<div style="width:15em" class="input-group"><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="minus" buttonplusminus><button type="button" class="btn btn-danger btn-number" data-type="minus" data-field="quant[2]"><span class="glyphicon glyphicon-minus"></span></button></span><input style="text-align:center" id="tag_input_'+ key +'" class="form-control input-number" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="plus" buttonplusminus><button type="button" class="btn btn-success btn-number" data-type="plus" data-field="quant[2]"><span class="glyphicon glyphicon-plus"></span></button></span></div>';
+                            html_div_code = '<tr><td>'+ key +'</td><td>'+ minus_button_plus +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
+                        }
+                        else if(value.type == "bool")
+                        {
+                            var bool_param = '';
+                            if(current_value)
+                            {
+                                bool_param ='<fieldset class="toggle" id="tag_bool_'+ key +'" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" toggleparam><input id="data-policy_'+key+'" type="checkbox" checked="checked"><label for="data-policy"><div class="toggle-button"><div class="toggle-tab"></div></div></label></fieldset>';
+                            }
+                            else
+                            {
+                                bool_param ='<fieldset class="toggle" id="tag_bool_'+ key +'" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" toggleparam><input id="data-policy_'+key+'" type="checkbox"><label for="data-policy"><div class="toggle-button"><div class="toggle-tab"></div></div></label></fieldset>';
+                            }
+                            html_div_code = '<tr><td>'+ key +'</td><td>'+ bool_param +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
+
+                        }
+                        else
+                        {
+                            $('#table_plotparams > tbody:last-child').append('<tr><td>'+ key +'</td><td>'+value.default+'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>');
+                        }
+
+                        angular.element('#table_plotparams > tbody:last-child').append($compile(html_div_code)(scope));
+
                     }
-                }
+                });
 
-                scope.tables_details[table_id] = table_details;
 
-                var accessnumber = "no_number";
-                if(scope.report.number == scope.report_number)
-                {
-                    accessnumber = "number";
-                }
-                var html_div_code = '<div class="panel panel-default" id="' + table_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + table_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-table"> Table</i></a></h4></div><div id="collapse-' + table_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div class="panel-body" table-dynamic monster=' + scope.num_report_items + " tableid=" + table_id + " reportstatus=" + scope.report.status + " accessnumber=" + accessnumber + " urlprefix=" + scope.url_prefix + '></div></div></div>';
 
-                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
-                if(parseInt(table_id.split("_").pop(-1)) >= scope.max_num)
-                {
-                    scope.max_num = parseInt(table_id.split("_").pop(-1));
-                    scope.num_report_items = scope.max_num;
-                }
 
-                scope.num_report_items++;
-            }
-            else if(type == "chart")
-            {
+            });
 
-                var content_detail = {};
-                var chart_id = id_content;
+            //var data_to_plot = scope.plotters.selected.sample_data;
+            //$('td#td_' + scope.plotterparameter.name).ready(function(){
+            //  beat.experiments.utils.displayPlot(
+            //      scope.url_prefix,
+            //      $('td#td_figure_plot')[0],
+            //      {
+            //        output: scope.plotterparameter,
+            //        plotter: scope.plotters.selected.name,
+            //        parameter: scope.plotterparameter,
+            //        merged: true,
+            //        sample_data: scope.plotters.selected.sample_data,
+            //      },
+            //      [scope.plotters.selected], // available plotters
+            //      true, // replace contents of tag above?
+            //      function(){$(this).find('i.fa-spin').hide();});
+            //});
 
-                var plot_details = undefined;
+        },
+        controller: ['$scope', function ($scope) {
+        }],
+    };
+});
 
-                //take the one with more elements
-                if(Object.keys(scope.plots_details).length > num_figures_in_content)
-                {
-                    plot_details = scope.plots_details[chart_id];
-                }
-                else
-                {
-                    plot_details = scope.report.content[chart_id];
-                }
+//Directive used to handle textinput
+app.directive("textinput", function()
+{
+    console.log("text changing?");
+    return {
+        link:function(scope, element, attrs)
+        {
+            // on blur, update the value in scope
+            element.bind('propertychange keyup paste', function (blurEvent) {
 
+                console.log(scope);
+                console.log(element);
+                console.log(attrs);
+                var isValid = false;
 
+                if (element.data('old-value') != element.val()) {
+                    console.log('value changed, new value is: ' + element.val());
 
-                content_detail["name"] = plot_details.data.output[0];
-                //content_detail["description"] = scope.report.content[chart_id].data.plotter;
-                if(plot_details.data.plotter != undefined)
-                {
-                    content_detail["selected_plotter"] = plot_details.data.plotter;
-                }
-                if(plot_details.selected_template != undefined)
-                {
-                    content_detail["selected_template"] = plot_details.selected_template;
-                }
-                if(plot_details.data.merged != undefined)
-                {
-                    content_detail["merged"] = plot_details.data.merged;
-                }
-                if(plot_details.merged != undefined)
-                {
-                    content_detail["merged"] = plot_details.merged;
-                }
+                    var updateValue = element.val();
+                    //string check
+                    if(attrs.type == "string")
+                    {
+                        isValid = true;
+                        updateValue = element.val();
+                    }
 
-                var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + content_detail.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart {$ report.status $}"></div></div></div>';
-                generate_element(scope, "plot", html_div_code);
-                var element = document.getElementById(chart_id);
-                var label_element  = $(document.createElement('div'));
-                label_element.addClass('row');
+                    //integer check
+                    else if(attrs.type == "uint16")
+                    {
+                        //convert value to integer
+                        updateValue = parseInt(element.val());
+                        if(isNaN(updateValue))
+                        {
+                            isValid = false;
+                            alert("Entered value is not a integer");
+                        }
+                        else
+                        {
+                            isValid = true;
+                            updateValue = parseInt(element.val());
+                        }
 
-                var accessnumber = "no_number";
-                if(scope.report.number == scope.report_number)
-                {
-                    accessnumber = "number";
-                }
+                    }
 
-                var prepend_buttons = '<div class="col-sm-12"><div class="action-buttons report-buttons pull-left">';
-                var append_buttons = '</div></div>';
+                    //float check
+                    else if(attrs.type == "float64")
+                    {
+                        //convert value to float
+                        updateValue = parseFloat(element.val());
+                        if(isNaN(updateValue))
+                        {
+                            isValid = false;
+                            alert("Entered value is not a float");
+                        }
+                        else
+                        {
+                            isValid = true;
+                            updateValue = parseFloat(element.val());
+                        }
+                    }
+                    //check if value is float
+                    //updated models
+                    if(isValid)
+                    {
+                        scope.plotterparams_update[attrs.key] = updateValue;
+                    }
+                    console.log(scope.plotterparams_update);
 
-                var a_export  = '<div class="btn-group"><button type="button" class="btn btn-primary btn-sm dropdown-toggle item_export ' + scope.report.status + ' ' + accessnumber + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-download fa-lg"></i> Export Figure <span class="caret"></span></button><ul class="dropdown-menu"><li id="PNG" buttonexportitem><a>PNG</a></li><li id="JPEG" buttonexportitem><a>JPEG</a></li><li id="PDF" buttonexportitem><a>PDF</a></li></ul></div>';
-                if(scope.report.status == "editable" && scope.report.number != scope.report_number) {
-                  var a_element = '<button class="btn btn-danger btn-sm item_delete ' + scope.report.status + ' ' + accessnumber + '" buttondeleteitem><i class="fa fa-times fa-lg"></i> Delete</button>';
-                  label_element.html(prepend_buttons + a_element + a_export + append_buttons);
-                }
-                else {
-                  label_element.html(prepend_buttons + a_export + append_buttons);
+                    //scope.$apply(function () {
+                    //    scope.textdirective = element.val();
+                    //    element.data('old-value', element.val());
+                    //});
                 }
-;
-                $(element).find('.panel-body').append(label_element);
-                angular.element(document.getElementById('space-for-report-items')).append($compile(element)(scope));
-                //var html_dropdown  = "<chartdropdown id='selector_" + chart_id +"'></chartdropdown>";
-                //angular.element(document.getElementById(chart_id)).append($compile(html_dropdown)(scope));
+            });
 
-                _retrieve_chart(scope, content_detail, element);
+        }
+    };
+});
 
-                if(parseInt(chart_id.split("_").pop(-1)) >= scope.max_num)
+//Directive used to handle bool toggle
+app.directive("toggleparam", function()
+{
+    console.log("toggle pressed");
+    return {
+        link:function(scope, element, attrs)
+        {
+            element.bind("click", function()
+            {
+                console.log("toggle pressed");
+                console.log(scope);
+                console.log(element);
+                console.log(attrs);
+
+                if($("#data-policy_"+attrs.key).prop("checked") == true)
                 {
-                    scope.max_num = parseInt(chart_id.split("_").pop(-1));
-                    scope.num_report_items = scope.max_num;
+                    $("#data-policy_"+attrs.key).prop("checked", false);
+                }
+                else
+                {
+                    $("#data-policy_"+attrs.key).prop("checked", true);
                 }
 
-                scope.num_report_items++;
-
-            }
+                scope.plotterparams_update[attrs.key] = $("#data-policy_"+attrs.key).prop("checked");
+                console.log(scope.plotterparams_update);
 
+            });
         }
-        );
+    };
+});
 
-        scope.$on("redrawGraphElement", function(event, id_content, type)
+//Directive used to handle button plus/minus
+app.directive("buttonplusminus", function()
+{
+    console.log("button +/- pressed");
+    return {
+        link:function(scope, element, attrs)
         {
-            var content_detail = {};
-            var chart_id = id_content;
-            content_detail["name"] = scope.report.content[chart_id].data.output[0];
-            //content_detail["description"] = scope.report.content[chart_id].data.plotter;
-            if(scope.report.content[chart_id].data.plotter != undefined)
-            {
-                content_detail["selected_plotter"] = scope.report.content[chart_id].data.plotter;
-            }
-            if(scope.report.content[chart_id].data.parameter != undefined)
-            {
-                content_detail["selected_template"] = scope.report.content[chart_id].data.parameter;
-            }
-            if(scope.report.content[chart_id].data.merged != undefined)
+            element.bind("click", function()
             {
-                content_detail["merged"] = scope.report.content[chart_id].data.merged;
-            }
+                console.log("button +/- pressed");
+                console.log(scope);
+                console.log(element);
+                console.log(attrs);
+                console.log(attrs.key);
+                var tomodify = $("#tag_input_"+attrs.key).val();
+                console.log(tomodify);
+                if(attrs.type == "uint16")
+                {
+                    tomodify = parseInt(tomodify);
+                    if(attrs.action == "plus")
+                    {
+                        tomodify = tomodify +1;
+                    }
+                    else if(attrs.action == "minus")
+                    {
+                        tomodify = tomodify -1;
+                    }
+                }
+                else if(attrs.type == "float64")
+                {
+                    tomodify = parseFloat(tomodify);
+                    if(attrs.action == "plus")
+                    {
+                        tomodify = tomodify +0.1;
+                    }
+                    else if(attrs.action == "minus")
+                    {
+                        tomodify = tomodify -0.1;
+                    }
+                    tomodify = tomodify.toFixed(1);
+                }
+                $("#tag_input_"+attrs.key).val(tomodify);
+                scope.plotterparams_update[attrs.key] = tomodify;
+                console.log(scope.plotterparams_update);
+            });
+        }
+    };
+});
 
-            var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + content_detail.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart"></div></div></div>';
-            generate_element(scope, "plot", html_div_code);
-            var element = document.getElementById(chart_id);
-            var label_element  = $(document.createElement('div'));
-            label_element.addClass('row');
+//Directive used to handle save plotterparameter click
+app.directive("plotterparameteritems", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        scope.$on("addParametersElement", function(event)
+        {
+            console.log("broadcasted");
+            //add the plot
+            var plotter_graph_element = document.getElementById('space-for-plotterparameter-plot');
+            generate_graph(plotter_graph_element);
 
-            var accessnumber = "no_number";
-            if(scope.report.number == scope.report_number)
-            {
-                accessnumber = "number";
-            }
+            //add the parameters
+            var parameter_elements = document.getElementById('space-for-plotterparameter-items');
+            append_plotterparameters(parameter_elements)
 
-            var prepend_buttons = '<div class="col-sm-12"><div class="action-buttons report-buttons pull-left">';
-            var append_buttons = '</div></div>';
+            //functions to operate on graph and parameters
 
-            var a_export  = '<div class="btn-group"><button type="button" class="btn btn-primary btn-sm dropdown-toggle item_export ' + scope.report.status + ' ' + accessnumber + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-download fa-lg"></i> Export Figure <span class="caret"></span></button><ul class="dropdown-menu"><li id="PNG" buttonexportitem><a>PNG</a></li><li id="JPEG" buttonexportitem><a>JPEG</a></li><li id="PDF" buttonexportitem><a>PDF</a></li></ul></div>';
-            if(scope.report.status == "editable" && scope.report.number != scope.report_number) {
-              var a_element = '<button class="btn btn-danger btn-sm item_delete ' + scope.report.status + ' ' + accessnumber + '" buttondeleteitem><i class="fa fa-times fa-lg"></i> Delete</button>';
-              label_element.html(prepend_buttons + a_element + a_export + append_buttons);
-            }
-            else {
-              label_element.html(prepend_buttons + a_export + append_buttons);
+            function generate_graph(head_id)
+            {
+                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
+                $(head_id ).empty();
+                angular.element(head_id).append($compile(html_div_code)(scope));
             }
-;
-            $(element).find('.panel-body').append(label_element);
-            angular.element(document.getElementById('space-for-report-items')).append($compile(element)(scope));
-            //var html_dropdown  = "<chartdropdown id='selector_" + chart_id +"'></chartdropdown>";
-            //angular.element(document.getElementById(chart_id)).html($compile(html_dropdown)(scope));
-
-            _retrieve_chart(scope, content_detail, element);
-
-        });
-
-        //add new report item
-		element.bind("click", function()
-        {
-            var left = $('.add_item').offset().left - $('.add_item').width() + 400;
-            var top = $('.add_item').offset().top;
-            smart_selector.display(scope.item_content.content, left, top);
 
-            var allblocks = [];
-            for(var i = 0; i < scope.report_experiments_blocks_merged_blocks.length; i++)
+            function append_plotterparameters(head_id)
             {
-                allblocks.push(scope.report_experiments_blocks_merged_blocks[i]);
+                var html_div_code = "<plotparams  urlprefix=" + scope.url_prefix +"></plotparams>"
+                $(head_id ).empty();
+                angular.element(head_id).append($compile(html_div_code)(scope));
             }
-            scope.report.common_blocks = arraysInCommon(allblocks);
-		});
 
-        //handles first selector selection (table/plot)
-        if(smart_selector != undefined)
+        });
+    };
+});
+
+//Directive used to handle dynamic testing on graph display
+app.directive("testplotterparameters", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        element.bind("click", function()
         {
-            smart_selector.onEntrySelected = function(item_selected)
-            {
+            console.log("TODO:rewrite another plotter view");
+        });
 
-                var left = $('.add_item').offset().left - $('.add_item').width() + 400;
-                var top = $('.add_item').offset().top;
+        //scope.$on("addParametersElement", function(event)
+        //{
+        //    console.log("broadcasted");
+        //    //add the plot
+        //    var plotter_graph_element = document.getElementById('space-for-plotterparameter-plot');
+        //    generate_graph(plotter_graph_element);
+
+        //    //add the parameters
+        //    var parameter_elements = document.getElementById('space-for-plotterparameter-items');
+        //    append_plotterparameters(parameter_elements)
+
+        //    //functions to operate on graph and parameters
+
+        //    function generate_graph(head_id)
+        //    {
+        //        var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
+        //        $(head_id ).empty();
+        //        angular.element(head_id).append($compile(html_div_code)(scope));
+        //    }
+
+        //    function append_plotterparameters(head_id)
+        //    {
+        //        var html_div_code = "<plotparams  urlprefix=" + scope.url_prefix +"></plotparams>"
+        //        $(head_id ).empty();
+        //        angular.element(head_id).append($compile(html_div_code)(scope));
+        //    }
+
+        //});
+    };
+});
 
-                var next_items_for_selector = prepareContent(scope, smart_selector.entries[smart_selector.selected_entry].identifier);
-                smart_selector_detail.display(next_items_for_selector, left, top);
-            };
-        }
+//end valid code for now
 
-        //handles next selector detail selection
-        if(smart_selector_detail != undefined)
-        {
-            smart_selector_detail.onEntrySelected = function(item_selected)
-            {
-                var left = $('.add_item').offset().left - $('.add_item').width() + 400;
-                var top = $('.add_item').offset().top;
+app.directive('loadedcontent', function()
+{
+    //return {
+    //    link: function (scope, elem, attrs, ctrl) {
+    //        angular.element(document).ready(function() {
+    //            console.info(scope.report.content);
+    //
+    //            });
+    //        //$(window).load(function() {
+    //        //
+    //        //    console.info(scope.report.content);
+    //        //
+    //        //    });
+    //    }
+    //}
+});
 
+//Directive for opening smart_selector list on "Add a report item" button click that displays options
+app.directive("removeexperiment", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        //add new report item
+		element.bind("click", function()
+        {
+            removeExperiment(attrs.id);
+		});
 
-                var result_next_items = nextDetailContent(scope, smart_selector.entries[smart_selector.selected_entry].identifier, smart_selector_detail.entries[smart_selector_detail.selected_entry]);
 
-                if(!result_next_items[0])
-                {
-                    multiple_selector.display(result_next_items[1], left, top);
-                }
-            };
+        function removeExperiment(experiment_name)
+        {
+             beat.ui.report.remove_experiment('report_remove_experiment', experiment_name, scope);
         }
+    }
+});
 
-        //handles first creation of table based on options
-        if(multiple_selector != undefined)
+//Directive for opening smart_selector list on "Add a report item" button click that displays options
+app.directive("savereportitems", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        //add new report item
+		element.bind("click", function()
         {
-            multiple_selector.onEntrySelected = function(item_selected, data)
-            {
-                for(var i = 0; i < multiple_selector.entries.length; i++)
-                {
-                    if(multiple_selector.entries[i].name == item_selected)
-                    {
-                        multiple_selector.entries[i].selected = true;
-                    }
-                }
-            };
-
-            multiple_selector.onEntryDeselected = function(item_selected, data)
+            //var savecontent = [];
+            var savecontent = {};
+            if(scope.plots_details != undefined)
             {
-                for(var i = 0; i < multiple_selector.entries.length; i++)
+                angular.forEach(scope.plots_details, function(value, key)
                 {
-                    if(multiple_selector.entries[i].name == item_selected)
-                    {
-                        multiple_selector.entries[i].selected = false;
-                    }
-                }
-            };
-
-            multiple_selector.onClose = function()
+                    //savecontent.push(key, value);
+                    savecontent[key] = value;
+                });
+            }
+            if(scope.tables_details != undefined)
             {
-                //check if at least one item is selected
-                var checkOneSelected = false;
-                angular.forEach(multiple_selector.entries, function(value, key)
+                angular.forEach(scope.tables_details, function(value, key)
                 {
-                    if(value.selected)
-                        checkOneSelected = true
+                    savecontent[key] = value;
+                    //savecontent.push(key, value);
                 });
 
-                if(checkOneSelected)
+                if(scope.floating_point_precision.selected != undefined)
                 {
-                    var table_id = 'table' + '_' + scope.num_report_items;
-
-                    scope.tables_details[table_id] = multiple_selector.entries;
-
-                    var html_div_code = '<div class="panel panel-default" id="' + table_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + table_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-table"> Table</i></a></h4></div><div id="collapse-' + table_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div class="panel-body" table-dynamic monster=' + scope.num_report_items + " tableid=" + table_id + " reportstatus=" + scope.report.status + " urlprefix=" + scope.url_prefix + '></div></div></div>';
-
-                    angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
-
-                    scope.report.orderedcontent.push(table_id);
-                    scope.num_report_items++;
+                    savecontent["floating_point_precision"] = scope.floating_point_precision.selected;
                 }
             }
-        }
-
-        //handles single table updates via settings option
-        if(multiple_selector_updater != undefined)
-        {
-            multiple_selector_updater.onEntrySelected = function(item_selected, data)
+            if(scope.report_experiments_alias != undefined)
             {
-                for(var i = 0; i < multiple_selector_updater.entries.length; i++)
+                var alias_experiments = {};
+                angular.forEach(scope.report_experiments_alias, function(value, key)
                 {
-                    if(multiple_selector_updater.entries[i].name == item_selected)
-                    {
-                        multiple_selector_updater.entries[i].selected = true;
-                    }
-                }
-            };
+                    alias_experiments[key] = value;
+                });
+                savecontent["alias_experiments"] = alias_experiments;
+            }
 
-            multiple_selector_updater.onEntryDeselected = function(item_selected, data)
+            if(!(jQuery.isEmptyObject(scope.sorted_experiments_keys_tables)) && !(jQuery.isEmptyObject(scope.sorted_experiments_keys_reverse)) && !(jQuery.isEmptyObject(scope.sorted_experiments_keys_tables_sortkey)))
             {
-                for(var i = 0; i < multiple_selector_updater.entries.length; i++)
-                {
-                    if(multiple_selector_updater.entries[i].name == item_selected)
-                    {
-                        multiple_selector_updater.entries[i].selected = false;
-                    }
-                }
-            };
+                savecontent["sorted_tables_experiments"] = scope.sorted_experiments_keys_tables;
+                savecontent["sorted_tables_alias_experiments"] = scope.sorted_experiments_alias_keys_tables;
+                savecontent["sorted_tables_keys_reverse"] = scope.sorted_experiments_keys_reverse;
+                savecontent["sorted_tables_sortkey"] = scope.sorted_experiments_keys_tables_sortkey;
+            }
+            //call set report content from factory
+            var mydict = {};
+            mydict["experiments"] = scope.report.experiments;
+            mydict["content"] = savecontent;
 
-            multiple_selector_updater.onClose = function()
+            for(var i = 0; i < scope.report.experiments.length; i++)
             {
+                scope.report_experiments_alias_from_content[scope.report.experiments[i]] = scope.report_experiments_alias[scope.report.experiments[i]];
+            }
 
-                //check if at least one item is selected
-                var checkOneSelected = false;
-                angular.forEach(multiple_selector_updater.entries, function(value, key)
+            updateReport(mydict);
+		});
+
+
+        function updateReport(data)
+        {
+            scope.reportFactory.updateReport(scope.user, scope.report_id, data, scope.url_prefix)
+                .success(function (reportData)
                 {
-                    if(value.selected)
-                        checkOneSelected = true
-                });
+                    //alert("The report "+ scope.report_id +" has been saved.");
 
-                if(checkOneSelected)
+                    beat.ui.report.report_saved('report_saved', scope);
+                })
+                .error(function (error)
                 {
-                    var element = document.getElementById(multiple_selector_updater.current_table);
+                    scope.status = 'Unable to update report data: ' + error.message;
 
-                    $(element).attr('id', null);
-                    $compile(element)(scope);
-                    $(element).attr('id', multiple_selector_updater.current_table);
-                }
-            }
+                });
 
-	};
+        }
+    }
+});
 
-    //Prepare the content for selector initialization
-    function prepareContent(scope, content_identifier)
+//Directive for opening smart_selector list on "Add a report item" button click that displays options
+app.directive("lockreport", function($compile)
+{
+	return function(scope, element, attrs)
     {
-        var next_content_items = [];
-
-        switch(content_identifier)
+        //add new report item
+		element.bind("click", function()
         {
-            case 'table':
-                next_content_items =  scope.table_item_content.content;
-                break;
-            case 'plot':
-                angular.forEach(scope.report_experiments, function(value, key)
-                {
-                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
-                    {
-                        if(value_analyzer.algorithm == scope.report.analyzer)
-                        {
-                            scope.report_experiments[key].analyzer_block = key_analyzer;
-                        }
-                    });
+            lockReport();
+		});
 
-                    var plottable_result = [];
-                    angular.forEach(value.results[scope.report_experiments[key].analyzer_block], function(value_result_item, key_result_item)
-                    {
-                        if(value_result_item.type.startsWith("plot/"))
-                        {
-                            plottable_result.push(key_result_item);
-                        }
 
-                    });
+        function lockReport()
+        {
+             beat.ui.report.lock_report('report_lock', scope);
+        }
+    }
+});
 
-                    scope.report_experiments[key].plottable_blocks = plottable_result;
+//Directive for opening smart_selector list on "Add a report item" button click that displays options
+app.directive("publishreport", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        //add new report item
+		element.bind("click", function()
+        {
+            publishReport();
+		});
 
-                });
 
-                //Results block are the same for all experiments from same analyzer.
-                //So just grab information from one of them for smart_selector items
-                var single_experiment = scope.report.experiments[0];
+        function publishReport()
+        {
+            scope.reportFactory.publishReportAlgorithms(scope.user, scope.report_id, scope.url_prefix)
+               .success(function (reportData)
+               {
+                    beat.ui.report.publish_report('report_publish', scope, reportData);
+               })
+               .error(function (error)
+               {
+                    scope.status = 'Unable to publish report data: ' + error;
+                    $(".explanation_text").hide();
+                    $("#report_publish .warnings").hide();
+                    $("#report_publish .errors").show();
+                    if(error.detail != undefined)
+                        scope.status = 'Unable to publish report data: ' + error.detail;
+                    $("#report_publish .errors .errorslist").append(scope.status);
+                    $("#button-report_publish-cancel").hide();
+               });
 
-                //create smart_selector items
-                angular.forEach(scope.report_experiments[single_experiment].plottable_blocks, function(value_plottable, key_plottable)
-                {
-                    var plot_type = scope.report_experiments[single_experiment].results[scope.report_experiments[single_experiment].analyzer_block][value_plottable].type;
-                    var item_dict = {};
-                    item_dict["identifier"] = value_plottable;
-                    item_dict["name"] = value_plottable;
-                    item_dict["description"] = plot_type;
 
-                    next_content_items.push(item_dict);
-                });
-                break;
         }
+    }
+});
+
+//Directive for opening smart_selector list on "Add a report item" button click that displays options
+app.directive("addreportitem", function($compile)
+{
+	return function(scope, element, attrs)
+    {
+        scope.$on("addSavedElement", function(event, id_content, type)
+        {
+            var num_tables_in_content = 0;
+            var num_figures_in_content = 0;
+            for(var i = 0; i < Object.keys(scope.report.content).length; i++)
+            {
+                if(Object.keys(scope.report.content)[i].indexOf("table_") == 0)
+                {
+                    num_tables_in_content++;
+                }
+                else if(Object.keys(scope.report.content)[i].indexOf("chart_") == 0)
+                {
+                    num_figures_in_content++;
+                }
+            }
 
-        return next_content_items;
-    }
+            if(type == "table")
+            {
+                var table_id = id_content;
+                var table_details = undefined;
 
-    //Get the detailed content for next selector
-    function nextDetailContent(scope, content_identifier, sub_content)
-    {
-        var is_end = false;
-        var next_items = [];
-        var return_contents = [];
-        switch(content_identifier)
-        {
-            case 'table':
-                is_end = false;
-                angular.forEach(scope.report_experiments, function(value, key)
+                //take the one with more elements
+                if(Object.keys(scope.tables_details).length > num_tables_in_content)
                 {
-                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
-                    {
-                        if(value_analyzer.algorithm == scope.report.analyzer)
-                        {
-                            scope.report_experiments[key].analyzer_block = key_analyzer;
-                        }
-                    });
+                    table_details = scope.tables_details[id_content];
+                }
+                else
+                {
+                    table_details = scope.report.content[id_content];
+                }
 
-                    var table_result = [];
-                    angular.forEach(value.results[scope.report_experiments[key].analyzer_block], function(value_result_item, key_result_item)
+                var name_to_remove = "experiment";
+                for(var i = 0; i < table_details.length; i++)
+                {
+                    if(table_details[i].name == "experiment")
                     {
-                        if(!(value_result_item.type.startsWith("plot/")))
-                        {
-                            table_result.push(key_result_item);
-                        }
-
-                    });
-
-                    scope.report_experiments[key].table_result_blocks = table_result;
+                        table_details.splice(i,1);
+                        break;
+                    }
+                }
 
-                });
+                scope.tables_details[table_id] = table_details;
 
-                //Results block are the same for all experiments from same analyzer.
-                //So just grab information from one of them for smart_selector items
-                var single_experiment = scope.report.experiments[0];
+                var accessnumber = "no_number";
+                if(scope.report.number == scope.report_number)
+                {
+                    accessnumber = "number";
+                }
+                var html_div_code = '<div class="panel panel-default" id="' + table_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + table_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-table"> Table</i></a></h4></div><div id="collapse-' + table_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div class="panel-body" table-dynamic monster=' + scope.num_report_items + " tableid=" + table_id + " reportstatus=" + scope.report.status + " accessnumber=" + accessnumber + " urlprefix=" + scope.url_prefix + '></div></div></div>';
 
-                //create smart_selector items
-                angular.forEach(scope.report_experiments[single_experiment].table_result_blocks, function(value_table_result, key_table_result)
+                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
+                if(parseInt(table_id.split("_").pop(-1)) >= scope.max_num)
                 {
+                    scope.max_num = parseInt(table_id.split("_").pop(-1));
+                    scope.num_report_items = scope.max_num;
+                }
 
-                    var table_item_data = scope.report_experiments[single_experiment].results[scope.report_experiments[single_experiment].analyzer_block][value_table_result];
-                    var item_dict = {};
-                    item_dict["identifier"] = value_table_result;
-                    item_dict["name"] = value_table_result;
-                    item_dict["description"] = table_item_data.type;
-                    if(table_item_data.primary)
-                        item_dict["selected"] = true;
-                    else
-                        item_dict["selected"] = false;
-                    item_dict["data"] = table_item_data;
+                scope.num_report_items++;
+            }
+            else if(type == "chart")
+            {
 
-                    next_items.push(item_dict);
-                });
+                var content_detail = {};
+                var chart_id = id_content;
 
-                //adding execution time entry information for common blocks
-                angular.forEach(scope.report.common_blocks, function(value_table_result, key_table_result)
+                var plot_details = undefined;
+
+                //take the one with more elements
+                if(Object.keys(scope.plots_details).length > num_figures_in_content)
                 {
-                    var item_dict = {};
-                    item_dict["identifier"] = "execution_time." + value_table_result;
-                    item_dict["name"] = "execution_time." + value_table_result;
-                    item_dict["selected"] = false;
-                    next_items.push(item_dict);
+                    plot_details = scope.plots_details[chart_id];
+                }
+                else
+                {
+                    plot_details = scope.report.content[chart_id];
+                }
 
-                });
 
-                //adding total execution time entry information for experiment
-                var item_dict = {};
-                item_dict["identifier"] = "experiment.execution_time";
-                item_dict["name"] = "experiment.execution_time";
-                item_dict["selected"] = false;
-                next_items.push(item_dict);
 
-                //adding globals algorithms parameters
-                angular.forEach(scope.report_algorithm_parameters, function(value_algorithm_parameters, key_algorithm_parameters)
+                content_detail["name"] = plot_details.data.output[0];
+                //content_detail["description"] = scope.report.content[chart_id].data.plotter;
+                if(plot_details.data.plotter != undefined)
                 {
-                    for(var i = 0; i < Object.keys(value_algorithm_parameters).length; i++)
-                    {
-                        var item_dict = {};
-                        item_dict["identifier"] = "algorithm_parameter." + key_algorithm_parameters + "__" +Object.keys(value_algorithm_parameters)[i];
-                        item_dict["name"] = "algorithm_parameter." + key_algorithm_parameters + "__" +Object.keys(value_algorithm_parameters)[i];
-                        item_dict["selected"] = false;
-                        next_items.push(item_dict);
-                    }
-
-                });
+                    content_detail["selected_plotter"] = plot_details.data.plotter;
+                }
+                if(plot_details.selected_template != undefined)
+                {
+                    content_detail["selected_template"] = plot_details.selected_template;
+                }
+                if(plot_details.data.merged != undefined)
+                {
+                    content_detail["merged"] = plot_details.data.merged;
+                }
+                if(plot_details.merged != undefined)
+                {
+                    content_detail["merged"] = plot_details.merged;
+                }
 
-                break;
-            case 'plot':
-                is_end = true;
-                var chart_id = 'chart_' + sub_content.identifier + '_graph' + '_' + scope.num_report_items;
-                var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + sub_content.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart {$ report.status $}"></div></div></div>';
-                generate_element(scope, content_identifier, html_div_code);
+                var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + content_detail.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart {$ report.status $}"></div></div></div>';
+                generate_element(scope, "plot", html_div_code);
                 var element = document.getElementById(chart_id);
                 var label_element  = $(document.createElement('div'));
                 label_element.addClass('row');
@@ -710,1064 +811,1008 @@ app.directive("addreportitem", function($compile)
                 else {
                   label_element.html(prepend_buttons + a_export + append_buttons);
                 }
+;
                 $(element).find('.panel-body').append(label_element);
-
                 angular.element(document.getElementById('space-for-report-items')).append($compile(element)(scope));
+                //var html_dropdown  = "<chartdropdown id='selector_" + chart_id +"'></chartdropdown>";
+                //angular.element(document.getElementById(chart_id)).append($compile(html_dropdown)(scope));
 
-                _retrieve_chart(scope, sub_content, element);
-                scope.report.orderedcontent.push(chart_id);
-                break;
-        }
+                _retrieve_chart(scope, content_detail, element);
 
-        return_contents = [is_end, next_items];
+                if(parseInt(chart_id.split("_").pop(-1)) >= scope.max_num)
+                {
+                    scope.max_num = parseInt(chart_id.split("_").pop(-1));
+                    scope.num_report_items = scope.max_num;
+                }
 
-        return return_contents;
+                scope.num_report_items++;
 
-    }
+            }
 
-    //Generate and compile DOM element
-    function generate_element(scope, content_identifier, html_div_code)
-    {
-        switch(content_identifier)
-        {
-            case 'table':
-                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
-                scope.num_report_items++;
-                break;
-            case 'plot':
-                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
-                scope.num_report_items++;
-                break;
         }
+        );
 
-    }
-
-    //Retrieve chart from api and display on proper item
-    function _get_chart(scope, sub_content, content_type, chart_id)
-    {
-        var required_plotter = [];
-        var set_plotter = ''
-        if(sub_content.selected_plotter != undefined)
+        scope.$on("redrawGraphElement", function(event, id_content, type)
         {
-            //required_plotter.push(sub_content.selected_plotter);
-            set_plotter = sub_content.selected_plotter;
-            var requested_dataformat = '';
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
+            var content_detail = {};
+            var chart_id = id_content;
+            content_detail["name"] = scope.report.content[chart_id].data.output[0];
+            //content_detail["description"] = scope.report.content[chart_id].data.plotter;
+            if(scope.report.content[chart_id].data.plotter != undefined)
             {
-                if(scope.report.plotters[i].name == sub_content.selected_plotter)
-                {
-                    requested_dataformat = scope.report.plotters[i].dataformat;
-                    break;
-                }
+                content_detail["selected_plotter"] = scope.report.content[chart_id].data.plotter;
             }
-
-            //Get default plotter for required dataformat
-            for (var i = 0; i < scope.report.defaultplotters.length; i++)
+            if(scope.report.content[chart_id].data.parameter != undefined)
             {
-                if(scope.report.defaultplotters[i].dataformat == requested_dataformat)
-                {
-                    sub_content.defaultplotter = scope.report.defaultplotters[i];
-                    break;
-                }
+                content_detail["selected_template"] = scope.report.content[chart_id].data.parameter;
+            }
+            if(scope.report.content[chart_id].data.merged != undefined)
+            {
+                content_detail["merged"] = scope.report.content[chart_id].data.merged;
             }
 
-            required_plotter.push(sub_content.defaultplotter.plotter);
+            var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + content_detail.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart"></div></div></div>';
+            generate_element(scope, "plot", html_div_code);
+            var element = document.getElementById(chart_id);
+            var label_element  = $(document.createElement('div'));
+            label_element.addClass('row');
 
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
+            var accessnumber = "no_number";
+            if(scope.report.number == scope.report_number)
             {
-                if(scope.report.plotters[i].dataformat == requested_dataformat && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
-                {
-                    required_plotter.push(scope.report.plotters[i].name);
-                }
+                accessnumber = "number";
             }
-        }
-        else
-        {
-            //Get default plotter for required dataformat
-            for (var i = 0; i < scope.report.defaultplotters.length; i++)
-            {
-                if(scope.report.defaultplotters[i].dataformat == sub_content.description)
-                {
-                    sub_content.defaultplotter = scope.report.defaultplotters[i];
-                    break;
-                }
+
+            var prepend_buttons = '<div class="col-sm-12"><div class="action-buttons report-buttons pull-left">';
+            var append_buttons = '</div></div>';
+
+            var a_export  = '<div class="btn-group"><button type="button" class="btn btn-primary btn-sm dropdown-toggle item_export ' + scope.report.status + ' ' + accessnumber + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-download fa-lg"></i> Export Figure <span class="caret"></span></button><ul class="dropdown-menu"><li id="PNG" buttonexportitem><a>PNG</a></li><li id="JPEG" buttonexportitem><a>JPEG</a></li><li id="PDF" buttonexportitem><a>PDF</a></li></ul></div>';
+            if(scope.report.status == "editable" && scope.report.number != scope.report_number) {
+              var a_element = '<button class="btn btn-danger btn-sm item_delete ' + scope.report.status + ' ' + accessnumber + '" buttondeleteitem><i class="fa fa-times fa-lg"></i> Delete</button>';
+              label_element.html(prepend_buttons + a_element + a_export + append_buttons);
+            }
+            else {
+              label_element.html(prepend_buttons + a_export + append_buttons);
             }
+;
+            $(element).find('.panel-body').append(label_element);
+            angular.element(document.getElementById('space-for-report-items')).append($compile(element)(scope));
+            //var html_dropdown  = "<chartdropdown id='selector_" + chart_id +"'></chartdropdown>";
+            //angular.element(document.getElementById(chart_id)).html($compile(html_dropdown)(scope));
 
-            required_plotter.push(sub_content.defaultplotter.plotter);
-            set_plotter = sub_content.defaultplotter.plotter;
+            _retrieve_chart(scope, content_detail, element);
 
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
-            {
-                if(scope.report.plotters[i].dataformat == sub_content.description && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
-                {
-                    required_plotter.push(scope.report.plotters[i].name);
-                }
-            }
-        }
+        });
 
-        var plotterparameter = [];
-        //Get other plotterparameter
-        for (var i = 0; i < scope.report.plotterparameter.length; i++)
+        //add new report item
+		element.bind("click", function()
         {
-            plotterparameter.push(scope.report.plotterparameter[i].name);
-        }
+            var left = $('.add_item').offset().left - $('.add_item').width() + 400;
+            var top = $('.add_item').offset().top;
+            smart_selector.display(scope.item_content.content, left, top);
 
-        var chart_name = sub_content.name;
+            var allblocks = [];
+            for(var i = 0; i < scope.report_experiments_blocks_merged_blocks.length; i++)
+            {
+                allblocks.push(scope.report_experiments_blocks_merged_blocks[i]);
+            }
+            scope.report.common_blocks = arraysInCommon(allblocks);
+		});
 
-        var legend_experiments = '';
-        var alias_experiments = [];
-        for(var i = 0; i < scope.report.experiments.length; i++)
+        //handles first selector selection (table/plot)
+        if(smart_selector != undefined)
         {
-            if(i == 0)
-                legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
-            else
-                legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
-
-            alias_experiments.push(scope.report_experiments_alias[scope.report.experiments[i]]);
-        }
-
-        var request_data = {
-            experiment:   alias_experiments,
-            analyzer:     [scope.report.analyzer],
-            output:       [chart_name],
-            plotter:      set_plotter,
-            legend:       legend_experiments,
-            report_number:  scope.report.number,
-            //height:       300,
-            //width:        400,
-        };
-
-        base_url = scope.report.url_prefix;
+            smart_selector.onEntrySelected = function(item_selected)
+            {
 
-        var plot_detail = {};
-        plot_detail["required_plotter"] = required_plotter;
-        plot_detail["data"] =  {
-            analyzer:     [scope.report.analyzer],
-            output:       [chart_name],
-            plotter:      set_plotter,
-        };
+                var left = $('.add_item').offset().left - $('.add_item').width() + 400;
+                var top = $('.add_item').offset().top;
 
-        if(sub_content.selected_template != undefined)// && sub_content.selected_template != "Default")
-        {
-            plot_detail["selected_template"] = sub_content.selected_template;
-            request_data.parameter = plot_detail["selected_template"];
-        }
-        else
-        {
-            plot_detail["selected_template"] = sub_content.defaultplotter.parameter;
-            request_data.parameter = plot_detail["selected_template"];
+                var next_items_for_selector = prepareContent(scope, smart_selector.entries[smart_selector.selected_entry].identifier);
+                smart_selector_detail.display(next_items_for_selector, left, top);
+            };
         }
 
-        if(sub_content.merged != undefined)// && sub_content.selected_template != "Default")
-        {
-            plot_detail["merged"] = sub_content.merged;
-            request_data.merged = plot_detail["merged"];
-        }
-        else
+        //handles next selector detail selection
+        if(smart_selector_detail != undefined)
         {
-            plot_detail["merged"] = true;
-            request_data.merged = plot_detail["merged"];
-        }
+            smart_selector_detail.onEntrySelected = function(item_selected)
+            {
+                var left = $('.add_item').offset().left - $('.add_item').width() + 400;
+                var top = $('.add_item').offset().top;
 
-        beat.experiments.utils.getPlotData(base_url,
-                                               request_data, required_plotter, plotterparameter, content_type,
-                                               function(r_image_data, selected_content_type) {
-                        download(r_image_data, chart_id + "." + content_type.toLowerCase(), selected_content_type);
-                                               }
-                                               );
-    }
 
+                var result_next_items = nextDetailContent(scope, smart_selector.entries[smart_selector.selected_entry].identifier, smart_selector_detail.entries[smart_selector_detail.selected_entry]);
 
-    //Retrieve chart from api and display on proper item
-    function _retrieve_chart(scope, sub_content, container)
-    {
-        var required_plotter = [];
-        var set_plotter = ''
-        if(sub_content.selected_plotter != undefined)
+                if(!result_next_items[0])
+                {
+                    multiple_selector.display(result_next_items[1], left, top);
+                }
+            };
+        }
+
+        //handles first creation of table based on options
+        if(multiple_selector != undefined)
         {
-            //required_plotter.push(sub_content.selected_plotter);
-            set_plotter = sub_content.selected_plotter;
-            var requested_dataformat = '';
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
+            multiple_selector.onEntrySelected = function(item_selected, data)
             {
-                if(scope.report.plotters[i].name == sub_content.selected_plotter)
+                for(var i = 0; i < multiple_selector.entries.length; i++)
                 {
-                    requested_dataformat = scope.report.plotters[i].dataformat;
-                    break;
+                    if(multiple_selector.entries[i].name == item_selected)
+                    {
+                        multiple_selector.entries[i].selected = true;
+                    }
                 }
-            }
+            };
 
-            //Get default plotter for required dataformat
-            for (var i = 0; i < scope.report.defaultplotters.length; i++)
+            multiple_selector.onEntryDeselected = function(item_selected, data)
             {
-                if(scope.report.defaultplotters[i].dataformat == requested_dataformat)
+                for(var i = 0; i < multiple_selector.entries.length; i++)
                 {
-                    sub_content.defaultplotter = scope.report.defaultplotters[i];
-                    break;
+                    if(multiple_selector.entries[i].name == item_selected)
+                    {
+                        multiple_selector.entries[i].selected = false;
+                    }
                 }
-            }
-
-            required_plotter.push(sub_content.defaultplotter.plotter);
+            };
 
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
+            multiple_selector.onClose = function()
             {
-                if(scope.report.plotters[i].dataformat == requested_dataformat && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
+                //check if at least one item is selected
+                var checkOneSelected = false;
+                angular.forEach(multiple_selector.entries, function(value, key)
                 {
-                    required_plotter.push(scope.report.plotters[i].name);
+                    if(value.selected)
+                        checkOneSelected = true
+                });
+
+                if(checkOneSelected)
+                {
+                    var table_id = 'table' + '_' + scope.num_report_items;
+
+                    scope.tables_details[table_id] = multiple_selector.entries;
+
+                    var html_div_code = '<div class="panel panel-default" id="' + table_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + table_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-table"> Table</i></a></h4></div><div id="collapse-' + table_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div class="panel-body" table-dynamic monster=' + scope.num_report_items + " tableid=" + table_id + " reportstatus=" + scope.report.status + " urlprefix=" + scope.url_prefix + '></div></div></div>';
+
+                    angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
+
+                    scope.report.orderedcontent.push(table_id);
+                    scope.num_report_items++;
                 }
             }
         }
-        else
+
+        //handles single table updates via settings option
+        if(multiple_selector_updater != undefined)
         {
-            //Get default plotter for required dataformat
-            for (var i = 0; i < scope.report.defaultplotters.length; i++)
+            multiple_selector_updater.onEntrySelected = function(item_selected, data)
             {
-                if(scope.report.defaultplotters[i].dataformat == sub_content.description)
+                for(var i = 0; i < multiple_selector_updater.entries.length; i++)
                 {
-                    sub_content.defaultplotter = scope.report.defaultplotters[i];
-                    break;
+                    if(multiple_selector_updater.entries[i].name == item_selected)
+                    {
+                        multiple_selector_updater.entries[i].selected = true;
+                    }
                 }
-            }
+            };
 
-            required_plotter.push(sub_content.defaultplotter.plotter);
-            set_plotter = sub_content.defaultplotter.plotter;
+            multiple_selector_updater.onEntryDeselected = function(item_selected, data)
+            {
+                for(var i = 0; i < multiple_selector_updater.entries.length; i++)
+                {
+                    if(multiple_selector_updater.entries[i].name == item_selected)
+                    {
+                        multiple_selector_updater.entries[i].selected = false;
+                    }
+                }
+            };
 
-            //Get other plotters for required dataformat
-            for (var i = 0; i < scope.report.plotters.length; i++)
+            multiple_selector_updater.onClose = function()
             {
-                if(scope.report.plotters[i].dataformat == sub_content.description && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
+
+                //check if at least one item is selected
+                var checkOneSelected = false;
+                angular.forEach(multiple_selector_updater.entries, function(value, key)
                 {
-                    required_plotter.push(scope.report.plotters[i].name);
+                    if(value.selected)
+                        checkOneSelected = true
+                });
+
+                if(checkOneSelected)
+                {
+                    var element = document.getElementById(multiple_selector_updater.current_table);
+
+                    $(element).attr('id', null);
+                    $compile(element)(scope);
+                    $(element).attr('id', multiple_selector_updater.current_table);
                 }
             }
-        }
-
-        var plotterparameter = [];
-        //Get other plotterparameter
-        for (var i = 0; i < scope.report.plotterparameter.length; i++)
-        {
-            plotterparameter.push(scope.report.plotterparameter[i].name);
-        }
 
-        var chart_name = sub_content.name;
+	};
 
-        var legend_experiments = '';
-        var alias_experiments = [];
+    //Prepare the content for selector initialization
+    function prepareContent(scope, content_identifier)
+    {
+        var next_content_items = [];
 
-        for(var i = 0; i < scope.report.experiments.length; i++)
+        switch(content_identifier)
         {
-            if(i == 0)
-                legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
-            else
-                legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
+            case 'table':
+                next_content_items =  scope.table_item_content.content;
+                break;
+            case 'plot':
+                angular.forEach(scope.report_experiments, function(value, key)
+                {
+                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
+                    {
+                        if(value_analyzer.algorithm == scope.report.analyzer)
+                        {
+                            scope.report_experiments[key].analyzer_block = key_analyzer;
+                        }
+                    });
 
-            if(Object.keys(scope.$parent.report_experiments_alias_from_content).length === 0)
-                alias_experiments.push(scope.report_experiments_alias[scope.report.experiments[i]]);
-            else
-                alias_experiments.push(scope.report_experiments_alias_from_content[scope.report.experiments[i]]);
-        }
+                    var plottable_result = [];
+                    angular.forEach(value.results[scope.report_experiments[key].analyzer_block], function(value_result_item, key_result_item)
+                    {
+                        if(value_result_item.type.startsWith("plot/"))
+                        {
+                            plottable_result.push(key_result_item);
+                        }
 
-        var request_data = {
-            experiment:   alias_experiments,
-            analyzer:     [scope.report.analyzer],
-            output:       [chart_name],
-            plotter:      set_plotter,
-            legend:       legend_experiments,
-            report_number: scope.report.number,
-            //height:       300,
-            //width:        400,
-        };
+                    });
 
-        base_url = scope.report.url_prefix;
-        //scope.plots_details[container.id];
+                    scope.report_experiments[key].plottable_blocks = plottable_result;
 
-        var plot_detail = {};
-        plot_detail["required_plotter"] = required_plotter;
-        plot_detail["data"] =  {
-            analyzer:     [scope.report.analyzer],
-            output:       [chart_name],
-            plotter:      set_plotter,
-        };
+                });
 
+                //Results block are the same for all experiments from same analyzer.
+                //So just grab information from one of them for smart_selector items
+                var single_experiment = scope.report.experiments[0];
 
-        if(sub_content.selected_template != undefined)// && sub_content.selected_template != "Default")
-        {
-            plot_detail["selected_template"] = sub_content.selected_template;
-            request_data.parameter = plot_detail["selected_template"];
-        }
-        else
-        {
-            plot_detail["selected_template"] = sub_content.defaultplotter.parameter;
-            request_data.parameter = plot_detail["selected_template"];
-        }
+                //create smart_selector items
+                angular.forEach(scope.report_experiments[single_experiment].plottable_blocks, function(value_plottable, key_plottable)
+                {
+                    var plot_type = scope.report_experiments[single_experiment].results[scope.report_experiments[single_experiment].analyzer_block][value_plottable].type;
+                    var item_dict = {};
+                    item_dict["identifier"] = value_plottable;
+                    item_dict["name"] = value_plottable;
+                    item_dict["description"] = plot_type;
 
-        if(sub_content.merged != undefined)// && sub_content.selected_template != "Default")
-        {
-            plot_detail["merged"] = sub_content.merged;
-            request_data.merged = plot_detail["merged"];
-        }
-        else
-        {
-            plot_detail["merged"] = true;
-            request_data.merged = plot_detail["merged"];
+                    next_content_items.push(item_dict);
+                });
+                break;
         }
 
-        scope.plots_details[container.id]= plot_detail;
+        return next_content_items;
+    }
 
-        if(scope.report.status == "editable" && scope.report.number != scope.report_number)
+    //Get the detailed content for next selector
+    function nextDetailContent(scope, content_identifier, sub_content)
+    {
+        var is_end = false;
+        var next_items = [];
+        var return_contents = [];
+        switch(content_identifier)
         {
-            beat.experiments.utils.displayPlot(base_url, $(container).find('.panel-body')[0],
-                                               request_data, required_plotter, plotterparameter, false,
+            case 'table':
+                is_end = false;
+                angular.forEach(scope.report_experiments, function(value, key)
+                {
+                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
+                    {
+                        if(value_analyzer.algorithm == scope.report.analyzer)
+                        {
+                            scope.report_experiments[key].analyzer_block = key_analyzer;
+                        }
+                    });
 
-                                               function(r_plotter, r_plotterparameter, r_merged) {
-                                                scope.plots_details[container.id]["data"]["plotter"] = r_plotter;
-                                                scope.plots_details[container.id]["selected_template"] = r_plotterparameter;
-                                                scope.plots_details[container.id]["merged"] = r_merged;
-                                               }
-                                               );
-        }
-        else
-        {
-            beat.experiments.utils.displayPlot(base_url, $(container).find('.panel-body')[0],
-                                               request_data, [], [], false,
+                    var table_result = [];
+                    angular.forEach(value.results[scope.report_experiments[key].analyzer_block], function(value_result_item, key_result_item)
+                    {
+                        if(!(value_result_item.type.startsWith("plot/")))
+                        {
+                            table_result.push(key_result_item);
+                        }
 
-                                               function(r_plotter, r_plotterparameter, r_merged) {
-                                               }
-                                               );
-        }
-    }
+                    });
+
+                    scope.report_experiments[key].table_result_blocks = table_result;
 
-    function arraysInCommon(arrays)
-    {
-        var i, common,
-        L= arrays.length, min= Infinity;
-        while(L){
-            if(arrays[--L].length<min){
-                min= arrays[L].length;
-                i= L;
-            }
-        }
-        common= arrays.splice(i, 1)[0];
-        return common.filter(function(itm, indx){
-            if(common.indexOf(itm)== indx){
-                return arrays.every(function(arr){
-                    return arr.indexOf(itm)!= -1;
                 });
-            }
-        });
-    }
 
-    }
-});
+                //Results block are the same for all experiments from same analyzer.
+                //So just grab information from one of them for smart_selector items
+                var single_experiment = scope.report.experiments[0];
 
+                //create smart_selector items
+                angular.forEach(scope.report_experiments[single_experiment].table_result_blocks, function(value_table_result, key_table_result)
+                {
 
-//Dynamic tables items
-app.directive('item', function ($compile) {
-   function createTDElement(column) {
-      var table = angular.element('<table><tr><td class="tableitemspace" thecolumn="' + column + '"></td></tr></table>');
-      return table.find('td');
-   }
+                    var table_item_data = scope.report_experiments[single_experiment].results[scope.report_experiments[single_experiment].analyzer_block][value_table_result];
+                    var item_dict = {};
+                    item_dict["identifier"] = value_table_result;
+                    item_dict["name"] = value_table_result;
+                    item_dict["description"] = table_item_data.type;
+                    if(table_item_data.primary)
+                        item_dict["selected"] = true;
+                    else
+                        item_dict["selected"] = false;
+                    item_dict["data"] = table_item_data;
 
-   function render(element, scope) {
-    var column, html, i;
-    var columns = scope.$parent.tables_details[scope.$parent.dattrs.tableid];
+                    next_items.push(item_dict);
+                });
 
-    for (i = 0; i < columns.length ; i++) {
-        if(i == 0 && columns.length > 0)
-        {
-            html = $compile(createTDElement("experiment"))(scope);
+                //adding execution time entry information for common blocks
+                angular.forEach(scope.report.common_blocks, function(value_table_result, key_table_result)
+                {
+                    var item_dict = {};
+                    item_dict["identifier"] = "execution_time." + value_table_result;
+                    item_dict["name"] = "execution_time." + value_table_result;
+                    item_dict["selected"] = false;
+                    next_items.push(item_dict);
 
-        }
-       column = columns[i];
-       if (column.selected) {
+                });
 
-          html = $compile(createTDElement(column.name))(scope);
-          element.append(html);
-       }
-    }
+                //adding total execution time entry information for experiment
+                var item_dict = {};
+                item_dict["identifier"] = "experiment.execution_time";
+                item_dict["name"] = "experiment.execution_time";
+                item_dict["selected"] = false;
+                next_items.push(item_dict);
 
+                //adding globals algorithms parameters
+                angular.forEach(scope.report_algorithm_parameters, function(value_algorithm_parameters, key_algorithm_parameters)
+                {
+                    for(var i = 0; i < Object.keys(value_algorithm_parameters).length; i++)
+                    {
+                        var item_dict = {};
+                        item_dict["identifier"] = "algorithm_parameter." + key_algorithm_parameters + "__" +Object.keys(value_algorithm_parameters)[i];
+                        item_dict["name"] = "algorithm_parameter." + key_algorithm_parameters + "__" +Object.keys(value_algorithm_parameters)[i];
+                        item_dict["selected"] = false;
+                        next_items.push(item_dict);
+                    }
 
-   }
+                });
 
-   return {
-   //   restrict: 'A',
-      scope: {
-         exp_name: "=",
-         item: "=",
-         columns: "="
-      },
-      compile: function () {
-         return function (scope, element) {
-            render(element, scope);
-         }
+                break;
+            case 'plot':
+                is_end = true;
+                var chart_id = 'chart_' + sub_content.identifier + '_graph' + '_' + scope.num_report_items;
+                var html_div_code = '<div class="panel panel-default" id="' + chart_id + '"><div class="panel-heading" role="tab"><h4 class="panel-title"><a role="button" data-toggle="collapse" data-parent="#info-heading" href="#collapse-' + chart_id + '" aria-expanded="true" aria-controls="collapse-info"><i class="fa fa-area-chart"> ' + sub_content.name + '</i></a></h4></div><div id="collapse-' + chart_id + '" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="info-heading"><div id="'+chart_id+'" class="panel-body chart {$ report.status $}"></div></div></div>';
+                generate_element(scope, content_identifier, html_div_code);
+                var element = document.getElementById(chart_id);
+                var label_element  = $(document.createElement('div'));
+                label_element.addClass('row');
 
-      }
-   };
+                var accessnumber = "no_number";
+                if(scope.report.number == scope.report_number)
+                {
+                    accessnumber = "number";
+                }
 
-});
+                var prepend_buttons = '<div class="col-sm-12"><div class="action-buttons report-buttons pull-left">';
+                var append_buttons = '</div></div>';
+
+                var a_export  = '<div class="btn-group"><button type="button" class="btn btn-primary btn-sm dropdown-toggle item_export ' + scope.report.status + ' ' + accessnumber + '" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-download fa-lg"></i> Export Figure <span class="caret"></span></button><ul class="dropdown-menu"><li id="PNG" buttonexportitem><a>PNG</a></li><li id="JPEG" buttonexportitem><a>JPEG</a></li><li id="PDF" buttonexportitem><a>PDF</a></li></ul></div>';
+                if(scope.report.status == "editable" && scope.report.number != scope.report_number) {
+                  var a_element = '<button class="btn btn-danger btn-sm item_delete ' + scope.report.status + ' ' + accessnumber + '" buttondeleteitem><i class="fa fa-times fa-lg"></i> Delete</button>';
+                  label_element.html(prepend_buttons + a_element + a_export + append_buttons);
+                }
+                else {
+                  label_element.html(prepend_buttons + a_export + append_buttons);
+                }
+                $(element).find('.panel-body').append(label_element);
+
+                angular.element(document.getElementById('space-for-report-items')).append($compile(element)(scope));
+
+                _retrieve_chart(scope, sub_content, element);
+                scope.report.orderedcontent.push(chart_id);
+                break;
+        }
 
-//Directive used to set proper item value in selected column
-app.directive("thecolumn",['$compile', function ($compile) {
+        return_contents = [is_end, next_items];
 
-   return {
-      scope: {
-         thecolumn: "@"
-      },
-      restrict: 'A',
-      template: '{{itemValue}}',
-      controller: ['$scope', function ($scope) {
+        return return_contents;
 
-         var the_parent = $scope.$parent.$parent.$parent.$parent;
-         var report_experiments = $scope.$parent.$parent.$parent.$parent.report_experiments;
-         var report_experiments_alias = $scope.$parent.$parent.$parent.$parent.report_experiments_alias;
-         var floating_point_precision = $scope.$parent.$parent.$parent.$parent.floating_point_precision;
-         var report = $scope.$parent.$parent.$parent.report;
-         var experiment_name = $scope.$parent.item;
+    }
 
-         if(jQuery.isEmptyObject(report_experiments) || (report_experiments[experiment_name] == undefined))
-         {
-            return
-         }
+    //Generate and compile DOM element
+    function generate_element(scope, content_identifier, html_div_code)
+    {
+        switch(content_identifier)
+        {
+            case 'table':
+                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
+                scope.num_report_items++;
+                break;
+            case 'plot':
+                angular.element(document.getElementById('space-for-report-items')).append($compile(html_div_code)(scope));
+                scope.num_report_items++;
+                break;
+        }
 
-         var analyzer_block = report_experiments[experiment_name].analyzer_block;
-         var report_algorithm_parameters_experiment = $scope.$parent.$parent.$parent.$parent.report_algorithm_parameters_experiment;
+    }
 
-         if($scope.thecolumn != "experiment")
-         {
-            if(analyzer_block == undefined)
+    //Retrieve chart from api and display on proper item
+    function _get_chart(scope, sub_content, content_type, chart_id)
+    {
+        var required_plotter = [];
+        var set_plotter = ''
+        if(sub_content.selected_plotter != undefined)
+        {
+            //required_plotter.push(sub_content.selected_plotter);
+            set_plotter = sub_content.selected_plotter;
+            var requested_dataformat = '';
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
             {
-                angular.forEach(report_experiments, function(value, key)
+                if(scope.report.plotters[i].name == sub_content.selected_plotter)
                 {
-                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
-                    {
-                        if(value_analyzer.algorithm == report.analyzer && (key_analyzer in report_experiments[experiment_name].declaration.analyzers))
-                        {
-                            report_experiments[experiment_name].analyzer_block = key_analyzer;
-                            analyzer_block = report_experiments[experiment_name].analyzer_block;
-                        }
-                    });
-                });
+                    requested_dataformat = scope.report.plotters[i].dataformat;
+                    break;
+                }
             }
 
-            if($scope.thecolumn.indexOf("execution_time.") == 0)
+            //Get default plotter for required dataformat
+            for (var i = 0; i < scope.report.defaultplotters.length; i++)
             {
-                //execution time information
-                var block_name = $scope.thecolumn.split("execution_time.")[1].split("[s]")[0];
-                if(Object.keys(report_experiments[experiment_name].execution_info).length === 0)
-                {
-                    $scope.itemValue = "-";
-                }
-                else
+                if(scope.report.defaultplotters[i].dataformat == requested_dataformat)
                 {
-                    if(report_experiments[experiment_name].execution_info[block_name] == undefined)
-                    {
-                        $scope.itemValue = "-";
-                    }
-                    else
-                    {
-                        $scope.itemValue = (report_experiments[experiment_name].execution_info[block_name].linear_execution_time).toFixed(floating_point_precision.selected);;
-                    }
+                    sub_content.defaultplotter = scope.report.defaultplotters[i];
+                    break;
                 }
             }
-            else if($scope.thecolumn.indexOf("experiment.") == 0)
+
+            required_plotter.push(sub_content.defaultplotter.plotter);
+
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
             {
-                //total execution time information
-                var block_name = $scope.thecolumn.split("execution_time.")[1];
-                var total_time = 0;
-                if(Object.keys(report_experiments[experiment_name].execution_info).length === 0)
-                {
-                    total_time = "-";
-                }
-                else
+                if(scope.report.plotters[i].dataformat == requested_dataformat && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
                 {
-                    angular.forEach(report_experiments[experiment_name].execution_info, function(value, key)
-                    {
-                        total_time += value.linear_execution_time;
-                    });
+                    required_plotter.push(scope.report.plotters[i].name);
                 }
-
-                $scope.itemValue = total_time.toFixed(floating_point_precision.selected);
             }
-            else if($scope.thecolumn.indexOf("algorithm_parameter.") == 0)
+        }
+        else
+        {
+            //Get default plotter for required dataformat
+            for (var i = 0; i < scope.report.defaultplotters.length; i++)
             {
-                //total execution time information
-                var block_name = $scope.thecolumn.split("algorithm_parameter.")[1];
-                var algorithm_name = block_name.split("__")[0];
-                var parameter_name = block_name.split("__")[1];
-                if(report_algorithm_parameters_experiment[experiment_name][algorithm_name] != undefined)
-                {
-                    var value = "";
-                    if(report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name] != undefined)
-                    {
-                        for(var i = 0; i < report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name].length; i++)
-                        {
-                            if(i > 0 && i < report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name].length -1 )
-                            {
-                                value += ",";
-                            }
-                            value = report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name][i];
-                        }
-                    }
-                    else if(report["all_experiments"][experiment_name]["declaration"]["globals"][algorithm_name][parameter_name] != undefined)
-                    {
-                        //get globals value
-                        value = report["all_experiments"][experiment_name]["declaration"]["globals"][algorithm_name][parameter_name];
-                    }
-                    else
-                    {
-                        //nothing is defined
-                        value = "-";
-                    }
-
-                    $scope.itemValue = value;
-                }
-                else
+                if(scope.report.defaultplotters[i].dataformat == sub_content.description)
                 {
-                    $scope.itemValue = "-";
+                    sub_content.defaultplotter = scope.report.defaultplotters[i];
+                    break;
                 }
             }
-            else
+
+            required_plotter.push(sub_content.defaultplotter.plotter);
+            set_plotter = sub_content.defaultplotter.plotter;
+
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
             {
-                //results information
-                $scope.itemValue = (report_experiments[experiment_name].results[analyzer_block][$scope.thecolumn].value).toFixed(floating_point_precision.selected);
+                if(scope.report.plotters[i].dataformat == sub_content.description && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
+                {
+                    required_plotter.push(scope.report.plotters[i].name);
+                }
             }
-         }
-         else
-         {
-                var experiment_alias = report_experiments_alias[experiment_name];
-                $scope.itemValue = experiment_alias;
-         }
-      }]//,
-      //link: function(scope, element, attrs)
-      //{
-      //  console.log(scope);
-      //  var report_experiments_alias = scope.$parent.$parent.$parent.$parent.report_experiments_alias;
-      //  var experiment_name = scope.$parent.item;
-      //  var experiment_alias = report_experiments_alias[experiment_name];
-      //  scope.$watch(scope.$parent.$parent.$parent.$parent.report_experiments_alias,function(newValue, oldValue)
-      //  {
-      //      console.log("changed");
-      //      console.log(report_experiments_alias);
-      //      console.log(oldValue);
-      //      console.log(newValue);
-      //  });
-      //
-      //}
-   }
-}]);
-
-//Directive used to generate the dynamic table loading partials
-app.directive("tableDynamic", function(){
+        }
 
-    return {
-        restrict: 'A',
-        scope: true,
-        replace: true,
-        //templateUrl: "/reports/partials/reportTable/",
-        templateUrl: function(scope, elem, attrs)
-        {
-            var prefix = elem['urlprefix'];
-            var the_url = prefix + "/reports/partials/reportTable/";
-            return the_url;
-        },
-        link: function(scope, elem, attrs)
+        var plotterparameter = [];
+        //Get other plotterparameter
+        for (var i = 0; i < scope.report.plotterparameter.length; i++)
         {
-             var prepend_item = {};
-             prepend_item["name"] = "experiment";
-             prepend_item["selected"] = true;
+            plotterparameter.push(scope.report.plotterparameter[i].name);
+        }
 
-             scope.tables_details[attrs.tableid].unshift(prepend_item);
+        var chart_name = sub_content.name;
 
-             angular.forEach(scope.tables_details, function(table_value, table_key)
-             {
-                for(var i = 0; i < table_value.length; i++)
-                {
-                    if(table_value[i].name.indexOf("execution_time") > -1 &&
-                       table_value[i].name.indexOf("[s]") == -1)
-                    {
-                        table_value[i].name = table_value[i].name + "[s]";
-                    }
-                };
-             });
+        var legend_experiments = '';
+        var alias_experiments = [];
+        for(var i = 0; i < scope.report.experiments.length; i++)
+        {
+            if(i == 0)
+                legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
+            else
+                legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
 
-             scope.dattrs = attrs;
+            alias_experiments.push(scope.report_experiments_alias[scope.report.experiments[i]]);
         }
-    };
-});
 
-//Directive used to generate the dynamic table loading partials
-app.directive("myreportinfo", function(){
+        var request_data = {
+            experiment:   alias_experiments,
+            analyzer:     [scope.report.analyzer],
+            output:       [chart_name],
+            plotter:      set_plotter,
+            legend:       legend_experiments,
+            report_number:  scope.report.number,
+            //height:       300,
+            //width:        400,
+        };
+
+        base_url = scope.report.url_prefix;
+
+        var plot_detail = {};
+        plot_detail["required_plotter"] = required_plotter;
+        plot_detail["data"] =  {
+            analyzer:     [scope.report.analyzer],
+            output:       [chart_name],
+            plotter:      set_plotter,
+        };
 
-    return {
-        restrict: 'E',
-        scope: true,
-        replace: true,
-        //templateUrl: "/reports/partials/reportTable/",
-        templateUrl: function(scope, elem, attrs)
+        if(sub_content.selected_template != undefined)// && sub_content.selected_template != "Default")
         {
-            var prefix = elem['urlprefix'];
-            var the_url = prefix + "/reports/partials/reportInfo/";
-            return the_url;
-        },
-        link: function(scope, elem, attrs)
+            plot_detail["selected_template"] = sub_content.selected_template;
+            request_data.parameter = plot_detail["selected_template"];
+        }
+        else
         {
-        },
-        controller: ['$scope', function ($scope) {
-        }],
-    };
-});
-
-//valid code for now
-//Directive used to plot a graph
-app.directive("plotinfo", function(){
+            plot_detail["selected_template"] = sub_content.defaultplotter.parameter;
+            request_data.parameter = plot_detail["selected_template"];
+        }
 
-    return {
-        restrict: 'E',
-        scope: true,
-        replace: true,
-        //templateUrl: "/reports/partials/reportTable/",
-        templateUrl: function(scope, elem, attrs)
+        if(sub_content.merged != undefined)// && sub_content.selected_template != "Default")
         {
-            var prefix = elem['urlprefix'];
-            var the_url = prefix + "/plotters/partials/plotinfo/";
-            return the_url;
-        },
-        link: function(scope, elem, attrs)
+            plot_detail["merged"] = sub_content.merged;
+            request_data.merged = plot_detail["merged"];
+        }
+        else
         {
-            var data_to_plot = scope.plotters.selected.sample_data;
-            $('td#td_' + scope.plotterparameter.name).ready(function(){
-              beat.experiments.utils.displayPlot(
-                  scope.url_prefix,
-                  $('td#td_figure_plot')[0],
-                  {
-                    output: scope.plotterparameter,
-                    plotter: scope.plotters.selected.name,
-                    parameter: scope.plotterparameter,
-                    merged: true,
-                    sample_data: scope.plotters.selected.sample_data,
-                  },
-                  [scope.plotters.selected], // available plotters
-                  true, // replace contents of tag above?
-                  function(){$(this).find('i.fa-spin').hide();});
-            });
+            plot_detail["merged"] = true;
+            request_data.merged = plot_detail["merged"];
+        }
 
-        },
-        controller: ['$scope', function ($scope) {
-        }],
-    };
-});
+        beat.experiments.utils.getPlotData(base_url,
+                                               request_data, required_plotter, plotterparameter, content_type,
+                                               function(r_image_data, selected_content_type) {
+                        download(r_image_data, chart_id + "." + content_type.toLowerCase(), selected_content_type);
+                                               }
+                                               );
+    }
 
-//Directive used to generate the selector for plotting graph
-app.directive("selectplotter", function($compile)
-{
-    return {
-        link:function(scope, element, attrs)
+
+    //Retrieve chart from api and display on proper item
+    function _retrieve_chart(scope, sub_content, container)
+    {
+        var required_plotter = [];
+        var set_plotter = ''
+        if(sub_content.selected_plotter != undefined)
         {
-            element.bind("change", function()
+            //required_plotter.push(sub_content.selected_plotter);
+            set_plotter = sub_content.selected_plotter;
+            var requested_dataformat = '';
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
             {
-                var plotter_graph_element = document.getElementById('space-for-plotterparameter-graph');
-                generate_graph(plotter_graph_element);
-
-            });
+                if(scope.report.plotters[i].name == sub_content.selected_plotter)
+                {
+                    requested_dataformat = scope.report.plotters[i].dataformat;
+                    break;
+                }
+            }
 
-            function generate_graph(head_id)
+            //Get default plotter for required dataformat
+            for (var i = 0; i < scope.report.defaultplotters.length; i++)
             {
-                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
-                $(head_id ).empty();
-                angular.element(head_id).append($compile(html_div_code)(scope));
+                if(scope.report.defaultplotters[i].dataformat == requested_dataformat)
+                {
+                    sub_content.defaultplotter = scope.report.defaultplotters[i];
+                    break;
+                }
             }
 
-        }
-    };
-});
+            required_plotter.push(sub_content.defaultplotter.plotter);
 
-//Directive used to generate the selected plotting graph
-app.directive("selectedplotter", function($compile)
-{
-    return {
-        link:function(scope, element, attrs)
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
+            {
+                if(scope.report.plotters[i].dataformat == requested_dataformat && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
+                {
+                    required_plotter.push(scope.report.plotters[i].name);
+                }
+            }
+        }
+        else
         {
-            var plotter_graph_element = document.getElementById('space-for-plotterparameter-graph');
-            generate_graph(plotter_graph_element);
+            //Get default plotter for required dataformat
+            for (var i = 0; i < scope.report.defaultplotters.length; i++)
+            {
+                if(scope.report.defaultplotters[i].dataformat == sub_content.description)
+                {
+                    sub_content.defaultplotter = scope.report.defaultplotters[i];
+                    break;
+                }
+            }
 
-            function generate_graph(head_id)
+            required_plotter.push(sub_content.defaultplotter.plotter);
+            set_plotter = sub_content.defaultplotter.plotter;
+
+            //Get other plotters for required dataformat
+            for (var i = 0; i < scope.report.plotters.length; i++)
             {
-                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
-                $(head_id ).empty();
-                angular.element(head_id).append($compile(html_div_code)(scope));
+                if(scope.report.plotters[i].dataformat == sub_content.description && scope.report.plotters[i].name != sub_content.defaultplotter.plotter)
+                {
+                    required_plotter.push(scope.report.plotters[i].name);
+                }
             }
+        }
 
+        var plotterparameter = [];
+        //Get other plotterparameter
+        for (var i = 0; i < scope.report.plotterparameter.length; i++)
+        {
+            plotterparameter.push(scope.report.plotterparameter[i].name);
         }
-    };
-});
 
-//Directive used to handle save plotterparameter click
-app.directive("saveplotterparameter", function()
-{
-    return {
-        link:function(scope, element, attrs)
+        var chart_name = sub_content.name;
+
+        var legend_experiments = '';
+        var alias_experiments = [];
+
+        for(var i = 0; i < scope.report.experiments.length; i++)
         {
-            element.bind("click", function()
-            {
-                //console.log(scope);
-                //console.log(element);
-                //console.log(attrs);
+            if(i == 0)
+                legend_experiments = scope.report_experiments_alias[scope.report.experiments[i]];
+            else
+                legend_experiments = legend_experiments+ "&" +scope.report_experiments_alias[scope.report.experiments[i]];
 
-                //No plotter is selected
-                if(attrs.plotter == "None")
-                {
-                    if($("#plotter-selection :selected").text().length == 0)
-                    {
-                        console.log("Please select a plotter first")
-                    }
-                    else
-                    {
-                        //console.log($("#plotter-selection").find(":selected").text());
-                        console.log(scope.plotters.selected);
-                        scope.plotterparameterData.plotter = scope.plotters.selected.id;
+            if(Object.keys(scope.$parent.report_experiments_alias_from_content).length === 0)
+                alias_experiments.push(scope.report_experiments_alias[scope.report.experiments[i]]);
+            else
+                alias_experiments.push(scope.report_experiments_alias_from_content[scope.report.experiments[i]]);
+        }
 
-                        updatePlotterParameter();
-                    }
-                }
-                else
-                {
-                    //plotter is selected: parameter tuning
-                }
-            });
+        var request_data = {
+            experiment:   alias_experiments,
+            analyzer:     [scope.report.analyzer],
+            output:       [chart_name],
+            plotter:      set_plotter,
+            legend:       legend_experiments,
+            report_number: scope.report.number,
+            //height:       300,
+            //width:        400,
+        };
 
-            function updatePlotterParameter()
-            {
-                console.log(scope.plotterparameterData);
-                scope.plotterparameterFactory.updatePlotterParameter(scope.user, scope.plotterparameter_user, scope.plotterparameter_name, scope.plotterparameter_version, scope.plotterparameterData, scope.url_prefix)
-                    .success(function (reportData)
-                    {
-                        //alert("The report "+ scope.report_id +" has been saved.");
+        base_url = scope.report.url_prefix;
+        //scope.plots_details[container.id];
 
-                        beat.ui.plotterparameter.plotterparameter_saved('plotterparameter_saved', scope);
-                    })
-                    .error(function (error)
-                    {
-                        scope.status = 'Unable to update plotterparameter data: ' + error.message;
+        var plot_detail = {};
+        plot_detail["required_plotter"] = required_plotter;
+        plot_detail["data"] =  {
+            analyzer:     [scope.report.analyzer],
+            output:       [chart_name],
+            plotter:      set_plotter,
+        };
 
-                    });
 
-            }
+        if(sub_content.selected_template != undefined)// && sub_content.selected_template != "Default")
+        {
+            plot_detail["selected_template"] = sub_content.selected_template;
+            request_data.parameter = plot_detail["selected_template"];
+        }
+        else
+        {
+            plot_detail["selected_template"] = sub_content.defaultplotter.parameter;
+            request_data.parameter = plot_detail["selected_template"];
+        }
 
+        if(sub_content.merged != undefined)// && sub_content.selected_template != "Default")
+        {
+            plot_detail["merged"] = sub_content.merged;
+            request_data.merged = plot_detail["merged"];
+        }
+        else
+        {
+            plot_detail["merged"] = true;
+            request_data.merged = plot_detail["merged"];
         }
-    };
-});
 
-//Directive used to append parameters
-app.directive("plotparams", function($compile){
+        scope.plots_details[container.id]= plot_detail;
 
-    return {
-        restrict: 'E',
-        scope: true,
-        replace: true,
-        //templateUrl: "/reports/partials/reportTable/",
-        templateUrl: function(scope, elem, attrs)
+        if(scope.report.status == "editable" && scope.report.number != scope.report_number)
         {
-            var prefix = elem['urlprefix'];
-            var the_url = prefix + "/plotters/partials/plotparamsinfo/";
-            return the_url;
-        },
-        link: function(scope, elem, attrs)
+            beat.experiments.utils.displayPlot(base_url, $(container).find('.panel-body')[0],
+                                               request_data, required_plotter, plotterparameter, false,
+
+                                               function(r_plotter, r_plotterparameter, r_merged) {
+                                                scope.plots_details[container.id]["data"]["plotter"] = r_plotter;
+                                                scope.plots_details[container.id]["selected_template"] = r_plotterparameter;
+                                                scope.plots_details[container.id]["merged"] = r_merged;
+                                               }
+                                               );
+        }
+        else
         {
-            $('#table_plotparams tr:last').ready(function(){
-                var params_from_plotter = scope.$parent.plotters.selected.declaration.parameters;
+            beat.experiments.utils.displayPlot(base_url, $(container).find('.panel-body')[0],
+                                               request_data, [], [], false,
 
-                //Iterate through each plotter parameters and add them
-                $.each(params_from_plotter, function( key, value ) {
+                                               function(r_plotter, r_plotterparameter, r_merged) {
+                                               }
+                                               );
+        }
+    }
 
-                    if(key != "content_type" )
-                    {
-                        //index in table
-                        var tag_id = (scope.textdata).indexOf(key);
-                        var html_div_code = '';
+    function arraysInCommon(arrays)
+    {
+        var i, common,
+        L= arrays.length, min= Infinity;
+        while(L){
+            if(arrays[--L].length<min){
+                min= arrays[L].length;
+                i= L;
+            }
+        }
+        common= arrays.splice(i, 1)[0];
+        return common.filter(function(itm, indx){
+            if(common.indexOf(itm)== indx){
+                return arrays.every(function(arr){
+                    return arr.indexOf(itm)!= -1;
+                });
+            }
+        });
+    }
 
-                        var current_value = value.default;
-                        if(key in scope.plotterparams_update)
-                        {
-                            current_value = scope.plotterparams_update[key];
-                        }
+    }
+});
 
-                        if(value.type == "string")
-                        {
-                            console.log(value.default);
-                            console.log(JSON.stringify(value.default));
-                            console.log(scope);
-                            console.log("icicc");
-                            console.log("key:");
-                            console.log(key);
-                            console.log("value:");
-                            console.log(value);
-                            console.log("-----");
 
-                            html_div_code = '<tr><td>'+ key +'</td><td><input id="tag_input_'+ key +'" class="form-control input-sm" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput></td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
-                        }
-                        else if(value.type == "float64")
-                        {
-                            var minus_button_plus = '<div style="width:15em" class="input-group"><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="minus" buttonplusminus><button type="button" class="btn btn-danger btn-number" data-type="minus" data-field="quant[2]"><span class="glyphicon glyphicon-minus"></span></button></span><input style="text-align:center" id="tag_input_'+ key +'" class="form-control input-number" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="plus" buttonplusminus><button type="button" class="btn btn-success btn-number" data-type="plus" data-field="quant[2]"><span class="glyphicon glyphicon-plus"></span></button></span></div>';
-                            html_div_code = '<tr><td>'+ key +'</td><td>'+ minus_button_plus +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
-                        }
-                        else if(value.type == "uint16")
-                        {
-                            var minus_button_plus = '<div style="width:15em" class="input-group"><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="minus" buttonplusminus><button type="button" class="btn btn-danger btn-number" data-type="minus" data-field="quant[2]"><span class="glyphicon glyphicon-minus"></span></button></span><input style="text-align:center" id="tag_input_'+ key +'" class="form-control input-number" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" textinput><span class="input-group-btn" id="tag_button_' + key + '" defaultvalue="' + current_value + '" type="'+ value.type +'" key="' + key + '" action="plus" buttonplusminus><button type="button" class="btn btn-success btn-number" data-type="plus" data-field="quant[2]"><span class="glyphicon glyphicon-plus"></span></button></span></div>';
-                            html_div_code = '<tr><td>'+ key +'</td><td>'+ minus_button_plus +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
-                        }
-                        else if(value.type == "bool")
-                        {
-                            var bool_param = '';
-                            if(current_value)
-                            {
-                                bool_param ='<fieldset class="toggle" id="tag_bool_'+ key +'" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" toggleparam><input id="data-policy_'+key+'" type="checkbox" checked="checked"><label for="data-policy"><div class="toggle-button"><div class="toggle-tab"></div></div></label></fieldset>';
-                            }
-                            else
-                            {
-                                bool_param ='<fieldset class="toggle" id="tag_bool_'+ key +'" type="'+value.type+'" value="' + current_value + '"  key="' + key + '" toggleparam><input id="data-policy_'+key+'" type="checkbox"><label for="data-policy"><div class="toggle-button"><div class="toggle-tab"></div></div></label></fieldset>';
-                            }
-                            html_div_code = '<tr><td>'+ key +'</td><td>'+ bool_param +'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>';
+//Dynamic tables items
+app.directive('item', function ($compile) {
+   function createTDElement(column) {
+      var table = angular.element('<table><tr><td class="tableitemspace" thecolumn="' + column + '"></td></tr></table>');
+      return table.find('td');
+   }
 
-                        }
-                        else
-                        {
-                            $('#table_plotparams > tbody:last-child').append('<tr><td>'+ key +'</td><td>'+value.default+'</td><td>'+value.type+'</td><td>'+value.description+'</td></tr>');
-                        }
+   function render(element, scope) {
+    var column, html, i;
+    var columns = scope.$parent.tables_details[scope.$parent.dattrs.tableid];
 
-                        angular.element('#table_plotparams > tbody:last-child').append($compile(html_div_code)(scope));
+    for (i = 0; i < columns.length ; i++) {
+        if(i == 0 && columns.length > 0)
+        {
+            html = $compile(createTDElement("experiment"))(scope);
 
-                    }
-                });
+        }
+       column = columns[i];
+       if (column.selected) {
 
+          html = $compile(createTDElement(column.name))(scope);
+          element.append(html);
+       }
+    }
 
 
+   }
 
-            });
+   return {
+   //   restrict: 'A',
+      scope: {
+         exp_name: "=",
+         item: "=",
+         columns: "="
+      },
+      compile: function () {
+         return function (scope, element) {
+            render(element, scope);
+         }
 
-            //var data_to_plot = scope.plotters.selected.sample_data;
-            //$('td#td_' + scope.plotterparameter.name).ready(function(){
-            //  beat.experiments.utils.displayPlot(
-            //      scope.url_prefix,
-            //      $('td#td_figure_plot')[0],
-            //      {
-            //        output: scope.plotterparameter,
-            //        plotter: scope.plotters.selected.name,
-            //        parameter: scope.plotterparameter,
-            //        merged: true,
-            //        sample_data: scope.plotters.selected.sample_data,
-            //      },
-            //      [scope.plotters.selected], // available plotters
-            //      true, // replace contents of tag above?
-            //      function(){$(this).find('i.fa-spin').hide();});
-            //});
+      }
+   };
 
-        },
-        controller: ['$scope', function ($scope) {
-        }],
-    };
 });
 
-//Directive used to handle textinput
-app.directive("textinput", function()
-{
-    console.log("text changing?");
-    return {
-        link:function(scope, element, attrs)
-        {
-            // on blur, update the value in scope
-            element.bind('propertychange keyup paste', function (blurEvent) {
-
-                console.log(scope);
-                console.log(element);
-                console.log(attrs);
-                var isValid = false;
+//Directive used to set proper item value in selected column
+app.directive("thecolumn",['$compile', function ($compile) {
 
-                if (element.data('old-value') != element.val()) {
-                    console.log('value changed, new value is: ' + element.val());
+   return {
+      scope: {
+         thecolumn: "@"
+      },
+      restrict: 'A',
+      template: '{{itemValue}}',
+      controller: ['$scope', function ($scope) {
 
-                    var updateValue = element.val();
-                    //string check
-                    if(attrs.type == "string")
-                    {
-                        isValid = true;
-                        updateValue = element.val();
-                    }
+         var the_parent = $scope.$parent.$parent.$parent.$parent;
+         var report_experiments = $scope.$parent.$parent.$parent.$parent.report_experiments;
+         var report_experiments_alias = $scope.$parent.$parent.$parent.$parent.report_experiments_alias;
+         var floating_point_precision = $scope.$parent.$parent.$parent.$parent.floating_point_precision;
+         var report = $scope.$parent.$parent.$parent.report;
+         var experiment_name = $scope.$parent.item;
 
-                    //integer check
-                    else if(attrs.type == "uint16")
-                    {
-                        //convert value to integer
-                        updateValue = parseInt(element.val());
-                        if(isNaN(updateValue))
-                        {
-                            isValid = false;
-                            alert("Entered value is not a integer");
-                        }
-                        else
-                        {
-                            isValid = true;
-                            updateValue = parseInt(element.val());
-                        }
+         if(jQuery.isEmptyObject(report_experiments) || (report_experiments[experiment_name] == undefined))
+         {
+            return
+         }
 
-                    }
+         var analyzer_block = report_experiments[experiment_name].analyzer_block;
+         var report_algorithm_parameters_experiment = $scope.$parent.$parent.$parent.$parent.report_algorithm_parameters_experiment;
 
-                    //float check
-                    else if(attrs.type == "float64")
-                    {
-                        //convert value to float
-                        updateValue = parseFloat(element.val());
-                        if(isNaN(updateValue))
-                        {
-                            isValid = false;
-                            alert("Entered value is not a float");
-                        }
-                        else
+         if($scope.thecolumn != "experiment")
+         {
+            if(analyzer_block == undefined)
+            {
+                angular.forEach(report_experiments, function(value, key)
+                {
+                    angular.forEach(value.declaration.analyzers, function(value_analyzer, key_analyzer)
+                    {
+                        if(value_analyzer.algorithm == report.analyzer && (key_analyzer in report_experiments[experiment_name].declaration.analyzers))
                         {
-                            isValid = true;
-                            updateValue = parseFloat(element.val());
+                            report_experiments[experiment_name].analyzer_block = key_analyzer;
+                            analyzer_block = report_experiments[experiment_name].analyzer_block;
                         }
+                    });
+                });
+            }
+
+            if($scope.thecolumn.indexOf("execution_time.") == 0)
+            {
+                //execution time information
+                var block_name = $scope.thecolumn.split("execution_time.")[1].split("[s]")[0];
+                if(Object.keys(report_experiments[experiment_name].execution_info).length === 0)
+                {
+                    $scope.itemValue = "-";
+                }
+                else
+                {
+                    if(report_experiments[experiment_name].execution_info[block_name] == undefined)
+                    {
+                        $scope.itemValue = "-";
                     }
-                    //check if value is float
-                    //updated models
-                    if(isValid)
+                    else
                     {
-                        scope.plotterparams_update[attrs.key] = updateValue;
+                        $scope.itemValue = (report_experiments[experiment_name].execution_info[block_name].linear_execution_time).toFixed(floating_point_precision.selected);;
                     }
-                    console.log(scope.plotterparams_update);
-
-                    //scope.$apply(function () {
-                    //    scope.textdirective = element.val();
-                    //    element.data('old-value', element.val());
-                    //});
                 }
-            });
-
-        }
-    };
-});
-
-//Directive used to handle bool toggle
-app.directive("toggleparam", function()
-{
-    console.log("toggle pressed");
-    return {
-        link:function(scope, element, attrs)
-        {
-            element.bind("click", function()
+            }
+            else if($scope.thecolumn.indexOf("experiment.") == 0)
             {
-                console.log("toggle pressed");
-                console.log(scope);
-                console.log(element);
-                console.log(attrs);
-
-                if($("#data-policy_"+attrs.key).prop("checked") == true)
+                //total execution time information
+                var block_name = $scope.thecolumn.split("execution_time.")[1];
+                var total_time = 0;
+                if(Object.keys(report_experiments[experiment_name].execution_info).length === 0)
                 {
-                    $("#data-policy_"+attrs.key).prop("checked", false);
+                    total_time = "-";
                 }
                 else
                 {
-                    $("#data-policy_"+attrs.key).prop("checked", true);
+                    angular.forEach(report_experiments[experiment_name].execution_info, function(value, key)
+                    {
+                        total_time += value.linear_execution_time;
+                    });
                 }
 
-                scope.plotterparams_update[attrs.key] = $("#data-policy_"+attrs.key).prop("checked");
-                console.log(scope.plotterparams_update);
-
-            });
-        }
-    };
-});
-
-//Directive used to handle button plus/minus
-app.directive("buttonplusminus", function()
-{
-    console.log("button +/- pressed");
-    return {
-        link:function(scope, element, attrs)
-        {
-            element.bind("click", function()
+                $scope.itemValue = total_time.toFixed(floating_point_precision.selected);
+            }
+            else if($scope.thecolumn.indexOf("algorithm_parameter.") == 0)
             {
-                console.log("button +/- pressed");
-                console.log(scope);
-                console.log(element);
-                console.log(attrs);
-                console.log(attrs.key);
-                var tomodify = $("#tag_input_"+attrs.key).val();
-                console.log(tomodify);
-                if(attrs.type == "uint16")
+                //total execution time information
+                var block_name = $scope.thecolumn.split("algorithm_parameter.")[1];
+                var algorithm_name = block_name.split("__")[0];
+                var parameter_name = block_name.split("__")[1];
+                if(report_algorithm_parameters_experiment[experiment_name][algorithm_name] != undefined)
                 {
-                    tomodify = parseInt(tomodify);
-                    if(attrs.action == "plus")
-                    {
-                        tomodify = tomodify +1;
-                    }
-                    else if(attrs.action == "minus")
+                    var value = "";
+                    if(report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name] != undefined)
                     {
-                        tomodify = tomodify -1;
+                        for(var i = 0; i < report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name].length; i++)
+                        {
+                            if(i > 0 && i < report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name].length -1 )
+                            {
+                                value += ",";
+                            }
+                            value = report_algorithm_parameters_experiment[experiment_name][algorithm_name][parameter_name][i];
+                        }
                     }
-                }
-                else if(attrs.type == "float64")
-                {
-                    tomodify = parseFloat(tomodify);
-                    if(attrs.action == "plus")
+                    else if(report["all_experiments"][experiment_name]["declaration"]["globals"][algorithm_name][parameter_name] != undefined)
                     {
-                        tomodify = tomodify +0.1;
+                        //get globals value
+                        value = report["all_experiments"][experiment_name]["declaration"]["globals"][algorithm_name][parameter_name];
                     }
-                    else if(attrs.action == "minus")
+                    else
                     {
-                        tomodify = tomodify -0.1;
+                        //nothing is defined
+                        value = "-";
                     }
-                    tomodify = tomodify.toFixed(1);
+
+                    $scope.itemValue = value;
                 }
-                $("#tag_input_"+attrs.key).val(tomodify);
-                scope.plotterparams_update[attrs.key] = tomodify;
-                console.log(scope.plotterparams_update);
-            });
-        }
-    };
-});
+                else
+                {
+                    $scope.itemValue = "-";
+                }
+            }
+            else
+            {
+                //results information
+                $scope.itemValue = (report_experiments[experiment_name].results[analyzer_block][$scope.thecolumn].value).toFixed(floating_point_precision.selected);
+            }
+         }
+         else
+         {
+                var experiment_alias = report_experiments_alias[experiment_name];
+                $scope.itemValue = experiment_alias;
+         }
+      }]//,
+      //link: function(scope, element, attrs)
+      //{
+      //  console.log(scope);
+      //  var report_experiments_alias = scope.$parent.$parent.$parent.$parent.report_experiments_alias;
+      //  var experiment_name = scope.$parent.item;
+      //  var experiment_alias = report_experiments_alias[experiment_name];
+      //  scope.$watch(scope.$parent.$parent.$parent.$parent.report_experiments_alias,function(newValue, oldValue)
+      //  {
+      //      console.log("changed");
+      //      console.log(report_experiments_alias);
+      //      console.log(oldValue);
+      //      console.log(newValue);
+      //  });
+      //
+      //}
+   }
+}]);
 
-//Directive used to handle save plotterparameter click
-app.directive("plotterparameteritems", function($compile)
-{
-	return function(scope, element, attrs)
-    {
-        scope.$on("addParametersElement", function(event)
+//Directive used to generate the dynamic table loading partials
+app.directive("tableDynamic", function(){
+
+    return {
+        restrict: 'A',
+        scope: true,
+        replace: true,
+        //templateUrl: "/reports/partials/reportTable/",
+        templateUrl: function(scope, elem, attrs)
         {
-            console.log("broadcasted");
-            //add the plot
-            var plotter_graph_element = document.getElementById('space-for-plotterparameter-plot');
-            generate_graph(plotter_graph_element);
+            var prefix = elem['urlprefix'];
+            var the_url = prefix + "/reports/partials/reportTable/";
+            return the_url;
+        },
+        link: function(scope, elem, attrs)
+        {
+             var prepend_item = {};
+             prepend_item["name"] = "experiment";
+             prepend_item["selected"] = true;
 
-            //add the parameters
-            var parameter_elements = document.getElementById('space-for-plotterparameter-items');
-            append_plotterparameters(parameter_elements)
+             scope.tables_details[attrs.tableid].unshift(prepend_item);
 
-            //functions to operate on graph and parameters
+             angular.forEach(scope.tables_details, function(table_value, table_key)
+             {
+                for(var i = 0; i < table_value.length; i++)
+                {
+                    if(table_value[i].name.indexOf("execution_time") > -1 &&
+                       table_value[i].name.indexOf("[s]") == -1)
+                    {
+                        table_value[i].name = table_value[i].name + "[s]";
+                    }
+                };
+             });
 
-            function generate_graph(head_id)
-            {
-                var html_div_code = "<plotinfo  urlprefix=" + scope.url_prefix +"></plotinfo>"
-                $(head_id ).empty();
-                angular.element(head_id).append($compile(html_div_code)(scope));
-            }
+             scope.dattrs = attrs;
+        }
+    };
+});
 
-            function append_plotterparameters(head_id)
-            {
-                var html_div_code = "<plotparams  urlprefix=" + scope.url_prefix +"></plotparams>"
-                $(head_id ).empty();
-                angular.element(head_id).append($compile(html_div_code)(scope));
-            }
+//Directive used to generate the dynamic table loading partials
+app.directive("myreportinfo", function(){
 
-        });
+    return {
+        restrict: 'E',
+        scope: true,
+        replace: true,
+        //templateUrl: "/reports/partials/reportTable/",
+        templateUrl: function(scope, elem, attrs)
+        {
+            var prefix = elem['urlprefix'];
+            var the_url = prefix + "/reports/partials/reportInfo/";
+            return the_url;
+        },
+        link: function(scope, elem, attrs)
+        {
+        },
+        controller: ['$scope', function ($scope) {
+        }],
     };
 });
 
-//end valid code for now
 
 
 //Directive used to handle table settings click
diff --git a/beat/web/plotters/templates/plotterparameters/partials/plotparamsinfo.html b/beat/web/plotters/templates/plotterparameters/partials/plotparamsinfo.html
index f1309edaabe01e8a0bb521bdd91360730e8099e6..fe11cec242e817afc8d2746e25ac185d6476dfab 100644
--- a/beat/web/plotters/templates/plotterparameters/partials/plotparamsinfo.html
+++ b/beat/web/plotters/templates/plotterparameters/partials/plotparamsinfo.html
@@ -38,7 +38,11 @@
 <div id="{{ panel_id }}" class="row table-responsive">
   <div class="col-sm-12">
     <table id="table_plotparams" class="table table-hover table-striped table-condensed">
-    Tune your plotterparameters and click the TEST button to see how it looks on the plotter
+    Tune your plotterparameters and click the wrench button icon to see how it looks on the plotter
+<div class="btn-group btn-group-sm action-buttons pull-right">
+<a id="save-button" class="btn btn-default btn-save" data-toggle="tooltip" data-placement="bottom" data-plotter="{{object.plotter}}" title="Test parameters" testplotterparameters><i class="fa fa-wrench fa-lg"></i></a>
+</div>
+
       <thead>
         <tr>
           <th>