ATLAS-1737: UI - Delete tag(classification) from UI.
diff --git a/dashboardv2/public/js/models/VTag.js b/dashboardv2/public/js/models/VTag.js
index 046af3f..c875d5a 100644
--- a/dashboardv2/public/js/models/VTag.js
+++ b/dashboardv2/public/js/models/VTag.js
@@ -40,7 +40,7 @@
         /*************************
          * Non - CRUD operations
          *************************/
-        deleteTag: function(guid, name, options) {
+        deleteAssociation: function(guid, name, options) {
             var url = UrlLinks.entitiesApiUrl(guid, name);
             options = _.extend({
                 contentType: 'application/json',
@@ -48,6 +48,14 @@
             }, options);
             return this.constructor.nonCrudOperation.call(this, url, 'DELETE', options);
         },
+        deleteTag: function(options) {
+            var url = UrlLinks.typesClassicationApiUrl();
+            options = _.extend({
+                contentType: 'application/json',
+                dataType: 'json'
+            }, options);
+            return this.constructor.nonCrudOperation.call(this, url, 'DELETE', options);
+        },
         saveTagAttribute: function(options) {
             var url = UrlLinks.typesClassicationApiUrl();
             options = _.extend({
diff --git a/dashboardv2/public/js/utils/CommonViewFunction.js b/dashboardv2/public/js/utils/CommonViewFunction.js
index 1890ce3..ce12466 100644
--- a/dashboardv2/public/js/utils/CommonViewFunction.js
+++ b/dashboardv2/public/js/utils/CommonViewFunction.js
@@ -39,7 +39,7 @@
                 if (options.showLoader) {
                     options.showLoader();
                 }
-                tagModel.deleteTag(options.guid, options.tagName, {
+                tagModel.deleteAssociation(options.guid, options.tagName, {
                     skipDefaultError: true,
                     success: function(data) {
                         var msg = "Tag " + name.name + Messages.removeSuccessMessage;
diff --git a/dashboardv2/public/js/utils/Utils.js b/dashboardv2/public/js/utils/Utils.js
index d62a726..0d43814 100644
--- a/dashboardv2/public/js/utils/Utils.js
+++ b/dashboardv2/public/js/utils/Utils.js
@@ -94,10 +94,12 @@
                 history: false
             }
         }, options)).get().on('pnotify.confirm', function() {
+            $('.ui-pnotify-modal-overlay').remove().fadeOut();
             if (options.ok) {
                 options.ok();
             }
         }).on('pnotify.cancel', function() {
+            $('.ui-pnotify-modal-overlay').remove().fadeOut();
             if (options.cancel) {
                 options.cancel();
             }
@@ -229,8 +231,11 @@
     };
 
     Utils.getUrlState = {
-        getQueryUrl: function() {
+        getQueryUrl: function(url) {
             var hashValue = window.location.hash;
+            if (url) {
+                hashValue = url;
+            }
             return {
                 firstValue: hashValue.split('/')[1],
                 hash: hashValue,
@@ -259,8 +264,8 @@
         getFirstValue: function() {
             return this.getQueryUrl().firstValue;
         },
-        getQueryParams: function() {
-            var qs = this.getQueryUrl().queyParams[1];
+        getQueryParams: function(url) {
+            var qs = this.getQueryUrl(url).queyParams[1];
             if (typeof qs == "string") {
                 qs = qs.split('+').join(' ');
                 var params = {},
diff --git a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
index 9bd1bbf..8c67d11 100644
--- a/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
+++ b/dashboardv2/public/js/views/business_catalog/SideNavLayoutView.js
@@ -97,7 +97,8 @@
             require(['views/tag/TagLayoutView'], function(TagLayoutView) {
                 that.RTagLayoutView.show(new TagLayoutView({
                     collection: that.collection,
-                    tag: that.tag
+                    tag: that.tag,
+                    typeHeaders: that.typeHeaders
                 }));
             });
         },
diff --git a/dashboardv2/public/js/views/tag/TagLayoutView.js b/dashboardv2/public/js/views/tag/TagLayoutView.js
index d8ee351..0174fa5 100644
--- a/dashboardv2/public/js/views/tag/TagLayoutView.js
+++ b/dashboardv2/public/js/views/tag/TagLayoutView.js
@@ -22,8 +22,9 @@
     'utils/Utils',
     'utils/Messages',
     'utils/Globals',
-    'utils/UrlLinks'
-], function(require, Backbone, TagLayoutViewTmpl, Utils, Messages, Globals, UrlLinks) {
+    'utils/UrlLinks',
+    'models/VTag'
+], function(require, Backbone, TagLayoutViewTmpl, Utils, Messages, Globals, UrlLinks, VTag) {
     'use strict';
 
     var TagLayoutView = Backbone.Marionette.LayoutView.extend(
@@ -58,11 +59,11 @@
              * @constructs
              */
             initialize: function(options) {
-                _.extend(this, _.pick(options, 'tag', 'collection'));
+                _.extend(this, _.pick(options, 'tag', 'collection', 'typeHeaders'));
             },
             bindEvents: function() {
                 var that = this;
-                this.listenTo(this.collection, "reset add", function() {
+                this.listenTo(this.collection, "reset add remove", function() {
                     this.tagsAndTypeGenerator('collection');
                 }, this);
                 this.ui.tagsParent.on('click', 'li.parent-node a', function() {
@@ -163,7 +164,6 @@
                 if (this.createTag) {
                     this.createTag = false;
                 }
-
             },
             onClickCreateTag: function(e) {
                 var that = this;
@@ -257,8 +257,6 @@
                             duplicateAttributeList.push(obj.name);
                         }
                     });
-
-
                     var notifyObj = {
                         confirm: {
                             confirm: true,
@@ -288,7 +286,6 @@
                         Utils.notifyConfirm(notifyObj);
                         return false;
                     }
-
                 }
                 this.json = {
                     classificationDefs: [{
@@ -312,6 +309,7 @@
                             content: "Tag " + that.name + Messages.addSuccessMessage
                         });
                         modal.trigger('cancel');
+                        that.typeHeaders.fetch({ reset: true });
                     }
                 });
             },
@@ -342,7 +340,8 @@
                     container: 'body',
                     content: function() {
                         return "<ul class='tagPopoverList'>" +
-                            "<li class='listTerm' ><i class='fa fa-search'></i> <a href='javascript:void(0)' data-fn='onSearchTerm'>Search Tag</a></li>" +
+                            "<li class='listTerm' ><i class='fa fa-search'></i> <a href='javascript:void(0)' data-fn='onSearchTag'>Search Tag</a></li>" +
+                            "<li class='listTerm' ><i class='fa fa-trash-o'></i> <a href='javascript:void(0)' data-fn='onDeleteTag'>Delete Tag</a></li>" +
                             "</ul>";
                     }
                 });
@@ -353,7 +352,7 @@
                     $(this).popover('toggle');
                 });
             },
-            onSearchTerm: function() {
+            onSearchTag: function() {
                 Utils.setUrl({
                     url: '#!/search/searchResult',
                     urlParams: {
@@ -367,6 +366,65 @@
                     mergeBrowserUrl: false,
                     trigger: true
                 });
+            },
+            onDeleteTag: function() {
+                var that = this;
+                this.tagName = this.ui.tagsParent.find('li.active').find("a").data('name');
+                this.tagDeleteData = this.ui.tagsParent.find('li.active');
+                var notifyObj = {
+                    ok: function(argument) {
+                        that.onNotifyOk();
+                    },
+                    cancel: function(argument) {}
+                }
+                var text = "Are you sure you want to delete the tag"
+                notifyObj['text'] = text;
+                notifyObj['stack'] = {
+                    'dir1': 'down',
+                    'dir2': 'right',
+                    'modal': true
+                };
+                Utils.notifyConfirm(notifyObj);
+            },
+            onNotifyOk: function(data) {
+                var that = this,
+                    deleteTagData = this.collection.fullCollection.findWhere({ name: this.tagName }),
+                    classificationData = deleteTagData.toJSON(),
+                    deleteJson = {
+                        classificationDefs: [classificationData],
+                        entityDefs: [],
+                        enumDefs: [],
+                        structDefs: []
+                    };
+                deleteTagData.deleteTag({
+                    data: JSON.stringify(deleteJson),
+                    success: function() {
+                        Utils.notifySuccess({
+                            content: "Tag " + that.tagName + Messages.deleteSuccessMessage
+                        });
+                        var searchUrl = Globals.saveApplicationState.tabState.searchUrl;
+                        var urlObj = Utils.getUrlState.getQueryParams(searchUrl);
+                        if (urlObj && urlObj.tag && urlObj.tag === that.tagName) {
+                            Globals.saveApplicationState.tabState.searchUrl = "#!/search";
+                        }
+                        that.ui.tagsParent.find('li.active').removeClass('active');
+                        if (that.tagDeleteData.prev().length === 0) {
+                            that.tagDeleteData.next().addClass('active');
+                        } else {
+                            that.tagDeleteData.prev().addClass('active');
+                        }
+                        Utils.setUrl({
+                            url: that.ui.tagsParent.find('li.active').find("a").attr("href"),
+                            mergeBrowserUrl: false,
+                            trigger: true,
+                            updateTabState: function() {
+                                return { tagUrl: that.url, stateChanged: true };
+                            }
+                        });
+                        that.collection.remove(deleteTagData);
+                        that.typeHeaders.fetch({ reset: true });
+                    }
+                });
             }
         });
     return TagLayoutView;